TDDC76 Programmering och datastrukturer

Storlek: px
Starta visningen från sidan:

Download "TDDC76 Programmering och datastrukturer"

Transkript

1 TDDC76 Programmering och datastrukturer Arv, polymorfi och objektorienterad programmering Oskar Holmström Institutionen för datavetenskap

2 Agenda 1 Pekare 2 Arv 3 Statisk bindning 4 Polymorfi 5 Destruktorer 6 Synlighet 7 UML 8 Arv - ett stort exempel

3 Dagens föreläsning Vad ska vi göra idag? Klasser var bra för att skapa en representation av objekt. Hur skapar vi en representation av en grupp objekt som hänger ihop? 3

4 Dagens föreläsning Vad ska vi göra idag? Klasser var bra för att skapa en representation av objekt. Hur skapar vi en representation av en grupp objekt som hänger ihop? Med arv och polymorfi två av de starkaste verktygen för att göra vårt liv lättare. 4

5 Pekare Pekar oss mot rätt minnesadress 5

6 Pekare Pekar oss mot rätt minnesadress Vi har pratat om Variabler innehållet i lådan Referenser tillgång till lådan 6

7 Pekare Pekar oss mot rätt minnesadress Vi har pratat om Variabler innehållet i lådan Referenser tillgång till lådan Nu, pekare en variabel som lagrar en adress 7

8 Pekare Pekar oss mot rätt minnesadress En pekare är en variabel som innehåller en adress Adressen kan leda till en variabel Tänk adressen till ett hus Får du adressen kan du hitta till huset Ändrar du något på huset kommer ändringen vara där när jag också besöker adressen 8

9 Pekare Vad händer i minnet? Datorn har ett internminne (RAM random access memory) Ordnad sekvens bitar Kan normalt adressera en byte (8 bitar) i tage En processor arbetar normalt med ord (idag ofta 64 bitar) i taget En pekar-adress gör att vi kan komma åt platser i internminnet (Ex. på adress 0x a0) 9

10 Pekare Vad händer i minnet? En variabel har alltid namn, datatyp och värde Kompilatorn: Översätter namnet till en adress Bestämmer mängden minne (i byte) som behövs utifrån datatypen Tolkar innehållet, värdet, enligt vald datatyp 10

11 Pekare Måste en pekare peka någonstans? Variabler får alltid ett värde har pekarvariabler det också? Det måste alltid finnas något i variabeln, fast pekaren kan peka till ingenting När pekaren inte pekar någonstans har den ett null-värde Kallas en null-pekare Null-pekare räknas som false i ett villkor 11

12 Pekare Hur deklarerar vi en pekar-variabel? Pekarvariabler deklareras med en asterisk (*) som datatyp Förutom (*) måste vi ange vilken datatyp som finns på adressen! int * p; p: *? 12

13 Pekare Hur deklarerar vi en pekar-variabel? Pekarvariabler deklareras med en asterisk (*) som datatyp Förutom (*) måste vi ange vilken datatyp som finns på adressen! int * pnullptr; //null_ptr p: * 13

14 Pekare Hur deklarerar vi en pekar-variabel? Pekarvariabler deklareras med en asterisk (*) som datatyp Förutom (*) måste vi ange vilken datatyp som finns på adressen! int x3421; int * p&x; p: * int x:

15 Pekare Pekar-operatorer Avreferens (innehållet av pekare, gå till ): *p int x3421; int * p&x; *p = 10; int x: 3421 p: * 15

16 Pekare Pekar-operatorer Avreferens (innehållet av pekare, gå till ): *p int x3421; int * p&x; *p = 10; int x: 10 p: * 16

17 Pekare Pekar-operatorer Adress av: & Ger adressen i minnet till en variabel int x3421; int * p&x; int x: 3421 p: * 17

18 Pekare Pekar-operatorer Säg att pekaren pekar på en klass, då vill vi komma åt dess medlemmar Avreferens och välj medlem: (*p).m eller p->m string str Hej ; string * p&str; cout << p->length() << endl; cout << (*p).length() << endl; p: * string str: Hej 18

