+ All Categories
Home > Documents > November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse...

November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse...

Date post: 04-Jun-2015
Category:
Upload: pieter-beckers
View: 218 times
Download: 3 times
Share this document with a friend
Popular Tags:
31
November 2001 Eiffel sessie 1 p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03
Transcript
Page 1: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 1

OBJECTGERICHT PROGRAMMEREN

Elk object behoort tot een klasse

REKENING

rek01

rek02

PRODUCT

prod01

prod02

prod03

Page 2: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 2

class TELLER

creation maken

feature waarde : INTEGER

feature maken is …feature verhogen is …feature verlagen is …feature terugzetten is …

end -- class TELLER

klassetekst

naam van de klasse

hoe wordt een object gecreëerd?

attributen : wat onthouden? (statisch)

diensten : wat doen? (dynamisch)

Page 3: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 3

Attributen (variabelen)

feature nummer : INTEGER bedrag : REAL

resultaat : DOUBLE letter : CHARACTER aanwezig : BOOLEAN naam : STRING

student1 : STUDENTaantal : INTEGER is 8

voorgedefineerde klassen

constante

Page 4: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 4

Diensten (procedures)

feature naam is do

instructies end -- naam

feature naam (parameter : CLASS) is do

instructies end -- naam

Page 5: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 5

feature naam (parameter : CLASS1) : CLASS2 is do

…Result := instructie

end -- naam

Functie

!! Result is van de klasse CLASS2

Page 6: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 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

Page 7: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 7

• io.new_line

vb. io.putstring(“Geef je naam : ”)io.readlineio.new_lineio.putstring(io.laststring)

Page 8: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 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

Page 9: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 9

vergelijkingsoperatoren :

=, <, >, <=, >=, /=

vb. aanwezig := teller /= 0

Vergelijk met := voor toewijzing

Page 10: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 10

Oefening :

Stel een klassetekst op voor REKENING. Een rekeningmoet 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 ener moet geld kunnen worden op gestort. Bij het afsluiten van de rekening wordt het saldo weer op nul gezet.

Page 11: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 11

class REKENINGcreation openfeature …feature open (nr_in : INTEGER) is do

… end -- openfeature …

end -- class REKENING

waarde wordt bij het aanroepen van de procedure doorgegeven

Page 12: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 12

class REKENINGcreation openfeature nummer : INTEGER saldo : REAL feature open (nr_in : INTEGER) is do nummer := nr_in end -- openfeature afhalen (bedrag : REAL) is do saldo := saldo - bedrag end -- afhalenfeature storten (bedrag : REAL) is do saldo := saldo + bedrag end -- stortenfeature afsluiten is do saldo := 0 end -- afsluitenend -- class REKENING

class BANKcreation openfeature rek1, rek2 : REKENINGfeature 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 -- openfeature 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_saldoend -- class BANK

-- Uitvoerlogica -- in een aparte dienst

--Objecten van REKENING creëren

--Diensten van deze objecten aanspreken

Page 13: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 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

Page 14: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 14

expansieklasse referentieklasse

declaratie en creatie van objecten

i, j : INTEGER

i :

j :

0

0

rek1 : REKENING

voidrek1 :

create rek1.open(11111)

nummer

saldo

11111

0.0rek1 :

Page 15: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 15

expansieklasse referentieklasse

toewijzing

i, j : INTEGER

i := 10 j := i

i :

j :

0

0

i :

j :

10

10

rek1, rek2 : REKENINGcreate rek1.open(11111)create rek2.open(22222)

rek1 :

rek2 :

nummer

saldo

11111

0.0

nummer

saldo

22222

0.0

rek2 := rek1

Page 16: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 16

Kloneren (clone)

rek2 := clone(rek1)

rek1 :

rek2 :

nummer

saldo

11111

0.0

nummer

saldo

11111

0.0

! geen voorafgaande create nodig

rek2 := rek1

Page 17: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 17

rek1 :

rek2 :

nummer

saldo

11111

0.0

nummer

saldo

datum dag

maand

jaar

03

04

2000

datum dag

maand

jaar

deep_clone

rek2 := clone(rek1) rek2 := deep_clone(rek1)

11111

0.003

04

2000

Page 18: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 18

Vergelijken van objecten

rek1 = rek2 rek1.is_equal(rek2) rek1.is_deep_equal(rek2)equal(rek1,rek2) deep_equal(rek1,rek2)

rek1 :

rek2 :

nummer

saldo

11111

0.0

nummer

saldo

11111

0.0

datum dag

maand

jaar

03

04

2000

datum dag

maand

jaar

03

04

2000

FALSE FALSE TRUE

Page 19: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 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.

Page 20: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 20

