Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Funktioner och programorganisation
Programmeringsteknik Föreläsning 6 Skolan för Datavetenskap och kommunikation.
OOP Objekt-orienterad programmering
Föreläsning 1.
Metoder i java Det finns två typer av metoder i java
Arv.
Inkapsling.
Polymorfism.
Metoder.
Programmeringsteknik för K och Media
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.
Programkodens uppbyggnad
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
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.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
Objektorienterad programmering i Java
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
Klasser och objekt Klasser, objekt och instansvariabler
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.
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.
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
Räckvidd och synlighet. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det.
Programmering i C# 5. Structer.
Arv.
Programmeringsteknik för Media1 & K1
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.
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
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.
Föreläsning 4 Klasser Och Objekt.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Objektorienterad programmering
Föreläsning 2. Allmänt STL genererar varningar i Visual C++ –”#pragma warning (disable : 4786)”
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
7. Delegerare och notifierare
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.
Objekt, Klass och Instans Analys av systemet ger mer eller mindre detaljerade objekt Objekten sorteras och klass-diagram ritas upp där relationer reds.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
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 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
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.
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.
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.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
OOP&M - teori1 OOP&M del II– Föreläsning 5 vecka 50 OBJEKT Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle Book String.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
Ö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.
TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder.
TDP004 Objektorienterad Programmering Fö 6 Objektorientering forts.
TDP004 Objektorienterad Programmering Fö 8 Sammanfattning
Detaljer i exception-hantering
Objektorienterad programmering forts
Presentationens avskrift:

Föreläsning 3

Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner och datamedlemmar };

Tillgänglighet (kap. 7.1) Utanför klassen kommer man bara åt synliga medlemmar (public) Utifrån används punkt eller pil för åtkomst av medlemmar (public) –Objektnamn.medlemsnamn –Pekare_till_objekt->medlemsnamn Inne i en medlemsfunktion kan man komma åt alla medlemmar utan punktnotation

Medlemsfunktioner (kap. 7.2) Bör definieras separat, utanför klassdefinitionen (i cpp-filen) –resultattyp klassnamn::funktionsnamn(parametrar) Kan även definieras i klassen om funktionen är väldigt kort (motsvarar inline)

h-filen #ifndef KLASSNAMN_H #define KLASSNAMN_H class Klassnamn { Klassnamn(); // Defaultkonstruktor Klassnamn(int p, int q); void Funktionsnamn(int p); }; #endif // KLASSNAMN_H

cpp-filen #include ”Klassnamn.h” Klassnamn::Klassnamn() { } Klassnamn::Klassnamn(int p, int q) {... } void Klassnamn::Funktionsnamn(int p) {... }

Initieringslistor (kap ) Hur skall medlemsobjekt vars konstruktor tar argument initieras? –Exempel: Size Initieringslistan har formen: –: d1(uttryck), d2(uttryck)... Klassnamn::Klassnamn(int width, int height) : m_size(width,height) {... }

Initieringslistor forts. Referenser kan bara initieras när de deklareras Hur skall referenser i klasser initieras? Member initializer list i konstruktorn Klassnamn::Klassnamn(Objekt & o) : m_referens(o) {... }

Övningar, exempel Konstruera en klass Person. En person skall bestå av: –Namn –Adress –Ålder –Föräldrar (Personer) Gör lämpliga metoder och konstruktorer

this-pekaren (kap. 8.2) I alla metoder finns en pekare som heter ”this” ”this” pekar ut det objekt som metoden arbetar på Via this-pekaren kommer man åt datamedlemmar

this forts. void Size::SetX(int x) { m_x = x; } void Size::SetX(int x) { this->m_x = x; } Dessa två metoder är ekvivalenta –Kompilatorn ”förstår” oftast när this-pekaren skall användas, därför behöver man oftast inte använda this-pekaren.

this forts. Metoder kan returnera this-objektet Kan användas för att länka ihop metodanrop Klass & Klass::metodnamn(parametrar) {... return *this; } Klass objekt; objekt.metod1(...).metod2(...).metod3(...);

Vänner (kap. 8.3) Tillåter viss extern åtkomst av protected och private medlemmar Bryter mot objektorienteringen Undvik så mycket som möjligt Dock nödvändig i vissa fall

Vänner forts. Vänner kan vara –Klasser –Funktioner Class C { friend returtyp funktion(parametrar); friend class C2;... };

Operatoröverlagring (kap. 8.4) Funktioner eller metoder som anropas genom aritmetiska tecken istället för metodnamn –Namn börjar med operatorX –X ersätts med +, -, =, !=, >, >, << m.fl. Kan snygga upp programkoden Ökar dock inte språkets uttrycksmöjligheter Syntaktiskt socker

Tilldelningsoperatorn Size & Size::operator=(Size const & s) { if(&s != this) { m_width = s.m_width; m_height = s.m_height; } return *this; } Size s1; Size s2; s1 = s2; // Tilldelningsoperatorn används // OBS skillnaden mot tilldelningskonstruktorn // Tilldelningsoperatorn används inte här Size s3 = s1;