19 Pekare Pekar-operatorer Dynamiskt allokera (låna) minne: p = new t eller a = new t[i] Avallokering: delete p eller delete a[] string * p = new string; *p = Hej ; delete p; p: * str: string 19

20 Pekare Pekar-operatorer Dynamiskt allokera (låna) minne: p = new t eller a = new t[i] Avallokering: delete p eller delete a[] string * p = new string; *p = Hej ; delete p; p: * string str: Hej 20

21 Pekare Pekar-operatorer Dynamiskt allokera (låna) minne: p = new t eller a = new t[i] Avallokering: delete p eller delete a[] string * p = new string; *p = Hej ; delete p; 21

22 Pekare this en pekare till instansen vi är i Vi har skapat en klass och en instans (objekt) av den klassen I en medlemsfunktion vill vi returnera en kopia av vår instans A_class A_class::copy_myself() return *this; this är en pekare till instansen som vi ropat copy_myself på OBS! Lätt att överanvända, så använd sparsamt. 22

23 Pekare Mer nästa gång Detta var en kort introduktion till vad pekare är, hur vi skapar dem och vilka operationer vi kan utföra på dem Nästa föreläsning kommer vi göra ett djupdyk i pekare och speciellt hantering av minne 23

24 Arv Varför är arv användbart? Möt tre studenter: Gymnasiestudenten Gabriella Högskolestudenten Harry Impulsive Ivar Alla tre har vissa gemensamma egenskaper (både attribut och funktioner), men även olikheter! 24

25 Arv Varför är arv användbart? Möt tre studenter: Gymnasiestudenten Gabriella Högskolestudenten Harry Impulsive Ivar Alla tre har vissa gemensamma egenskaper (både attribut och funktioner), men även olikheter! Har ett skåp Gillar att lösa problem med penna och papper 25

26 Arv Varför är arv användbart? Möt tre studenter: Gymnasiestudenten Gabriella Högskolestudenten Harry Impulsive Ivar Alla tre har vissa gemensamma egenskaper (både attribut och funktioner), men även olikheter! Har ett antal avklarade HP Gillar att lösa problem med en väl skriven programmeringsalgoritm 26

27 Arv Varför är arv användbart? Möt tre studenter: Gymnasiestudenten Gabriella Högskolestudenten Harry Impulsive Ivar Alla tre har vissa gemensamma egenskaper (både attribut och funktioner), men även olikheter! Gillar huvudbonader och att gå ut på rast Vägrar att lösa problem 27

28 Arv Varför är arv användbart? Hur representerar vi de tre studenterna med klasser? Alternativ 1: En monsterklass! class student public: string name; int type; Int age; 28

29 Arv Varför är arv användbart? Hur representerar vi de tre studenterna med klasser? Alternativ 1: En monsterklass! class student public: stringgenerell name; del int type; Int age; Specifik del Specifik del Specifik del 29

30 Arv Varför är arv användbart? Hur representerar vi de tre studenterna med klasser? Alternativ 1: En monsterklass! class student public: string name; int type; Int age; Generell del Specifik del void Student::study() if (type == 1) cout << Lös med algoritm! ; Specifik del Specifik del else if (type == 2) cout << Lös med pennna och papper ; else if( type == 3) cout << Jag vägrar!! ; 30

31 Arv Varför är arv användbart? Hur representerar vi de tre studenterna med klasser? Alternativ 1: En monsterklass! class student public: string name; int type; Int age; Generell del Specifik del Specifik del Specifik del Ger fullständig uppräkning Svårt att underhålla och utöka Skulle inte vårt liv bli lättare efter FÖ1? Detta är för dåligt 31

32 Arv Varför är arv användbart? Hur representerar vi de tre studenterna med klasser? Alternativ 2: Separata klasser class High_Shool_Student public: string name; int age; class College_Student public: string name; int age; class Young_Student public: string name; int age; 32

33 Arv Varför är arv användbart? Hur representerar vi de tre studenterna med klasser? Alternativ 2: Separata klasser class High_Shool_Student class College_Student class Young_Student public: Generell del public: Generell del public: Generell del string name; string name; string name; int age; int age; int age; Specifik del Specifik del Specifik del 33

