Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {
|
|
- Britta Viklund
- för 7 år sedan
- Visningar:
Transkript
1 Innehåll EDAF30 Programmering i C++ Arv. Polymorfism. Sven Gestegård Robertz Datavetenskap, LTH Kort om dynamisk polymorfism Virtuella funktioner 2 Arv i C++ Konstruktorer och destruktorer Tillgänglighet Arv utan polymorfism Fallgropar 3 Multipelt arv 4 Något om statisk polymorfism Parametriserade klasser Parametriserade funktioner Arv. Polymorfism. 2/1 Polymorfism och dynamisk bindning Arv. Generalisering och specialisering Polymorfism (mångformighet) Överlagring Generiska programenheter (templates) Virtuella funktioner Statisk bindning Statisk bindning Dynamisk bindning Generalisering: abstrahera gränssnitt Specialisering: återanvändning och utökning Statisk bindning: Dynamisk bindning: Betydelsen hos en viss konstruktion avgörs vid kompilering Betydelsen hos en viss konstruktion avgörs vid exekvering Relationen är: En bil är ett fordon Arv. Polymorfism. 3/37 Arv. Polymorfism. 4/37 Konkreta typer uppför sig precis som inbyggda typer : Representationen ingår i definitionen 1 Kan placeras på stacken, och i andra objekt Kan refereras till direkt (och inte bara genom pekare eller referenser) Kod som använder den måste kompileras om om typen ändras Detta är en kort introduktion, mer om mallar kommer i senare föreläsning. Abstrakta typer isolerar användaren från implementationsdetaljer och skiljer gränssnittet från representationen: Representationen av objekt (inkl. storleken!) är okänd Måste allokeras på heapen Kan bara refereras via pekare eller referenser 1 kan vara privat, men är känd Kort om dynamisk polymorfism : Arv. Polymorfism. 5/37 En konkret typ: Vektor class Vektor Vektor ( int l = 10) :p new int [l], antl ~ Vektor () delete [] p; int lngd () const return ant ; int & operator []( int i) assert (i<ant ); return p[i]; int *p; int ant; Generalisering: extract interface class Container int lngd () const ; int & operator []( int o); Kort om dynamisk polymorfism : Arv. Polymorfism. 6/37
2 Generalisering: en abstrakt typ, Container class Container virtual int lngd () const =0; virtual int & operator []( int o) =0; virtual ~ Container () pure virtual funktion Abstrakt klass eller interface i Java class Vektor : Container Vektor ( int l = 10) :p new int [l], ant l ~ Vektor () delete [] p; int lngd () const override return ant ; int & operator []( int i) override assert (i<ant ); return p[i]; int *p; int ant ; extends (eller implements) Container i Java override i Java (C++11) En polymorf typ måste ha en virtuell destruktor Variant, utan att ändra Vektor Om vi inte kan (eller vill) ändra klassen Vektor kan vi använda den för att skapa en ny klass: class Vektor_container : Container Vektor_container ( int l = 10) :vl ~ Vektor_container () int lngd () const override return v.lngd (); int & operator []( int i) override return v[i]; Vektor v; Vektor är en konkret klass Notera att v är ett Vektor-objekt, inte en referens Skillnad från Java Vektors destruktor (för v) anropas implicit Kort om dynamisk polymorfism : Virtuella funktioner Arv. Polymorfism. 7/37 Kort om dynamisk polymorfism : Virtuella funktioner Arv. Polymorfism. 8/37 Användning av abstrakta klassen void fill ( Container & c, int v) for (int i =0; i!=c. lngd (); ++i) c[i] = v; void print ( Container & c) for (int i =0; i!=c. lngd (); ++i) cout << c[i] << " " ; cout << endl ; void test_container () Vektor v (10) ; fill (v,3); Kort om dynamisk polymorfism : Virtuella funktioner Arv. Polymorfism. 9/37 Användning av abstrakta klassen Anta nu att vi har två andra subklasser till Container class MyArray : Container... class List : Container... void test_container () Vektor v (10); fill (v); MyArray a (5); fill (a); print (a); List l1,2,3,4,5,6,7 print (l); Dynamisk bindning av Container::lngd() och Container::operator[]() Kort om dynamisk polymorfism : Virtuella funktioner Arv. Polymorfism. 10/37 Dynamisk bindning Regler för basklassens konstruktor virtuell funktions-tabell(vtbl) innehåller pekare till objektets virtuella funktioner varje klass med någon virtuell medlemsfunktion har en vtbl varje objekt har en pekare till klassens vtbl anrop av en virtuell funktion (typiskt) < 25% dyrare Vektor_container: v.ant v.p vtbl: Vektor_container::lgnd() Vektor_container::operator[]() Vektor_container:: Vektor_container Basklassens default-konstruktor anropas implicit om den finns! Argument till basklassens konstruktor ges i initierar-listan i subklassens konstruktors. basklassens namn måste används. (super() som i Java finns inte p g a multipelt arv.) List:... vtbl: List::lgnd() List::operator[]() List:: List Kort om dynamisk polymorfism : Virtuella funktioner Arv. Polymorfism. 11/37 Arv i C++ : Konstruktorer och destruktorer Arv. Polymorfism. 12/37
3 Initieringsordning i en konstruktor (för härledd klass) 1 Basklassen initieras: Basklassens konstruktor anropas 2 Subklassen initieras: Datamedlemmar (i subklassen) initieras 3 Funktionskroppen i subklassens konstruktor exekveras Explicit anrop av basklassens konstruktor i initieringslistan D::D( param...) :B( param...), Notera: Konstruktorer ärvs inte Anropa inte virtuella funktioner från en konstruktor.: I basklassen B är this av typen B*. B D Konstruktorer ärvs inte class Base Base (int i) :xi virtual void print () cout << " Base : " << x << endl ; int x; class Derived : Base void test_ctors () Derived b (5); // no matching function for call to // Derived :: Derived (int) Derived b2; // use of deleted function Derived :: Derived () Arv i C++ : Konstruktorer och destruktorer Arv. Polymorfism. 13/37 Arv i C++ : Konstruktorer och destruktorer Arv. Polymorfism. 14/37 using: gör basklassens konstruktor synlig (C++11) class Base Base (int i) :xi virtual void print () cout << " Base : " << x << endl ; int x; class Derived : Base using Base :: Base ; void test_ctors () Derived b2 (5); // OK! Derived b; // use of deleted function Derived :: Derived () b. print (); Arv i C++ : Konstruktorer och destruktorer Arv. Polymorfism. 15/37 Nu med default-konstruktor class Base Base (int i=0) :xi virtual void print () cout << " Base : " << x << endl ; int x; class Derived : Base using Base :: Base ; void test_ctors () Derived b; // OK! b. print (); Derived b2 (5); // OK! b2. print (); Arv i C++ : Konstruktorer och destruktorer Arv. Polymorfism. 16/37 Destruktorer vid arv Tillgänglighet Destruktorn görs i omvänd ordning: Exekveringsordning i en destruktor 1 Funktionskroppen i subklassens destruktor exekveras 2 Subklassens medlemmar destrueras 3 Basklassens destruktor anropas De olika nivåerna av tillgänglighet class C // Medlemmar å tkomliga från godtyckliga funktioner protected : // Medlemmar å tkomliga från medlemsfunktioner // i klassen eller hä rledda klasser // Medlemmar å tkomliga endast från // klassens egna medlemsfunktioner Arv i C++ : Konstruktorer och destruktorer Arv. Polymorfism. 17/37 Arv i C++ : Tillgänglighet Arv. Polymorfism. 18/37
4 Tillgänglighet Tillgänglighet Tillgänglighet vid arv Tillgänglighet vid arv class D1 : B // Publikt arv class D2 : protected B // Skyddat arv class D3 : B // Privat arv Tillgänglighet i B Tillgänglighet via D Publikt arv protected protected protected Skyddat arv protected protected Privat arv protected Tillgängligheten inuti D påverkas inte av typen av arv Arv i C++ : Tillgänglighet Arv. Polymorfism. 19/37 Arv i C++ : Tillgänglighet Arv. Polymorfism. 20/37 Funktionsöverlagring och arv Arv utan virtuella funktioner Funktionsöverlagring fungerar ej mellan olika nivåer i arvshierarkin class C1 void f( int ); // C1 ::f class C2 : C1 void f (); // C2 ::f (dö ljer C1 ::f) C1 a; C2 b; a.f (5); // Ok b.f (); // Ok b.f (2) // Fel! C1 ::f är dold! I C++ är medlemsfunktioner inte virtuella om det inte anges. (Skillnad från Java) Man kan ärva från en klass och dölja dess funktioner. Man kan explicit anropa funktioner i superklassen. Kan användas för att utöka en funktion. (Lägga till saker före och efter funktionen.) Arv i C++ : Tillgänglighet Arv. Polymorfism. 21/37 Arv i C++ : Arv utan polymorfism Arv. Polymorfism. 22/37 Arv utan virtuella funktioner Exempel Fallgropar struct Clock Clock (int h, int m, int s) : seconds 60*(60* h+m) + s Clock & tick (); // OBS! Inte virtuell int get_ticks () return seconds ; int seconds ; struct AlarmClock : Clock using Clock :: Clock ; void setalarm ( int h, int m, int s); AlarmClock & tick (); // dö ljer Clock :: tick () void soundalarm (); int alarmtime ; Typomvandling Tilldelning eller kopiering av objekt av konkreta typer AlarmClock & AlarmClock :: tick () Clock :: tick (); // explicit anrop av funktion i superklassen if( get_ticks () == alarmtime ) soundalarm (); return * this ; Arv i C++ : Arv utan polymorfism Arv. Polymorfism. 23/37 Arv i C++ : Fallgropar Arv. Polymorfism. 24/37
5 Typomvandling Object slicing Se upp med typomvandlingar Framför allt (Subklass*) BasklassPekare Inget skyddsnät, ingen ClassCastException Se exempel i C++ direkt, kap 9.1 (s 307) Använd dynamic_cast (returnerar nullptr om ej OK) Vektor v; Container * c = &v; if( dynamic_cast < Vektor *>(c)) cout << " *c instanceof Vektor \n"; typeid motsvarar.getclass() i Java if(typeid (*c) == typeid ( Vektor )) cout << " *c is a Vektor \n"; class A... class B : A... B b; A a = b; Inte farligt, men a innehåller bara A-delen av b B b1; B b2; A& a_ref = b2; a_ref = b1; Fel! b2 innehåller nu A-delen av b1 och B-delen av sitt gamla värde. Arv i C++ : Fallgropar Arv. Polymorfism. 25/37 Arv i C++ : Fallgropar Arv. Polymorfism. 26/37 Object slicing struct A A( int a) : a_var (a) int a_var ; virtual void print () cout << "A(" <<a_var <<")\n"; struct B : A B( int a, int b) : A(a), b_var (b) int b_var ; void print () cout << "B(" <<a_var <<"," <<b_var <<")\n"; B b1 (1,2); B b2 (98,99); A& ar = b2; b2. print (); ar = b1; b2. print (); B (98,99) B (1,99) Arv i C++ : Fallgropar Arv. Polymorfism. 27/37 Object slicing Lösning med virtuell operator= struct A virtual A& operator =( const A& a) assign (a); return * this ; protected : void assign ( const A& a); // assign As members ; struct B : A virtual B& operator =( const A& a) if( const B* b = dynamic_cast < const B* >(&a)) assign (*b); else // handle bad assignment to B return * this ; protected : void assign ( const B& b) A:: assign (b); // assign Bs members Arv i C++ : Fallgropar Arv. Polymorfism. 28/37 Multipelt arv En klass kan ärva från flera basklasser Jfr. implementera flera interface i Java The diamond problem Hur många MotorVehicle ingår i en MiniBus? Multipelt arv Hur många MotorVehicle ingår i en MiniBus? class MotorVehicle... class Bus : MotorVehicle... class Car : MotorVehicle... class MiniBus : Bus, Car... MotorVehicle MotorVehicle Bus Car Bus MiniBus Car MiniBus Multipelt arv Arv. Polymorfism. 29/37 Multipelt arv Arv. Polymorfism. 30/37
6 Multipelt arv The diamond problem Multipelt arv Virtuellt arv Virtuellt arv : Subklasser delar instans av basklassen. (Basklassen tas bara med en gång) Den gemensamma basklassen tas med flera gånger Flera upplagor av medlemsvariabler Medlemsfunktioner måste användas som Basklass::funktion() för att undvika tvetydighet om inte virtuellt arv används class MotorVehicle... class Bus : virtual MotorVehicle... class Car : virtual MotorVehicle... class MiniBus : Bus, Car... MotorVehicle Bus Car MiniBus Multipelt arv Arv. Polymorfism. 31/37 Multipelt arv Arv. Polymorfism. 32/37 Parametriserade typer och funktioner Templates (mallar) Klassmallar Funktionsmallar Kompilatorn skapar nya typer vid instansiering Detta är en kort introduktion, mer om mallar kommer i en senare föreläsning. Parametriserade typer och funktioner Exempel: parametriserad Vektor template <typename T> class Vektor Vektor ( int l = 10) :p new T[l], antl ~ Vektor () delete [] p; int lngd () const return ant ; T& operator []( int i) return p[i]; T* p; int ant; Användning: Vektor <int > iv; Vektor <Foo > fv; int i = iv [4]; Foo& F = fv [2]; Något om statisk polymorfism : Parametriserade klasser Arv. Polymorfism. 33/37 Från tidigare: Användning av abstrakta klassen Container Något om statisk polymorfism : Parametriserade klasser Arv. Polymorfism. 34/37 Parametriserade typer och funktioner Exempel: parametriserade funktioner void print ( Container & c) for (int i =0; i!=c. lngd (); ++i) cout << c[i] << " " ; cout << endl ; void test_container () Vektor v (10); template <typename T> void print (T& t) for (int i=0; i!= t. lngd (); ++i) cout << t[i] << " "; cout << endl ; Användning: Vektor <int > iv; Vektor <Foo > fv; print (iv ); print (fv ); Kompilatorn skapar (instansierar) funktionerna print(vektor<int>) och print(vektor<foo>). Något om statisk polymorfism : Parametriserade funktioner Arv. Polymorfism. 35/37 Något om statisk polymorfism : Parametriserade funktioner Arv. Polymorfism. 36/37
7 Vi har talat om Virtuella fuktioner Arv i C++ Nästa föreläsning: Vi kommer att introducera exceptions och studera standard-klasserna för I/O Något om statisk polymorfism : Parametriserade funktioner Arv. Polymorfism. 37/37
Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv utan polymorfism
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Typomvandling 2 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42
Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)
Innehåll EDAF30 Programmering i C++ 8. Typomvandlingar. Klasser: operatorer och polymorfism. 1 Typomvandlingar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Klasser Operatorer 3 Polymorfism och arv
Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33
Programmering i C++ EDA623 Objektorienterad programutveckling EDA623 (Föreläsning 5) HT 2013 1 / 33 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Introduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv
Programsystem konstruktion med C++ (2D1387) övning 2 klasser och arv Ronnie Johansson rjo@nadakthse grupp 4 2003 09 25 Innehåll Klasskonstruktorer och initieringslistor Klassdestruktorer Åtkomstkontroll
Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim
Objektorienterad programmering Föreläsning 12 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Introduktion till Arv Superklasser och Subklasser Dolda medlemmar (new och base) Statisk
Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar
Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop
Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 2 Karl Palmskog palmskog@kth.se september 2010 Specalfunktioner i klasser Konstruktorer i konstruktorerna för en klass initieras klassens medlemmar initialvärden
Dynamisk bindning och polymorfism
Dynamisk bindning och polymorfism I C++ är pekare till basklasser polymorfa, dvs de kan peka på objekt av en subklass typ Vid statisk bindning sker all bindning vid kompileringen -> Vid ett metodanrop
Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.
Innehåll EDAF30 Programmering i C++ Generisk programmering med templates (mallar) Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Funktionsmalllar 2 Generisk programmering med templates (mallar) 2/1 Generisk
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Klas Arvidsson Institutionen för datavetenskap 1 / 33 UML UML är ett grafiskt språk som (bland mycket annat) används för
TDDC76 Programmering och datastrukturer
TDDC76 Programmering och datastrukturer Arv, polymorfi och objektorienterad programmering Oskar Holmström Institutionen för datavetenskap Agenda 1 Pekare 2 Arv 3 Statisk bindning 4 Polymorfi 5 Destruktorer
Arv bakgrund (kap. 9)
Föreläsning 4 Arv bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Kanin pälsfärg slaktvikt smutsa_ned() Katt pälsfärg smutsa_ned() klös_soffa() Arv bakgrund Många klasser delar på egenskaper
Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning: Klasser, åtkomst Medlemmar, medlemsfunktioner, inline Slide 1 Konstruktorer Destruktorer
Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder
Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i
Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser
Innehåll EDAF30 Programmering i C++ Resurshantering. Objektorientering. Klasser. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typdeklarationer och typomvandling 2 Resurshantering Stack-allokering Heap-allokering:
Skapa, kopiera och destruera klassobjekt
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för Programvara och system Tommy Olsson 2013-08-12 Skapa, kopiera och destruera klassobjekt Detta dokument tar upp viktiga, grundläggande
Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv
Kapitel 2 Klasser Medlemmar Arv, medlemmar och arv Klasser, åtkomst Medlemmar, medlemsfunktioner, inline och destruktorer this-pekaren Arv, åtkomst Multipelt arv, virtuell basklass Konstanta funktioner
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6 Pontus Haglund och Gustav L'estrade anpassade slides av Klas Arvidsson Department of Computer and information science 1 Arv (Specialisering)
OOP Objekt-orienterad programmering
OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym
Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner
Innehåll EDAF30 Programmering i C++ 10. Generisk programmering. Mallar och funktionsobjekt Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Funktionsobjekt Mallar med variabelt antal argument 10. Generisk
5 Arv och dynamisk bindning FIGUR
5 Arv och dynamisk bindning Arv är en av hörnstenarna i objektorienterad programmering. Med hjälp av arv kan man skapa underhållsvänliga och förändringsvänliga system. Att hitta arvsrelationer är en viktig
Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)
Innehåll EDAF30 Programmering i C++ 7. Felhantering. Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Felhantering Exceptions Exceptions och resurshantering Specifikation av exceptionella händelser Static
Klasshierarkier - repetition
Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet
Arv. Objektorienterad och komponentbaserad programmering
Arv Objektorienterad och komponentbaserad programmering Arv Regel nr 1: Ett objektorienterat språk ska tillåta inkapsling av data Regel nr 2: Ett objektorienterat språk ska tillåta arv Regel nr 3: Ett
Innehåll. 1 volatile. 2 Kuriositeter. 3 Klasser och arv. 4 Råd och tumregler. 5 Mer om standard-containers. Trigraphs
Innehåll EDAF30 Programmering i C++ 12., kommentarer och råd 1 volatile 2 Kuriositeter Sven Gestegård Robertz Datavetenskap, LTH 2017 3 Klasser och arv Mer polymorfism 4 Råd och tumregler 5 Mer om standard-containers
Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering
Innehåll EDAF30 Programmering i C++ 6. Resurshantering Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Smarta pekare 3 Klasser, resurshantering
Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning: Synlighet Överlagring av operatorer Slide 1 Vänner till klasser och funktioner
allokeras på stacken dynamiskt new delete
Minneshantering Lokala objekt allokeras på stacken och har kort livslängd Objekt med längre livslängd måste allokeras dynamiskt på heapen (free store) Dynamisk allokering görs med new och delete Statiska
Konstruktion av klasser med klasser
Konstruktion av klasser med klasser Klasser kan byggas på redan denierade klasser genom att klassobjekt används som dataattribut när en ny klass beskrivs. Exempel: Klassen PairOfDice har två attribut attribut
Programsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 2 Daniel Aarno bishop@kth.se Översikt övning 2 Klasser Konstruktorer Destruktorer Arv Virtuella funktioner Abstrakta klasser Operatorer Templateklasser Templatefunktioner
Innehåll. 1 Funktionsmallar. 2 Pekare och konstanter. 3 Typomvandlingar. struct Name { string s; //... };
Innehåll EDAF30 Programmering i C++ 6. Typer, pekare och konstanter. 1 Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Pekare och konstanter Operatorn -> Konstanter 3 Typomvandlingar 6. Typer, pekare
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Minneshantering. Minneshantering. Minneshantering. Undvik pekare
Minneshantering Lokala objekt allokeras på stacken och har kort livslängd Objekt med längre livslängd måste allokeras dynamiskt på heapen (free store) Dynamisk allokering görs med new och delete Statiska
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på både fram- och
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
Synlighet. Namespace Scope-operatorn Klasser Vänner
Synlighet Namespace Scope-operatorn Klasser Vänner Synlighet Ett problem med moduler i C är att alla variabel- och funktionsnamn ligger globalt synliga. C++ botar detta genom att införa det mycket användbara
DAT043 - Föreläsning 7
DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar
Problemet. Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism)
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 Fordon Bil(Person & owner) : Fordon(owner) } // Den
Polymorfi. Objektorienterad och komponentbaserad programmering
Polymorfi Objektorienterad och komponentbaserad programmering Polymorfi, mångtydighet Polymorfi innebär att en viss konstruktion kan exekveras på olika sätt Överlagring av metoder ger ett polymorft beteende
2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning
2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten
Objektorientering - Arv och polymorfi
Objektorientering - Arv och polymorfi För kurserna TDDC76 och TDIU20 Klas Arvidsson Institutionen för datavetenskap 1 / 38 UML UML är ett grafiskt språk som (bland mycket annat) används för att beskriva
OOP Objekt-orienterad programmering
OOP F10:1 OOP Objekt-orienterad programmering Föreläsning 10 Mer om arv och klasshierarkier Interface Hierarkier - många nivåer OOP F10:2 Djur Rovdjur Hovdjur Fåglar Fiskar Björn Kattdjur Ko Lamm Hjort
Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26
Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623
TDIU01 Programmering i C++
TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programvara och system Tommy Olsson 2014-02-05 Lektionsplanering.................................. 2 Lektion 1..........................................
Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet
Kapitel 3 Klassanvändning Operatorer Pekare Kapitel 3 - Klassanvändning, operatorer och pekare Vänner till klasser och funktioner Virtuella funktioner och polymorfi Abstrakta basklasser och strikt virtuella
KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar
KLASSER Inkapsling Abstrakt datatyp Public och private Klassmedlemmar Datamedlemmar Funktionsmedlemmar Initiering av objekt Konstruktor Ta del av objektets tillstånd Förändra objektets tillstånd Avinitiera
Tentamen EDAF30 Programmering i C++
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen EDAF30 Programmering i C++ 2016 01 11, 8.00 13.00 Hjälpmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna.
UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.
Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language
Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering
Övriga byggstenar Beroenden Pekare till funktioner Övriga byggstenar Beroenden er Definitioners synlighet Funktionspekare Icke-medlemsfunktioner Medlemsfunktioner 2D1387 Programsystemkonstruktion med C++
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut
Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering
Innehåll EDAF30 Programmering i C++ 7. Resurshantering, Felhantering Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Felhantering Exceptions
Tillämpad programmering
Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout
Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser
Föreläsning 1 Innehåll Introduktion till objektorientering OOP (objektorienterad programmering) Objekt, instanser, klasser C++ OO i C++ Standardbibliotek Utökningar från C (syntaktiskt socker) Introduktion
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2008-08-14 Tid: 08-12 Plats: PC6-PC7 i E-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna varje
Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).
3 Arv och gränssnitt 3.1 Vad innebär arv? Ett objektorienterat språk bygger på att programmeraren ges möjligheten att modellera verkligheten med hjälp av objekt. Objekt låter sig definieras i form av klasser.
Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser
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) Den nya klassen behåller alla egenskaper som den gamla
TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 2 Vad krävs? Hur fungerar det? Hur får en subtyp fungera egentligen? Krav på hierarkier 1 3 Får subtypen LinkedList sakna metoder från
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:
Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan
Vad är en klass? Övnin 2 Daens ämne är klasser och hur de hanteras. Vi kommer att bya upp ett exempel stevis och illustrera en hel del möjliheter, men också problem och saker man bör vara vaksam på. ffl
Föreläsning 13 Innehåll
Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?
Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016
Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016 Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass.
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:
TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Arv Polymorf UML (klassdiagram) 1 Arv Möt tre studenter
Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier
Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv
Klasshierarkier. Klasser kan byggas på redan definierade klasser
Klasshierarkier Klasser kan byggas på redan definierade klasser på två sätt: Klassobjekt används som dataattribut när en ny klass beskrivs. Exempel: klassen partikel består av ett antal attribut av typen
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel
Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016
Subtyping, co- och contra-variance Objekt-orienterad programmering och design Alex Gerdes, 2016 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden:
Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.
Arv och polymorfi Arv och polymorfi är två centrala begrepp i objektorientering. Arvsmekanismen innebär att vi kan skapa nya klasser utifrån redan existerande klasser. Man gör detta med hjälp av nyckelordet
Kopiering av objekt i Java
1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom
Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).
Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }
Föreläsning 3 Arv Kategorisering Stora program leder till många klasser (tänk liknelsen med en affär med många varor). Att dela in saker i kategorier är en vanlig strategi för att hantera stora komplexa
Tentamen i TDP004 Objektorienterad Programmering Teoretisk del
Tentamen i TDP004 Objektorienterad Programmering Teoretisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär
Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29
Programmering i C++ EDA623 Mallar EDA623 (Föreläsning 12) HT 2013 1 / 29 Mallar Innehåll Klassmallar Funktionsmallar EDA623 (Föreläsning 12) HT 2013 2 / 29 Containerklasserna vector, deque och list utgör
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Klasser - speciella medlemsfunktioner Eric Elfving Institutionen för datavetenskap En klass ansvarar ofta för en resurs. Ibland är resursen så enkel som en datamedlem
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde
Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande
F8: Typkonvertering i C++
Institutionen för datavetenskap Umeå Universitet F8: Typkonvertering i C++ Objektorienterad programmering för ingenjörer, VT04 Innehåll Implicit konvertering Konverteringskonstruktor Konverteringsoperator
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 Pontus Haglund Department of Computer and information science 1 Vad gjorde vi förra gången? Felhantering Operatorer Typkonvertering 2 Grundläggande
Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Klassen calculator Signatur Calculator
Tillämpad programmering
Tillämpad programmering C++ polymorfism overload, cast, ärvning, template Johan Montelius 1 polymorfism Att se och använda en variabel, ett objekt eller en funktion i olika former overload olika versioner
Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 01/02 1 Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning: Klasser, åtkomst Medlemmar, medlemsfunktioner, inline Slide 1 Konstruktorer och destruktorer
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Överlagring (overloading) Arv
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag
Kapitel 6 - Undantag
Kapitel 6 Undantag Kapitel 6 - Undantag Undantag (exceptions), returvärden throw, try och catch new, bad_alloc, nothrow Undantag och std::auto_ptr throw() i funktionsdeklaration try som funktionskropp
Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 Operatoröverlagring. 5 In- och utmatning. 6 namnrymder (namespace)
Innehåll EDAF30 Programmering i C++ 2. Användardefinierade typer Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Deklarationer, scope och livstid 2 Användardefinierade typer 3 Standardbibliotekets alternativ
DD2387 Programsystemkonstruktion med C++ Tentamen 2
DD2387 Programsystemkonstruktion med C++ Tentamen 2 Måndagen den 10 november 2014, 08:00-12:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor.
Föreläsningsmaterial (Arv) Skrivet av Andreas Lund
Föreläsningsmaterial (Arv) Skrivet av Andreas Lund Inledning Arv är ett begrepp som är tätt förknippat med objektorientering. Principerna bakom arv är grundade i högst vardagliga relationer mellan olika