Grondslagen v/d beleidsinformatica Hoofdstuk 3: Opbouw klassenteksten 3.1 OVERZICHT Klassen zijn opgebouwd uit elementaire gegevenstypes met bewerkingen 3.2 GEGEVENS EN GEGEVENSBEWERKINGEN Objecten vragen eigenlijk “wat kan ik voor u doen?” De klassenbeschrijving bestaat uit: attributen (ingrediënten) features (statische eigenschappen – ingrediënten) --> attributen zeggen wat het object moet onthouden Attributen zijn variabelen die inhoud kunnen bevatten (moeten voldoen aan klasse definitie) 3.2.1 Basistypes Computersystemen coderen alles via reeksen van 1- en 0-en (bitrij) --> computer moet weten dat het om numerieke alfabetische gegevens gaat Eiffel bevat vijf verschillende basistypes: INTEGER GEHELE GETALLEN REAL KOMMA GETALLEN MET ENKELE PRECISIE DOUBLE KOMMA GETALLEN MET DUBBELE PRECISIE CHARACTER ALFANUMERIEKE KARAKTERS, TEKENS BOOLEAN TRUE/FALSE De types laten toe om bewerkingen door te voeren (getallen optellen en dergelijke) 3.2.2 Variabelen Gegevens kan men manipuleren via variabelen (soort container) --> niets anders dan geheugencel of reeks geheugencellen met tijdelijke bewaarcapaciteit Men moet variabelen declareren --> men koppelt de naam v/d variabele aan een type ! Declaratie via een dubbelpunt Voorbeelden: teller, som: INTEGER pi, BTW: REAL klaar, hoger, lager: BOOLEAN letter, cijfer: CHARACTER Per voorbeeld geldt dat de declaratie som: INTEGER wijst op het feit dat een geheugencel de naam “som” toegewezen wordt en de inhoud een geheel getal is --> de inhoud zal een bitrij zijn Voorbeeld: 0100 0001 is het getal 65 Wanneer de variabele een character zou zijn, dan interpreteert men deze bitrij als de letter A 1 Jeroen De Koninck – HIRB – 2012-2013 De naam v/e variabele bestaat uit letters en cijfers ! Een naam begint steeds met een letter ! GEEN onderscheidt tussen hoofdletters en kleine letters ! De naam moet verschillen v/e sleutelwoord (INTEGER, REAL, DOUBLE, CREATION, END, …) 3.2.3 Uitdrukkingen voor bewerkingen Het type bepaald dat men gebruik kan maken v/e aantal bewerkingen of operatoren voor bewerking Unaire operator: vragen slechts één operand Binaire operator: vragen twee operanden Ternaire operator: vragen drie operanden … Infix notatie: operator tussen de twee operanden (x , y) Prefix: operator voor de operand ( y) Postfix: operator achter de operand (x ) Eiffel-operatoren REKENKUNDIGE OPERATOREN + som verschil * product / deling ^ machtverheffing // gehele deling \\ rest bij gehele deling (modulo) BOOLEAANSE OPERATOREN - and - or - not - xor - and then - or else - implies VERGELIJKINGSOPERATOREN < kleiner dan > groter dan <= kleiner dan of gelijk aan >= groter dan of gelijk aan /= niet gelijk aan 2 Jeroen De Koninck – HIRB – 2012-2013 Voorbeelden: Infix, binair X+Y of X*3 (twee operanden en operator staat in het midden) Prefix, unair -Y of cos(x) (één operand en operator staat ervoor) Postfix, unair x! (één operand, operator staat erachter) Men kan via deze operatoren/bewerkingen complexe uitdrukkingen maken Uitdrukkingen bestaan uit constanten, bewerkingen en namen van variabelen Interpretatie van uitdrukking is bepaalde waarde en is van bepaald type Voorbeeld: De uitdrukking 2 + (3 * 5) heeft de waarde 17 en is van het type INTEGER Zie andere voorbeelden pagina 49 Men kan in een uitdrukking gebruik maken van andere variabelen --> variabele komt overeen met inhoud van overeenkomstige geheugencel ! Dit op het moment dat de uitdrukking geëvalueerd wordt Voorbeeld: De inhoud van een variabele som is 65 --> de uitdrukking som + 3 zal bijgevolg geëvalueerd worden op 68 (INTEGER) Zie andere voorbeelden pagina 49 ! Men moet aantal regels volgen bij bewerkingen - Letters met elkaar bewerken gaat niet - Getallen met letters bewerken gaat niet - Het type v/d uitdrukking is meestal een algemeen type double > real > integer Voorbeelden: 1+5=6 1 + 0.3 = 1,3 1+a=/ INTEGER + INTEGER = INTEGER INTEGER + REAL = REAL INTEGER + CHARACTER = UNDEFINED! (foutmelding) Net zoals in de wiskunde geldt er een voorrang voor bepaalde bewerkingen --> haakjes hebben altijd prioriteit Zie opsomming volgorde pagina 50 3 Jeroen De Koninck – HIRB – 2012-2013 3.3 HET OPSTELLEN VAN PROCEDURES EN FUNCTIES Procedure bestaat uit aantal opdrachten --> bevatten drie structuurverbanden - sequentie: volgordeverband - selectie: keuzeverband - iteratie: herhalingsverband Sequentie --> opeenvolging van opdrachten We kunnen de opdrachten nog eens onderverdelen 3.3.1 Toewijzingsopdrachten Een variabele kan inhoud hebben, inhoud verwijderen, nieuwe inhoud krijgen --> men kan ze bijgevolg een waarde toekennen = declareren v/d variabele (de inhoud is vaak nog onbekend) We kennen een waarde toe via een toewijzingsopdracht Naam_variabele := uitdrukking Wanneer men de opdracht uitvoert zal men volgende zaken doen - Berekenen v/d waarde v/d uitdrukking - Vernietigen v/d huidige waarde v/d variabele (leegmaken) - Waarde v/d variabele gelijk maken aan waarde uitdrukking ! Het type v/d uitdrukking moet gelijk zijn aan die v/d variabele ! Conversies van INTEGER & REAL naar respectievelijk REAL & DOUBLE gebeuren automatisch Voorbeeld: som : INTEGER som := 5 Het proces dat daarop volgt: SOM ? 5 ZIE VOORBEELD 2 PAGINA 52-53 Initialisatie: allereeste toewijzing aan de variabele ! Soms meteen initialisatie bij het gedecladeerd worden (gebeurd via compiler) 4 Jeroen De Koninck – HIRB – 2012-2013 Een speciaal geval van toewijzingsopdrachten --> zowel links als rechts komt het toewijzingstekenvor Voorbeeld: teller := teller +1 Men evalueert eerst het rechterlid --> gebruik v/d oude waarde v/h rechterlid ! Het resultaat is bijgevolg de nieuwe waarde v/d uitdrukking Stel de teller heeft waarde 3 (oplossing is bijgevolg 4) Teller 3 +1 4 ! Men mag nooit bijvoorbeeld INTEGER gelijk stellen aan een kommagetal (REAL) Voorbeeld: Waarborg : INTEGER Waarborg := 100.5 --> kan niet, 100.5 is REAL ! Het linkerlid moet steeds een variabele zijn Voorbeeld: 3 := X --> kan niet, variabele staat rechts De grafische weergave is niet zo handig --> men gebruikt een waardetabel om zulke evoluties weer te geen 5 Jeroen De Koninck – HIRB – 2012-2013 3.3.2 Een procedure of functie opstellen Instructies worden gegroepeerd tot een routine --> routines worden nog eens opgedeeld in procedures en functies We geven een routine een naam gevolgd door het woord “is” De eigenlijke inhoud (body) begint met het woord “do” We sluiten de routine af met het woord “end” We geven eventueel een toelichting via “--“ Voorbeeld: feature twee_en_vijf_optellen is do x := 2 y := 5 z := x + y end – twee_en_vijf_optellen Er zijn enkele regels rond opmaak: - Namen van types in hoofdletters - Namen van variabelen in kleine letters - Nieuwe lijn voor elke nieuwe instructie - Sleutelwoorden springen in - Instructies springen in t.o.v. de sleutelwoorden - Toelichting kan men toevoegen via “--“ 3.4 INHOUD VAN VARIABELEN EN RESULTATEN VAN FUNCTIES 3.4.1 Initialisatie van elementaire gegevenstypes Voor elementaire klassen zoals INTEGER, REAL, DOUBLE, BOOLEAN en CHARACTER voorziet men: - default-waarde of startwaarde ! Er is geen expliciete creatieopdracht nodig, eenvoudige declaratie volstaat Voorbeeld: X : INTEGER Het object krijgt meteen de startwaarde (in bovenstaand voorbeeld is dit 0) Voor andere elementaire objecten zijn de startwaarden: INTEGER 0 REAL 0.0 DOUBLE 0.0 BOOLEAN false (alles is nl. onwaar tot men het tegendeel bewijst) CHARACTER blanco, spatie De startwaarden worden via de routine ingevuld op later tijdstip 6 Jeroen De Koninck – HIRB – 2012-2013 3.4.2 Resultaten van functies Functies manipuleren gegevens (inhoud variabelen) voor een resultaat --> wordt gedefinieerd via het woord result Voorbeeld: feature beschikbaar_krediet : REAL is do Result := krediet_limiet + saldo end -- beschikbaar_krediet Beschikbaar krediet zal uiteindelijk waarde hebben v/d optelsom 3.5 EENVOUDIGE SYSTEMEN MET 1 KLASSE 3.5.1 Een product van twee getallen berekenen 3.5.2 Een eenvoudige “groeter” ZIE PAGINA 57-58 VOOR DE VOORBEELDEN 7 Jeroen De Koninck – HIRB – 2012-2013