34 Arv Varför är arv användbart? Hur representerar vi de tre studenterna med klasser? Alternativ 2: Separata klasser class High_Shool_Student public: Generell del public: Generell del public: Generell del string name; string name; string name; int age; int age; int age; class College_Student class Young_Student Specifik del Specifik del Specifik del Nu ansvarar klassen själv för funktionalitet Blir massa kodduplicering! Lättare att utöka Svårt att underhålla 34

35 Arv Varför är arv användbart? Alternativ 3: Arv från gemensam basklass! class student public: string name; int age; class High_School_Student : public Student class College_Student :public Student class Young_Student :public Student 35

36 Arv Varför är arv användbart? Alternativ 3: Arv från gemensam basklass! class student string name; int Generell age; del class High_School_Student : public Student class College_Student :public Student class Young_Student :public Student Specifik del Specifik del Specifik del 36

37 Arv Varför är arv användbart? Alternativ 3: Arv från gemensam basklass! class student string name; int Generell age; del Vi har löst detta objektorienterat och med en klasshierarki Objekt av subklasserna har nu både den generella student-delen och den specifika delen! class High_School_Student : public Student class College_Student :public Student class Young_Student :public Student Specifik del Specifik del Specifik del 37

38 Arv Varför är arv användbart? Arv är bra för att det är lätt att utöka med ny funktionalitet och klasser Det är lätt att underhålla (Vi behöver bara ändra i de klasser som berörs) Vi kan skapa representationer av större saker än ett enskilt objekt 38

39 Arv Basklassen och härledda klasser Härledda klasser ärver från en basklass Det som är gemensamt ska hamna i basklassen Det som är specifikt för en klass hamnar i den härledda klassen Den som ärver får det som basklassen har När en härledd klass skapas så skapas det alltid tillsammans med basklassens delar Härledd klass Basklass 39

40 Arv student.h Hur skapar vi och använder basklasser och härledda klasser? class Student public: ; Student(string n, int a) : namen, agea string name; int age; void study() cout << Studerar << endl; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() cout << Jag vägrar!! << endl; main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; st = y_st; //Ok, ger slicing Student & st2 = y_st; //Ok, ger statisk bindning Student * st3 = &y_st; //Ok, ger statisk bindning Young_student y_st2 = st; //Fungerar ej! return 0; 40

41 Slicing En kort avstickare main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; st = y_st; //Ok, ger slicing Härledd klass Basklass return 0; 41

42 Slicing En kort avstickare main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; st = y_st; //Ok, ger slicing Härledd klass Basklass return 0; 42

43 Slicing En kort avstickare main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; st = y_st; //Ok, ger slicing Basklass Jobb well done! return 0; 43

44 Arv student.h Hur skapar vi och använder basklasser och härledda klasser? class Student public: ; Student(string n, int a) : namen, agea string name; int age; void study() cout << Studerar << endl; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() cout << Jag vägrar << endl; main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; st.study(); y_st.study(); return 0; 44

45 Arv student.h Hur skapar vi och använder basklasser och härledda klasser? class Student public: ; Student(string n, int a) : namen, agea string name; int age; void study() cout << Studerar << endl; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() cout << Jag vägrar << endl; main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; Student * curr_st &st; curr_st.study(); curr_st = &st; curr_st.study(); return 0; 45

46 Statisk bindning You get what you see I C++ används statisk bindning om inget annat ges Innebär att datatypen som anges i programkoden avgör vilken funktion som anropas int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; st.study(); y_st.study(); int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; Student * curr_st &st; curr_st.study(); curr_st = &st; curr_st.study(); Statisk bindning i båda fallen Medlemsfunktionen study anropas för den deklarerade datatypen return 0; return 0; 46

47 Statisk bindning You get what you see Varför vill vi komma runt detta? Är ju bara att deklarera rätt datatyp 47

48 Statisk bindning You get what you see Varför vill vi komma runt detta? Är ju bara att deklarera rätt datatyp int main() Young_Student y_st Oskar, 7, true; void student_info(student const & s) cout << Namn: << s.name; student_info(y_st); return 0; cout << Studieteknik: << s.study() << endl; 48

