1 / 31

OBJECTGERICHT PROGRAMMEREN

OBJECTGERICHT PROGRAMMEREN. Elk object behoort tot een klasse. PRODUCT. REKENING. prod01. prod03. rek02. prod02. rek01. klassetekst. naam van de klasse. class TELLER creation maken feature waarde : INTEGER feature maken is … feature verhogen is …

abdalla
Download Presentation

OBJECTGERICHT PROGRAMMEREN

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse PRODUCT REKENING prod01 prod03 rek02 prod02 rek01 Eiffel sessie 1

  2. klassetekst naam van de klasse class TELLER creation maken feature waarde : INTEGER feature maken is … feature verhogen is … feature verlagen is … feature terugzetten is … end -- class TELLER hoe wordt een object gecreëerd? attributen : wat onthouden? (statisch) diensten : wat doen? (dynamisch) Eiffel sessie 1

  3. Attributen (variabelen) feature nummer : INTEGER bedrag : REAL resultaat : DOUBLE letter : CHARACTER aanwezig : BOOLEAN naam : STRING student1 : STUDENT aantal : INTEGER is 8 voorgedefineerde klassen constante Eiffel sessie 1

  4. Diensten (procedures) featurenaamis do instructies end -- naam featurenaam(parameter : CLASS) is do instructies end -- naam Eiffel sessie 1

  5. Functie feature naam (parameter : CLASS1) : CLASS2 is do … Result := instructie end -- naam !! Result is van de klasse CLASS2 Eiffel sessie 1

  6. Instructies: invoer/uitvoer • io.readint, io.readreal, io.readchar, io.readline • io.putint( ), io.putreal( ), io.putchar( ), io.putstring( ), • io.putdouble( ) • !! tussen haakjes staat object of waarde van • het type integer, real, character of string • vb. io.putint(45) io.putreal(bedrag) • io.lastint, io.lastreal, io.lastcharacter, io.laststring Eiffel sessie 1

  7. io.new_line • vb. io.putstring(“Geef je naam : ”) io.readline io.new_line io.putstring(io.laststring) Eiffel sessie 1

  8. Instructies : verwerking • toewijzingsopdracht := • vb. nummer := 3 nummer1 := nummer2 • bewerkingen : afhankelijk van het type (klasse) van de variabele • rekenkundige bewerkingen : • integer : +, -, *, //, \\ real : +, -, *, /, ^ boolean : and, or, xor, not • vb. nummer := nummer * 8 Eiffel sessie 1

  9. Vergelijk met := voor toewijzing vergelijkingsoperatoren : =, <, >, <=, >=, /= vb. aanwezig := teller /= 0 Eiffel sessie 1

  10. Oefening : Stel een klassetekst op voor REKENING. Een rekening moet kunnen worden geopend, waarbij ze een nummer krijgt toegewezen. Het saldo moet bij het openen uiteraard gelijk zijn aan nul. Van de rekening moet geld kunnen worden afgehaald en er moet geld kunnen worden op gestort. Bij het afsluiten van de rekening wordt het saldo weer op nul gezet. Eiffel sessie 1

  11. class REKENING creation open feature … feature open (nr_in : INTEGER) is do … end -- open feature … end -- class REKENING waarde wordt bij het aanroepen van de procedure doorgegeven Eiffel sessie 1

  12. class REKENING creation open feature nummer : INTEGER saldo : REAL feature open (nr_in : INTEGER) is do nummer := nr_in end -- open feature afhalen (bedrag : REAL) is do saldo := saldo - bedrag end -- afhalen feature storten (bedrag : REAL) is do saldo := saldo + bedrag end -- storten feature afsluiten is do saldo := 0 end -- afsluiten end -- class REKENING class BANK creation open feature rek1, rek2 : REKENING feature open is do create rek1.open(11111) create rek2.open(22222) rek1.storten(10000) rek2.storten(5000) rek1.afhalen(4000) toon_saldo(rek1) toon_saldo(rek2) end -- open feature toon_saldo (rek_in : REKENING) is do io.putstring(“het saldo van rekening ”) io.putint(rek_in.nummer) io.putstring(“ bedraagt ”) io.putreal(rek_in.saldo) end -- toon_saldo end -- class BANK --Objecten van REKENING creëren --Diensten van deze objecten aanspreken -- Uitvoerlogica -- in een aparte dienst Eiffel sessie 1

  13. Expansieklassen en -objecten (enkelvoudige klassen) - gebruiker moet geen klassetekst schrijven - automatische creatie met default- waarde - inhoud van expansie-object kan door elk ander object gewijzigd worden zonder te “vragen” - expansie-object bevat een waarde; elke copie dmv toewijzing resulteert in een fysische copie - INTEGER, REAL, DOUBLE, BOOLEAN, CHARACTER Referentieklassen en -objecten (samengestelde klassen) - gebruiker moet zelf klassetekst schrijven (uitz. STRING) - creatie moet expliciet gebeuren - inhoud van expansie-object kan niet rechtstreeks door ander object gewijzigd worden; het andere object moet beroep doen op de diensten van het referentie-object - expansie-object bevat een ‘referentie’ (pointer); een copie dmv toewijzing bevat enkel de referentie naar eenzelfde fysische plaats - STRING, alle zelf ontworpen klassen Eiffel sessie 1

  14. declaratie en creatie van objecten referentieklasse expansieklasse rek1 : REKENING i, j : INTEGER rek1 : void i : 0 create rek1.open(11111) j : 0 rek1 : nummer 11111 0.0 saldo Eiffel sessie 1

  15. toewijzing referentieklasse expansieklasse rek1, rek2 : REKENING create rek1.open(11111) create rek2.open(22222) i, j : INTEGER i : 0 j : 0 rek1 : nummer 11111 0.0 saldo i := 10 j := i rek2 : nummer 22222 0.0 i : saldo 10 j : 10 rek2 := rek1 Eiffel sessie 1

  16. Kloneren (clone) rek2 := rek1 rek2 := clone(rek1) rek1 : nummer 11111 0.0 saldo rek2 : nummer 11111 0.0 saldo ! geen voorafgaande create nodig Eiffel sessie 1

  17. deep_clone rek1 : nummer 11111 0.0 saldo dag 03 datum 04 maand jaar 2000 rek2 : nummer 11111 saldo 0.0 dag 03 datum maand 04 jaar 2000 rek2 := clone(rek1) rek2 := deep_clone(rek1) Eiffel sessie 1

  18. Vergelijken van objecten rek1 = rek2 rek1.is_equal(rek2) rek1.is_deep_equal(rek2) equal(rek1,rek2) deep_equal(rek1,rek2) FALSE FALSE TRUE rek1 : nummer 11111 0.0 saldo dag 03 datum 04 maand jaar 2000 rek2 : nummer 11111 0.0 saldo dag 03 datum 04 maand jaar 2000 Eiffel sessie 1

  19. Oefening 4 p. 12 1. Schrijf een klassetekst voor de klasse PRODUCT. Producten hebben een productnummer (geheel getal), en een voorraad(geheel getal). Bij de creatie van een product moet het nummeren de beginvoorraad worden aangegeven. Als een product wordtbesteld, stijgt de voorraad; als een product wordt geleverd, daaltde voorraad. 2. Schrijf de instructies om prod01 (met productnr 110 en beginvoorraad 500 stuks) te maken, en prod02 (met productnr 215en beginvoorraad 1500 stuks). Bestel vervolgens 200 stuks van product 1 en lever 500 stuks van product 2. Toon van beide producten de nieuwe voorraad. Eiffel sessie 1

  20. class PRODUCT creation make feature prodnr : INTEGER voorraad : INTEGER feature make (nr_in, vr_in : INTEGER) is do prodnr := nr_in voorraad := vr_in end -- make feature bestellen (hoeveelheid : INTEGER) is do voorraad := voorraad + hoeveelheid end -- bestellen feature leveren (hoeveelheid : INTEGER) is do voorraad := voorraad - hoeveelheid end -- leveren end -- class PRODUCT Eiffel sessie 1

  21. class PRODUCTBEHEER • creation make • feature prod01, prod02 : PRODUCT • feature make is • do • create prod01.make(110, 500) • create prod02.make(215, 1500) • prod01.bestellen(200) • prod02.leveren(500) • io.putstring("Van produkt 110 bedraagt de voorraad ") • io.putint(prod01.voorraad) • io.putstring(" stuks.") • io.new_line • io.putstring("Van produkt 215 bedraagt de voorraad ") • io.putint(prod02.voorraad) • io.putstring(" stuks.") • end -- make • end -- class PRODUCTBEHEER Eiffel sessie 1

  22. Oefening 4 p. 46 1. Maak een systeempje aan voor het beheer van een boerderij met 3 varkens. Een varken krijgt bij aanschaf een naam, een gewicht en een leeftijd toegekend. Wanneer een varken gevoederd wordt, neemt zijn gewicht toe met 1/10de van de hoeveelheid voer. Elke maand wordt de leeftijd van het varken (in maanden uitgedrukt) aangepast. Een varkenkan bovendien een willekeurig geluid produceren (toon op het scherm). Schrijf de tekst voor de klasse VARKEN. 2. In de coördinatorklasse worden eerst 3 varkens gecreëerd. Het beheervan de boerderij houdt in dat we varkens voederen, en de leeftijd ervan aanpassen. De klasse moet toelaten een bepaald geluid te kiezen en dit door een varken te laten produceren. Tenslotte wordt ook de gemiddelde leeftijd en het gemiddelde gewicht van de varkens getoond. Eiffel sessie 1

  23. 1/2 Class VARKEN creation aanschaf feature naam : STRING leeftijd : INTEGER gewicht : REAL feature aanschaf (naam_in : STRING; lt_in : INTEGER; gew_in : REAL) is do naam := clone(naam_in) leeftijd := lt_in gewicht := gew_in end -- aanschaf Eiffel sessie 1

  24. 2/2 feature jarig is do leeftijd := leeftijd + 1 end -- jarig feature voederen (kilo : REAL) is do gewicht := gewicht + kilo/10 end -- voederen feature zing (lawaai : STRING) is do io.new_line io.putstring(lawaai) io.putstring(" -- ") io.putstring(lawaai) io.putstring(" !!") io.new_line end -- zing end -- class VARKEN Eiffel sessie 1

  25. Class BOERDERIJ 1/3 creation ________ feature _____, _____, _____ : ______ geluid : _____ feature ______ is do io.putstring("Welkom op de boerderij !") io.new_line create __________________________________ create __________________________________ create __________________________________ beheer toon_gegevens end -- _______ Eiffel sessie 1

  26. 1/4 Class BOERDERIJ creation maken feature vark1, vark2, vark3 : VARKEN geluid : STRING feature maken is do io.putstring("Welkom op de boerderij !") io.new_line create vark1.aanschaf("Babe",0,5.2) create vark2.aanschaf("Pigglet",2,15) create vark3.aanschaf("Miss Piggy",10,80) beheer toon_gegevens end -- maken Eiffel sessie 1

  27. feature beheer is 2/3 do vark1.jarig --varken 1 is jarig kies_geluid _________________ --varken 1 maakt gekozen geluid _________________ --varken 2 krijgt 2 kg voer _________________ --varken 3 krijgt 10 kg voer end -- beheer feature kies_geluid is do io.new_line io.putstring(_____________________) io.readline geluid := ______________________ end -- kies_geluid Eiffel sessie 1

  28. 2/4 feature beheer is do vark1.jarig kies_geluid vark1.zing(geluid) vark2.voederen(2) vark3.voederen(10) end -- beheer feature kies_geluid is do io.new_line io.putstring("Wat zegt het varken ? ") io.readline geluid := clone(io.laststring) end -- kies_geluid Eiffel sessie 1

  29. feature toon_gegevens is 3/3 do io.new_line io.putstring("De varkens zijn gemiddeld ") io.putreal(________) io.putstring(" maanden oud.") io.new_line io.putstring("De varkens wegen gemiddeld ") io.putreal(________) io.putstring(" kilo.") io.readline end -- toon_gegevens feature gem_lt : REAL is do ________ := ____________________________________________ end -- gem_lt feature gem_gew : REAL is do ________ := ____________________________________________ end -- gem_gew end -- class BOERDERIJ Eiffel sessie 1

  30. 3/4 feature toon_gegevens is do io.new_line io.putstring("De varkens zijn gemiddeld ") io.putreal(gem_lt) io.putstring(" maanden oud.") io.new_line io.putstring("De varkens wegen gemiddeld ") io.putreal(gem_gew) io.putstring(" kilo.") io.readline end -- toon_gegevens feature gem_lt : REAL is do Result := (vark1.leeftijd + vark2.leeftijd + vark3.leeftijd)/3 end -- gem_lt Eiffel sessie 1

  31. 4/4 feature gem_gew : REAL is do Result := (vark1.gewicht + vark2.gewicht + vark3.gewicht)/3 end -- gem_gew end -- class BOERDERIJ Eiffel sessie 1

More Related