OrganisaKon / Struktur / Ansvar!

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

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

TDIU01 Programmering i C++

C++ Objektorientering - Klasser. Eric Elfving

Objektorientering i liten skala

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

TDIU01 - Programmering i C++, grundkurs

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

TUTORIAL: KLASSER & OBJEKT

Tillämpad programmering

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

TDDC76 - Programmering och Datastrukturer

TDIU01 - Programmering i C++, grundkurs

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

TDDC76 - Programmering och Datastrukturer

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

Imperativ programmering. Föreläsning 4

Innehåll. Relationer mellan klasser Operatoröverlagring. Static-medlemmar. Const- och referensmedlemmar. Const medlemsfunktioner

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

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

5 Arv och dynamisk bindning FIGUR

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

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

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

Programmering A. Johan Eliasson

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

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

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

Parameteröverföring. Exempel. Exempel. Metodkropp

TDIU01 - Programmering i C++, grundkurs

Objektorienterad Programmering (TDDC77)

Funktionens deklaration

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

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

TDDC76 Programmering och datastrukturer

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

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

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

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Lösningsförslag övning 2.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

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

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

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

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

Programsystemkonstruktion med C++

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

(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

TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)

TDDC76 - Programmering och Datastrukturer

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

1 Namnkontroll (NameControl)

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmering B med Visual C

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

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

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

Programmering för språkteknologer I, VT2012. Rum

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Introduktion till arv

Innehåll. Rela+oner mellan klasser Operatoröverlagring. Sta+c- medlemmar. Const- och referensmedlemmar. Const medlemsfunk+oner. friend

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Enkla variabler kontra referensvariabel

Tentamen i DD2387 Programsystemkonstruktion med C++

Objektorienterad Programmering (TDDC77)

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

Objektorienterad programmering Föreläsning 4

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

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

Objektorienterad Programmering (TDDC77)

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

Generiska konstruktioner. Kursbokens kapitel 13

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

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

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

Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen Arv och polymorfi

Metoder (funktioner) Murach s: kap Winstrand Development

Transkript:

Företag Objektorientering Klasser Andersson, Pe=ersson och Lundström skall starta företaget APL- karuseller. De anställer 5 arbetare De lägger företagets pengar i en skokartong så arbetarna kan köpa in material, maskiner och ta ut sin lön. Sedan säger de åt arbetarna a= börja Kllverka karuseller. Intäkter för sålda karuseller läggs i skokartongen. Är det något fel med de=a? OrganisaKon / Struktur / Ansvar! Hur skulle e= företag utan avdelningar och ansvarsområden fungera? Hur skulle det vara a= jobba där? Alla företag är indelade i olika avdelningar: personal ekonomi inköp försäljning support produkkon Tillsammans Kllhandahåller avdelningarna något Kll slutkunden. Objektorientering OrganisaKonsidén är överförd Kll programvara med målen: överskådlighet: a= programmet skall vara lä= a= överblicka och logiskt a= hi=a i ändringsbarhet: det skall var lä=a a= ändra en del i programmet utan a= påverka andra delar felhantering: fel som uppstår skall vara lä= a= lokalisera Kll rä= programdel och inte påverka resten av systemet underhåll: ovanstående gör e= programvarusystem mycket enklare a= underhålla Olika delar i programvaran får olika ansvarsområden E= sä= a= strukturera programvara först skapas strukturen, programmets organisakon, ansvarsfördelning sedan försöker man u=rycka de=a i programkod i något språk Objektorienterng är e= sä= a= tänka på programvaran! En avdelning i e= företag UYör EN funkkon i företaget, har ETT ansvarsområde (helst) Tillhandahåller olika tjänster som andra avdelningar kan utny=ja Avdelningen har kontroll på sina resurser Andra avdelningar har inte Kllträde Kll resurserna, de måste be om lov En klass Har ETT dokumenterat ansvarsområde Indikeras med klassnamn och dokumentakon Tillhandahåller olika tjänster som andra programdelar kan utny=ja medlemsfunkkoner, metoder Klassen har sina egna egenskaper, resurser medlemsvariabler Inga andra programdelar Kllåts Kllträde Kll klassens resurser, de måste ha lov public, private, friend 1

