Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165
Grafisk respresentation: Arv Fordon Bil Arv skapar är-en relation subklassen är en mer specifik version av superklassen Programmeringsmetodik -Java 166
Arv Utgå från existerande strukturer superklass, superklass, eller basklass Den härledda klassen kallas subklass eller subclass. Egenskaperna ärvs från förälder till barn subklassen ärver metoder och data definierade för superklassen Programmeringsmetodik -Java 167
Härleda subklasser Det reserverade ordet extends för att åstadkomma arvet klass Bil extends Fordon { // attribut & metoder } Se Words.java (s.324) Programmeringsmetodik -Java 168
Modifieraren protected Modifierarna avgör vad som ärvs Attribut och metoder som är public ärvs medan private inte ärvs Men attribut skulle helst inte vara public (förstör inkapslingen) Modifieraren protected tillåter arv men ger bättre skydd än public Appendix F Programmeringsmetodik -Java 169
super Konstruktorer ärvs inte (Trots att de är deklarerade public) Vi vill ha tillgång till den överordnade klassens konstruktor super gör det möjligt att referera superklassen, ofta för att använda konstruktorn Programmeringsmetodik -Java 170
Definiera - ärva? Allt som ärvs kan refereras direkt i subklassen, som om det var deklarerat där men, även en metod eller ett attribut som inte ärvs, är definierad för subklassen och kan refereras indirekt genom superklassens metoder Programmeringsmetodik -Java 171
Omdefiniera metoder En subklass kan omdefiniera en ärvd metod Signatur = namn samt parametrarnas antal, typ och ordning Måste ha samma signatur som superklassens metod, kan för övrigt se helt annorlunda ut Objektets typ avgör vilken metod som används Programmeringsmetodik -Java 172
Overloading vs. Omdefinition Overloading multipla metoder i samma klass med samma namn men olika signaturer en operation som utförs olika för olika uppsättningar data Omdefinition två metoder, en i en superklass och en i en subklass, med samma signatur Programmeringsmetodik -Java 173
super igen super referensen används för att anropa godtycklig metod i superklassen Bra när man har omdefinierade metoder Syntax : super.phwrg(sdudphwudu) Programmeringsmetodik -Java 174
Klass hierarkier Subklasser kan ha subklasser: Företag Dagligvaruhandel Serviceföretag ICA Konsum Max Programmeringsmetodik -Java 175
Klass hierarkier God klassdesign placerar gemensamma egenskaper så högt som möjligt i hierarkin Klass hierarkier måste ofta modifieras och utökas Ingen generell design som duger överallt Programmeringsmetodik -Java 176
Klassen Object Alla klasser härleds från klassen Object Om inget arv anges, är klassen automatiskt subklass till Object Klassen Object är alltså rot i alla hierarkier Innehåller några få metoder, t.ex. tostring(), som ärvs av alla klasser Programmeringsmetodik -Java 177
Referenser och arv En objektreferens kan referera till ett objekt av rätt klass eller till ett objekt av någon klass relaterad till den genom arv Exempel : klassen Helg används för att härleda subklassen Jul - nu kan en Helg-referens användas för att referera ett Jul-objekt : Helg dag; dag = new Jul(); Programmeringsmetodik -Java 178
Referenser och arv widening conversion - kan göras med tilldelning narrowing conversion - måste göras med cast (kap.5) Programmeringsmetodik -Java 179
Polymorfism Referens till en av flera möjliga metoder Klassen Helg har en metod fira, och klassen Jul omdefinierade den Vad händer då med dag.fira(); Om dag är av typen Helg anropas en version av fira; om referensen är till ett Jul-objekt, används dess fira-metod Programmeringsmetodik -Java 180
Polymorfism Objektets typ (inte referensens) bestämmer vilken metod som avses Samma kod kan ge olika anrop vid olika tillfällen Kopplingen görs under körningen Programmeringsmetodik -Java 181
Att organisera Javakod Förutom enkelt arv finns det fler koncept i Java som stöder återanvändning och elegant kod Viss kod måste uppfyller vissa krav för att fungera med befintlig kod (t ex i händelsehantering) Koden måste organiseras (i bibliotek) Programmeringsmetodik -Java 182
Abstrakta Klasser Abstrakta klasser används för att samla gemensamma attribut och metoder En abstrakt klass kan inte instansieras (men man får definiera referenser till objekt p.g.a. polymorfi och dynamisk bindning) Abstrakta klasser innehåller ofta abstrakta metoder Programmeringsmetodik -Java 183
Abstrakta Klasser En abstrakt metod har ingen implementation, bara namn och signatur Klasser med abstrakta metoder blir abstrakta Abstrakta klasser får inte vara final / static Måste det vara så??? Programmeringsmetodik -Java 184
Abstrakta Klasser Abstrakta klasser är ofta för allmänna för att vara direkt användbara För klasser och metoder används modifieraren abstract Subklasser som inte (om)definierar alla abstrakta metoder blir också abstrakta Programmeringsmetodik -Java 185
Programmeringsmetodik -Java 186
Interfaces Med interface betecknas allmänt de resurser en klass (eller ett objekt) ställer till förfogande Mängden resurser som kan användas av andra I Java formaliseras detta m h a interfacekonstruktionen Programmeringsmetodik -Java 187
Interfaces Ett Java interface är en mängd konstanter och abstrakta metoder Ett interface lägger på så sätt fast krav på de klasser som implementerar interfacet class klassnamn implements interfacenamn { } Programmeringsmetodik -Java 188
Interfaces Varje interface- implementation är en ny version av interfacet Interface är inga klasser och kan inte instantieras En klass kan ärva från en klass och dessutom implementera ett eller flera interface Programmeringsmetodik -Java 189
Interfaces Interfacekonstanterna är tillgängliga i den implementerade klassen En interface kan ärva från ett eller flera interface (m h a extends ) En klass som implementerar ett sådan interface måste också implementera alla ärvda metoder Programmeringsmetodik -Java 190
Interfaces Interfacenamnet får användas för att definiera referenser som är kompatibla med alla objekt av klasser som implementerar interfacet Interface- konceptet har många likheter med multipel arv, dock utan dess nackdelar Multipel arv finns inte i Java Programmeringsmetodik -Java 191
Paket Ett Java paket är en mängd klasser Paket användas för att gruppera liknande klasser och/ eller sådana som beror på varandra Klasserna i ett paket behöver inte ärva från varandra Java AWT är ett paket Java API: n består av många paket Programmeringsmetodik -Java 192
Paket Import satsen gör innehållet i ett paket tillgängligt import paketnamn.klassnamn; // enstaka klass import paketnamn.*;// alla klasser i paketet Programmeraren kan definiera egna paket package paketnamn; Programmeringsmetodik -Java 193
Paket Package-satsen måste vara första satsen i en fil Alla klasser i filen läggs till det namngivna paketet Det får bara finnas en package sats i en fil Paketnamnet motsvarar katalognamnet där klassfilerna finns Programmeringsmetodik -Java 194
Paket Det finns en s k environment variabel CLASSPATH som lägger fast var systemet skall letar efter paket Vid namnkollision måste de berörda klasser kvalificeras (specificeras med fullt namn) Programmeringsmetodik -Java 195
Men Hur Hittas de Rätta Objekten och Klasserna? Erfarenhet Återanvändning av tidigare modell Checklista Människor Platser Reala ting Abstrakta ting Roller Organisationer Händelser... Lingvistisk (språklig) analys Rollspel (typ CRC kort) Programmeringsmetodik -Java 196
Lingvistisk Analys Textuell analys (eller t o m grammatisk analys) Substantiv => objekt / klasser Verb => metoder Adjektiv => attribut... Granska kandidatlistan Synonymer Grammatiken (t ex verb som används som substantiv) Behåll bara de som passar problemet Kolla särskild för verb som uttrycker speciella relationer som t ex vara ( är en/is a ) arv? ha verb ( has ) komposition?... Programmeringsmetodik -Java 197
Bra klasser Tydligt och lätt avgränsningsbar del av programmet Klara uppgifter Relaterat data Maximerar inkapsling och modularitet Genererar få beroenden En öppen arkitektur förberedd för förändringar Programmeringsmetodik -Java 198
Dåliga klasser Att till en klass samla allt man inte vet vad man skall göra av En grupp funktionaliteter Orelaterat data eller funktionaliteter Programmeringsmetodik -Java 199