49 Statisk bindning You get what you see Varför vill vi komma runt detta? Är ju bara att deklarera rätt datatyp Skrivs study() för basklassen körs varje gång! int main() Young_Student y_st Oskar, 7, true; void student_info(student const & s) cout << Namn: << s.name; student_info(y_st); return 0; cout << Studieteknik: << s.study() << endl; 49

50 Polymorfi En sak kan vara många saker Vi vill kunna säga åt kompilatorn: Ta reda på mer om vad som egentligen gäller Statisk bindning Vad typen är deklarerad som Dynamisk bindning (som vi vill använda) Vad typen faktiskt pekar till 50

51 Polymorfi En sak kan vara många saker Dynamisk bindning får vi med nyckelordet virtual virtual kan vi deklarera en medlem i en basklass som subklasser kan skriva över I den härledda klassen lägger vi till override för de medlemmar som vi vill överlagra Override kollar i basklassen om funktionen är virtual Sedan används funktionen i härledda klassen istället för den i basklassen 51

52 student.h Polymorfi En sak kan vara många saker class Student public: ; Student(string n, int a) : namen, agea string name; int age; virtual void study() cout << Studerar << endl; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() override cout << Jag vägrar << endl; main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; Student * curr_st &st; curr_st.study(); curr_st = &st; curr_st.study(); return 0; 52

53 student.h Polymorfi En sak kan vara många saker class Student public: ; Student(string n, int a) : namen, agea string name; int age; virtual void study() cout << Studerar << endl; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() override cout << Jag vägrar << endl; main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; Student * curr_st &st; curr_st.study(); curr_st = &st; curr_st.study(); return 0; 53

54 student.h Polymorfi En sak kan vara många saker class Student public: ; Student(string n, int a) : namen, agea string name; int age; virtual void study() cout << Studerar << endl; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() override cout << Jag vägrar << endl; main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; Student * curr_st &st; curr_st.study(); curr_st = &st; curr_st.study(); return 0; 54

55 Polymorfi En sak kan vara många saker Polymorfi = att anta många olika former Ett anrop kan innebära att olika funktioner körs beroende på det objekt som används Varje objekt har ansvar för det den själv ska göra Bland det starkaste verktyget vi kan använda! 55

56 Polymorfi Abstrakta klasser (pure virtual) Lysande att vi kan få två implementationer, av samma funktion, för två olika klasser Det är däremot inte alltid vi vill att basklassen ska ha en implementation det ska kanske inte ens gå att skapa en instans av basklassen! Ta exemplet med Student. Basklassen ska samla de gemensamma delarna för härledda klasserna, fast det ska aldrig gå att bara skapa en Student. Lösning: gör klassen abstrakt 56

57 Polymorfi Abstrakta klasser (pure virtual) student.h class Student public: ; Student(string n, int a) : namen, agea string name; int age; virtual void study() = 0; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() override cout << Jag vägrar << endl; main.cc int main() //Student st Klas, 24; Young_Student y_st Oskar, 7, true; //st.study(); y_st.study(); return 0; 57

58 Polymorfi Abstrakta klasser (pure virtual) student.h class Student public: ; Student(string n, int a) : namen, agea string name; int age; virtual void study() = 0; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: ; Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void study() override cout << Jag vägrar << endl; main.cc int main() Student st Klas, 24; Young_Student y_st Oskar, 7, true; //st.study(); y_st.study(); return 0; KOMPILERAR INTE 58

59 Polymorfi Abstrakta klasser (pure virtual) Pure virtual (= 0) följer alltid syntaxen virtual [returtyp] func_name() = 0; Räcker att en basklass har en funktion som är pure virtual för att klassen ska bli abstrakt. Detta tvingar alla härledda klasser att skapa en implementation av funktionen Det blir som ett avtal för att få ärva 59

60 Polymorfi Interface Om alla funktioner är satta till pure virtual (=0) blir klassen ett interface Ett interface är som att ärva en designspecifikation, eftersom härledda klasser måste implementera alla pure virtual funktioner 60

