37
Begreber og Redskaber 5

Begreber og Redskaber 5

  • Upload
    randy

  • View
    38

  • Download
    0

Embed Size (px)

DESCRIPTION

Begreber og Redskaber 5. BRP. 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. Hvorfor objekter og klasser. - PowerPoint PPT Presentation

Citation preview

Page 1: Begreber og Redskaber 5

Begreber og Redskaber 5

Page 2: Begreber og Redskaber 5

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

Page 3: Begreber og Redskaber 5

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

Page 4: Begreber og Redskaber 5

Eksempel

class A{ int i,j;}..

A a; //a kan have hægte til obja = new A(); // a peger på obj.a.i = 1; // dot-notation

Page 5: Begreber og Redskaber 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; }

}

Page 6: Begreber og Redskaber 5

Oprettelse

• Argumenter til oprettelsen

class A{

int i,j

A(int x, int y){ i=x; j = y;}

}

....

A a = new A(2,3);

Page 7: Begreber og Redskaber 5

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.

Page 8: Begreber og Redskaber 5

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();

Page 9: Begreber og Redskaber 5

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());}

Page 10: Begreber og Redskaber 5

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

Page 11: Begreber og Redskaber 5

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;}

Page 12: Begreber og Redskaber 5

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

Page 13: Begreber og Redskaber 5

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)

Page 14: Begreber og Redskaber 5

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());

Page 15: Begreber og Redskaber 5

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

Page 16: Begreber og Redskaber 5

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

Page 17: Begreber og Redskaber 5

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;}

}

Page 18: Begreber og Redskaber 5

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());

Page 19: Begreber og Redskaber 5

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);

Page 20: Begreber og Redskaber 5

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;}

Page 21: Begreber og Redskaber 5

//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(); }

Page 22: Begreber og Redskaber 5

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?

Page 23: Begreber og Redskaber 5

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();

Page 24: Begreber og Redskaber 5

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

Page 25: Begreber og Redskaber 5

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

Page 26: Begreber og Redskaber 5

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

Page 27: Begreber og Redskaber 5

Håndkøringpublic 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

Page 28: Begreber og Redskaber 5

Håndkøringpublic 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

Page 29: Begreber og Redskaber 5

Håndkøringpublic 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

Page 30: Begreber og Redskaber 5

Håndkøringpublic 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

Page 31: Begreber og Redskaber 5

Håndkøringclass 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=

Page 32: Begreber og Redskaber 5

Håndkøringclass 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

Page 33: Begreber og Redskaber 5

Håndkøringclass 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

Page 34: Begreber og Redskaber 5

Håndkøringclass 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

Page 35: Begreber og Redskaber 5

Håndkøringclass 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

Page 36: Begreber og Redskaber 5

Håndkøringclass 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

Page 37: Begreber og Redskaber 5

Håndkøringclass 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