130 likes | 273 Views
Arv. Klassrelationer. Klasser kan använda sig av varandra. Användningen innebär att klasserna blir beroende av varandra. Ändring i en klass kan påverka funktionaliteten i andra. Allmänt beroende kallas dependency. Klassrelationer. Det finns tre speciella kategorier av beroenden;
E N D
Klassrelationer • Klasser kan använda sig av varandra. • Användningen innebär att klasserna blir beroende av varandra. • Ändring i en klass kan påverka funktionaliteten i andra. • Allmänt beroende kallas dependency
Klassrelationer • Det finns tre speciella kategorier av beroenden; • Anropa metoder – association • Ha objekt som attribut – komposition • Dela på attribut och metoder - arv
Association import java.awt.Polygon; public class Triangle { … private void draw() { DrawingPaper paper = DrawingPaper.getPaper() … paper.fill(new Polygon(xpoints, ypoints, 3)); … } }
Komposition public class Picture { private Square wall; private Square window; private Triangle roof; private Circle sun; public Picture() { //initialisera attributen } … }
Problemet • Klasserna Square, Triangle och Circle i shapes-exemplet i boken är ganska lika.-Nästan samma attribut-Nästan samma metoder-Mycket dubbel kod • Onödigt arbete • Onödigt mycket kod • Fel måste fixas på många ställen • Ändringar och tillägg måste göras på många ställen • Inte flexibelt
Lösningen = Arv • Definiera gemensamma attribut och metoder en enda gång i en superklass • Ärva dessa till nya subklasser • Lägg specifika attribut och metoder i subklasserna • Subklassen är en mer specifik version av superklassen • Varje superklass kan ha många subklasser
Härleda subklasser i Java • Det reserverade ordet extends används för att åstadkomma arv • I Java finns bara enkelt arv, varje subklass kan ha högst en superklass. • Alla klasser ärver från klassen Object (inbyggd) • Förälder – Barn, Basklass – Härledd klass, Superklass - Subklass
Triangle extends Figure public class Triangle extends Figure { //Attribut som bara tillhör Triangle //De som kommer från Figure ”skrivs in” //Konstruktorer //Metoder för Triangle //De som kommer från Figure ”skrivs in” }
Triangle extends Figure public class Triangle extends Figure { private int height; private int width; /** * Create new triangle with default height and width. */ public Triangle() { super(); // Här tilldelas triangeln superklassens egenskaper height = 30; width = 40; draw(); } … }
Klasshierarkier • Subklasser kan i sin tur ha subklasser • God klassdesign placerar gemensamma egenskaper så högt som möjligt i hierarkin • God klassdesign lägger bara till ett fåtal nya attribut och metoder åt gången • Klasshierarki måste ofta modifieras och utökas • Ingen generell design duger överallt
Klassen Object • Alla klasser härleds från Object • Om inget arv anges är klassen automatiskt subklass till Object • Klassen Object är rot i alla hierarkier
Sammanfattningsvis • Arv tillåter att speciella klasser skapas på ett enkelt sätt • Tre typer av beroenden;1) Arv – hårt bundet2) Komposition3) Association – löst bundet