61 Polymorfi Interface class Playable_Object public: string playstring Spela upp ; void play() = 0; ; class Ipod: public Playable_Object public: void play() override; //Börjar spela musik ; class Video_Game: public Playable_Object public: void play() override; //Börjar spela spelet ; class Flute: public Playable_Object public: void play() override; //Börjar spela instrumentet ; 61

62 Using och delete En kort avstickare Det går att välja och vraka vilka medlemsfunktioner från basklasserna som ska finnas i den härledda klassen. Använda implementationen i basklassen: using [returtyp] Base_Class::func_name(); //Deklareras i härledda klassen Går aldrig att anropa denna funktionen för härledda klassen: [returtyp] func_name() = delete; //Deklareras i härledda klassen 62

63 student.h Polymorfi Att ta reda på den egentliga typen dynamisk typomvandling class Student public: ; Student(string n, int a) : namen, agea string name; int age; void study() cout << Studerar << endl; young_student.h class Young_Student : public Student public: Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void take_break() cout << RAST!!! << endl; void study() cout << Jag vägrar << endl; ; void give_break(student * s) s->take_break(); return 0; OBS! Ej kompletta klasser. 63

64 student.h Polymorfi Att ta reda på den egentliga typen dynamisk typomvandling class Student public: ; Student(string n, int a) : namen, agea string name; int age; void study() cout << Studerar << endl; OBS! Ej kompletta klasser. young_student.h class Young_Student : public Student public: Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void take_break() cout << RAST!!! << endl; void study() cout << Jag vägrar << endl; ; void give_break(student * s) s->take_break(); return 0; KOMPILERAR INTE 64

65 Polymorfi Att ta reda på den egentliga typen dynamisk typomvandling young_student.h class Young_Student : public Student public: Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b bool want_break; void take_break() cout << RAST!!! << endl; void study() cout << Jag vägrar << endl; ; OBS! Ej kompletta klasser. void give_break(student * s) Young_Student y_s dynamic_cast<young_student*>(s) ; if ( y_s!= nullptr) s->take_break(); else cout << No break for you! << endl; return 0; 65

66 Polymorfi Att ta reda på den egentliga typen dynamisk typomvandling dynamic_cast<datatype *>(variable) Returnerar en nullptr om om Datatype skiljer sig från datatypen i variable Returnerar en pekare till variable om datatyperna matchar OBS! Använd dynamic_cast sparsamt polymorfi gör oftast jobbet åt oss 66

67 Destruktorer En speciell medlemsfunktion Förra gången pratade vi om konstruktorer hur vi skapar ett objekt Vi har också destruktorer hur vi tar bort ett objekt Deklaration: ~Student(); Defintion: ~Student() //Här kan det hända grejer 67

68 Destruktorer En speciell medlemsfunktion En destruktor körs när ett objekt går ur scope eller när vi exempelvis utför delete på en pekare class Student public: Student(string n, int a) : namen, agea Student~() int main() Student * st new Young_Student Oskar, 7, true; delete y_st; ; string name; int age; return 0; ; 68

69 Destruktorer En speciell medlemsfunktion En destruktor körs när ett objekt går ur scope eller när vi exempelvis utför delete på en pekare class Student public: Student(string n, int a) : namen, agea Student~() int main() Student * st new Young_Student Oskar, 7, true; delete y_st; Härledd klass Basklass ; string name; int age; return 0; ; 69

70 Destruktorer En speciell medlemsfunktion Den yttre, härledda klassen, måste destrueras först. class Student public: ; Student(string n, int a) : namen, agea Student~() string name; int age; int main() Student * st new Young_Student Oskar, 7, true; delete y_st; return 0; ; Härledd klass Basklass 70

71 Destruktorer En speciell medlemsfunktion Den yttre, härledda klassen, måste destrueras först. Nu kommer Basklassen att destrueras class Student public: Student(string n, int a) : namen, agea Student~() int main() Student * st new Young_Student Oskar, 7, true; delete y_st; Härledd klass ; string name; int age; return 0; ; 71