Tilldelningsop. forts. if(&s != this) –Kopiera aldrig dig själv return *this; –Returnera objektet själv som resultat av tilldelningen

Operatorn += Liknar tilldelningsoperatorn i användningsätt Size & Size::operator+=(Size const & s) { m_width += s.m_width; m_height += s.m_height; return *this; } Size s1(10,5); Size s2(2,2); s1 += s2; // += operatorn används // s1 skall nu vara (12,7)

Operatorer Kan ha en operand (unära) eller två operander (binära) Operatorerna har samma prioritet som motsvarande fördefinierade operatorer Kan konstrueras som medlemsfunktioner eller vänfunktioner

Binära operatorer Har två operander –Den vänstra är objektet själv (this) –Den högra fås som första parameter Tar en parameter då det är en medlemsfunktion, två för vänfunktioner Exempel: ==, !=, +=, -=, +, -

Exempel (binär operator) Size s(10,10); Size t(5,5); Size u = s+t; // s+t skapar ett temporärt objekt // s är första operand, t andra // Detta är därför fullt möjligt int w = (s+t).Width(); // ger w = 15 Size Size::operator+(Size const & s) const { // this är första operand, s andra Size temp = *this; temp += s; // använd += operatorn return temp; // returnera temporärt objekt }

Unära operatorer Har en operand Tar oftast inga parametrar Exempel: ++, --, - Size Size::operator-() const { Size temp; temp.m_width = -m_width; temp.m_height = -m_height; return temp; }

Indexeringsoperatorn operator[] Används för indexering i t.ex. std::vector Standardbeteende är att lämna tillbaks en referens till ett element, så kan man både läsa och skriva till det indexerade elementet

Indexeringsoperatorn forts. Skapa också en ”const”-variant av de metoder som returnerar referenser till objekt int & Vektor::operator[](int index) {... return element; } int Vektor::operator[](int index) const {... return element; }

Övriga operatorer operator()(...); –Funktionsanropsoperator –Valfritt antal parametrar operator typ() const; –Inga parametrar eller returvärde anges –Omvandlar från den aktuella klassen till typen typ –Anropas automatiskt när typomvandling behövs

friend-operatorer Operatorer som inte passar i klasser Måste användas när vänsteroperanden inte tillhör den aktuella klassen Har lika många parametrar som antal operander friend returtyp operatorX(parametrar);

friend-operatorer forts. // friend-funktion ostream & operator<<(ostream & o, Size const& s) { o << s.m_width << ”,” << s.m_height; return o; } // Tillägg i Size-klassen friend ostream & operator<<(ostream & o, Size const& s); Size s(10,4); // skriv ut ”s har storleken 10,4.” cout << ”s har storleken ” << s << ”.” << endl;

Teknisk beskrivning av metodanrop i C++/C // C++ void Klass::metod() { m_variabel = 5; } /* C */ void Klass_metod(struct Klass * this) { this->m_variabel = 5; } instans.metod(); // Anrop till ”metod” Klass_metod(&instans); // Motsvarande C anrop

Objektorienterad analys (kap. 6.1) Analysfasen är till för att bestämma vad som skall göras –Sätt dig in i problemet –Skapa en grov modell av hur systemet skall vara uppbyggt Objekt Attribut Relationer

Klassdiagram Enkel beskrivning av klasser –Klassnamn –Dataattribut –Operatorer Person Namn Ålder Föräldrar GetName GetAge SetName …

Har-relation Aggregat Grafisk beskrivning av hur objekt är kopplade till varandra (har-relation) Bilen har en motor BilMotor

Har-relation forts. Bilen har en motor med flera cylindrar Fylld cirkel = en eller flera Ofylld cirkel = noll eller en MotorCylinder

Har-relation forts. Sammansättning av flera delobjekt Bil MotorHjulKaross

Känner till-relation Association Känner till objekt men ”äger” dem inte BilPerson ägerägare

Känner till-relation Association mellan objekt av samma klass Person make/maka

Är-relation Arv och ärvda egenskaper Gemensamma egenskaper med andra klasser Exempel –En bil är ett fordon –Motorcykel är ett fordon

Är-relation forts. Fordon Hastighet Vikt Ändra_hastighet Bil Motoreffekt Växla Båt Dödvikt Sväng Tåg Antal_vagnar Koppla_vagn

Objektorienterad design Designfasen är till för att bestämma hur saker skall lösas Ingen kristallklar gräns mellan analys och design

Systemdesign Beslut om vilka system som skall ingå –Windows / X-Windows –SQL-server –Tredjepartssystem

Objektdesign Konkretiserar de objekt som identifierades under analysfasen –Dataattribut –Metoder –Parametrar Algoritmer Programspråk

Modelleringsspråk OMT Objectory Booch UML (Unified Modeling Language) –OMT + Objectory –Industristandard –Modelleringshjälpmedel, inte någon metod