Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avFredrik Åström
1
Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering + arv Fordon TågBåtBil Flygplan
2
Objektorienterad programmering sid. 2 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Exempel på arv Drawable rita() flytta() position bitmap Persistent save() restore() storage_file_name object_id Box bredd hojd Text_Box text font Cirkel centrum radie Linje end_a end_b Pil riktning byt_ riktning() Bankkonto agare saldo satt_in(summa) ta_ut(summa) Bilregpost agare marke regnr besiktigad() skattad()
3
Objektorienterad programmering sid. 3 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Arv innebär “Underklassen” kan göra det som “överklassen” gör + det vi själva bestämmer att den ska kunna dessutom Underklassen håller samma data som överklassen + det den behöver för sitt eget tillagda beteende
4
Objektorienterad programmering sid. 4 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Arv innebär forts Underklassens beteende är mer specialiserat Överklassens beteende är mer generellt Klasser som är mycket generaliserade har vi ingen nytta av att instansiera - abstrakta överklasser
5
Objektorienterad programmering sid. 5 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Att jobba med arv Oftast börjar man med att hitta de objekt man behöver - och deras klasser Sen letar man rätt på beteende som är gemensamt för flera klasser –bryts ut till överklass Man tittar också efter existerande klasser man kan använda
6
Objektorienterad programmering sid. 6 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överklassens privata data kan inte underklassens metoder komma åt Metoder som är implementerade i överklassen kommer dock åt dem
7
Objektorienterad programmering sid. 7 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Synligt (public) arv - arv av interface class Box : public Drawable {/* metoder och data */} Box-klassens anropssnitt erbjuder även metoderna rita() och flytta() som definierats i överklassen Drawable (jfr sid 1. rita() och flytta() är givetvis public:) Även implementationen ärvs - om inte...
8
Objektorienterad programmering sid. 8 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Synligt (public) arv - arv av interface forts class Bankkonto : public Persistent {/* metoder och data */} Bankkonto -klassens anropssnitt erbjuder även metoderna save() och restore() som definierats i överklassen Persistent (jfr sid 1. save() och restore() är givetvis public:) Även implementationen ärvs - om inte...
9
Objektorienterad programmering sid. 9 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Om inte... Överklassen Drawable vet inte hur en Box eller Cirkel ser ut, bara att det ska gå att rita den - alltså får draw() implementeras i Box, Cirkel, Linje,... Drawable::rita() är en pure virtual function Enbart anropssnitt (interface) ärvs för metoden draw() Drawable kan inte instansieras - - Drawable är en abstrakt överklass
10
Objektorienterad programmering sid. 10 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Ett statiskt allokerat objekt Har plats för de medlemsdata som finns i dess typ - varken mer eller mindre Alltså är överklass-objektets lagringsutrymme mindre än underklassobjektet
11
Objektorienterad programmering sid. 11 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Exempel: Drawables Gör en sekvens av grafikobjekt av olika subtyp - Box, Cirkel, Linje, etc. som ska ritas på skärmen Vi kan inte allokera statiskt, objekten måste hanteras via pekare eller referenser (varför var det så?) adasd dfasfas sfdsfd Box*Cirkel* Pil* Linje* Text_Box*
12
Objektorienterad programmering sid. 12 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Exempel: Drawables forts List ritlista; // template // class List //... List::stoppaIn(Type *elem); ritlista.stoppaIn(minOrangeBox); ritlista.stoppaIn(mingroenaCirkel); ritlista.stoppaIn(mittStreck); Jag trodde att typkontrollen skulle sätta stopp för det där!
13
Objektorienterad programmering sid. 13 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Konvertering subtyp supertyp Konvertering från subtyp till supertyp är tillåtet - sker automatiskt (implicit) vid behov! Konvertering från supertyp till subtyp görs med dynamic_cast
14
Objektorienterad programmering sid. 14 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT dynamic_cast med pekare Behövs t.ex. för att anropa medlemsfunktion som inte finns i “överklassen”: Drawable *mittRitobjekt = hamtaNastaObj; Pil *pp = dynamic_cast (mittRitobjekt); if (pp) // Det var en pil, konvertering lyckades! pp->byt_riktning(); Objektets dynamiska typ är känd men för medlemsåtkomst används den statiska typen. :-(:-(
15
Objektorienterad programmering sid. 15 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT dynamic_cast med referens Exempel: anropa subtypens medlemsfunktioner på ett objekt utpekat av “supertypreferens”: Drawable &mittRitobjekt = hamtaNastaObj; try { Pil &pp = dynamic_cast (mittRitobjekt); pp->byt_riktning(); } catch (std::bad_cast) { /* Det var inte en pil */}
16
Objektorienterad programmering sid. 16 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Public inheritance - synligt arv public members (synliga medlemmar) i överklassen blir public (synliga) i underklassen Protected members (skyddade medlemmar) i överklassen blir protected (skyddade) i underklassen –(privata medlemmar i överklassen kommer man inte åt alls från underklassen)
17
Objektorienterad programmering sid. 17 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Protected inheritance - skyddat arv public members (synliga medlemmar) och protected members (skyddade medlemmar) i överklassen blir protected (skyddade) i underklassen –(privata medlemmar i överklassen kommer man inte åt alls från underklassen)
18
Objektorienterad programmering sid. 18 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Private inheritance - privat arv public members (synliga medlemmar) och protected members (skyddade medlemmar) i överklassen blir private (privata) i underklassen –(privata medlemmar i överklassen kommer man inte åt alls från underklassen)
19
Objektorienterad programmering sid. 19 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT i överklasstyp av arvi underklass publicpublicpublic protected public protected privatepublicej åtkomlig publicprotected protected protectedprotected protected privateprotected ej åtkomlig publicprivate private protectedprivate private privateprivate ej åtkomlig
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.