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



Relevanta dokument
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd

TDDC76 - Programmering och Datastrukturer

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

TDIU01 Programmering i C++

TDDC76 Programmering och datastrukturer

Programmering B med Visual C

1 Klasser och objektorientering Vad är objektorientering?

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

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

TDDC76 - Programmering och Datastrukturer

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

5 Arv och dynamisk bindning FIGUR

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Introduktion till arv

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

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

Imperativ programmering. Föreläsning 4

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

Laboration 1 - Grunderna för OOP i Java

Objektorientering: Lagring, räckvidd och livstid

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

TUTORIAL: KLASSER & OBJEKT

Arv bakgrund (kap. 9)

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

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

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

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

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

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

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

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

Dynamisk bindning och polymorfism

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

Objektorienterad Programmering DAT043

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

Lösningsförslag till tentamen TDP004 Objektorienterad Programmering Teoretisk del

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Programsystemkonstruktion med C++

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder

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

OOP Objekt-orienterad programmering

Objektorientering: Lagring och livstid

Grundläggande programmering med C# 7,5 högskolepoäng

Inledande programmering med C# (1DV402) Tärningarna ska kastas

Objektorienterad Programmering (TDDC77)

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

C++ Objektorientering - Klasser. Eric Elfving

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

allokeras på stacken dynamiskt new delete

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

OOP Objekt-orienterad programmering

Övningar Dag 2 En första klass

Skapa, kopiera och destruera klassobjekt

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

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan

TDDD78 Objektorientering: Lagring och livstid

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Klasshierarkier - repetition

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

TDDC76 - Programmering och Datastrukturer

Arv. Objektorienterad och komponentbaserad programmering

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TDDC76 - Programmering och Datastrukturer

Kapitel 6 - Undantag

Java, klasser, objekt (Skansholm: Kapitel 2)

Innehåll. Pekare Exempel

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Classes och Interfaces, Objects och References, Initialization

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

Innehåll. Pekare Exempel

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Objektorienterad programmering i Java

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

Synlighet. Namespace Scope-operatorn Klasser Vänner

Föreläsning 13 Innehåll

Transkript:

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 OO, det mesta bygger på dem. Vi kommer att introducera grundläggande begrepp inom OO, och återkomma med mera begrepp senare i kursen. En ytlig genomgång av minneshantering, mer om detta i en senare föreläsning. Minneshantering Statisk minneshantering, allt minne existerar under hela progammets körning, inget läggs till eller tas bort. Dynamisk minneshantering: tar bort och lägger till minne under exekvering. Görs med new. Pekar-begreppet: int* a; // a är en pekare till en int int b = 10; a = &b; // a pekar nu på b:s adress ExampleClass* myclass = NULL; // Pekaren nollställs myclass = new ExampleClass(); // Skapa och tilldela Mer om pekare och minnerhantering senare i kursen. Klasser Klasser är den viktigaste byggstenen inom OO. Mha klasser görs arv, inkapsling, polymorfi, etc Vad är en klass? Tills vidare är det logiskt att tänka på en klass som en representation av ett konkret objekt, tex ett djur, eller en bok etc. Ett specifikt exemplar av en klass kallas instans. 1

I filen ExampleClass.h: Deklaration av klass class ExampleClass public: // Publik åtkomstdeklaration ExampleClass(int defaultid); // Konstruktor ~ExampleClass(); // Destruktor int GetID() const; // Medlemsfunktioner. float f(float a, float b, float c) const; private: bool SetID(int aid); // Privat åtkomstdeklaration int m_id; // Klassvariabel. ; // Observera ; Deklaration av klass, forts. Normalt deklareras klassen i en fil med namnet klassnamn.h. I filen klassnamn.cc/cpp definieras funktionerna. Vanligt att man placerar konstruktorn och destruktorn högst upp i.cc-filen. För det mesta definieras funktionerna i.cc/.cpp-filen. Konstruktor Skapar en instans av klassen. Alltid samma namn som klassen. Bör anges av programmeraren, annars skapar kompilatorn en (utan inargument). Anropas med new klassnamn(); Viktiga medlemsvariabler bör initieras i konstruktorn. Detta kan ske genom tilldelning: ExampleClass::ExampleClass(int defaultid) m_id = defaultid; Konstruktor, initieringslistor I tidigare exempel gjordes tilldelning i konstruktorns funktionskropp. Initieringslistor är ett annat sätt att tilldela medlemsvariabler och initiera konstruktorns lokala variabler. Syntax: klassnamn::klassnamn( ): variabel1(värde1), variabel(värde2), Ex: ExampleClass ::ExampleClass(int defaultid) : m_id(defaultid) // Funktionskropp 2

