Grundlæggende Programmering (GP)Efterår 2005Forelæsning 8Slides ligger på nettet. Du er velkommen til at printe dem nu.Vi begynder 9.15.www.itu.dk/courses/GP/E2005 Martin Lillholm
Grundlæggende Programmering (GP)Efterår 2005Forelæsning 8Slides ligger på nettet. Du er velkommen til at printe dem nu.Vi begynder 9.15.www.itu.dk/courses/GP/E2005 Martin Lillholm
Obligatorisk opgave
Var opgaven til i onsdags
For nem
For svær
Tilpas – skulle bruge noget tid og tanker på den, men så var den også til at løse/forstå.
Er der nogen, der ikke har afleveret fordi den slet ikke var til at få hul på?
”Terminsprøve”
Fredag den. 18 november fra 13-16
Afløser den obligatoriske opgave:
Til stede og afleverer – rettes som eksamenssæt
Ikke til stede – afleverer almindeligt – rettes almindeligt
Forsøger at gøre det så realistisk så muligt…
Evaluering
Hvorfor overhovedet evaluere ?
Hvor mange har overhovedet evalueret ?
Husk det nu !!
Projekter
Hvorfor projekter i GP ?
Projektforslag næste gang
Projektdag den 9. november
Sidste gang
Nedarvning
Skrivning til tekstfil
Denne gang
Wrapper klasser
Interfaces
Typer i Java
Polymorfi
Søgning og sortering
Wrapper-klasser
Void void Boolean boolean Character char Double double Float float Long long Integer Int Short Short Byte byte Wrapper klasse Primitiv type Til alle primitive typer (byte, short, int, long, float, double, char, boolean, void)findes såkaldte wrapper klasser
Giver mulighed for at repræsentere primitive typer som objekter: Integer countObj = new Integer (10);
Hvorfor wrapper-klasser?
Ophæv skellet mellemprimitive typer og objektyper
Polymorfi
Hjælpemetoder (L&L appendiks M)
Autoboxing og unboxing
Automatisk konvertering mellem primitive typer og den tilsvarende wrapper-klasse:
Integer count;
int number = 42;
count = number; // Autoboxing
Integer i = new Integer (32);
int j;
j = i; // Unboxing
Grænseflader (interfaces)
Eksplicitte og implicitte interfaces
Et (eksplicit) interface er en samling af abstrakte metoder (og konstanter)(og er en type ... se senere)
For konstanterne er public static final underforstået og derfor ikke nødvendige. Konstanterne er tilgængelige i instanser, der implementerer interfacet
For metoderne er public abstract underforstået og derfor ikke nødvendige
En klasse der implementerer et interface skal implementere metoderne i interfacet – hvorfor ? Men kan sagtens implementere flere/andre offentlige metoder.
En klasse kan implementere flere interfaces
Interface hierakier er mulige
Nøgleord: interface og implements(Svarer groft sagt til class og extends)
Hvorfor interfaces ?
Interfaces – eksempler
public interface Complexity {
public void setComplexity (int Complexity);
public void getComplexity ();
}
Question.java L&L side 311 i BlueJ
Comparable
Metoden: int CompareTo (Object obj);
Contact.java L&L side 503 I BlueJ
Nedarvning
Studerende Person TAP Ansat VIP Hvad har de tre typer personer til fælles:
De er alle personer med navn og højde
Både VIP’ere og TAP’ere er ansat i en afdeling
Typer i Java
Primitive typer:
(byte, short, int, long, float, double, char, boolean, void)
12, -34, 57, 43234, 2.31f, …
Referencetyper:
Klassetype – givet i kraft af en klasseerklæring
(Interface-type – givet i kraft af en interface erklæring)
Tabeltype (array type), t[] hvor t er en type
null eller en reference til et objekt
Subtyper
En type t1 kan være en subtype af en type t2.
I givet fald er t2 en supertype af t1
Generelt:
Enhver type er en subtype af sig selv
Hvis t1 er en subtype af t2 og t2 er en subtype af t3 så er t1 en subtype af t3
For primitive typer:
char er en subtype af int, long, float og double
byte er en subtype short, int, long, float og double
short er en subtype af int, long, float og double
int er en subtype af long, float og double
long er en subtype af float og double
float er en subtype af double (widening)
Subtyper
For referencetyper:
Hvis t1 og t2 er klasser så er t1 en subtype af t2 hvis t1 er en subklasse af t2
Hvis t1 og t2 er interfaces så er t1 en subtype af t2 hvist1 er et subinterface af t2
Hvis t1 er en klasse og t2 er et interface så er t1 en subtype af t2 hvis t1 implementerer t2 eller implementerer et subinterface af t2
En tabeltype t1[] er en subtype af tabeltype t2[] hvis referencetype t1 er en subtype af referencetype t2
Alle referencetyper inklusive enhver tabeltype er en subtype af Object
Ingen primitive typer er subtyper af en referencetype. Ingen referencetyper er subtyper af primitive typer
(Sestoft 2002)
Hvorfor alt det her?
Lad t1 være en subtype af t2
Enhver værdi v1 af type t1 kan benyttes, hvor en værdi af type t2 forventes
Vi siger at typerne t1 og t2 er kompatible
Polymorfi
Mirriam-Webster Online:
Main Entry: poly·mor·phism Function: noun: the quality or state of being able to assume different forms: as a : existence of a species in several forms independent of the variations of sex b : the property of crystallizing in two or more forms with distinct structure- poly·mor·phic adjective- poly·mor·phi·cal·ly adverb
“Almindelig” reference
“Polymorf” reference – subtyper – kompatibilitet
Sen binding (late binding)
Polymorfi gennem arv eksempler
Studerende Person TAP Ansat VIP Person person;
Studerende studerende;
Ansat ansat;
Vip vip;
person = ansat // OK – hvorfor ?
person = studerende;
ansat = vip;
vip = ansat; // ikke ok – hvorfor ?
Hvad med metodekald ? Sen binding.
Firm.java i L&L side 486 i BlueJ
Polymorfi gennem interfaces
public interface Speaker {
public void speak();
public void annonce();
}
Speaker current;
current = new Philosopher(); // Antag at en Philosopher implementerer
// Speaker samt metoden talk()
Speaker guest;
guest = new Philosopher();
guest.speak();
guest = new Dog(); // Tilsvarende for Dog
guest.speak();
Speaker special = new Philosopher();
special.talk(); // FORKERT – hvorfor ?
((Philosopher)special).talk() // OK – hvorfor ?
public void sayIt (Speaker current) { // Hvad kan vi kalde med ?
current.speak();
}
Det store motiverende eksempel
Cirkler og Rektangler som eksempler på former
InheritanceDriver.java
InheritancePanel.java
(InheritancePanel1.java)
Shape.java
Circle.java
Rectangle.java
Findes alle på hjemmesiden
Comments