Arv och ramverk – Virtuella metoder och polymorfism
Mål
Efter Steg 3 ska du ha god förståelse för de viktiga OO-koncepten Arv och Polymorfism, samt hur de ska tillämpas för att understödja underhåll och återanvändning av programvara. Du ska ha kunskap om mekanismer för att åstadkomma ett polymorft beteende samt hur man använder virtuella metoder för att skapa ett interface till ett anpassningsbart ramverk. Vi lägger stor vikt vid att du nu behärskar dynamisk hantering av objekt och variabler, och även förstår skapelse- och destruktionsprocesser för objekt och variabler.
Innehåll
Steg 3 behandlar nyckelbegreppen Arv och Polymorfism, som är de två andra hörnstenarna (av tre) i objektorienterad programmering. Vi tittar på grundprinciper för arvsmekanismen, med generaliserade basklasser och specialiserat beteende i subklassen. Olika arvstyper studeras, och framför allt deras betydelse för underhåll och återanvändning av kod. Dynamisk hantering av objekt spelar stor roll, och objektens skapelseprocess studeras djupare i detta steg. Framförallt initieringsordningen för objekt i olika sammanhang samt vilken funktion initieringslistan (MIL = Member Initialisation List) fyller. I detta sammanhang behandlas även klassobjektets uppgift och static-begreppet .
Vidare studeras C++-konstruktioner som utvecklats särskilt för att kod ska kunna återanvändas på ett flexibelt sätt, d.v.s. hur polymorfism möjliggör ett anpassningsbart klassbeteende. Du kommer att se hur polymorft arv implementeras, och hur virtuella metoder används för att styra ett önskat beteende. Framförallt behandlas vad som kännetecknar en abstrakt basklass och hur man med ett interface skapar goda förutsättningar för ett flexibelt ramverk och dess anpassningsklasser.
Teorin finns i kursbokens kapitel 14 (Inheritance), kap. 15: (Virtual Functions and Polymorphism), kap. 20: 484-486 (static class members).
Moment och begrepp:
- Arv som ett sätt att stödja underhåll och återanvändning av programkod
- Basklassen – generaliserar egenskaper och tjänster
- Subklassen – specialiserar ett objekts funktionalitet
- Åtkomstkontroll av klassmedlemmar med deklarationerna public, protected och private
- 5 sätt att reservera minne för objekt, med olika varaktighet och räckvidd
- Initieringsordningen för subklass, basklass och interna datamedlemmar – så används Member Initialisation List
- Vad gör man i destruktorn?
- För varje klass finns exakt ett klassobjekt – så används dess static-medlemmar
- Begreppet polymorfism (“många former”) – med basklasspekaren pekar vi på valfri subklass
- Överlagrade metoder – endast subklasspekaren ger åtkomst
- Med virtual-deklaration i basklassen anropas subklassmetoden oavsett pekartillhörighet
- En rent virtuell metod framtvingar överlagring, vi har fått en abstrakt basklass
- Ett ramverk lämnar utrymme för anpassningsklasser, vars metoder ersätter de virtuella
- Ett interface specificerar vilka “plugin”-metoder som krävs