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

Relevanta dokument
1. Klass med en dynamiskt allokerad variabel, definitionsfilen-del Klass med en dynamiskt allokerad variabel, inkluderingsfilen.

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

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

1 Klasser och objektorientering Vad är objektorientering?

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Arv. Objektorienterad och komponentbaserad programmering

TDIU01 Programmering i C++

C++ Objektorientering - Klasser. Eric Elfving

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

TDDC76 Programmering och datastrukturer

TDIU01 - Programmering i C++, grundkurs

Högskolan Dalarna sid 1 av 5 Data-sektionen Hans-Edy Mårtensson

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

5 Arv och dynamisk bindning FIGUR

Funktionens deklaration

TDDC76 - Programmering och Datastrukturer

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

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

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

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Klasshierarkier - repetition

Objektorienterad programmering Föreläsning 4

Tillämpad programmering

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Övningar Dag 2 En första klass

TDIU01 - Programmering i C++, grundkurs

Programmering för språkteknologer II, HT2011. Rum

Introduktion till arv

TDDC76 - Programmering och Datastrukturer

Objektorienterad Programmering DAT043

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


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

Dynamisk bindning och polymorfism

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Det finns många flaggor till g++,

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

Innehåll. Pekare Exempel

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

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

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

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

Innehåll. Pekare Exempel

1 Egna klasser. 1.1 En punkt-klass

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

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

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

TDDC76 - Programmering och Datastrukturer

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

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

Övning 4. Arv och andra relationer

TDIU01 - Programmering i C++, grundkurs

Objekt och referenser

Tillämpad programmering

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

Lösningsförslag övning 2.

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Programsystemkonstruktion med C++

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

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

JAVAUTVECKLING LEKTION 11

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

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

grundläggande C++, funktioner m.m.

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

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

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

JAVA Mer om klasser och objektorientering

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

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

Klasser och objekt. Henrik Johansson. August 20, 2008

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

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

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

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

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

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

TDDC76 - Programmering och Datastrukturer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Programmeringsteknik med C och Matlab

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

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

TDDC76 - Programmering och Datastrukturer

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

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

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Transkript:

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, är då modeller av verkliga ting i programmets omgivning. Datorprogrammets uppgift är att manipulera sina objekt. Varje objekt har en unik identitet och i programmet kommer man åt ett objekt via dess namn eller pekare. Varje objekt har en uppsättning egenskaper vilka bestäms av dess attribut och dess operationer. Attributen används för att hålla reda på objektets tillstånd, eller status. Med hjälp av objektets operationer så kan man avläsa och påverka objektets olika attribut.

Attribut A - 3 Operationer A - 4 Olika objektorienterade språk använder olika termer för attribut. Den andra kategorin attribut för objekt är de operationer som man kan utföra på objektet. I C++ används termen datamedlem, i Java instansvariabel. Varje objekt har en egen, unik uppsättning attribut. I C++ kallas en sådan operation för en medlemsfunktion. I Java metod eller ibland instansmetod Normalt brukar man gömma ett objekts attribut inne i objektet så att de bli oåtkomliga utifrån och bara kan förändras av objektet själv. Detta kallas för inkapsling eller information hiding.

Klasser A - 5 Representation av en klass A - 6 En klass är en slags mall, eller mönster, som beskriver objekt med samma uppbyggnad och egenskaper. I ett program så kan det förekomma flera olika klasser som beskriver flera olika sorts objekt. Syntax i C++ class klassnamn protected: private: <konstruktorer> <destruktorer> <medlemsfunktioner> <data medlemmar> ; Ett objekt som beskrivs av en viss klass sägs utgöra en instans av klassen. Det kan finnas flera objekt av en viss klass; det kan alltså finnas flera instanser av en klass. De flesta som ägnar sig åt objektorienterad programmering uppfattar en klass som en typ. Ett objekt kan deklareras, initieras och användas på ungefär liknade sätt som en vanlig variabel.

Ett exempel med datatypen class A - 7 Exempel 2 A - 8 #include <cstring> class Person char name[80]; int age; ; void print()const; //Klassdefinition //Åtkomlighet //Datamedlemmar //Medlemsfunktion #include <cstring> class Person int getage(void) const return age; //Inline! void setage(int alder) age = alder; const char* getname()constreturn name; //OBS, const! void setname(const char* namn)strcpy(name,namn); void print()const; void Person::print()const //Definition av medlemsfunktion cout << name <<", " << age << " år" << endl; void main(void) Person kalle; //Kalle allokeras statiskt Person *stina = new Person; //Lisa allokeras dynamiskt private: //Privata medlemmar är endast synliga i klassen! char name[80]; int age; ; void Person::print()const cout << getname() <<", " << getage() << " år" << endl; kalle.age = 23; strcpy(kalle.name, "Karl-Gustav Svensson"); kalle.print(); stina->age = 24; strcpy(stina->name, "Kristina Nilsson"); stina->print(); delete stina; void main(void) Person kalle; //En instans av klassen Person kalle.setage(23); kalle.setname("karl-gustav Svensson"); kalle.print();

