Föreläsning 6. Klassmallar Templates kan givetvis även användas för klasser –Standardutseende template // Klassdefinition (*.h) class C { returtyp metod(parametrar…);...

Slides:



Advertisements
Liknande presentationer
Funktioner och programorganisation
Advertisements

Programmeringsteknik
Programmeringsteknik Föreläsning 6 Skolan för Datavetenskap och kommunikation.
Klassarv och inkapsling
Föreläsning 1.
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Polymorfism.
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Programkodens uppbyggnad
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
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.
Föreläsning 2, Kapitel 2 Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Pekare och speciell programstruktur i inbyggda system
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
int res2=Math.max(tal1,tal2);
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.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Föreläsning 4. Arv – bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Katt pälsfärg smutsa_ned() klös_soffa() Kanin pälsfärg slaktvikt.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmeringsteknik för Media1 & K1
OOP F6:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList toString() – metoden.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
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.
Introduktion till klasser, objekt och BlueJ Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 1. Innehåll Introduktion till objektorientering –OOP (objektorienterad programmering) –Objekt, instanser, klasser C++ –OO i C++ –Standardbibliotek.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Sid 1 CD5250 Daniel Flemström MDH/IDT COM Extremely Rough Overview.
Föreläsning 4 Klasser Och Objekt.
1. Ett problem/uppgift.
Objektorienterad programmering
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
Programmeringsteknik Föreläsning 8 Skolan för Datavetenskap och kommunikation.
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
1 Föreläsning 8 Mer om klasser och objektorientering.
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
Programmering i C# Laborationer.
7. Delegerare och notifierare
Objekt, Klass och Instans Analys av systemet ger mer eller mindre detaljerade objekt Objekten sorteras och klass-diagram ritas upp där relationer reds.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Programmeringsteknik
Programmeringsteknik för K och Media
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmall template void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras.
Föreläsning 5 Klasser och instanser
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Övning6 Läsning från fil till java objekt Sökning Sortering.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
C++ som ett bättre C Sid 1 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT C++ kurs CD5250, vårterminen 2000 Lärare: Mats Medin,
Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.
Objektbaserad programmering sid. 1 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner.
KPP053, HT2015 MATLAB, Föreläsning 4
Detaljer i exception-hantering
Objektorienterad programmering forts
Presentationens avskrift:

Föreläsning 6

Klassmallar Templates kan givetvis även användas för klasser –Standardutseende template // Klassdefinition (*.h) class C { returtyp metod(parametrar…);... }; template // Def. av metod (*.h) returtyp C ::metod(parametrar…) {... }

Templates i templates ”Templatiserade” klasser kan ta templates som argument –std::vector > vektor; –Observera; mellanslag mellan de avslutande hakarna!

Egna Namespaces För att skapa ett eget namespace att lägga klasser i använder man nyckelordet namespace –Standardutseende namespace jms { template class Matrix { returtyp metod(parametrar…);... }; }

Egna Namespaces 3 olika sätt att komma åt klassen Matrix –jms::Matrix matrix; Använder uttryckligen en klass i ett specifikt namespace –using namespace jms; Matrix matrix; Använder hela jms namespace (risk för kollisioner) –using jms::Matrix; Matrix matrix; Använder endast en delmängd av jms namespace (Matrix)

typeid I vissa fall vill man kunna avgöra ett objekts egentliga klass –Detta kan lösas med operatorn typeid void fordonsinfo(Fordon * fp) { if (typeid(*fp) == typeid(Personbil)) cout << ”fp är en personbil” << endl; else if (typeid(*fp) == typeid(Buss)) cout << ”fp är en buss” << endl; else if (typeid(*fp) == typeid(Lastbil)) cout << ”fp är en personbil” << endl; };

