Objektorienterad Programmering 8p TDP004 Klas Arvidsson

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Operatorer.
Föreläsning 2. Operatorer Tilldelning Kodblock { } if – satsen Logiska uttryck Att programmera.
Välkommen Vahid Mosavat
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
Programmering i C# 2. Inledande detaljer.
Programmering B PHP Lektion 2
Föreläsning 11 Arrayer.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Programmering i C# 3. Klasser.
Pekare och speciell programstruktur i inbyggda system
Programmeringsbegrepp
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Modulär programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
Föreläsning 2. Allmänt STL genererar varningar i Visual C++ –”#pragma warning (disable : 4786)”
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
1 Matlab, föreläsning 1 Oktober MATLAB Perspektiv på materialdesign Lina Kjellqvist Rum: K324 Telefon:
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
OOP&M - teori1 OOP– Föreläsning vecka Genomgång uppgifter Arbetsmetoder Repetition Kapitel 14 Metoder.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Selektion jämförande och logiska operatorer
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder.
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
KPP053, HT2015 MATLAB, Föreläsning 4
Lektion 4.
TDP004 Objektorienterad Programmering Fö 6 Objektorientering forts.
Föreläsning 3: Booleans, if, switch
Iteration – Repetitionssats - while
Presentationens avskrift:

Objektorienterad Programmering 8p TDP004 Klas Arvidsson

Introduktion Administrativ information. Föreläsningsplanering. Kort genomgång av grundläggande C++.

Administrativ information 8 föreläsningar inkl. en repetitionsföreläsning. Laborationsdel. Hemarbete krävs. Alla laborationer i era egna datasalar. Bekanta er med SU-salarna innan tenta, datormiljön skiljer sig lite.

Administrativ information, forts. Laborationerna schemalagda i halvklass, två grupper. Föreläsningarna går igenom exempel, inte allt som ingår i kursen. Bok krävs. Räkna inte med att hinna göra allt på laborationerna. Hemarbete krävs.

Examinationsmoment Dugga U/G –Godkänt resultat ger poäng tillgodo på tentamen. Laborationsdel Tentamen.

Laborationsdel 3 st seminarier med obligatorisk närvaro. –Utblickar och diskussion. 3 st dojos med obligatorisk närvaro. –Diskussion och implementation av uppgifter i mindre grupper. 5 parvisa laborationer som lämnas in. –Lär er använda emacs effektivt på laborationerna. Laborationsdelen ger 4 hp. Betyg U,G.

Tentamen Enskild datortentamen 4hp. Betyg U, 3, 4, 5. Man kan få poäng tillgodoräknade på tentamen genom att: –Klara duggan. –Vara närvarande på minst 6 av 8 föreläsningar. För godkänd kurs krävs båda momenten godkända och betyget på datortentamen blir kursbetyget. OBS! I studiehandboken heter labdelen LAB2 och tentan TEN2. Namnet LAB2 har inget med laboration 2 i labdelen att göra.

Kurslitteratur Rekommenderas starkt: –C++ Primer, 4th Edition. Lippman, Lajoie, Moo. Addison-Wesley. Möjlig: –C++ direkt, 2:a utgåvan. Skansholm. Studentlitteratur. Båda fungerar, C++ Primer är lite mera omfattande och lämplig att behålla efter kursen.

Föreläsningsplanering Fö 1 Administration, introduktion och grunder. Fö 2 Objektorientering grunder. Fö 3 Standardbiblioteket (STL). Fö 4 Strömmar. Fö 5 Minneshantering. Fö 6 Objektorientering, arv, polymorfi. Fö 7 OO design, tips och råd. Fö 8 Repetition, frågestund.

C++ Baserat på C. Möjlighet till objektorienterad programmering med klasser, polymorfi, operatoröverlagring mm. C++ är ett stort och flexibelt språk. Möjligt att programmera på både hög och låg nivå.

Ett första C++-program #include // För att kunna mata in och ut. int max(int x, int y) { if(x > y) { return x; } else { return y; } int main()//Huvudprogram { int i; int j; std::cout << ”Input two integers: ”;// Skriv ut instruktioner. std::cin >> i >> j;// Spara de inmatade värdena. int greatest = max(i, j);// Anropa funktionen max. std::cout << ”The greatest integer was ”<< greatest <<std::endl;// Skriv ut resultatet. return 0;// Returnera }

Programstruktur Programmet kan och bör delas upp i flera filer. –I headerfilen.h /.hpp definieras funktioner, datatyper mm. –I implementationsfilen.cc /.cpp implementeras funktionerna som definerades i headerfilen. –Logiskt med uppdelning vid OO-programmering. En main-funktion måste alltid finnas. Platt struktur, ej nästlade funktioner.

Datatyper Samlingsnamn för variabler och konstanter. Deklareras med namn. Tilldelning av värde vid deklaration kallas initiering. Ex: int age;// heltalsvariabel float salary = ;// flyttalsvariabel som initieras const double pi = ;// flyttalskonstant, måste initieras