72 Destruktorer En speciell medlemsfunktion Den yttre, härledda klassen, måste destrueras först. Måste sätta destruktorn i basklassen till virtual class Student public: Student(string n, int a) : namen, agea virtual Student~() int main() Student * st new Young_Student Oskar, 7, true; delete y_st; Härledd klass Basklass ; string name; int age; return 0; ; 72

73 Destruktorer En speciell medlemsfunktion Den yttre, härledda klassen, måste destrueras först. Måste sätta destruktorn i basklassen till virtual class Student public: ; Student(string n, int a) : namen, agea virtual Student~() string name; int age; int main() Student * st new Young_Student Oskar, 7, true; delete y_st; return 0; ; Basklass 73

74 Destruktorer En speciell medlemsfunktion Den yttre, härledda klassen, måste destrueras först. Måste sätta destruktorn i basklassen till virtual class Student public: ; Student(string n, int a) : namen, agea virtual Student~() string name; int age; int main() Student * st new Young_Student Oskar, 7, true; delete y_st; return 0; ; 74

75 Synlighet Public, private och protected I en klass kan vi sätta synlighet på medlemmarna public = möjligt att komma åt utanför klassen Private = går inte att komma åt utanför klassen Hur blir det 75

76 Synlighet Public, private och protected I en klass kan vi sätta synlighet på medlemmarna public = möjligt att komma åt utanför klassen private = går inte att komma åt utanför klassen Hur blir det med arv? Ibland vill vi att härledda klasser ska komma åt medlemmar, fast ingen utanför klass-familjen ska komma åt dem 76

77 Synlighet Public, private och protected student.h class Student public: Student(string n, int a) : namen, agea void study() cout << Studerar << endl; protected: string name; int age; ; young_student.h class Young_Student : public Student public: Young_Student(string n, int a, bool w_b) : Student(n, a), want_breakw_b void study() cout << Jag vägrar!! << endl; private: bool want_break; ; 77

78 Synlighet Public, private och protected i arvet Har du tänkt på varför public behövs vid arv? class Young_Student : public Student Vad händer om vi skriver något annat? public: medlemmar i basklasen behåller deklarerat skydd i härledd klass protected: public medlemmar i basklassen blir protected i härledd klass private: alla medlemmar i basklassen blir private i härledd klass Om inget deklareras väljs private arv standard 78

79 UML Unifiedmodeling language Blir en massa relationer att hålla koll på Vore det inte trevligt om vi enkelt kan skapa en grafisk representation av en klasshierarki? 79

80 UML Unifiedmodeling language UML är ett grafiskt språk som används för att beskriva relationen mellan klasser i objektorienterade system Industristandard idag 80

81 UML Beskrivning av en klass + public - private #protected italic abstrakt Car - model: String - gear: int - owner: String + startengines() + driveforward() + reverse() + putingear(int) Klassnamn Attribut Funktioner 81

82 Arv ett stort exempel Olika metoder att bygga en klasshierarki En klasshierarki är en representation som vi själva skapar Vi behöver gå från idé om en representation till klasser Två vanliga tillvägagångsätt: Top-down Bottom-up 82

83 Arv ett stort exempel Olika metoder att bygga en klasshierarki Hogwarts behöver digitaliseras Det finns studenter, lärare, trollformler och Hogwarts självt Hur modellerar vi detta? (Top-down) 83

84 Arv ett stort exempel Olika metoder att bygga en klasshierarki Wizard - name: String - age: int + sayhello() + castspell() Hogwarts + sortstudent(student) + magiclessons() + presentstudents() 84

85 Arv ett stort exempel Olika metoder att bygga en klasshierarki Wizard - name: String - age: int + sayhello() + castspell() 0..* 1 Hogwarts - students: Student[] - teachers: Teacher[] Student - home: String + practicespell() Teacher - course: String + teachspell() 1 + sortstudent(student) + magiclessons() + presentstudents() 0..* 85

86 Arv ett stort exempel Olika metoder att bygga en klasshierarki Spell - name: String 1 1 Wizard - name: String - age: int - favouritespell: Spell + caston(wizard) + sayhello() + castspell() 0..* 1 Hogwarts - students: Student[] - teachers: Teacher[] Student - home: String + practicespell() Teacher - course: String + teachspell() 1 + sortstudent(student) + magiclessons() + presentstudents() 0..* 86

