TDDC76 - Programmering och Datastrukturer

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

C++ Objektorientering - Klasser. Eric Elfving

TDDC76 - Programmering och Datastrukturer

TDIU01 Programmering i C++

TDDC76 - Programmering och Datastrukturer

TDIU01 - Programmering i C++, grundkurs

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

Övningar Dag 2 En första klass

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

TDIU01 - Programmering i C++, grundkurs

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

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

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

*:85/ID200V C++ HT07. Föreläsning 8 Medlemspekare Undantagshantering Namnrymder

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

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

TUTORIAL: KLASSER & OBJEKT

TDDC76 - Programmering och Datastrukturer

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

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

Kopiering av objekt i Java

Objektorienterad programmering Föreläsning 5

Objektorientering i liten skala

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

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Programsystemkonstruktion med C++

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

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

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

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

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

TDDC76 - Programmering och Datastrukturer

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

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

TDIU01 - Programmering i C++, grundkurs

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Felhantering TDDD78, TDDE30, 729A

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng

JAVA Mer om klasser och objektorientering

1 Klasser och objektorientering Vad är objektorientering?

Generiska konstruktioner. Kursbokens kapitel 13

Objektorientering - Arv och polymorfi

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

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

Kapitel 6 - Undantag

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Tillämpad programmering

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

Introduktion till arv

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Dynamisk bindning och polymorfism

TDDC76 - Programmering och Datastrukturer

Objekt, Klasser, Paket m. m.

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

TDIU01 (725G67) - Programmering i C++, grundkurs

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

5 Arv och dynamisk bindning FIGUR

Tentamen EDAF30 Programmering i C++

Objektorienterad programmering

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

Java, klasser, objekt (Skansholm: Kapitel 2)

TENTAMEN OOP

allokeras på stacken dynamiskt new delete

Exceptions (undantag) Murach s: kap 7

Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

Malmö högskola 2007/2008 Teknik och samhälle

TDIU01 - Programmering i C++, grundkurs

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

DD2387 Programsystemkonstruktion med C++ Tentamen 2

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

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

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

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

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

JAVAUTVECKLING LEKTION 11

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

Det finns många flaggor till g++,

TDDC76 Programmering och datastrukturer

Föreläsnings 9 - Exceptions, I/O

OOP Objekt-orienterad programmering


Programmering B med Visual C

Metoder (funktioner) Murach s: kap Winstrand Development

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

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

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

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

Föreläsning 5-6 Innehåll

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

Föreläsningar 11, 12 (okt 08, okt 12 v 40). Poster och Abstrakta datatyper.

Transkript:

TDDC76 - Programmering och Datastrukturer Objektorientering - Klasser Eric Elfving Institutionen för datavetenskap

1 / 20 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data till en ny datatyp. Ett problem med struct är åtkomst...

2 / 20 Följande ser vettigt ut... struct Time int hour; int minute; int second; ; Time next_second(time const & t) Time next t; next.second++; if ( next.second == 60 ) // öka minut, kolla om timme måste öka osv. return next;

3 / 20 Vad händer om vi gör följande: Time t132, 22, 333; Time t2 next_second(t) ;

3 / 20 Vad händer om vi gör följande: Time t132, 22, 333; Time t2 next_second(t) ; Vad bör hända?

4 / 20 Med en klass kan vi dölja våra datamedlemmar: class Time private: int hour ; int minute ; int second ; ;

5 / 20 Nu kan vi inte komma åt fälten som vi gjorde i en struct. En speciell funktion, kallad konstruktor, används för att initiera en klass class Time public: Time(int h, int m, int s) : hourh, minutem, seconds // initiering //av datamedlemmar // eventuell annan kod man vill köra // (exempelvis kontrollera värdena) private: int hour, minute, second; ;

6 / 20 Målet med en konstruktor är alltid att initiera datamedlemmarna. Konstruktorn har alltid samma namn som klassen och saknar returtyp. Time t12,32,11; // anrop till konstruktor. // t är ett objekt av typen Time

