Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afAndrea Kvist Redigeret for ca. et år siden
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
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.