Presentation laddar. Vänta.

Presentation laddar. Vänta.

Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.

Liknande presentationer


En presentation över ämnet: "Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser."— Presentationens avskrift:

1 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

2 Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Klasser är användardefinierade datatyper En abstraktion av något man använder Logiskt sammanhängande “En struct innehållande funktioner, inte bara data” Stack _stack push pop isEmpty Lampa tänd släck lyser

3 Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT En klass “i verkligheten” Är en samling objekt med likadana egenskaper, likadant beteende

4 Sid period2CD5250 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 Sid period2CD5250 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 Sid period2CD5250 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 Sid period2CD5250 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 –OBS! Klasser och deras interaktion behöver dokumenteras

8 Sid period2CD5250 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 Sid period2CD5250 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  Vanligen alla data, en fråga om stil  protected – för Arvingarna, mer om det senare

10 Sid period2CD5250 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 Sid period2CD5250 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 Sid period2CD5250 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 */ } För att få snabbhet trots många många anrop i OOP

13 Sid period2CD5250 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 Se detta som ett funktions- namn så blir det lättare! Men – OBS - ”operator” skrivs ej då den anropas

14 Sid period2CD5250 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

15 Sid period2CD5250 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

16 Sid period2CD5250 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

17 Sid period2CD5250 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”.


Ladda ner ppt "Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser."

Liknande presentationer


Google-annonser