Objektorientering Ett av de senaste inneorden i datavärlden. Man baserar uppbyggnaden av ett programsystem på de objekt som ingår i systemet istället

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

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Objektorienterad analys och design

Objektorientering. Grunderna i OO

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Imperativ programmering. Föreläsning 4

Objektorienterad konstruktion

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

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

1 Klasser och objektorientering Vad är objektorientering?

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

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

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

Objektorienterad analys och design

Klasshierarkier - repetition

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

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Introduktion till arv

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

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

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

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

Föreläsning 2. Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program.

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

Konstruktion av klasser med klasser

Programmering = modellering

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram

5 Arv och dynamisk bindning FIGUR

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Objektorienterad programmering

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

TDDC76 Programmering och datastrukturer

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016


729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Föreläsning 15: Repetition DVGA02

Objektorienterad programmering

Objektorienterad Programmering (TDDC77)

Inkapsling (encapsulation)

Arv. Objektorienterad och komponentbaserad programmering

Objektorienterad programmering Föreläsning 4

TDDC76 - Programmering och Datastrukturer

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

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

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

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

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

OOP Objekt-orienterad programmering

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

Objekt och klasser - Introduktion

Kursplanering Objektorienterad programmering

Objektorientering Klasser

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

UML: Exempel. Ett modelleringsspråk. UML: Ansvar. UML: tre huvudanvändningar. Exempel: En klass position storlek. UML Unified Modelling Language

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

Laboration 1: Figurer i hierarki

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

OOMPA 2D1359 Föreläsning 2

1 Objektorienterad programkonstruktion

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

Tentamen i Objektorienterad programmering för ingenjörer (TDBB09) , kl

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

Programmering B med Visual C

Objektorientering Användning

OOP Objekt-orienterad programmering

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Övningar Dag 2 En första klass

Objektorienterad Programmering (TDDC77)

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

TDA550 Objektorienterad programmering, fortsättningskurs. Föreläsning 1. Introduktion Variabler och typer

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

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

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

Övning 4. Arv och andra relationer

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

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

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

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

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Laboration 1 - Grunderna för OOP i Java

JAVA Mer om klasser och objektorientering

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

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

Objektorienterad programmering. Grundläggande begrepp

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

Transkript:

Introduktion till objektorienterad programmering (OOP) Sömnighetsfaktor = 3... Eva Pärt-Enander Klassbegreppet Vad är en klass? Svar: datatyp, mall Beskriver egendenierad datatyp. Klassdenition = representation (data) + operationer som kan utföras på objekt i klassen (medlemsfunktioner, metoder). Mall/mönster. Beskriver hur en samling objekt med samma uppbyggnad och egenskaper ser ut. 0-0 1 Ett objekt som tillhör en klass sägs utgöra Skilj på klass och objekt! en instans av klassen. Ett objekt är: modell av verkligt eller tänkt föremål Man denierar en klass, men brukar ofta skapa (instansiera) många objekt (instanser) av klassen. en slags variabel, själva förekomsten begränsad livstid: skapas, används/ändras, dödas har tillhörande attribut och metoder Objekten är fristående; en operation på ett objekt påverkar endast detta objekt. Dock gäller att objekt i samma klass har samma operationer (metoder, medlemsfunktioner). 2 3

Objektorientering Ett av de senaste inneorden i datavärlden. Man baserar uppbyggnaden av ett programsystem på de objekt som ingår i systemet istället för att utgå från de funktioner som systemet skall uppfylla. Programmet består av ett antal väl avgränsade enheter som kallas objekt. Objektorienterad programutveckling är ett slags modellbygge. Består av tre faser (iterativt): 1. Objektorienterad analys (OOA): Vad skall göras? 2. Objektorienterad design (OOD): Hur skall det göras? 3. Objektorienterad programmering (OOP): Implementera systemet! Objektorienteringens tre principer: Inkapsling: Gömma objektets attribut inne i objektet; oåtkomliga utifrån och kan bara förändras av objektet självt. Information hiding. Återanvändbarhet: Program uppbyggd på färdiga, väl uttestade komponenter medför att programutvecklingen: har lägre kostnad går snabbare får högre kvalitét. Mångformighet: Överlagring av funktioner och annat smart... 4 5 Uppnn inte hjulet igen! Vänj dig vid Objektorientering i praktiken: återanvändning. Använd h-ler och cpp-ler! Ändringsbarheten ökar om programmet uppbyggt i era självständiga moduler (klasser). Ej luddigheter! Låt varje modul utföra en speciell, väl denierad uppgift. Ändring av program = utbyte av moduler. Generella metoder! En programkomponent är återanvändbar om den är anpassbar till olika förhållanden (=olika sorters problem). Undvik utskrift/inläsning i metoder som ej direkt är avsedda för utskrift/inläsning. Lär dig förpackningsteknik! Utnyttja inkapsling. Undvik använda selektorer i onödan, använd istället metoder med objekt som parameter. 6 7