Datatyper, forts. Inbyggda datatyper: –short, int, long – heltal. –float, double, long double – decimaltal. –bool – Boolesk variabel. Endast två giltiga värden: true, false. –char, wchar_t – bokstäver. –void - speciell typ, betyder ”inget värde”. Programmeraren kan definiera typer.

Datatyper, forts. En variabel kan tilldelas värde vid deklaration, s.k. initiering. En konstant måste initieras, och kan sedan inte ändras. int units = 1, int number(3); //Inte vanligt men tillåtet. Samma som int number = 3; const int moreUnits = units + 2; bool married = false; char middleInitial = ’G’;

Datatyper, forts. Olika typer för heltal skiljer sig åt pga vilka värden de kan spara. Ex: int kan innehålla större (och mindre) värden än short kan. Olika typer av flyttal skiljer sig åt pga vilken precision be har. Ex: double har större noggranhet än float. Bool representeras som ett heltal där 0 representerar false, och alla andra värden true. Ex: bool a = … cout<<a; Ger kanske värdet 12, dvs true.

Variabelscope ”Var en variabel finns tillgänglig”. En global variabel finns tillgänglig överallt. En lokal variabel finns så länge dess scope existerar. Ex:

Aritmetiska operatorer + - / * % % är modulo-operatorn. Återstoden vid heltalsdivision. Ex: 21 % 6 = 3 Ex: op någon av ovanstående: i = j; // Betyder i = i j. i += j; // Betyder i = i + j;

Operatorer och operander Exempel på kombinationer av uttryck: x = 3.25 // Tilldelning. 2 * pi * radius // Multiplikation, sammansatt uttryck. - x // Negation. sin(x) // Funktionsanrop. x < y // Relationsuttryck.

Prioritet vid sammansatta uttryck Alla operatorer har en prioritet. En operator med högre prioritet har företräde jämfört med en operator med lägre prioritet. –Ex: a + b * c beräknas som a + (b * c). Om operatorerna har samma prioritet gäller en viss beräkningsriktning beroende på nivå: –Ex: a + b – c beräknas som (a + b) – c. Parenteser kan användas för att få en viss ordning: –Ex: i uttrycket (a + b) * c beräknas först (a + b).

Stegningsoperatorer Följande betyder samma sak: x = x +1; x += 1; x++; x++ (--) är den sk postfix stegningsoperatorn, vilket ökar (minskar) värdet med ett. Prefix stegningsoperatorn: ++x, --x. Skillnad mellan x++, ++x: se C++ Primer s. 162.

Operatorer forts. == test för likhet. != skiljt från >, >=, <=, < Ex: –bool a = true; –bool b = function(); –bool isDifferent = a != b; Observera den synbara likheten mellan tilldelning = och jämförelse == !

Logiska operatorer bool, som tidigare två värden: true/false. && ”och” mellan två bool. || ”eller” mellan två bool. ! ”skiljt från” mellan två bool. Ex: –bool a = true, b = false; –bool c = a || b; // c = true –bool d = a && b; // d = false –bool e = a ! b; // e = true

Val- och upprepnings-satser if()-else. for(), while(), do-while(). if()-else används vid val. for används mest för då man vet hur många iterationer som ska göras, annars används while eller do-while. Med kommandot break avbryter man switch, while, do-while, for-loop och hoppar till satsen närmast efter.

