F17 - Generalisering Flashcards
När kan man använda generalisering?
När två klasser är lika i de flesta detaljerna, men skiljer sig åt lite
På vilka sätt kan klasser skilja sig åt?
- Beteende (metoder)
- Data (attribut)
- Associationer till andra klasser
Vilket är det vanligaste sättet att implementera generalisering?
genom arv
Vad skiljer generalisering från arv?
Generalisering är konceptet och arv är implementationen
Vad innebär generalisering?
att generella delar abstraheras från specialiserade klasserna (arv är när klasser ärver en genrell klass och specialiserar sig, den generella klassen är superklass och de specialiserade klasserna subklasser)
Vilket syfte fyller multiplicitet vid generalisering i ett klassdiagram?
Inget, multiplicitet saknar syfte och generalisering saknar därför multiplicitete
Vilken tumregel finns för generalisering?
Om man kan säga att A är en B, så är B en generalisering av A
Vilken tumregel finns för att avgöra om något är ett attribut snarare än generalisering?
Om A har en B, är B ett attribut hos A
Nämn två metoder för att hitta generaliseringar
- Top Down: har en klass du kan delar upp
- Bottom Up: har flera klasser med stora likheter
Är multipelt arv möjligt i java?
nej, java stödjer inte multipelt arv
Vad innebär multipelt arv?
att man ärver från flera superklasser
Varför kan man inte skapa objekt av abstrakta klasser?
- man vill skapa objekt av klasser längre ner i hierarkin
- om vi vill att något ska utföras på liknande men olika sätt begränsa implementationen till subklasserna genom abstrakta metoder (som kräver abstrakta klasser)
Vad är fördelarna med arv?
- Återanvända kod
- Möjliggör polymorfism
Vad är nackdelarna med arv?
- Underhållningsbehov och superklassen ändras
- Kan ge dålig översikt
- Komplex kod