Objektorienterad programmering forts

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

1 Windows programmering (2) Borland C++ Builder 4/5 Modsoft Ab Kent Westerholm.
Klasser och objekt.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Föreläsning 1.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.
ObjektOrienterad analys och design. SVP Vt2009 Föreläsning nr 2, måndag 8 april kl Diskussion (kurshemsida): Om designuppgiften Om projektuppgiften.
Arv.
Abstract & sealed.
Inkapsling.
Polymorfism.
Programmeringsteknik för K och Media
Alice in Action with Java
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
Objektorienterad programmering i Java
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Programmering i C# 3. Klasser.
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
Sid 41 Fordon int antalhjul; int vikt;
4. Arv och dynamisk bindning
Vektorer (klassen Vector) Sortering
Polymorfism.
Föreläsning 4. Arv – bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Katt pälsfärg smutsa_ned() klös_soffa() Kanin pälsfärg slaktvikt.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmering i C# 5. Structer.
Arv.
Programmeringsteknik för Media1 & K1
F. Drewes, Inst. f. datavetenskap1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning Singel mot multipelt.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Multipelt arv Drawable draw() move() position bitmap Persistent save() restore() storage_file_name.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Föreläsning 6. Klassmallar Templates kan givetvis även användas för klasser –Standardutseende template // Klassdefinition (*.h) class C { returtyp metod(parametrar…);...
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 1. Innehåll Introduktion till objektorientering –OOP (objektorienterad programmering) –Objekt, instanser, klasser C++ –OO i C++ –Standardbibliotek.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
Objektorienterad programmering i Java
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Objektorienterad programmering
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Lite OOA/OOD.
Föreläsning 2. Allmänt STL genererar varningar i Visual C++ –”#pragma warning (disable : 4786)”
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
7. Delegerare och notifierare
Objekt, Klass och Instans Analys av systemet ger mer eller mindre detaljerade objekt Objekten sorteras och klass-diagram ritas upp där relationer reds.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Programmeringsteknik för K och Media
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmall template void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstanter float pi; const float pi = ; float *pip = π //Kompileringsfel! const float.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
Lite ObjektOrienterad Analys och Design sid. 1 6/1/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Lite OOA/OOD.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
C++ som ett bättre C Sid 1 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT C++ kurs CD5250, vårterminen 2000 Lärare: Mats Medin,
Iteratorer och generiska algoritmer sid. 1 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iterator vector ::iterator b = ivec.begin() vector ivec vector.
Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.
Objektbaserad programmering sid. 1 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv.
Arv, abstrakta klasser och gränssnitt
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering.
Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner.
TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder.
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
TDP004 Objektorienterad Programmering Fö 6 Objektorientering forts.
TDP004 Objektorienterad Programmering Fö 8 Sammanfattning
Detaljer i exception-hantering
Presentationens avskrift:

Objektorienterad programmering forts Fordon Tåg Båt Bil Flygplan 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Hur är arv implementerat? Drawable position bitmap Persistent storage_file_name object_id Box bredd hojd Cirkel centrum radie Linje end_a end_b Bilregpost agare marke regnr Bankkonto agare saldo Text_Box text font Pil riktning 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Implementation av arv Cirkel mincirkel; datamedlemmar från basklassen position bitmap datamedlemmar från basklassen centrum radie underklass-specifika datamedlemmar 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Vad ärvs? medlemsfunktioner ärvs medlemsdata ärvs friends (vänner) ärvs inte konstruktor ärvs inte basklassens konstruktor anropas, vanligen från initieringslistan för att sätta rätt värden i basklassdelen en nivå upp kan man anropa 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Åtkomst av överklassmedlemmar protected: int x; MyBaseClass A myaobj1; x B mybobj; x SubClassA SubClassB A myaobj2; x doIt() ? doIt() 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Virtuell funktion Komma åt subtyp-specifik implementation av virtuella funktionsanrop från bastypen den virtuella hanteringen fungerar bara om objektet hanteras via pekare eller referens statiskt allokerat objekt ÄR av den statiska typen 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Implementation av objekt med statiska och virtuella metoder type_info för Myclass int x float f _vptr_Myclass Myclass::print(ostream &) Myclass::draw() Myclass::~Myclass() Virtual table för Myclass static int Myclass::noOfObjs static int Myclass::getNoOfObjs() int Myclass::get_x() Virtuella metoder nås via vptr 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Pure virtual function class Drawable { virtual void draw() = 0; ... Definierar (en del av) ett snitt utan att implementera det class Drawable { virtual void draw() = 0; ... “= 0” markerar pure virtual function 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Abstrakt överklass En klass med en eller flera pure virtual functions är en abstrakt överklass. En klass med bara pure virtual functions (dvs ingen funktion är implementerad i den) är en rent abstrakt överklass. Syftet med den är bara att specificera ett snitt som underklasserna ska tillhandahålla 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Arv av beteende Ger även arv av implementation Synligt arv Ger även arv av implementation utom då man jobbar med pure virtual function/rent abstrakta överklasser 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Arv av implementation Privat eller skyddat arv Stack teststack; teststack.push(x); teststack.push(y); t=teststack.pop(); class Stack : private Vector { public: push(Elem e) {/* peta i vektorn */} Elem pop() { /* peta i vektorn */} } Vad händer om man använder public inheritance istället? teststack.push_back(e); t=teststack[10]; Vi får ett väldigt fult anropssnitt! 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

...men en stack är inte en vektor Snyggare, renare, med en vektor som beståndsdel i stället för arv: class Stack { public: push(Elem e) { theStack.pushBack(e); } Elem pop() { /* ... */ } private: Vector theStack; } 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Konstruktor-destruktor och arv När ett objekt skapas sker följande: 1. Konstruktorn för ev. överklass anropas alltid först. 2. Konstruktorerna för den aktuella klassens datamedlemmar anropas 3. Satserna i den aktuella klassens konstruktor exekveras. När ett objekt tas bort sker följande: 1. Satserna i den aktuella klassens destruktor exekveras. 2. Destruktorerna för den aktuella klassens datamedlemmar anropas 3. Destruktorn för ev. överklass anropas. 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Multipelt arv Drawable Persistent position storage_file_name bitmap move() position bitmap Persistent save() restore() storage_file_name object_id Persistent_drawable Box length width Circle center radius Line end_a end_b 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Multipelt arv: iostream format_state condition_state locale streambuf (inte riktigt rätt) class istream : public ios class ostream : public ios istream ostream gcount xxx ifstream iostream ofstream yyy class iostream : public istream, public ostream fstream 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Kompileringsfel - dock endast vid iostream object??? istream object ostream object över- klass- delen från ios över- klass- delen från ios format_state condition_state locale streambuf gcount format_state condition_state locale streambuf gcount format_state condition_state locale streambuf xxx från istream istreams “egen” underklassbit ostreams “egen” underklassbit format_state condition_state locale streambuf xxx från ostream Kompileringsfel - dock endast vid försök att accessa de dubblerade delarna! yyy iostreams “egen” underklassbit 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Multipelt arv: iostream format_state condition_state locale streambuf med virtual inheritance class istream : virtual public ios class ostream : virtual public ios istream ostream gcount xxx ifstream iostream ofstream yyy class iostream : public istream, public ostream fstream 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Virtual inheritance en enda ios-bit! virtuell basklass iostream object format_state condition_state locale streambuf gcount en enda ios-bit! virtuell basklass från istream xxx yyy iostreams “egen” underklassbit från ostream 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Konstruktor-destruktor och arv multipelt Konstruktor-destruktor och arv När ett objekt skapas sker följande: 1. Konstruktorn för ev. överklass anropas alltid först. 2. Konstruktorerna för den aktuella klassens datamedlemmar anropas 3. Satserna i den aktuella klassens konstruktor exekveras. i deriveringslistans turordning När ett objekt tas bort sker följande: 1. Satserna i den aktuella klassens destruktor exekveras. 2. Destruktorerna för den aktuella klassens datamedlemmar anropas 3. Destruktorn för ev. överklass anropas. baklänges enligt deriveringslistans turordning 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

skydda konstruktorn på abstrakt överklass Drawable rita() flytta() position bitmap class Drawable { protected: Drawable(); ….. Box bredd hojd Cirkel centrum radie Linje end_a end_b Varför inte private? Text_Box text font Pil riktning byt_ riktning() 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

Virtuell destruktor delete drawable_ptr; Delete genom basklass-pekare tar bara bort basklass-objekt-delen om inte destruktorn är virtual! Är protected basklass- destruktor en bra ide? adasd dfasfas sfdsfd Box* Cirkel* Pil* Linje* Text_Box* 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

typeid och type_info #include <typeinfo> type_info ti; class Minklass : public Overklass {…} Minklass mittobj; Overklass *minpekare = & mittobj; ti = typeid(*myptr); cout << ti.name() << endl; // Vad händer? 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT

typeid och type_info forts cout << ti << endl; // Vad händer? klass med virtuella funktioner: det av myptr utpekade objektets dynamiska typ skrivs ut, dvs Minklass klass utan virtuella funktioner: den statiska typen hos uttrycket (*myptr) skrivs ut, dvs Basklass typeid funkar på alla slags typer och uttryck: typeinfo(myint), typeinfo(a || b), typeinfo(3.1415) 5/25/2018 CD5250 OOP med C++ Mats Medin MDH/IDT