Objektorienterad analys (OOA) CRC Processen a= strukturera e= problem i ansvarsområden, olika klasser Första steget i objektorienterad programmering (OOP) 1. Analysera (skriv?) specifikakon, krav och användningsscenarion 2. IdenKfiera objektkandidater, ansvarsområden 3. IdenKfiera tjänster eller operakoner 4. Organisera och strukturera, gallra 5. Testa, uyör scenarion 6. Börja om och förbä=ra Class Responsibility Collaborators Resultat från OOA! Objektorienterad design (OOD) Andra steget i OOP Utgår från resultatet av OOA Detaljspecificerar klasser och medlemsfunkkoner, parametrar, returvärden Programmera Överför OOD Kll programkod Programming in the language versus programming into the language Anpassa inte dina tankar Kll språket. Utryck dina tankar med hjälp språket! Koden skall vara en spegling av hur du tänkt. OOA skall ge en klar bild av dina tankar innan du börjar låsa in dig på hur det löses i e= visst språk Syntax för klasser class NAMN MEDLEMSFUNKTIONER; private: MEDLEMSVARIABLER; ; Klassexempel: beskrivning // this is in card.h #ifndef _CARD_H_ #define _CARD_H_ // do not use namespaces here class Card void print() const; int getvalue() const; string getsuit() const; private: string suit; int value; ; #endif 2

Klassexempel: implementakon Klassexempel: användning // This is in card.cc #include card.h // All members have access to all private parts void Card::print() const cout << value << of << suit; int Card::getValue() const return value; string Card::getSuit() const return suit; // This is in main.cc #include card.h int main Card my_card; // ERROR main have no access! my_card.suit = hearts ; my_card.value = 1 ; Hur inikeras medlemmarna? Hur inikeras medlemmarna? // Addition in card.h class Card // Konstruktor!! Card(string const& s, int v); //... resten som förut... ; // Addition in card.cc Card::Card(string const& s, int v) : suit(s), value(v) // this->suit = s; // value = v; // using constructor in main.cc #include card.h int main() Card my_card( hearts, 1); Card your_card( spades, 2); Card c; // Error, no deafult constructor // Should this be possible to do? Card one_to_rule_them_all( rings, 9999); // punkt-operatorn bör redan vara (lite) bekant my_card.print(); // 1 of hearts your_card.print(); // 2 of spades Klass, Instans, Objekt Klass beskrivning av något, beskrivning av en datatyp ingen variabel, inget minne Instans en variabel som överensstämmer med beskrivningen Objekt e= objekt är en instans av någon klass Användare av en klass Programmeraren som skapat klassen och underhåller klassen. Vill kunna ändra implementakonsmetod senare utan a= huvudprogrammet går sönder. Vill inte bekymra sig om hur kod som använder klassen fungerar. Programmeraren som använder klassen. Vill kunna använda klassen enkelt, bekvämt och intuikvt. Vill inte kunna använda klassen på fel sä=. Vill veta vad klassen kan användas Kll, inte hur det åstadkoms. Vill inte behöva uppdatera sin kod varje gång skaparen av klassen fixar en bugg eller lägger Kll nya funkkoner. Slutanvändaren som använder programmet. Mest intresseard av a= programmet som helhet fungerar korrekt. 3

