Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.

Lignende præsentationer


Præsentationer af emnet: "Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om."— Præsentationens transcript:

1 Begreber og Redskaber 5

2 Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om nedarvning Et par ord om objekt-orientering Håndkøring af programmer

3 Hvorfor objekter og klasser En samling data og operationer på det Opbygning af sine egne datatyper Modellering af virkelige objekter Hierarkisk opbygning af program –Det kan forstås på mange niveauer

4 Eksempel class A{ int i,j; }.. A a; // a kan have hægte til obj a = new A(); // a peger på obj. a.i = 1; // dot-notation

5 Oprettelse af objekter Hvis felter skal initialiseres under oprettelse kan det ske i en konstruktør class A{ int i,j; A(){ i = 0; j = 1; } }

6 Oprettelse Argumenter til oprettelsen class A{ int i,j A(int x, int y){ i=x; j = y;} }.... A a = new A(2,3);

7 Hægter til objekter Variable med klasse som type er hægter til objekter – initielt null class A{... } A a = new A(); A b = a; a b A obj.

8 Metoder i klasser Klasser kan indeholde metoder - dvs underprogrammer class A{ int i,j; void udskriv(){ System.out.println(i+”,”+j);} } A a = new A(); a.udskriv();

9 Funktioner Metoder kan have returværdi class A{ int i,j; int iogj(){return i+j; } } A a = new A(); System.out.println(a.iogj());}

10 public/private Synlighed: Felter og metoder kan være private for en klasser – usynlige udenfor class A{ private int i,j; public int getI(){return i;} public void setI(int x){i=x;} } // a.i=3 ej ok, a.setI(3) ok

11 Accessor/mutator God stil: Felter gøres private Værdier hentes med accessormetoder Felter ændres med mutatormetoder accessor: public int getI(){return i;} mutator public void setI(int x){i=x;}

12 Static/dynamic Static felter og metoder hører til klassen – ikke til objekter Et ” static ” felt per klasse Et ”dynamic” felt per objekt static metoder må ikke bruge dynamiske felter static metoder kan kaldes før objekter er oprettet

13 Eksempel public static void main(String args[]){} Er kendt uden for klassen (public) Kan kaldes uden at der er objekter (static) Skal ikke returnere en værdi (void)

14 Eksempel: statiske felter class A{ static private int nr=0; A(){nr++;} static int getNr(){return nr;} } System.out.println(A.getNr()); A a = new A(); System.out.println(a.getNr());

15 Metoder og parametre class A{ int i=0;... } void p1(int i){i=3;} void p2(A a){a.i=3;} int j=2; p1(j); // j==2 A b=new A(); p2(b); // b.i==3

16 Virkefelt Java er blokstruktureret (som Pascal, C...) Navne kan genbruges i forskellige blokke class A{ int i; void p(){ int i;...} } Klassen har felt i, metoden lokal variabel i

17 this refererer til objektet class A{ private int i; void setI(int i){this.i=i;} int getI(){int i=this.i; return i;} void addToI(int j){i=i+j;} }

18 Overlæsning Man kan have flere metoder med samme navn – bare argumenttyper er forskellige p(String s){...} p(int i){... } p(A a){...} p(”hej”); p(3); p(new A());

19 toString metoder Lad alle klasser have en metode: public String toString(){...} som returnerer tekstuel version af objektet Bruges en klasse som tekststreng kaldes denne metode: System.out.println(”a = ”+a);