Objektorienterad analys (OOA): Vad??? sätta sig in i problemet förstå förutsättningar göra en första, grov, idealiserad modell av programmet nna objekt (substantiv) och operationer (verb) beskriva attribut, fastställa relationer a mellan objekt (iterativt) förutse, underlätta för kommande ändringar Objektorienterad design (OOD): Hur??? planera den objektorienterade programmeringen (ganska ytande mellan analys- och designfasen). konkretisera modellen i analysfasen, lägg till detaljer objekt för objekt delas in i systemdesign: kommunicera med omgivning, vilket OS?, vilket fönsterhanteringssystem? hantering av avbrott,... scenarier (användningsfall) dokumenteras i form av diagram systemutvecklingsmetod = arbetsschema, symbolspråk, t ex OMT b, UML c a se association, aggregat och arv nedan b Object-Oriented Modeling Technique c Unifyed Modeling Language objektdesign: utgå från objekten i analysfasen, ange algoritmer, hur skall objektoperationer utföras? parametrar? Använda redan färdiga objekt? Vilket programspråk? OOP: C++, JAVA, etc 8 9 Objektorienterad programmering (OOP): Implementera!!! Programmeringsprocessen: Ibland liknas processen vid följande schema: realisera analys design i form av ett 1. Intension, vision. bra, körbart datorprogram: 2. Specikation. korrekt: felfritt (minskar underhållskostnaden) eektivt: utnyttja datorresurser väl (ex. realtidssystem) 3. Analys och design. 4. Implementation. 5. Verikation. återanvändbart: billigare i längden ändringsbart: byt ut en hel modul, inkapsling 6. Produktion. 7. Modikation. Under hela processen: dokumentation 10 11

Specikation Hur indata avbildas på utdata. Dokumentation Skall skrivas från början och innefatta alla faser i processen. Beställarens önskemål = kravspecikation. användarmanual: Andra krav: portabilitet skrivs i förväg bygger på scenarier återförs på beställaren användarvänlighet systemdokumentation: eektivitet (CPU-tid och minnesutrymme) design noggrannhet implementation robusthet testning (testfall, resultat) Problem: att hålla aktuell! 12 13 Relationer mellan klasser och objekt: I OOP försöker man identiera objekten och klasserna + bestämma relationer mellan objekt. Verikation T ex: Hur skall vi låta objekt samarbeta och testning mot specikationen integrera för att uppnå den mest korrekta, exibla och bästa lösningen? kan bara påvisa fel förutsägbara testresultat Finns fem olika typer av relationer mellan objekt och klasser: svårt att testa många krav 1. klass-objekt 2. användning 3. association 4. aggregat 5. arv 14 15

Användningsrelation (utnyttjar) Klass-objekt-relation (förekomst av) Vanligaste relationen mellan objekt. Denna relation existerar alltid för ett objekt. Klassen beskriver typen på objektets samtliga dataelement, operationer + implementering av dessa. Testmening: objektet är en förekomst av klassen. Klassen klassicerar objektet. Ex. Innebär att ett objekt använder ett annat objekt genom att utföra en operation på det. Objekten samarbetar. Testmening: utför operation på, använder, utnyttjar. Ex. BankKonto Lisas; BankKonto Olles("Olle Olsson", 12300); Person jag(``nisse Olsson); Bil volvo(1999);... jag.koer_frammaat( volvo ); 16 17 Associationsrelation mellan två objekt (känner till) Aggregatrelation (har) Innebär en koppling mellan objekten (enkel- eller dubbelriktad). Kommunicerar med ett annat objekt, utan att vara uppbyggt av detta andra objekt. Ett objekt är uppbyggt av andra objekt och använder dessa för att tillhandahålla sin funktionalitet. Objekt som attribut. Är en pekare från ett objekt till ett annat. Kan vara en till en, en till många eller många till en. Kan ha associationer mellan objekt i samma klass. Relationen kan studeras utifrån det omslutande objektet (som innehåller andra objekt) utifrån det inneslutna objektet (som ingår i ett annat objekt). Skall ej blandas ihop med aggregat... Testmening: har koppling till, känner till, för varje X nns ett Y, pekar på. Skall ej blandas ihop med association... Testmening: består av, innehåller, har. Ex. En bil kan ha en person som ägare. Implementeras som att Bil-klassen har ett attribut som är pekare till objekt som hör till Person-klassen. Ex. En bil har en bensintank, en motor och fyra hjul. En bok består av kapitel. En bil har inte en ägare! (se association) 18 19

