Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.

Lignende præsentationer


Præsentationer af emnet: "DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato."— Præsentationens transcript:

1 DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato

2 DAIMIIntroducerende objektorienteret programmeringkd.2 Modelelementer  Et program er en model, hvor de enkelte elementer er beskrevet vha. objekter. Et objekt er karakteriseret ved tilstand og opførsel. Objekter med ens opførsel grupperes i klasser.  Hvert objekt er et ‘modelelement’ og beskevet ved en klasse. Vi vil ofte sige at en klasse ‘modellerer’ en eller anden ting: En tekst, en skildpadde, en dato, …  Hidtil har vi enten brugt klasser (skildpadden) eller udvidet en eksisterende (lærd skildpadde).

3 DAIMIIntroducerende objektorienteret programmeringkd.3 Opførsel og tilstand  Vi kan bede et objekt udføre en af de mulige handlinger/opførsler som det råder over:  t.move(50);  Derved påvirker vi objektets tilstand  t har nu en ny position  Vores forskellige lærde skildpadder er eksempler på hvorledes vi definerer opførsel i java  opførsel defineres i metoder  f.eks. public void spirille( int l ) { (opførsel her!) }

4 DAIMIIntroducerende objektorienteret programmeringkd.4 Klasser i java  Opførsel og tilstand defineres i en specification. Denne specifikation hedder en klasse.  En klasse er en art støbeform som fuldstændigt definerer opførsel og værdimængde af tilstande for alle afstøbninger = objekter.

5 DAIMIIntroducerende objektorienteret programmeringkd.5 Eksempel  Vi ønsker at lave et kalender-system og i sådan en model er et vigtigt element naturligvis en  dato  Øvelse: Nævn tilstand for et dato objekt Nævn opførsel for et dato objekt

6 DAIMIIntroducerende objektorienteret programmeringkd.6 Første spæde forsøg  Vi starter meget simpelt:  Nævn opførsel og tilstand for et Date1 objekt class Date1 { public Date1() { } public void print() { System.out.println( "Datoen er 16/9/1999" ); } Klasseafgrænsning konstruktør metode

7 DAIMIIntroducerende objektorienteret programmeringkd.7 Metodestruktur  public void print()  {  System.out.println( "Datoen er 16/9/1999" );  } Prototype Retur-værdi Metodenavn Metodekrop Parametre

8 DAIMIIntroducerende objektorienteret programmeringkd.8 Brug af Date1  Nu er klassen ‘Date1’ defineret; lad os prøve den. Det gør vi med et lille testprogram:  I BlueJ kan vi direkte konstruere og påvirke objekter. class TestDate { public static void main( String[] args ) { Date1 d = new Date1(); d.print(); }

9 DAIMIIntroducerende objektorienteret programmeringkd.9 Programdynamik  Et program udføres een sætning ad gangen, og hver sætning udføres til ende, førend den næste evalueres: mainDate1d.print new Date1() d.print() Sys...println

10 DAIMIIntroducerende objektorienteret programmeringkd.10 Klasser og java-filer  Java kræver at en klasse skal ligge i en fil med samme navn som klassen, og “.java” som efternavn (suffix):  Klassen Date1 skal gemmes i “Date1.java”  Klassen TestDate skal gemmes i “TestDate.java”  Dette skjuler BlueJ, men prøv at kig i mapperne hvor BlueJ projekterne bliver gemt…

11 DAIMIIntroducerende objektorienteret programmeringkd.11 Udvidet eksempel  Date1 er en ‘anelse’ ufleksibel. Nyt forsøg: class Date2 { public Date2() { y = 1999; m = 9; d = 16; } public void print() { System.out.println( "Datoen er "+d+"/"+m+"/"+y ); } public void set( int year, int month, int day ) { y = year; m = month; d = day; } private int y; private int m; private int d; } Instans variable (attributter) gemmer tilstand

12 DAIMIIntroducerende objektorienteret programmeringkd.12 Hvad har vi gjort?  For at kunne gemme tilstand for en vilkårlig dato har vi: Erklæret tre heltal (int)’s instans variable til at opbevare datoens tilstand: (dag, måned, år) Konstruktøren initialiserer enhvert nyt datoobjekt til at have tilstanden (16/9/1999) Rettet ‘print’ til så den udskriver dette objekts tilstand på en læselig måde (‘+’ er en betydelig lettere måde at lave ‘concat’ på) Tilføjet en metode ‘set’ som kan ændre et dato objekts tilstand (så den repræsenterer en ny dato…)

13 DAIMIIntroducerende objektorienteret programmeringkd.13 Metoden ‘set’  public void set( int year, int month, int day ) {  y = year; m = month; d = day;  }  Der erklæres tre parametre: year, month, day, i parameterlisten, alle af typen int  (y,m,d) tildeles værdien af parametrene i metodens krop. Parameterliste

14 DAIMIIntroducerende objektorienteret programmeringkd.14 Formelle parametre  public void set( int year, int month, int day ) {  y = year; m = month; d = day;  }  year, month, day kaldes  formelle parametre (parametre)  Formelle parametre er en måde at navngive de faktiske data, som metoden engang vil blive kaldt med:d.set( 2000, 1, 1 ); Year spiller rollen for ’2000’ i metoden

15 DAIMIIntroducerende objektorienteret programmeringkd.15 Udvidet test  class TestDate {  public static void main( String[] args ) {  Date2 d = new Date2();  d.print();  d.set(2000, 1, 1);  d.print();  }

16 DAIMIIntroducerende objektorienteret programmeringkd.16 Aktuelle parametre  Når en metode kaldes skal man angive værdier for alle formelle parametre:  d.set( 2000, 1, 1);OK  d.set();FORKERT  d.set( 2000, 1);FORKERT  d.set( 2000, 3, 1, 23 );FORKERT  Parametrene som gives på kaldstedet kaldes  aktuelle parametre (argumenter)

17 DAIMIIntroducerende objektorienteret programmeringkd.17 Statisk typecheck  Compileren tjekker at antallet af aktuelle parametre samt deres typer passer med de formelle paramtre:  Turtle t = new Turtle();  d.set( ”Hejsa”, t, 7 );ulovligt, ”Hejsa” er ikke et tal, ’t’ ej heller.  Men – compileren kan (naturligvis) ikke tjekke fortolkningsfejl!  d.set( 2000, 13, 43 );Hvad er der galt???

18 DAIMIIntroducerende objektorienteret programmeringkd.18 Øvelse  1) Skitser en klassedefinition af Turtle inklusiv metoden ‘move’.  2) Hvilken dato udskrives der her:  d.set( 1999, 12, 32 );  d.print();  3) Er det let at lave en metode:  public void add( int days )  der kan lægge et antal dage til en dato?