7 / 20 Om vi vill kunna skapa ett tomt"time-objekt (dvs få något standardvärde), behövs en defaultkonstruktor. En konstruktor som kan anropas utan argument kallas defaultkonstruktor. class Time public: Time() : hour12, minute, second //... ; Time t; // defaultkonstruktorn anropas En klass kan endast ha en defaultkonstruktor.

8 / 20 Förutom data kan en klass även ha beteende i form av medlemsfunktioner En medlemsfunktion är precis som en vanlig funktion, men deklareras i klassen. En medlemsfunktion har direkt tillgång till värdena som tillhör ett specifikt objekt. Vilket objekt vi utför beräkningar för bestäms i anropet.

9 / 20 class Time public: //... konstruktorer bool is_pm() return hour >= 12; private: int hour, minute, second; ; int main() Time t 13,12,12; if ( t.is_pm() ) // kallar på is_pm för objektet t //...

10 / 20 Felhantering Vad ska vi göra om användaren ger oss felaktiga värden? Time t 132, 78, 223;

11 / 20 Vi skulle kunna sätta standardvärden: class Time public: Time(int h, int m, int s) : hourh, minutem, seconds if (!is_valid() ) hour = 0; minute = 0; second = 0; //... private: bool is_valid() return hour < 24 && minute < 60 && second < 60; int hour, minute, second; ;

12 / 20 Men undantag är bättre! #include <stdexcept> class Time public: Time(int h, int m, int s) : hourh, minutem, seconds if (!is_valid() ) throw std::domain_error"ej giltigt klockslag!"; //... ; Här kastar vi ett undantag. Om användaren (den som skapar ett Time-objekt) inte tar hand om undantaget kommer programmet krascha.

13 / 20 Man fångar undantag i ett try-block. try Time t 123, 33, 22; catch (std::domain_error) cerr << "Fel vid skapande av klockslag!"; Använder man catch-biblioteket kan man använda sig av CHECK_THROWS(...)

14 / 20 Inkluderingsfilen <stdexcept> har flera färdiga undantagstyper som man kan välja ifrån när man ska kasta ett undantag Vi kommer inför nästa lab (kalkylatorn) ta upp hur man skapar egna, men nu räcker det att välja ett passande bland de färdiga.

15 / 20 const Säg att vi skapar följande (ganska dåligt formaterade) utskriftsoperator för Time: ostream & operator<<(ostream & os, Time const & t) os << t.get_hour() << t.get_minute() << t.get_second(); return os;

16 / 20 För att det ska kompilera behöver vi såklart lägga till funktionerna i klassen: class Time public: int get_hour() return hour; int get_minute() return minute; int get_second() return second; //... ;

17 / 20 Kompilatorn kommer ändå ge oss fel: In function std::ostream& operator<<(std::ostream&, const Time&) : error: passing const Time as this argument discards qualifiers os << t.get_hour() << t.get_minute() << t.get_second(); ^ Vi måste säga till kompilatorn att våra funktioner inte får ändra på nuvarande objekts datamedlemmar.

18 / 20 Än en gång är det nyckelordet const som gäller: class Time public: int get_hour() const return hour; int get_minute() const return minute; int get_second() const return second; //... Alla medlemsfunktioner som inte ska ändra på datamedlemmarna bör markeras med const!

19 / 20 Klasser och filuppdelning Precis som för struct är det smidigt att dela upp sin kod på olika filer för att få bättre översikt. För klasser gör man det genom att definiera klassen (med samtliga medlemsfunktioner och datamedlemmar) i en inkluderingsfil (.h-fil) och definerar medlemsfunktionerna separat i en implementationsfil (.cc-fil)

20 / 20 Listing 1: Time.h #ifndef TIME_H #define TIME_H class Time public: Time(int,int,int); Time(); int get_hour() const; int get_minute() const; int get_second() const; Time next_second() const; private: int hour; int minute; int second; bool is_valid() const; ; #endif Listing 2: Time.cc #include "Time.h" Time::Time() : hour, minute, second Time::Time(int h, int m, int s) : hourh, minutem, seconds int Time::get_hour() const return hour; //...

Eric Elfving Institutionen för datavetenskap www.liu.se