Klassbegreppet och C++ OOP UML Klasser och objekt i C++ Uppdelning i filer Attribut och metoder Inkappsling - åtkomst Klassattribut - objektattribut Objekt-orienterad programmering Att använda ett objektorienterat språk för att implementera en OO-design. Stöd för: Inkapsling Arv Dynamisk bindning 67 68 UML Unified Modeling Language Tree amigos Grady Booch James Rumbaug Ivar Jacobson Gav upp sina egna metoder för att uppnå standardisering UMLs fördelar Används i väldigt stor utsträckning inom industrin Brett användningsområde (inkl RT) Väletablerad, beprövad teknik Väldokumenterat Fritt (ej företagsägt) 69 70 1
Användbara modeller är Riktiga (accurate) Beskriver systemet korrekt Konsekventa (consistent) Inga konflikter Enkla att förmedla till andra Enkla att ändra Förståeliga Så enkla som möjligt men inte enklare De största problemen med dagens mjukvaruutveckling Många projekt börjar programmera för tidigt Lägger ner för mycket energi på kodningen Ledningen saknar förståelse för mjukvaruutveckling Programmerare känner sig säkrare när de programmerar än när de bygger abstrakta modeller 71 72 Målen med UML Modellera system (inte bara mjukvaran) Koppla ihop koncept Hantera skalning Skapa ett språk som kan användas av både människor och datorer Översikt Vyer visar systemet utifrån olika aspekter Diagram grafer som beskriver innehållet i en vy Modellelement representerar OO koncept såsom klasser, metoder och relationer Generella mekanismer för kommentarer etc 73 74 2
Vyer Diagram - Användningsfall Användningsfall (use-cases) Systemets funktionalitet som den uppleva av en extern användare (actor) Logisk Funktionaliteten inuti; statiska strukturen, dynamiska beteendet Komponent Parallellitet Spridning, Gruppering (deployment) Kund Öppna konto Ta ut pengar Bankman 75 76 Klassdiagram Objektdiagram Konto saldo : int Arv SparKonto Konto Mitt:Konto uttag() Lönekonto kontonr:int kontonr=1234 Aggregat Namn saldo:float saldo=123.50 Bankomat angekod() angebelopp() Association Kund Adress sättin(float) 77 78 3
Tillståndsdiagram Sekvensdiagram Stilla framme Går upp : Kund : Bankomat : Konto angekod( ) Går ner angebelopp() uttag( ) 79 80 Klasser och objekt i C++ Klasser deklareras i en typdeklaration, precis som structs i C Ett eller flera objekt skapas med klassen som mall Det finns två sätt att skapa objekt: På heapen (med new) Som lokala (automatiska) variabler En klass - två filer Ett bra sätt att dela upp sitt system Många filer blir det - bra att ha någon struktur på filsystemet Varje klass har två filer Headerfil (.h) med deklarationer (interfacet) Klassfilen (.cpp) med definitionen (implementationen) Det går att slå ihop dem, men det försvårar användningen av klassen, och minskar inkapslingen 81 82 4
Exempel Headerfil (Interface) Bara deklarationer av metoder och (tyvärr) attribut class Konto void sattin(int kr); //metod int saldo; //attribut ; Forts. Klassfil (Implementation) Definitioner av metoder void Konto::sattIn(int kr) saldo=saldo + kr; 83 84 Kombinerat interface/implementation Kan användas för enstaka klasser, inget att rekommendera class Konto void sattin(int kr) //metod saldo=saldo + kr; int saldo; //attribut 85 Flera klasser Endast.h-filerna behöver synas #include Passagerare.h #include Bil.h Bil::gasa() Bil::bromsa() Problem vid korsvis beroende #include Passagerare.h #include Bil.h Passagerare::metod1() Passagerare::metod2() 86 5
#include Passagerare.h class Bil Passagerare *pass; ; Korsvis användning Två headerfiler som refererar till varandras klassdeklarationer: #include Bil.h class Passagerare Bil *minbil; ; class Bil; //Def kommer class Pasagerare Bil *minbil; 87 Åtkomstnivåer Tre nivåer av inkapsling public - åtkomst för alla protected - Åtkomst för subklasser private - Åtkomst endast inom klassen class Bil void gasa(); protected: int hastighet; int modell; ; 88 Åtkomst forts. Klassattribut Både attribut och metoder kan ha alla nivåer En nivå (ex private) gäller tills nästa anges Default är private Attribut bör vara private Använd åtkomstmetoder för att inte bryta inkapslingen Metoder som endast använd inom klassen bör vara private, eller protected om det kan tänkas att subklasser kan komma att omdefiniera dem (svårt val ibland) Vanliga attribut hör till ett objekt, dvs flera objekt -> flera uppsättningar attribut med olika värden Klassattribut är gemensamma för alla objekt av en klass - hör till klassen Nyckelordet static anger klassattribut/metod Klassmetoder kan bara modifiera klassattribut (vilket värde avses annars?) 89 90 6
Exempel Räknare för antalet skapade objekt class Bil Bil() antal++; int getantal() return antal; static int antal; ; 91 7