class PRODUCT

creation make

feature prodnr : INTEGERvoorraad : INTEGER

feature make (nr_in, vr_in : INTEGER) isdo

prodnr := nr_invoorraad := vr_in

end -- make

feature bestellen (hoeveelheid : INTEGER) isdo

voorraad := voorraad + hoeveelheidend -- bestellen

feature leveren (hoeveelheid : INTEGER) isdo

voorraad := voorraad - hoeveelheidend -- leveren

end -- class PRODUCT

Page 21: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 21

class PRODUCTBEHEER

creation make

feature prod01, prod02 : PRODUCT

feature make isdo

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_lineio.putstring("Van produkt 215 bedraagt de voorraad ")io.putint(prod02.voorraad)io.putstring(" stuks.")

end -- make

end -- class PRODUCTBEHEER

Page 22: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 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.

Page 23: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 23

Class VARKENcreation aanschaf

feature naam : STRINGleeftijd : INTEGERgewicht : REAL

feature aanschaf (naam_in : STRING; lt_in : INTEGER; gew_in : REAL) isdo naam := clone(naam_in)

leeftijd := lt_ingewicht := gew_in

end -- aanschaf

1/2

Page 24: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 24

feature jarig isdo

leeftijd := leeftijd + 1end -- jarig

feature voederen (kilo : REAL) isdo

gewicht := gewicht + kilo/10end -- voederen

feature zing (lawaai : STRING) isdo

io.new_lineio.putstring(lawaai)io.putstring(" -- ")io.putstring(lawaai)io.putstring(" !!")io.new_line

end -- zing

end -- class VARKEN

2/2

Page 25: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 25

Class BOERDERIJ 1/3

creation ________

feature _____, _____, _____ : ______geluid : _____

feature ______ isdo

io.putstring("Welkom op de boerderij !")io.new_linecreate __________________________________create __________________________________create __________________________________beheertoon_gegevens

end -- _______

Page 26: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 26

Class BOERDERIJ

creation maken

feature vark1, vark2, vark3 : VARKENgeluid : STRING

feature maken isdo

io.putstring("Welkom op de boerderij !")io.new_linecreate vark1.aanschaf("Babe",0,5.2)create vark2.aanschaf("Pigglet",2,15)create vark3.aanschaf("Miss Piggy",10,80)beheertoon_gegevens

end -- maken

1/4

Page 27: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 27

feature beheer is 2/3do

vark1.jarig --varken 1 is jarigkies_geluid _________________ --varken 1 maakt gekozen geluid_________________ --varken 2 krijgt 2 kg voer_________________ --varken 3 krijgt 10 kg voer

end -- beheer

feature kies_geluid isdo

io.new_lineio.putstring(_____________________)io.readlinegeluid := ______________________

end -- kies_geluid

Page 28: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 28

feature beheer isdo

vark1.jarigkies_geluidvark1.zing(geluid)vark2.voederen(2)vark3.voederen(10)

end -- beheer

feature kies_geluid isdo

io.new_lineio.putstring("Wat zegt het varken ? ")io.readlinegeluid := clone(io.laststring)

end -- kies_geluid

2/4

Page 29: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 29

feature toon_gegevens is 3/3do

io.new_lineio.putstring("De varkens zijn gemiddeld ")io.putreal(________)io.putstring(" maanden oud.")io.new_lineio.putstring("De varkens wegen gemiddeld ")io.putreal(________)io.putstring(" kilo.")io.readline

end -- toon_gegevens

feature gem_lt : REAL isdo

________ := ____________________________________________end -- gem_lt

feature gem_gew : REAL isdo ________ := ____________________________________________end -- gem_gew

end -- class BOERDERIJ

Page 30: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 30

feature toon_gegevens isdo

io.new_lineio.putstring("De varkens zijn gemiddeld ")io.putreal(gem_lt)io.putstring(" maanden oud.")io.new_lineio.putstring("De varkens wegen gemiddeld ")io.putreal(gem_gew)io.putstring(" kilo.")io.readline

end -- toon_gegevens

feature gem_lt : REAL isdo

Result := (vark1.leeftijd + vark2.leeftijd + vark3.leeftijd)/3

end -- gem_lt

3/4

Page 31: November 2001Eiffel sessie 1p. 1 OBJECTGERICHT PROGRAMMEREN Elk object behoort tot een klasse REKENING rek01 rek02 PRODUCT prod01 prod02 prod03.

November 2001 Eiffel sessie 1 p. 31

feature gem_gew : REAL is

do

Result := (vark1.gewicht + vark2.gewicht + vark3.gewicht)/3

end -- gem_gew

end -- class BOERDERIJ

4/4


Recommended