Exempel 3 Header-, Inkluderings-, eller specifikationsfil A - 9 Exempel 3 Definitions- eller implementationsfil A - 10 //Headersfilen innehåller klassdefinitionen. //Headerfiler brukar döpas till *.h där * står //för klassens namn. Den här filens namn är Person.h. //Kompilatorn får endast läsa klassdefinitionen endast en //gång, därav följande preprocessor direktiv. //Filnamn: Person.h #ifndef _Person_ #define _Person_ #include <cstring> class Person Person(); Person(const char* namn, int alder); int getage(void)constreturn age; void setage(int alder); const char* getname()constreturn name; void setname(const char* namn)strcpy(name,namn); void print()const; private: char name[80]; int age; ; #endif //Filnamn: Person.cpp #include "Person.h" //-Person------------------------------------------------- Person::Person() strcpy(name, "Namn saknas!"); age = 0; //-Person------------------------------------------------- Person::Person(const char* namn, int alder) strcpy(name, namn); age = alder; //-setage------------------------------------------------- void Person::setAge(int alder) if (alder > age) age = alder; else cout << "Orimlig ålder!" << endl; //-print-------------------------------------------------- void Person::print()const cout << getname() <<", " << getage() << " år" << endl;

Exempel 3, instanser av klassen Person A - 11 Objekt som består av andra objekt, del 1 A - 12 #include "Person.h" void main(void) Person kalle("kalle",23); Person *stina = new Person("Stina",24); Person nisse = kalle; //nisse initieras med kalle kalle.print(); stina->print(); nisse.print(); nisse.setname("nisse"); nisse.print(); kalle.print(); nisse = *stina; //nisse tilldelas stina s tillstånd delete stina; //stina upphör att existera stina = new Person[3]; //Ett fält av personer skapas stina->setname("stina Ett"); stina->setage(10); (stina+1)->setname("stina Två"); Ger utskriften: (stina+1)->setage(20); Kalle, 23år stina[2].setname("stina Tre"); Stina, 24år stina[2].setage(30); Kalle, 23år Nisse, 23år for (int i=0; i<3; i++) Kalle, 23år stina[i].print(); Stina Ett, 10år delete [] stina; //Fältet deallokeras Stina Två, 20år nisse.print(); Stina Tre, 30år Stina, 24år const Person erik("erik", 19); /* erik.setage(20); */ //Går inte! Objektet är konstant

Objekt som består av andra objekt, del 2 A - 13 Objekt som består av andra objekt, del 3 A - 14 #ifndef _CirkelYta_ #define _CirkelYta_ #include "CirkelYta.h" class CirkelYta CirkelYta(double radien); double area()const; double omkrets()const; private: double radie; const double PI; ; CirkelYta::CirkelYta(double radien) : PI(3.14159) //OBS! if (radien < 0) cout << "Fel radie!" << endl; radie = 0.0; else radie = radien; #endif double CirkelYta::area()const return radie * radie * PI; double CirkelYta::omkrets()const return 2.0 * PI * radie;

Objekt som består av andra objekt, del 4 A - 15 Objekt som består av andra objekt, del 5 A - 16 #ifndef _Cylinder_ #define _Cylinder_ #include "Cylinder.h" #include "CirkelYta.h" class Cylinder Cylinder(double radien, double hojden); double area()const; double volym()const; private: double hojd; CirkelYta botten; //Objekt av typen CirkelYta CirkelYta lock; ; #endif Cylinder::Cylinder(double radien, double hojden) :botten(radien), lock(radien) if (hojden < 0.0) cout << "Orimlig höjd!" << endl; hojd = 0.0; else hojd = hojden; double Cylinder::area()const return botten.area() + hojd * botten.omkrets() + lock.area(); double Cylinder::volym()const return hojd * botten.area();

Objekt som består av andra objekt, del 6 A - 17 Du ska kunna. A - 18 #include "cylinder.h" void main() Cylinder cylindern(10, 20); cout << "Area: " << cylindern.area() << endl; cout << "Volym: " << cylindern.volym() << endl; Area: 1884.95 Volym: 6283.18 Eftersom både lock och botten är identiska, så borde man kunna förenkla programmet såsom följande klassdiagram visar Du ska känna till de vanligaste begreppen i objektorienterad programmering Du ska kunna skapa klasser och objekt Du ska kunna skapa säkrare program genom att inkapsla kritiska data i objekt Du ska förstå varför man i vissa fall bör const-deklarerar parametrar eller funktioner Du ska kunna dynamiskt allokera ett objekt Du ska kunna beskriva ditt program med hjälp av klassdiagram