20 Eksempel: dato class Date{ //felter private int day,month,year; //konstruktør Date(int day, int month, int year){ setDay(day); setMonth(month); setYear(year);} Date(int day, int month){ setDay(day); setMonth(month); setYear(..);} //mutator void setDay(int day){this.day=day;} void setMonth(int month){this.month=month;} void setYear(int year){this.year=year;}

21 //accessor int getDay(){return day;} int getMonth(){return month;} int getYear(){return year;} //toString public String toString(){ return day + ”/”+month+”-”+year;} //operationer Date imorgen(Date d){.. } Date imorgen(){.. } //testing public static void main(){ Date d = new Date(32,13,1999); Date d1= new Date(21,9,1999); Date d2= d1.imorgen(); }

22 Datamodellering Hvad er en dato? Dag, måned, år plus operationer som imorgen, igår, mm Skal der være mutator metoder? Kan en dato ændres? Check i konstruktør?

23 Nedarvning class A{ int i; } class B extends A { int j;} //B er subtype af A A a = new A(); a.i = 1; B b = new B(); b.i = 1; b.j = 2; A aa = new B(); aa.i = 1; //ej aa.j // ej B bb = new A();

24 Subtyper A a = new A(); a.i = 1; B b = new B(); b.i = 1; b.j = 2; A aa = new B(); aa.i = 1; //ej aa.j b = (B) aa; // casting - typecheck b = (B) a; // køretidsfejl if(aa instanceof B) b = (B) aa; //typecheck

25 Subtyper A a; B b = new B(); a = b; // ingen casting b = (B) a // casting nødvendig A er supertype for B, B subtype af A Værdier af subtype må bruges som supertype

26 Overskrivning class A{ void hej(){System.out.println(”AA”);} } class B extends A{ void hej(){System.out.println(”BB”);} } A a = new A(); a.hej(); // AA B b = new B(); b.hej(); // BB A c = new B(); c.hej(); // BB I B: void hej1(){super.hej();} b.hej1(); // AA ((B) c).hej1(); // AA

27 Håndkøring public class Application{ public static void main(String args[]){ int i,j; i=1; j=3; while(j>0){ i=i*2; j=j-1; } } } Application.main args = null i=1 j=3

28 Håndkøring public class Application{ public static void main(String args[]){ int i,j; i=1; j=3; while(j>0){ i=i*2; j=j-1; } } } Application.main args = null i=1 2 j=3 2

29 Håndkøring public class Application{ public static void main(String args[]){ int i,j; i=1; j=3; while(j>0){ i=i*2; j=j-1; } } } Application.main args = null i=1 2 4 j=3 2 1

30 Håndkøring public class Application{ public static void main(String args[]){ int i,j; i=1; j=3; while(j>0){ i=i*2; j=j-1; } } } Application.main args = null i=1 2 4 8 j=3 2 1 0

31 Håndkøring class A{int x;} public class Application { public static void main(String args[]) {A a,b,t; a=new A(); b=new A(); a.x=1; b.x=2; t=a; a=b; b=t ;}} Application.main args = null a= b= t=

32 Håndkøring class A{int x;} public class Application { public static void main(String args[]) {A a,b,t; a=new A(); b=new A(); a.x=1; b.x=2; t=a; a=b; b=t ;}} Application.main args = null a= b= t= A X=0

33 Håndkøring class A{int x;} public class Application { public static void main(String args[]) {A a,b,t; a=new A(); b=new A(); a.x=1; b.x=2; t=a; a=b; b=t ;}} Application.main args = null a= b= t= A X=0 A X=0

34 Håndkøring class A{int x;} public class Application { public static void main(String args[]) {A a,b,t; a=new A(); b=new A(); a.x=1; b.x=2; t=a; a=b; b=t ;}} Application.main args = null a= b= t= A X=0 1 A X=0 2

35 Håndkøring class A{int x;} public class Application { public static void main(String args[]) {A a,b,t; a=new A(); b=new A(); a.x=1; b.x=2; t=a; a=b; b=t ;}} Application.main args = null a= b= t= A X=0 1 A X=0 2

36 Håndkøring class A{int x;} public class Application { public static void main(String args[]) {A a,b,t; a=new A(); b=new A(); a.x=1; b.x=2; t=a; a=b; b=t; }} Application.main args = null a= b= t= A X=0 1 A X=0 2

37 Håndkøring class A{int x;} public class Application { public static void main(String args[]) {A a,b,t; a=new A(); b=new A(); a.x=1; b.x=2; t=a; a=b; b=t; }} Application.main args = null a= b= t= A X=0 1 A X=0 2


Download ppt "Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om."

Lignende præsentationer


Annoncer fra Google