Objektorienterad programmering

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
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.
Elkraft 7.5 hp distans: Kap. 3 Likströmsmotorn 3:1
Föreläsning 4 Python: mera om funktioner och parametrar
Arv.
Abstract & sealed.
Inkapsling.
Polymorfism.
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Kommunpussel Din uppgift är att sortera de organisatoriska delar på nästa sida på ett sådant sätt att det överensstämmer med hur din kommun är organiserad.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
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.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Programmering i C# 3. Klasser.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT Lite OOA/OOD.
Sid 41 Fordon int antalhjul; int vikt;
4. Arv och dynamisk bindning
Vektorer (klassen Vector) Sortering
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.
TÄNK PÅ ETT HELTAL MELLAN 1-50
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
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.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
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.
Sid 1 CD5250 Daniel Flemström MDH/IDT COM Extremely Rough Overview.
Föreläsning 4 Klasser Och Objekt.
Sid period2CD5250 OOP med C++ Daniel Flemström MDH/IDT Abstrakta Containertyper Vilka finns fördefinierade? Vad kan dom? #pragma warning(disable:4786)
Objektorienterad programmering i Java
Räkna till en miljard 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14,15,16,17,18,19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, En miljard är ett.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
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.
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)”
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Undantag - eng. Exceptions Viktig del av klassbiblioteksdesign “Hoppa direkt ut med felkod” class.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Abstrakta Containertyper Vilka finns fördefinierade? Vad kan dom?
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
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.
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.
Ö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.
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.
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
Objektorienterad programmering forts
Presentationens avskrift:

Objektorienterad programmering OOP = objektbaserad programmering + arv Fordon Tåg Båt Bil Flygplan 2000-period2 CD5250 OOP med C++ Mats Medin MDH/IDT

Exempel på arv Drawable position bitmap rita() flytta() Persistent save() restore() storage_file_name object_id Box bredd hojd Cirkel centrum radie Linje end_a end_b Bilregpost agare marke regnr besiktigad() skattad() Bankkonto agare saldo satt_in(summa) ta_ut(summa) Text_Box text font Pil riktning byt_ riktning() 2000-period2 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 Olika underklasser kan göra samma sak på olika sätt 2000-period2 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 2000-period2 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 2000-period2 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 2000-period2 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... 2000-period2 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... 2000-period2 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 2000-period2 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 ! Slicing – konstruktionsfel på språket C++? Pekare eller referenser måste användas i C++ OOP! 2000-period2 CD5250 OOP med C++ Mats Medin MDH/IDT

Exempel: Drawables Vi kan inte allokera statiskt, objekten 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* 2000-period2 CD5250 OOP med C++ Mats Medin MDH/IDT

Exempel: Drawables forts Jag trodde att typkontrollen skulle sätta stopp för det där! List <Drawable> ritlista; // template <class Type> // class List //... List::stoppaIn(Type *elem); ritlista.stoppaIn(minOrangeBox); ritlista.stoppaIn(mingroenaCirkel); ritlista.stoppaIn(mittStreck); 2000-period2 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! Nödvändigt för att OOP ska fungera. (Glöm inte: pekare/referenser, annars slicing) 2000-period2 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) 2000-period2 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) 2000-period2 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) 2000-period2 CD5250 OOP med C++ Mats Medin MDH/IDT

i överklass typ av arv i underklass public public public protected public protected private public ej åtkomlig public protected protected protected protected protected private protected ej åtkomlig public private private protected private private private private ej åtkomlig 2000-period2 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 2000-period2 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 2000-period2 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 2000-period2 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() 2000-period2 CD5250 OOP med C++ Mats Medin MDH/IDT

Virtuell funktion Komma åt subtyp-specifik implementation av virtuella funktionsanrop från bastypen Nödvändigt för att OOP ska fungera. den virtuella hanteringen fungerar bara om objektet hanteras via pekare eller referens statiskt allokerat objekt ÄR av den statiska typen 2000-period2 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 2000-period2 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 2000-period2 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 2000-period2 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 2000-period2 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! 2000-period2 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; } 2000-period2 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. 2000-period2 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() 2000-period2 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* 2000-period2 CD5250 OOP med C++ Mats Medin MDH/IDT