Konstruktor, initieringslistor Vaför behövs initieringslistor? Medlemsvariabler som är const och/eller referenser måste initieras mha initieringslistor. Ytterligare skäl finns, dessa har med arv att göra. Multipla konstruktorer Möjligt att ha multipla konstruktorer. Alla konstruktorer skapar en instans av klassen. Kan ta olika inparametrar och göra olika initieringar av medlemsvariabler. Tänk på att initiera viktiga medlemsvariabler i alla konstruktorer. Destruktor Anropas när man vill ta bort instansen. Alltid ~klassnamn. Bör anges av programmeraren, annars skapar kompilatorn en. I destruktorn städar vi upp och lämnar tillbaka minne som klassen har allokerat dynamiskt. Anropas med delete instansnamn(). ExampleClass::~ExampleClass() //Städa upp och lämna tillbaka dynamiskt minne, dvs minne som har allokerats med new. Konstruktor och destruktor Funktioner som har speciella uppgifter. En pekare till den borttagna instansen kommer inte att peka på något vettigt efter att destruktorn har anropats. Tips: sätt pekaren till NULL efteråt. // Anropa destruktorn. myclass = NULL; // Sätt pekaren till NULL 3

Varför sätta variabeln till NULL efter delete? Åtkomst Alt 1. myclass = NULL; Alt 2. Krasch?! //OK enligt språkstandarden Med åtkomstdeklarationerna public, protected och private reglerar man åtkomst till klassens data och funktioner för andra klasser. Den egna klassen har alltid obegränsad tillgång. Public fritt tillgänglig för läs och skriv. Private ingen tillgänglighet alls. Protected tillgänglig enbart för subklasser. Vi återkommer till dessa i senare föreläsning. I class är allt private om inget annat anges. Åtkomst Med tex åtkomstdeklarationen private kan vi skydda data och funktioner så att bara betrodda klasser/funktioner får tillgång. Alternativt inte ge någon annan någon tillgång alls. Vi gömmer data som vi inte vill att någon annan ska ha tillgång till samt exakt hur vi implementerar funktionen. Inkapsling (eng. encapsulation). Inkapsling Funktionen float f(float a, float b, float c) gör någon komplicerad beräkning, och vi vill inte att någon annan ska ha tillgång till den data som används, eller veta hur beräkningen görs. float a float b float c f float 4

Inkapsling, forts. Vi kapslar in beräkningen och får genom detta en svart låda som döljer implementationen och dess data. Vad som händer i funktionen/lådan är vår ensak och ingen annan behöver bry sig. Vi kan ändra implementationen hur vi vill, så länge vi lämnar funktionsdeklarationen (returvärdet, parameterlistan och funktionsnamnet) intakt. Friend Med friend kan man gå förbi åtkomstdeklarationerna och även få tillgång till privat data och funktioner. Friend deklareras i den klass som vill ge någon annan klass/funktion tillgång. Ex: I någon klass: friend class ExampleClass friend int ClassA::func(int a); //Ger funktionen func i ClassA fri tillgång. Friend bryter inte mot inkapslingen eftersom det är den givande klassen som bestämmer vilka som ska vara vänner. Friend bör trots det användas med försiktighet. Medlemsfunktioner Som de vanliga funktioner vi har använt hittills, men har tillgång till medlemsvariabler. bool ExampleClass::SetID(int aid) m_id = aid; //Sätter medlemsvariabel. return true; const int ExampleClass::GetID() const /* En const medlemsfunktion får inte ändra någon medlemsvaribel */ return m_id; /* Returnerar värdet av en medlemsvariabel */ float ExampleClass::f(float a, float b, float c) const return a + b + c; const-funktioner Förra föreläsningen såg vi att inparametrar kunde deklarareras const. Även funktioner kan deklareras const, innebörden av detta är att funktionen inte ändrar någon medlemsvariabel. const int ExampleClass::GetID() const return m_id; En const-funktion som får i sin tur enbart anropa andra const-funktioner. Bra att använda const så mycket som möjligt, programmeraren får då hjälp av kompilatorn. 5

Medlemsfunktioner och this De flesta funktioner har en osynlig parameter, this, som parameter till nästan alla funktioner. (undantagen är static-funktioner samt konstruktorer.) Denna pekar på det objekt som funktionen hör till. Vi återkommer till orsaker och konsekvenser av denna i en senare föreläsning. Ex: MyClass inst =MyClass(); inst->f(a); Översätts till något i stil med: MyClass::f(&inst, a); Medlemsvariabler En variabel som hör till en instans av en klass. Obegränsad tillgång för alla funktioner i klassen. Kan användas för att överföra data mellan funktioner, spara tillståndet hos en instans etc. Scope för en medlemsvariabel är så länge instansen existerar. Varför använda klasser? Samla ihop funktioner och den data den använder till en sammanhängande enhet. Minska beroendet mellan användare och implementation. Förbered för återanvändning. Användande av klasser Att avgöra vilka objekt som är lämpliga att modellera som klasser är ett svårt problem som vi kommer tillbaka till senare i kursen. 6

Sammanfattning Vi har introducerat klassbegreppet. Konstruktor, initieringslistor. Destruktor. Åtkomst: public, protected, private. Medlemsvariabler och -funktioner. Inkapsling, viktigt begrepp inom OO. Vi återkommer till OO senare i kursen. Inte trivialt, gå hem och läs, fundera och diskutera! 7