19 DAIMIIntroducerende objektorienteret programmeringkd.19 Instantiering  En klasse er en støbeform for objekter. Man ’støber’ et nyt objekt vha. Java operatoren new:  Dette kaldes objekt instantiering Erklæring af reference variabel, d, af type Date2 Tildeling Nyt Date2 objekt Date2 d = new Date2();

20 DAIMIIntroducerende objektorienteret programmeringkd.20 Konstruktør  Det sidste ’Date2()’ ligner et metodekald?  Det er det faktisk også; når et objekt instantieres kaldes dets konstruktør automatisk.  Konstruktøren er bare en speciel metode som Ingen returtype har Har samme navn som klassen selv

21 DAIMIIntroducerende objektorienteret programmeringkd.21 Metoder med værdi  Hvad hvis vi er interesseret i, f.eks., årstallet?  Sådanne metoder har en værdi som returneres når metoden er udført. public int getYear() { return y; } public int getMonth() { return m; } public int getDay() { return d; } ReturtypeReturn-sætning

22 DAIMIIntroducerende objektorienteret programmeringkd.22 Return  return er en speciel sætning, der kun giver mening i en metode, og angiver hvad en metodens værdi er (hvad den evalueres til)  return-statement ::= “return” [ expression ]  Typen på udtrykket efter “return” skal passe med den i metodedefinitionen specificerede  return uden efterfølgende udtryk svarer til void

23 DAIMIIntroducerende objektorienteret programmeringkd.23 Return  Semantik: Når return udføres, afsluttes metodekaldet øjeblikkeligt. public void kukkuk() { System.out.println( “Gemmeleg” ); return; System.out.println( “Kuk kuk” ); }

24 DAIMIIntroducerende objektorienteret programmeringkd.24 Udefra og indefra...  Set fra et enkelt objekts synsvinkel kan verden deles i to: Det ”udenfor” og det ”indenfor”... indenfor – ”jeg selv” er modtagerobjekt (this) udenfor – eksplicit angivelse af modtagerobjekt (y,m,d) = (2000,1,1) (y,m,d) = (1999,12,24) (y,m,d) = (2000,9,28) d1:Date2 d2:Date2 afstemningsdato:Date2 X:TestDate d2.print(); d1.print()

25 DAIMIIntroducerende objektorienteret programmeringkd.25 set- og get-metoder  Et objekt bør ikke kunne ændre tilstand af et andet objekt uden dets vidende. Derfor skal aflæsning og ændring af et objekts tilstand ske gennem metode-kald. Disse kaldes set- og get- metoder.

26 DAIMIIntroducerende objektorienteret programmeringkd.26 Metodetyper  I de “klassiske” programmeringssprog skelner man skarpt mellem to typer af metoder: Funktioner: Metoder som returnerer en værdi; kan bruges som udtryk Procedurer: Metoder som ikke returnerer en værdi; kan bruges som en sætning.  Øvelse: Hvad er t.move(50) ? d2.year() ?

27 DAIMIIntroducerende objektorienteret programmeringkd.27 Overloading  En metodes navn og parameterliste kalder man en metodes signatur.  To metoder med samme navn men forskellige parameterlister opfattes som forskellige metoder.  Har man flere metoder med samme navn, siger man at metoden er overloaded.  public Date2() …  public Date2( int year, int month, int day ) …


Download ppt "DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato."

Lignende præsentationer


Annoncer fra Google