Upcast Vi har tidigare sett att man kan behandla specialiserade klasser på samma sätt som mindre specialiserade klasser void main() { Personbil bil; // Personbil skickas som ett Fordon fordonsinfo(&bil); } void fordonsinfo(Fordon * fp) { // Vi kan anropa Fordons alla medlemmar // Vi kan INTE anropa Personbils medlemmar! };

typecast Vi kan använda explicit typomvandling för att konvertera åt andra hållet –Vi kan konvertera från vilken klass som helst till annan valfri klass –Ingen säker metod eftersom vi teoretiskt sett kan typomvandla från ett ”Däggdjur” till en ”Bil” vilket ger en överhängande risk för programkrasch

typecast void main() { Horse horse; Car * car1 = &horse; // kompilatorn varnar Car * car2 = (Car*)&horse; // accepteras car2->ShiftGear(3); // PROGRAMKRASCH! }

Downcast För att göra en typsäker typomvandling finns i C++ specialoperatorn dynamic_cast –C++ kontrollerar att objektet verkligen är av rätt typ för att en säker typomvandling skall kunna ske –Klassen måste vara polymorf (virtuella metoder) void fordonsinfo(Fordon * fp) { Personbil * bil; bil = dynamic_cast (fp); if (bil) cout << ”fp är en Personbil”; else cout << ”felaktig typomvandling”; }

Felhantering Felhantering i C är ganska besvärlig –Oftast returneras felmeddelanden från funktioner. Returvärdena måste sedan kontrolleras samt hantera eventuella fel –Om en funktion returnerar ett objekt är det svårt att bestämma när ett fel har uppstått. –Kan ge konstiga konstruktioner

Exempel (felhantering) void main() { // division med noll! float resultat = dividera(5.0f, 0.0f); // vad är ett felaktigt returvärde i // detta fall? } float dividera(float taljare, float namnare) { // hur hanterar vi division med noll? return taljare/namnare; };

Exempel (felhantering C) void main() { int resultat; int retur = dividera(5.0f, 0.0f, &resultat); if (retur = 0) // Division med noll!! } int dividera(float taljare, float namnare, float result) { if (namnare == 0) return 0; *result = taljare/namnare; return 1; };

Exempel (felhantering C++) void main() { int result; try { result = dividera(5.0f, 0.0f); } catch (char * str) { // Division med noll!! } } float dividera(float taljare, float namnare) { if (namnare == 0) throw ”Division by zero”; return taljare/namnare; };

Exceptions Exceptions kan användas när det uppstår undantagsfel i programmet –Exempelvis om minnet tar slut, inläsning av en trasig fil, avbruten kommunikation m.m. Exceptions ger fördelen att programmeraren kan förutsätta att allt går bra, men ifall det skulle uppstå problem så kan dessa hanteras

Exceptions Ett exception slängs med operatorn throw Valfritt objekt kan slängas –Klasshierarkier med olika Exception-objekt kan med fördel användas Objektet returneras bakåt i anropshierarkin tills det fångas av en ”try – catch” rutin

Exceptions Exceptions kan ge en felhantering på hög nivå –Felet behöver inte tas omhand i den felande funktionen eller i den direkt anropande funktionen –Hantering av fel är inte alltid möjlig i den direkta närheten där felet uppstår, men kan med exceptions hanteras högre upp i anropshierarkin

Exceptions Standardbiblioteket har en definierad klasshierarki av exception-objekt invalid_argument out_of_rangelength_error domain_error exception logic_errorruntime_error range_error overflow_error underflow_error bad_allocbad_cast

Flera catch-uttryck void main() { try { File file(”c:\kalle.txt”); string str = file.ReadString(); } catch (OutOfMemoryException e) { // Slut på minne vid inläsning } catch (BadFileFormatException e) { // Felaktigt filformat } catch (Exception e) { // Andra standardfel som kan uppstå } catch (...) { // Fånga ALLA andra fel här (DivisionByZero m.fl.) } }

Flera catch-uttryck Ett try-catch block kan ha flera catch- uttryck för att hantera flera olika fel Endast ett catch-uttryck exekveras –Det första som matchar Ellipsis (…) fångar alla fel –Om denna används bör den vara sist av catch-uttrycken

Släng undantagsfel Syntax: –throw 4; –throw Klass; –throw Klass(konstruktorparametrar); Flera olika undantagsfel (objekt) kan slängas från en metod, men endast en i taget

Skicka vidare exceptions En metod kan behöva fånga undantagsfel utan att kunna hantera felet –Exempelvis kan en metod avallokera minne för att undvika minnesläckage. För att sedan vidare hantering av felet skall ske så kan metoden skicka vidare felet med ”throw;” i catch-uttrycket

Skicka vidare … void function() { try { File file(”c:\kalle.txt”); string str = file.ReadString(); } catch (...) { cout << ”Fel uppstod vid läsning” << endl; throw; // Skicka vidare } }

Vad händer vid exceptions? Stack unwind – anropsstacken plockas ned Objekt på varje nivå destrueras Minnesläckagerisk –Om man allokerat minne måste detta avallokeras. Lämpligen genom att fånga felet, avallokera minnet samt skicka exception-objektet vidare.

Händelsestyrd programmering Programmet är passivt –Programmet ligger inaktivt så länge ingenting händer Lämpliga metoder anropas automatiskt när vissa kriterier är uppfyllda –Musrörelser, Knapptryckningar m.m.

Fördelar Programmet slipper ”pollande” loopar, dvs loopar som hela tiden ligger och kollar om någonting skall göras. –Mindre processoråtgång –Viktigt i multiprocessystem (windows) Programmet kan koncentrera sig på att utföra uppgifter istället för att undersöka vad som skall göras

MFC Microsoft Foundation Classes Klasspaket (framework) Klasser för att programmera windows- program Bygger på Win32 API (application programming interface) Händelsestyrt

CCmdTarget Viktiga MFC-Klasser CObject CWnd CFrameWnd CView CWinThread CWinApp CDocument CDC Basklass som alla MFC-klasser ärver från Sköter hantering av meddelanden inom/mellan objekt Basklass som hanterar alla grafiska ytor Alla fönster ärver från denna Hanterar utritning av innehållet i CFrameWnd Trådhantering (multithreading) MFC-applikationer börjar i denna klass Motsvarande Modellen i Model-View-Controller Används vid all utritning till CWnd-objekt

Nyttiga MFC-Klasser CPoint CSize CRect CString CTime Point-klass, liknande de som skapats i laborationerna Hanterar storlekar (kompletterar CPoint) Beskriver rektanglar och dess operationer Stränghantering, liknande std::string Operationer för tidsberäkningar

MFC-Wizard I Visual C++ får man följande upplägg av MFC Wizard (projekttyp) –Klass härledd från CWinApp Startar och initierar windows-programmet –Klass härledd från CFrameWnd Sköter allt specifikt för applikationsfönstret –Klass härledd från CView Sköter all utritning av data från CDocument –Klass härledd från Cdocument Hanterar all applikationsdata

Projektskelett (Bounce) CBounceApp CMainFrame CBounceView CBounceDoc Skapar Innehåller Känner till