Arvsrelation (är) Dessutom... Polymor (mångformighet) Unik relation för objektorientering. En klass har vissa allmänna egenskaper som kan vara gemensamma med andra klasser. Arv sker mellan klasser och inte mellan objekt. Vid denition av ny klass (subklass) ärver man egenskaper från en annan existerande klass (basklass) och beskriver sedan skillnaden gentemot basklassen. Testmening: Är en, är ett. Ex. En bil är ett fordon, sparkonto är ett bankkonto, en ekorre är ett däggdjur. Polymor betyder mångformighet, t ex överlagring av funktioner/metoder och s k generiska programenheter (mallar, templates). Överlagring innebär att en programkonstruktion som ser ut på ett visst sätt kan innebära olika saker (t ex anrop av olika funktioner/klassmetoder), beroende på typerna av de ingående operanderna. Jfr. överlagrade konstruktorer. Generisk programenhet är en generell mall som programmeraren kan utgå ifrån för att på enkelt sätt skapa programkod. Kan användas för både funktioner och klasser. Kodbesparande! 20 21 Ex. Antag att vi har klassen Bil: class Bil private: int nr; public: ; Bil()nr = 0; Bil( int in ) nr = in; int haemta_nr() return nr; void Skriv() cout << "Bil av årsmodell: " << nr << ". "; Exempel på funktioner med samma namn, men olika datatyper: cout << "Max av " << a << " " << b << " = " << max( a, b ) << endl; cout << "Max av " << ett << " " << tvaa << " = " << max( ett, tvaa ) << endl; volvo.skriv(); opel.skriv(); cout << endl; cout << "Max = "; max( volvo, opel ).Skriv(); cout << endl; return 0; int max( int tal1, int tal2 ); double max( double tal1, double tal2 ); Bil max( Bil nr1, Bil nr2 ); int max( int tal1, int tal2 ) if ( tal1 > tal2 ) return tal1; int main() else return tal2; int a = 2, b = 11; double ett = 12.44, tvaa = 56.99; Bil volvo(1999), opel(1980); double max( double tal1, double tal2 ) if ( tal1 > tal2 ) return tal1; 22 23

else return tal2; Bil max( Bil nr1, Bil nr2 ) if ( nr1.haemta_nr() > nr2.haemta_nr() ) return nr1; else return nr2; Körning ger: Max av 2 11 = 11 Max av 12.44 56.99 = 56.99 Bil av årsmodell: 1999. Bil av årsmodell: 1980. Max = Bil av årsmodell: 1999. Exempel på mallen swap som byter värden mellan två variabler. template<class Type> void swap( Type a, Type b ) Type temp = a; a = b; b = temp; int main() Bil volvo(1989), saab(1999); int tal1 = 1, tal2 = 2; volvo.skriv(); swap(volvo, saab); volvo.skriv(); saab.skriv(); cout << endl; saab.skriv(); cout << endl; cout << tal1 << " " << tal2 << endl; swap(tal1,tal2); cout << tal1 << " " << tal2 << endl; return 0; 24 25 Sammanfattning: Körning ger: Bil av årsmodell: 1989. Bil av årsmodell: 1999. Bil av årsmodell: 1999. Bil av årsmodell: 1989. 1 2 2 1 Den objektorienterade modellen ger ett system som är en bra modell av verkligheten, mer modulariserat, enklare att förändra och bygga ut, eventuellt genererar återanvändbara komponenter, gör utvecklaren mer produktiv samt har en enhetlig terminologi och modell i alla delar av systemets livscykel. Eriksson: Objekt-orienterad programutveckling med C++ Vid OOP försöker man skriva korrekta, eektiva, återanvändbara och ändringsbara program genom att låta de enskilda modulerna i ett program utgöras av objektobjekt som möjliggör inkapsling. För att veta vilka objekt som behövs, så utgår man från den design som tidigare gjorts. Skansholm: C++ direkt 26 27

Viktigast inom OOP Inkapsling: Samla ihop objektets egenskaper till ett enda ställe i programmet. Gömma detaljerna som hör till ett visst objekt. Modierbart! Arv: Man skall kunna utgå från andra objekts egenskaper och lägga till nya egenskaper. Återanvändning! Polymor: En viss operation kan utföras på objekt av olika typer med olika implementationer för varje typ, t ex beräkna ytan av en grask gur ha en ytberäkningsfunktion i varje klass. yta <--- FIGUR / \ yta<-- CIRKEL REKTANGEL-->yta \ KVADRAT-->yta 28