Presentation laddar. Vänta.

Presentation laddar. Vänta.

Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering.

Liknande presentationer


En presentation över ämnet: "Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering."— Presentationens avskrift:

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


Ladda ner ppt "Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering."

Liknande presentationer


Google-annonser