Institutionen för datavetenskap Umeå Universitet F2: Krav på objektorienterat språk Objektorienterad programmering för ingenjörer, VT-04
Innehåll Krav på objektorienterat språk Avvägningar vid design av objektorienterat språk Lite historik och exempel Programmeringsspråket C++ Bakgrund Designmål Egenskaper UML 04-05-25 2
Krav Fyra krav måste vara uppfyllda Abstrakt datatyp Inkapsling Arv Polymorfism och dynamisk bindning 04-05-25 3
Abstrakt datatyp Abstrakta datatypen kallas ofta klass Data kallas attribut Funktionalitet ges med metoder Att anropa en metod kallas att skicka ett meddelande till ett objekt 04-05-25 4
Inkapsling Kunna gömma information Väldefinerade gränsytor Ändring av objektets tillstånd sker genom metoderna Ändring av intern representation förändrar inte gränsytan set(sx, sy, ex, ey) { //... as before set(sx, sy, ex, ey) { startx = sx; starty = sy; endx = ex; endy = ey; } startx, starty, endx, endy } len = sqrt((ex sx)^2 + (ey sy)^2) startx, starty, endx, endy, len length() { return sqrt((endx startx)^2 + (endy starty)^2) } length() { return len; } 04-05-25 5
Arv Funktionalitet för återanvändning Inom systemet Generella bibliotek Tredje-parts komponenter Ändring i befintlig kod skall ej behövas Kräver generell design av utvecklare 04-05-25 6
Arv En subklass ärver från en superklass (basklass) Åtkomst av basklassens attribut måste kunna styras -> inkapslingskravet. Åtkomstnivåer Metoder skall kunna omdefineras -> ingen ändring i redan skriven kod. Två sorters metoder och två sorters attribut Instansmetoder och -attribut Klassmetoder och -attribut 04-05-25 7
Abstraktionsmodell Förenklat: Kan ses som en samling datorer/objekt som kommunicerar via meddelanden. Varje objekt är en abstraktion av en dator I den mening att den lagrar data och kan manipulera det. Identifiera objekt -> simulera processer och kommunikation Objektorienterad programmering är att lösa problem genom att identifiera objekten i problemet och sedan simulera dem, dess processer och den nödvändiga kommunikationen. 04-05-25 8
Avvägningar Vid design av ett objektorienterat språk måste man tänka på: Hur hanteras olika datatyper? Typkontroll? Statisk Dynamisk Minneshantering Explicit allokering Implicit allokering 04-05-25 9
Datatyper Primitiva datatyper Maskinnära typer, t.ex char, int, float, etc Sammansatta datatyper struct i C Abstrakta datatyper Attribut och metoder 04-05-25 10
Datatyper Tre sätt att angripa problemet med typsystemet: Den rena modellen, allt är objekt Utgå från ett imperativt språk och lägg till en objektmodell Objektmodell i botten men med imperativ stil för primitiva datatyper 04-05-25 11
Typkontroll Om språket skall vara starkt typat: Statisk typkontroll Restriktioner vid polymorfism Två sorters typkontroll vid metodanrop: Parametrarna måste stämma Returtypen likaså Alternativet är dynamisk typkontroll Vänta med kontrollen tills metoden anropas Kostsamt och försenar typkontrollen 04-05-25 12
Minneshantering Var allokera objekten? Tre sätt: Statiskt av kompilatorn Dynamiska objekt på stacken Eller på heapen Om heapen enda sättet Uniform metod Inga pekare som måste derefereras 04-05-25 13
Minneshantering Hur deallokeras objekten? Explicit Problem med dangling pointers Implicit Garbage Collection i någon form 04-05-25 14
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till... 04-05-25 15
Programmeringsspråk Rena objektorienterade språk Smalltalk Eiffel Java C++ och Ada stöder objektorientering Det går att programmera objektorienterat i C eller assembler, men: Inkapsling på fil-nivå finns Betydligt mer overhead för arv, polymorfism, m.m. Exempel är GTK och GLib 04-05-25 16
Programmeringsspråk public class Konto { private float saldo; } public float uttag(float belopp) { //... } Java class Konto { public: float uttag(float belopp) { //... } private: float saldo; } C++ class Konto creation make feature make is do print ( Hello World!%N ) end end Eiffel 04-05-25 17
Smalltalk-exempel Objekt subclass: #SixSidedDie instancevariablenames: 'top sides' classvariablenames: '' category: 'Gaming' sides ^ sides top ^ top toss ^ top _ ((Random new next) * sides) asinteger + 1 sides: nsides sides _ nsides. self toss. SixSidedDie class instancevariablenames: '' new: nsides ^ self new sides: nsides. Smalltalk 04-05-25 18
Bakgrund C++ Skapades av Bjarne Stroustrup ca 1982 Snabbast växande i programhistorien Språket utvecklas fortfarande ISO/IEC 14882-1998 C++ Committee ANSI: J16 (förr X3J16) Bjarne Stroustrup http://www.research.att.com/~bs/homepage.html 04-05-25 19
Rolig fakta? Fejkad IEEE-intervju cirkulerar på nätet påstås erkänna att C++ ett hemskt språk för att skriva ohanterbar (unmaintainable) kod. Bjarne kallade språket först C with classes I folkmun kallades det new C Vilket ledde till att C började kallas plain C, straight C, old C Det senare lät förolämpande så Bjarne döpte om språket till C++ Och varför just C++? ++ är inkrement-operatorn i C Utökning av C Blev officiell standard 14 november 1997 kl. 10.30 04-05-25 20
Designmål C++ Kompatibelt med C Portabelt Bättre C Stöd för objektorientering Abstrakta datatyper Arv Polymorfism m.m. Effektiva program 04-05-25 21
Egenskaper C++ Hårdare typkontroll -> Säkrare program Referenstyp -> Blir mer lättläst Egendef typer, klasser -> Bygger ut språket Streams -> Säkrare I/O Arv -> Fundament i OO Dynamisk bindning -> Polymorfism Typparametrisering -> Generella mallar Undantagshantering -> Bra felhantering 04-05-25 22
Designval C++ Typsystem Utgått från imperativt språk och lagt till objektmodell Minneshantering Statisk allokering Dynamiska objekt på stacken Objekt allokerad på heapen Explicit allokering (new och delete) 04-05-25 23
Klasser och objekt, C++ Deklareras på liknande sätt som structs i C Två sätt att skapa objekt från en klass På heapen (med operatorn new) Som lokala (automatiska) variabler En klass två filer Header-fil (.h) och klassfil (.cc) Alt. kombinerat -> försvårar användning av klassen och minskar inkapsling Korsvis användning (mer om detta senare) 04-05-25 24
Hello World i C++ Mer under F4 04-05-25 25
UML Unified Modeling Language Three amigos Grady Booch James Rumbaug Ivar Jacobsen Gav upp sina egna metoder för att uppnå standardisering 04-05-25 26
Fördelar Används i väldigt stor utsträckning inom industrin Brett användningsområde Väletablerad, beprövad teknik Väldokumenterat Fritt (ej företagsägt) 04-05-25 27
Mål Modellera system (inte bara mjukvaran) Koppla ihop koncept Hantera skalning Skapa ett språk som både människor och datorer kan förstå 04-05-25 28
Översikt Vyer Diagram Modellelement Generella mekanismer för kommentarer etc 04-05-25 29
Användningsfall Use cases Systemets funktionalitet som den upplevs av en extern användare (actor) Öppna konto Kund Ta ut pengar Bankman 04-05-25 30
Klassdiagram 04-05-25 31
Klassdiagram Dependency: Association: Aggregation: Composition: Generalisation: Realisation: A A A A A A B B B B B B 04-05-25 32
Objektdiagram 04-05-25 33
Tillståndsdiagram 04-05-25 34
Sekvensdiagram 04-05-25 35