87 Arv ett stort exempel Olika metoder att bygga en klasshierarki Spell # name: String 1 1 Wizard - name: String - age: int - favouritespell: Spell + caston(wizard) + sayhello() + castspell() 0..* 1 Hogwarts - students: Student[] - teachers: Teacher[] Expelliarmus + caston(wizard) Student - home: String + practicespell() Teacher - course: String + teachspell() 1 + sortstudent(student) + magiclessons() + presentstudents() 0..* 87

88 Arv ett stort exempel Olika metoder att bygga en klasshierarki Spell # name: String 1 1 Wizard - name: String - age: int - favouritespell: Spell + caston(wizard) + sayhello() + castspell() 0..* 1 Hogwarts - students: Student[] - teachers: Teacher[] Expelliarmus + caston(wizard) Lumos + caston(wizard) Student - home: String + practicespell() Teacher - course: String + teachspell() 1 + sortstudent(student) + magiclessons() + presentstudents() 0..* 88

89

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 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

Läs mer

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 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

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 20 Internminne

Läs mer

TDDC76 - Programmering och Datastrukturer

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.

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut

Läs mer

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

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

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

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

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta

Läs mer

TDDC76 - Programmering och Datastrukturer

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

Läs mer

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container { Innehåll EDAF30 Programmering i C++ Arv. Polymorfism. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Kort om dynamisk polymorfism Virtuella funktioner 2 Arv i C++ Konstruktorer och destruktorer Tillgänglighet

Läs mer

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap TDP004 Minne och pekare Eric Elfving Institutionen för datavetenskap 1 / 23 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 23 Internminne - RAM Datorns internminne (RAM,

Läs mer

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 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

Läs mer

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

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

Läs mer

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 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

Läs mer

Objektorientering - Arv och polymorfi

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

Läs mer

Polymorfi. Objektorienterad och komponentbaserad programmering

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

Läs mer

Arv. Objektorienterad och komponentbaserad programmering

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

Läs mer

TDDC76 - Programmering och Datastrukturer

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

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

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

Läs mer

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

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

Läs mer

TDIU20 - Objektorienterad programmering i c++ - föreläsning 6

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)

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

Läs mer

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

Läs mer

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

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

Läs mer

1 Klasser och objektorientering Vad är objektorientering?

1 Klasser och objektorientering Vad är objektorientering? 1 Klasser och objektorientering Vad är objektorientering? Det finns olika synsätt på programmering, dessa olika synsätt kallas för paradigm. De vanligaste paradigmen är det imperativa/proceduriella, det

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

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 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:

Läs mer

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv

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

Läs mer

Dynamisk bindning och polymorfism

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

Läs mer

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

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

Läs mer

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305 Klass Object, instans av klass public/private Klassvariabler och klassmetoder 1 Array och ArrayList Arrayer och ArrayList är till för att innehålla

Läs mer

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

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

Läs mer

Tillämpad programmering

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

Läs mer

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( ) TDDC76 PoD OH Föreläsning C++ 83 Operatoröverlagring endast operatorsymboler definierade i C++ kan överlagras + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]

Läs mer

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 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

Läs mer

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

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

Läs mer

Introduktion till arv

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

Läs mer

TDIU01 Programmering i C++

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

Läs mer

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

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

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

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

Läs mer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

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

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Underprogram - Funktioner Eric Elfving Institutionen för datavetenskap 18 september 2014 Översikt 2/22 Återblick till satsblocken Funktioner - Namngivna satsblock

Läs mer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

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

Läs mer

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/3 2017 Innehåll Abstrakta klasser Klasshierarki och typhierarki Polymorfism och dynamisk bindning Polymorfi-exempel: Schack Klassen Object

Läs mer

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med. Det objektorienterade synsättet A - 1 Objekt A - 2 Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med. De enskilda variablerna i programmet, de s.k. objekten,

