Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.

Lignende præsentationer


Præsentationer af emnet: " Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato."— Præsentationens transcript:

1  Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato

2  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.7 Metodestruktur public void print() { System.out.println( "Datoen er 16/9/1999" ); } Prototype Retur-type Metodenavn Metodekrop Eventuelle parametre

8  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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 (kaldet aktuelle parametre), som metoden engang vil blive kaldt med: d.set( 2000, 1, 1 ); year spiller rollen for ’2000’ i metoden

15  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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  Jens Bennedsen 2001Multimedie programmering3A.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 " Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato."

Lignende præsentationer


Annoncer fra Google