Koncept Koppling (coupling) Hur många och starka kopplingar det finns mellan olika klasser Skall vara så få och svaga som möjligt Samhörighet (cohesion) Hur relevanta medlemmar är för en klass Skall vara så stor samhörighet som möjligt Inkapsling (encapsulakon) När metoder och data som hör ihop samlas och paketeras under e= tak För det är lä=are a= hantera som en enhet Ger flexibilitet a= ändra interna (privata) detaljer senare T.ex en klass InformaKon hiding InformaKon som inte är nödvändig för användaren göms undan eller görs oåtkomlig Åstadkoms t.ex. med inkapsling eller abstrakkon AbstrakKon (abstrackon) Döljer detaljerna av HUR något fungerar Sä=er e= enkelt namn på något, e= namn som berä=ar VAD som åstadkoms T.ex. funkkonen sinus Filuppdelning Inkluderingsfil (headerfil) KLASSNAMN.h Skydd mot dubbelinkludering (guard) Endast klassdefinikon och deklarakoner Deklarerar allt användaren kan behöva Inkluderas av alla som vill använda klassen (med och inte <>) Bra plats för dokumenterande kommentarer för hur klassen används, vad den kan användas Kll Kompileras aldrig (varning för KLASSNAMN.gch!) ImplementaKonsfil KLASSNAMN.cc Innehåller implementakon av alla klassens medlemsfunkkoner Innehåller deklarakoner och definikoner av allt användaren inte skall eller behöver känna Kll, och inte skall använda Inkluderas aldrig Kompileras av den som vill använda klassen (kan förkompileras!) E= exempel Kll: Datum Skapa en klass för a= representera e= datum! Diskutera, Rita, Förklara. date.h // guard, protect from double include (watch out for (AVOID) circular include!) #ifndef _DATE_H_ #define _DATE_H_ // representation of date and convenient functions... class Date Date(int y, int m, int d); Date(unsigned long long int sec_since_19700101); Date(int y, int w, string dayofweek); string getdayofweek(); // Monday, Tuesday, etc void nextdate(); int tostring(); // 20121108 int print(); int getyear(); // 2012 int getmonth(); // 1-12 int getweek(); // 1-53 int getday(); // 1-31 private: int year; // other representations possible! int month; // user of class should not know or care int day; // then we can use another representation later on ; #endif date.cc Mer exempel #include date.h Date::Date(int y, int m, int d)... Date::Date(unsigned long long sec_since_19700101)... Date::Date(int y, int w, string dayofweek)... int Date::toString()... int Date::print()... void Date::nextDate()... int Date::getYear()... int Date::getMonth()... int Date::getDay()... string Date::getDayOfWeek()... int Date::getWeek()... Tärning Spelet 21 (Blackjack) // All kod utelämnad, fundera själv på den 4

Klasser - special Konstanta medlemsfunkkoner StaKska medlemsvariabler Referensvariabler som medlem IniKeringslistor Vänner (inte Chandler, Joey, Monica, Phoebe, Rachel och Ross...) Explicit konstruktor Mer om klasser (senare Fö) De vikkga livscykel - metoderna: Konstruktor(er) Kopieringskonstruktor Tilldelningsoperator Destruktor Överlagrade operatorer Arv Polymorfi Reservslides Templates En mall för hur något skall uyöras Vad det uyörs på (datatyp) anges först vid användning Tills dess används platshållare Mallen kan ställa krav på vilka operakoner datatypen måste klara av Template: exempel template<typename PLATSHÅLLARE> void swap(platshållare a, PLATSHÅLLARE b) PLATSHÅLLARE save = a; // kopiering a = b; // tilldelning b = save; // swap() ställer kraven att datatypen // PLATSHÅLLARE kan kopieras och tilldelas Template: användning int main() int a, b; float c, d; double e, f; swap(a, b); swap(c, d); swap(e, f); swap(a, f); //? 5

Template: kompilering Templatekod kan inte kompileras Platshållaren är okänd! Kan bara kompileras ener a= platshållaren bestämts Undantag Kll reglerna om headerfiler och implementakonsfiler TemplateimplementaKonsfilen kompileras inte, den inkluderas sist i templateheaderfilen 6