Läs mer

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp. Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Att instansiera en klass Objekt I Man instansierar (skapar

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Instansiering Åtkomst Abstrakt datatyp UML Överlagring

Läs mer

Det finns många flaggor till g++,

Det finns många flaggor till g++, C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.

Läs mer

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

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

Läs mer

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

Läs mer

Synlighet. Namespace Scope-operatorn Klasser Vänner

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

Läs mer

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare Vad är en pekare? Varför använder vi pekare? Hur används pekare? Hur deklarerar vi pekare i C? Hur kommer vi åt pekarvärdet? DAVA07/08 JE,MG,MG,PS 2 DAVA07/08 JE,MG,MG,PS Vad är en pekare? En pekare är

Läs mer

OOP Objekt-orienterad programmering

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

Läs mer

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering. KAPITEL 8 Klasser Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering. 169 Hittills: Enkel datatyp: double, int, char Operationer: förutbestämda, t ex +,

Läs mer

Arv bakgrund (kap. 9)

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

Läs mer

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? Ö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

Läs mer

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/4 2014 Innehåll Abstrakta klasser Klasshierarki och typhierarki Polymorfism och dynamisk bindning Polymorfi-exempel: Schack UML-översikt

Läs mer

Classes och Interfaces, Objects och References, Initialization

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

Läs mer

Övning 4. Arv och andra relationer

Övning 4. Arv och andra relationer Högskolan Dalarna Objektorienterad Analys & Konstruktion, 10p 1 Övning 4. Arv och andra relationer Stegvis förfining som programutvecklingsmetodik Det är mycket viktigt att du jobbar stegvis när du utvecklar

Läs mer

Föreläsning 13 Innehåll

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?

Läs mer

5 Arv och dynamisk bindning FIGUR

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

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

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

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder

Läs mer

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 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

Läs mer

Problemet. Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism)

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

Läs mer

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering och metoder Introduktion till objektorienterad programmering Markus Saers markus.saers@lingfil.uu.se orientering Deklarativ programmering Beskriver förutsättningarna för något Prolog Imperativ programmering

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

1 Namnkontroll (NameControl)

1 Namnkontroll (NameControl) 1 Namnkontroll (NameControl) När en ny variabel, ett objekt, en konstant o s v introduceras måste programmeraren namnge denna. Allting identifieras m h a namn. När ett program består av väldigt många komponenter

Läs mer

Programmering B med Visual C++ 2008

Programmering B med Visual C++ 2008 Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Repetition Om tentamen 1 FÖ1-2: Objektorientering

Läs mer

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod

Läs mer

DD2387 Programsystemkonstruktion med C++ Tentamen 2

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.

Läs mer

Generiska konstruktioner. Kursbokens kapitel 13

Generiska konstruktioner. Kursbokens kapitel 13 Generiska konstruktioner Kursbokens kapitel 13 1 Vad är en generisk konstruktion? Generisk står för; allmän eller generell En generisk konstruktion kan användas för olika typer av data Med hjälp av templates

Läs mer

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

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

Läs mer

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 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

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Introduktion HT2 Åtkomst Abstrakt datatyp UML Överlagring

Läs mer

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

Läs mer

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Minnestilldelning (allokering) och frigörande (avallokering) av minne Pekare i C++ Pekare används mycket i C++. De är bra både för att de tillåter dynamisk minnesallokering och för att de är referenser. En pekarvariabel innehåller en adress till ett element, den pekar på

Läs mer

Klasshierarkier - repetition

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

Läs mer

Skapa, kopiera och destruera klassobjekt

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

Läs mer

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

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

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

Objektorienterad Programmering (TDDC77)

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

Läs mer

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras

Läs mer

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga 203-03-9 203-03-9 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Repetition Om tentamen 1 FÖ1-2: Objektorientering

Läs mer

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

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..........................................

Läs mer

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Objektorienterad Programmering (OOP) Murach s: kap 12-16 Objektorienterad Programmering (OOP) Murach s: kap 12-16 2013-01-28 1 Winstrand Development Objektorienterad Programmering Förkortas OOP Objektorientering innebär att man delar in koden i olika block,

Läs mer

Föreläsning 5: Introduktion av pekare

Föreläsning 5: Introduktion av pekare Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men

Läs mer

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 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:

Läs mer