if-satsen if(villkor) { //Satser som utförs om villkor är sant. } else { //Satser som utförs om villkor är falskt. }

If-satsen, forts. Else-delen kan utelämnas. –Om else utelämnas sker ingenting om villkoret är falskt. If-satser kan nästlas. Vad händer om man har många olika alternativ, och ska göra olika saker beroende på något variabelvärde?

switch-satsen switch(variabel) { case 1: { // Satser som utförs om variabel har värde 1. // Observera avsaknaden av break; } case 2: { // Satser som utförs om variabel har värde 2. break; } … default: { //satser om utförs om variabel inte har något av ovanstående värden. }

switch-satsen, forts. Bra om det finns många olika värden. Observera break! –Ointuitiv språkkonstruktion! default är inte obligatoriskt, men uppmuntras. Variabeldeklarationer kan enbart ske genom att införa block.

for-satsen for(initieringssats; villkorssats; förändringssats) { //satser som utförs så länge villkorssatsen är uppfylld. } Ex: int i; for(i = 0; i < 3; i++) { std::cout<<i<<” ”; } ->

for-satsen, forts. Beräkningsordning: 1. Initieringssatsen utförs. 2. Avbrottsvillkoret beräknas. Om detta är falskt avslutas for-satsen. 3. Satserna ”i kroppen” utförs. 4. Förändringssatsen utförs. Åter till punkt 2 ovan.

while-satsen while(villkor) { /* satser som utförs så länge villkor är uppfyllt */ } Om villkor är falskt, händer inget. Programmeraren måste själv avbryta m.h.a. tex break eller genom att se till att villkor evalueras till false.

do-while-satsen do { /* satser som utförs första gången och så länge villkor är uppfyllt */ } while(villkor); //Observera att do-while avslutas med; Genomlöps alltid minst en gång. Programmeraren måste själv avbryta mha tex break.

Typkonvertering float h = 3.996; int i = h; i = ? i = 3 p.g.a. trunkering. Hade du tur fick du en varning av kompilatorn…! Implicit typkonvertering utan någon kontroll från användarens sida. Om vi vill ha kontroll av konverteringen används cast.

Typkonvertering, forts. I C görs typkonvertering enligt följande: float h = 3.996; int i = (int)h; Vi ska inte använda konvertering som i C. I C++ används static_cast eller ”funktionssyntax”. float h = 3.996; int i = static_cast (h); //Värdet på h ändras inte. static_cast syntax: static_cast (variabel)

Typkonvertering, forts. ”Bryter mot reglerna” på programmerarens ansvar. Det finns flera olika sorters cast: static_cast dynamic_cast reinterpret_cast const_cast Med const_cast kan vi konvertera från konstanter. Använd typkonverteringar med försiktighet. Genomtänkt kod behöver sällan typkonverteras.

Tecken och texter Inbyggda datatypen char. Datatypen string lagrar text. Vi återkommer till datatypen string i föreläsningen om STL.

Teckenhanteringsfunktioner En del användbara funktioner finns i. char c = ’a’; char b = toupper(c); // b = ’A’ islower(c);// returnerar true. Offtopic: C-headers inkluderas med prefixet c men utan.h i C++ blir alltså

Grundläggande om funktioner Funktion är ett viktigt koncept inom OO pga att den kan användas för inkapsling av data och beräkningar. En funktion ska utföra en eller ett fåtal saker och inte lämna oönskade sidoeffekter efter sig. Funktioner deklareras i h-filen: returvärde funktionsnamn(parameterlista); Ex: float smallest(float valueA, float valueB); är en funktion som heter smallest, returnerar en float, och tar två inparametrar av typen float: valueA och valueB.

Funktioner, forts. Ex: float smallest(float valueA, float valueB) { if(valueA < valueB) { return valueA;// Returnerar resultat. } else { return valueB;// Returnerar resultat. }

Returvärde och lokala variabler Antingen returnerar funktionen något eller så gör den inte det (returtyp void). Värdet kopieras ut. Om något ska returneras görs detta med return variabel. Även om funktionen har returtyp void så kan man returnera från funktionen med return. Returtypen kan vara av godtycklig typ: inbyggd eller egendefinierad. Inuti funktionen kan variabler deklareras på vanligt sätt, dessa kallas lokala variabler.

Inparametrar I funktionen: formell parameter ”platshållare” för värdet som anges vid anrop. Fungerar som lokal variabel. Vid anrop: actual parameter (argument) kopieras till formella parametern. En funktion tar noll eller flera parametrar d.v.s. data som den behöver för att utföra sin beräkning. När funktionen anropas måste argumenten vara i samma ordning och av samma typ som parametrarna i funktionsdeklarationen. Vid möjlighet och behov gör kompilatorn automatisk typkonvertering.

Inparametrar, forts. Värdekopiering – call by value int max(int a,int b) a och b kopieras vid funktionsanrop. Ev. ändringar på a och b görs på kopiorna. Referensöverföring – call by reference int max(int& a,int& b) a och b refereras direkt, inga kopior skapas. Ev. ändringar på a och b görs på ”originalen”. Generellt vill vi undvika onödig kopiering av data.

const inparametrar Vi kan deklarera vanliga konstanter med ordet const. På samma sätt kan vi göra inparametrar konstanta. int max(const int& a, const int& b); Värdet på parametrarna a och b kan nu inte ändras i funktionen max.

const returvärde Även en funktions returvärde kan deklareras const: const int max(const int& a, const& int b); Används företrädesvid då referenser eller pekare returneras (i övrigt har man ändå bara en kopia). Den anropande funktionen kan då inte ändra på returvärdet. Man kan ha en egen kurs om hur man använder const…

Exempel Vi kan använda & för att slippa kopiera data i onödan. För att garantera att vi inte ändrar på datan const-deklarerar vi inparametern. Ex: int findGreatest(const std::list & values); list är en lista som innehåller element av typen int, hör till standardbiblioteket (STL). M.h.a. const & har vi åstadkommit säker och snabb kod. Kompilatorn hjälper oss att inte ändra på inparametern.

Default-parametrar int f(int a, int b, int c = 0); // i.h-filen Parameter c har ett default-värde, detta möjliggör följande anrop: int x = 2, y = 3, z = 4; f(x, y); men också f(x, y, z); Vi kan undvika att ge ett värde på parametern c då vi anropar f. Default-parametrar måste stå sist i parameterlistan.

Sammanfattning Datatyper. Variabler och konstanter. Villkorssatser. Repetitionssatser. Funktioner. Nästa föreläsning: grundläggande OO.