Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avCamilla Sandström
1
Objektbaserad programmering sid. 1 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta) Iden med klasser
2
Objektbaserad programmering sid. 2 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klasser är användardefinierade datatyper En abstraktion av något man använder Logiskt sammanhängande Stack _stack push pop isEmpty Lampa tänd släck lyser
3
Objektbaserad programmering sid. 3 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT En klass “i verkligheten” Är en samling objekt med likadana egenskaper, likadant beteende
4
Objektbaserad programmering sid. 4 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT En klass i ett programspråk-C++ är egentligen en “form att gjuta objekt i”. Klassen är en beskrivning av hur objekten kan se ut (attribut/egenskaper-medlemsdata) och bete sej/vad man kan göra med dom (metoder/operationer-medlemsfunktioner) storlek färg vikt hastighet tillstånd innehåll... skapa ta bort måla flytta starta stanna...
5
Objektbaserad programmering sid. 5 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Vi väljer vilka egenskaper och vilket beteende vi vill belysa class Car { public : start_engine(); shift_gear(); private : int current_gear; bool engine_runs; } class Car { public : void owner(person & p); bool taxIsPaid (); private : bool taxPaid; person _owner; }
6
Objektbaserad programmering sid. 6 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klassen “finns inte” Det är objekten som “finns” Undantag: klassdata och klassfunktioner static Klasserna är verktyg för att göra objekt
7
Objektbaserad programmering sid. 7 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Bra med klasser/objekt informationsdöljande (information hiding) – mitt och ditt, kontroll, bemästra komplexitet –lokalitet, lätt hålla ihop Snitt mot omvärlden (interface) Bibliotek, tillverkare och användare –Klasser och deras interaktion behöver dokumenteras
8
Objektbaserad programmering sid. 8 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klassens beståndsdelar member data – jfr (typedef) struct Val av sammansättning (aggregation): “by value” eller “by reference” pekare, utbytbar, kan vara 0 referens, måste kopplas till objekt, kan ej ändras sen metoder (operationer) - member functions
9
Objektbaserad programmering sid. 9 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Access specifiers public – snittet mot användaren private – interna hjälprutiner och data som användaren inte ska komma åt protected – för Arvingarna, mer om det senare
10
Objektbaserad programmering sid. 10 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Medlemsåtkomst “klassnivå” :: “objektnivå” i statiskt allokerat objekt. i dynamiskt allokerat objekt, via pekare -> “Forward-deklaration” class MinKlass; // bra till vad?
11
Objektbaserad programmering sid. 11 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Implementation av klass och objekt MinKlass görSi görSå data1 data2 class MinKlass { public: void görSi() {...} void görSå() {...} private: int data1,data2; } MinKlass mittobj1, mittobj2; Kod för medlems- funktionerna Data för mittobj1 Data för mittobj2
12
Objektbaserad programmering sid. 12 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT inline member functions class MyClass { doThis(xxx) { /* kod i class definition blir automatiskt inline*/ } } MyClass ::doThat { /* inte inline */ } inline MyClass ::foo { /* givetvis inline */ }
13
Objektbaserad programmering sid. 13 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT “Speciella” medlemsfunktioner Konstruktor MinKlass(xxx) destruktor ~MinKlass() operatorer t.ex. bool operator==(const MinKlass&) Gemensamt för alla objekt: Skapa Ta bort
14
Objektbaserad programmering sid. 14 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klassvariabler klass SparKonto static raenta 8% behallning objekt (mittSparKonto) static raenta behallning 800 static raenta behallning 850 objekt (dittSparKonto) kan användas även om inga objekt finns kan döljas i klassen med private, säkrare än globala objekt initeras lämpligen i klassnamn.c om det behövs static const int kan initieras i klassdefinition
15
Objektbaserad programmering sid. 15 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klassmetoder används för att manipulera klassdata kan användas även om inga objekt finns (kompileringsfel om man försöker manipulera objektdata) klass SparKonto static raenta 8% behallning aendraRaenta(nyRaenta)
16
Objektbaserad programmering sid. 16 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klass inuti klass (inte klass mot klass...) class List class ListNode ett listobjekt information hiding! Man kan också ha en klass inuti en funktion, “local class”.
17
Objektbaserad programmering sid. 17 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Konstanta objekt const MinKlass mittobj(xxx); får inte förändras när de väl skapats. mittobj.strul(); // Ändringsförsök?? Hur håller kompilatorn/ programmeraren reda på vad medlemsfunktionerna gör?
18
Objektbaserad programmering sid. 18 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Konstanta objekt forts class MinKlass { entyp aendra(xxx); annantyp kolla() const; private: // diverse data } MinKlass::kolla() const { // Kompileringsfel om man försöker ändra i klassdata! }... const MinKlass a(xxx); a.aendra(ppp); // Kompileringsfel!
19
Objektbaserad programmering sid. 19 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Konstanta objekt forts class MinKlass { entyp aendra(xxx); annantyp kolla() const; private: osaeker *data; } class MinVektorKlass { mutable int index; // Hjälpvariabel som får ändras utan att objektets egentliga tillstånd påverkas search(xtype key, int &foundPos) const { foundPos = 0; for (index=0; index<max; index++) if (vec[index] = = key) {foundPos = index; return;} }
20
Objektbaserad programmering sid. 20 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT this-pekaren return *this kedja ihop funktionsanrop if (this != &that) spara exekveringstid vid exv. “självtilldelning” a = b eller objekt a objekt b this objekt a = = objekt b this ? screen.clear().moveCursor(2,2).setCursor(‘#’).display();
21
Objektbaserad programmering sid. 21 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klass-scope och namnupplösning Access till klassmedlem: “Klassnamn::medlemsnamn” måste användas i kod “utanför klassen” “inuti klassen” är inuti klassdefinitionen class xxx { här }; inuti medlemsdefinitionerna xxx::func(ppp) { /* kod */ } gäller även i definition av medlemsdata
22
Objektbaserad programmering sid. 22 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klass-scope och namnupplösning forts Ordningen spelar roll, saker måste deklareras (men ej definieras) innan de används Undantag: namn använda i inline-funktions-kod namn i default-argument
23
Objektbaserad programmering sid. 23 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Klass-scope och namnupplösning forts En sak med ett visst namn inuti en klass döljer saker med samma namn utanför klassen Man kan komma runt detta med scope- operatorn, exempel: ::objektX pekar ut globalt objektX så man kommer åt det även inuti en klass med ett eget objektX
24
Objektbaserad programmering sid. 24 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Kort om klassmallar template class MyClass { } analogt funktionsmallar! (det kommer mera...)
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.