UML-Light (Note: UML-Light T33, ver. 2004) Finn Overgaard Hansen, IHA Programmering PRG + Semesterprojekter PRJ+PRJ2 Version: 20--2004 Indhold Første del: Introduktion til UML-Light og UML Klasser og objekter Klassediagrammer Tilstandsdiagrammer Sekvensdiagrammer Anden del: Sammenhæng mellem UML-Light og kode Gennemgang af eksempler Slide 2 af 5
Introduktion til UML UML (Unified Modeling Language) er en OMG standard defineret i 997 Seneste version er UML.4 UML 2.0 er på vej. OMG (Object Management Group) er en sammenslutning af ca. 800 firmaer (www.omg.org) UML beskriver en standardnotation for objektorienteret udvikling UML beskriver ikke en udviklingsproces eller udviklingsmetode Slide 3 af 5 UML-Light, -++ og UML UML UML-Light++ UML-Light Slide 4 af 5
Oversigt over de tre første semestre Objektbaseret Programmering Objektorienteret Programmering Objektorienteret analyse & design PRG I-PRG2 I-PRG3 Semesterprojekt PRJ UML-Light Semesterprojekt I-PRJ2 UML-Light++ Semesterprojekt I-PRJ3 OOA+OOD UML Slide 5 af 5 Objektbaseret og Objektorienteret udvikling Objektbaseret udvikling (UML-Light) Baserer sig på Information Hiding og indkapslingsprincippet Anvender klasser og objekter ved modelleringen Kan implementeres i et ikke objektorienteret programmeringssprog som f.eks. C og assembler Objektorienteret udvikling (UML-Light++,UML) Tilføjer begreber som generalisering/specialisering (nedarvning) og polymorfi (virtuelle operationer i C++) Anvender Use Case teknikken ved kravspecifikation Kræver et objektorienteret programmeringssprog ved kodningen som f.eks. C++, Java eller C# Slide 6 af 5
UML-Light diagramtyper De vigtigste UML-Ligth diagrammer er: Klassediagrammer (Class Diagrams) Sekvensdiagrammer (Sequence Diagrams) Tilstandsdiagrammer (State Charts) Derforuden medtager UML-Light også: Deploymentdiagrammer (Deployment Diagrams) kan vise et systems hardwarekomponenter Aktivitetsdiagrammer (Activity Diagrams) anvendes til detaljeret design af en operation Slide 7 af 5 Specifikation og implementering af et modul For et SW modul Blackbox view Specifikation Header Fil (.h) i C og C++ Whitebox view Implementering Kode fil (.c) i C og (.cpp) C++ Figur Slide 8 af 5
Indkapslingsprincippet Information Hiding David Parnas 972. Eksempler på indkapsling Slide 9 af 5 Notation for en klasse () Navn (navneord ental) KlasseA attributa attributa2 operationa() operationa2() operationa3() operationa4() Klassens attributter (data) Klassens operationer (funktioner, procedurer) Figur 2 Slide 0 af 5
Notation for en klasse (2) Med tilføjelse af synlighed (visibility) KlasseB private public -attributb -attributb2 -operationb4() +operationb() +operationb2() +operationb3() Figur 3 Slide af 5 Et eksempel på en klasse Klasse To Bil objekter Bil -hastighed -gear -omdrejningstal -motorstørrelse +start() +stop() +udkoble() +skiftgear() +kør() +brems() Figur 4 Slide 2 af 5
UML Notation for objekter Klasse Objekter Bil -hastighed -gear -omdrejningstal -motorstørrelse +start() +stop() +udkoble() +skiftgear() +kør() +brems() veteranbil:bil jaguar:bil Typen Instanserne Figur 5 Slide 3 af 5 Klasse og C++ kode UML Bil -hastighed -gear -omdrejningstal -motorstørrelse +start() +stop() +udkoble() +skiftgear() +kør() +brems() Specifikation Bil.h class Bil { public: void start(); void stop(); void udkoble(); void skiftgear(); void koer(); void brems(); private: long hastighed; unsigned char gear; float omdrejningstal; int motorstoerrelse; } Slide 4 af 5 void Bil::start() { // kode for start // operation } // etc. Bil.cpp Implementering
Komplet specifikation af en klasse Datatype for attributter -attributc: datatype KlasseC +operationc(param: type, param2: type): returtype Parameternavn Parametertype Operationens returtype Figur 6 Slide 5 af 5 Notation for en note Dette er en UML note - her kan man skrive kommentarer til et diagram eller f.eks. til en klasse KlasseB -attributb2 -attributb Noten her forklarer noget om KlasseB +operationb() +operationb2() +operationb3() Figur 8,9 Slide 6 af 5
Notation for klassediagram Stereotype <<Utility>> Hovedprogram main() Associationer KlasseA attributa attributa2 operationa() operationa2() KlasseB attributb operationb() operationb2() operationb3() associations navn Multiplicitet KlasseC operationc() Figur 0 Slide 7 af 5 Associtationsbegrebet Bil -hastighed -gear -omdrejningstal -motorstørrelse +start() +stop() +udkoble() +skiftgear() +kør() +brems() styrer Motor Tillader at objekter af disse klasser kommunikerer jaguar:bil v8:motor start start Slide 8 af 5
Notations for sekvensdiagram :Hov edprogram objekta:klassea objektb:klasseb objektc:klassec main() operationa() operationb() operationc() objekter OperationB2() operationa2() OperationB3() Meddelelse (kald af en operation) Aktiveringsblok Figur Slide 9 af 5 Notation for tilstandsdiagram Start tilstand Hændelse hændelse 4 Tilstand_0 Tilstand Tilstandsovergang hændelse / aktion Tilstand_ hændelse 2 [betingelse] / aktion 2 Aktion hændelse 3 Slut tilstand Figur 2 Slide 20 af 5
Notation for aktivitetsdiagram () Aktivitesdiagram Viser sekvenser og en udvælgelse (if-else) aktivitet Betingelse [logical expression == true] [logical expression == false] Aktivitet aktivitet 2 aktivitet 3 Valg aktivitet 4 Figur 3 Slide 2 af 5 Notation for aktivitetsdiagram (2) Aktivitetsdiagram for en iteration (for eller while løkke) Initier løkkevariabel [løkke betingelse == true] udfør løkke aktivitet Optæl løkkevariabel [løkke betingelse == false] aktivitet 2 Figur 4 Slide 22 af 5
Notation for deploymentdiagram Stereotype «node type» UML Node «kommunikationstype» «node type» UML Node 2 Figur 5 Slide 23 af 5 Deploymentdiagram eksempel «micro controller» H8 «RS232» «device» User KeyPad RS232 Connector UART Folie keypad Keypad Controller Figur 6 Slide 24 af 5
UML-Light oversigtsdiagram Deploymentdiagram «processor» Node «kommunikation» «Hardware» Node HW Blokdiagram classa classb State A Tilstandsdiagram HW R HW S Klassediagram classc opx() :classa :classb :classc opx() Sekvensdiagram Figur 8 State B Aktivitetsdiagram Slide 25 af 5 :HW R y x HW T Tilstandsdiagram :HW T z Sekvensdiagram State T State T2 De fire primære UML diagramtyper Kravspecifikation med Use Cases OO analyse Arkitektur design Mekanistisk design Detaljeret design Translation Use Case diagrammer UML-Light++ Klassediagrammer Sekvensdiagrammer Tilstandsdiagrammer Kodefiler f.eks. C++/Java eller C UML baseret model af systemet Slide 26 af 5
Anden del: Sammenhæng mellem UML-Light og kode + Gennemgang af eksempler Sammenhæng mellem klassediagram og kode <<Utility>> Hovedprogram main() KlasseA attributa attributa2 operationa() operationa2() Hovedprogram.cpp KlasseA.h KlasseA.cpp associations navn KlasseB.h KlasseB.cpp KlasseB attributb operationb() operationb2() operationb3() KlasseC operationc() KlasseC.h KlasseC.cpp Figur 9 Hovedprogram.cpp: KlasseA.cpp: KlasseB.cpp: KlasseC.cpp: #include KlasseA.h #include KlasseA.h #include KlasseB.h #include KlasseB.h #include KlasseC.h #include KlasseC.h Slide 28 af 5
Envejs - association KlasseA +operationa() KlasseB +operationb() class KlasseA { public: KlasseA(KlasseB* pb); // Constructor void operationa(); private: KlasseB* pklasseb; // implementerer associationen } Association implementeret vha. en pointer Figur 20 Slide 29 af 5 Implementering af envejs association KlasseA::KlasseA(KlasseB* pb) // constructor operationer { pklasseb= pb; // her indsættes den øvrige initaliseringskode // for klassens øvrige attributter } Som et eksempel på hvordan objekter af KlasseA og KlasseB oprettes og initialiseres, vises her et simpelt main program. int main() { KlasseB objektafklasseb; KlasseA objektafklassea(&objektafklasseb); // nu har vi dannet forbindelsen således at én af // operationerne i KlasseA objektet kan kalde // operationb() i det KlasseB objekt vi har oprettet objektafklassea.operationa(); return (0); } Slide 30 af 5
Tovejs - association KlasseA KlasseB KlasseA defineres som før. class KlasseB { public: KlasseB(); // Constructor initassociation(klassea* pa); private: KlasseA* pklassea; // implementerer associationen } Figur 2 Slide 3 af 5 Implementering af tovejs association KlasseA constructoren kommer til at se ud på følgende måde: KlasseA::KlasseA(KlasseB* pb) { pklasseb= pb; pklasseb->initassociation(this); } int main() { KlasseB objektafklasseb; // NB! Skal oprettes først KlasseA objektafklassea(&objektafklasseb); objektafklassea.operationa(); objektafklasseb.operationb2(); return (0); } Slide 32 af 5
Eksempel Et simpel minutur UML-Light MinutUr Start 7:23 Stop Reset Minutur der viser minutter og sekunder. Reset knappen nulstiller uret, hvis uret er stoppet. Start knappen starter uret, der optæller tiden og viser denne i minutter og sekunder. Stop knappen stopper uret. Figur 22 Slide 33 af 5 Klassediagram for minutur «utility» Hovedprogram styrer Ur vises på Display benytter poller poller Timer KnapPanel Slide 34 af 5
Tilstandsdiagram for klassen Ur Hændelser: reset start stop timeout knaptryk reset/ nulstil() Stoppet /nulstil() start/ timerobj.start(000) stop/ timerobj.stop() Startet Figur 24 timeout/ timerobj.start(000), taelop(), displayobj.vis(min,sec) Slide 35 af 5 Sekvensdiagram start scenario :Hovedprogram :KnapPanel urobj:ur timerobj:timer checkfortast() true /nulstil() Stoppet laestast() start start() start(000) start/ timerobj.start(000) Startet Figur 25 Slide 36 af 5
Sekvensdiagram timeout scenario :Hovedprogram :KnapPanel urobj:ur timerobj:timer displayobj:display checkfortimeout() true timeout() start(000) taelop() vis(min,sec) Slide 37 af 5 Sekvensdiagram for minutur :Hovedprogram :KnapPanel urobj:ur timerobj:timer displayobj:display checkfortast() laestast() start() start(000) checkfortimeout() timeout() start(000) taelop() vis(min,sec) Figur 25 Slide 38 af 5
<<utility>> Hovedprogram main(): int poller poller Klassediagram for minutur styrer Ur -minutter: int -sekunder: int +start(): void +stop(): void +reset(): void +timeout(): void -nulstil(): void -taelop(): void vises på Display +vis(min: int, sec: int):void KnapPanel +checkfortast(): Boolean +laestast(): int beny tter Timer +checkfortimeout(): Boolean +start(tid: int): void +stop(): void Figur 23 Slide 39 af 5 CASE værktøjer Case værktøj :classa :classb :classc State A ClassA ClassB Views State B ClassC Design Dokumentation ClassA ClassB Model Database ClassC Figur 26 Slide 40 af 5
Kravspecifikation vha. Use Cases. Indledning 2. Generel beskrivelse 3. Funktionelle krav 4. Ekstern grænseflade 5. Krav til ydelse 6. Kvalitetsfaktorer 7. Design krav 8. Andre krav 9. Del-levering Use Case Aktør-kontekst diagram Use Case 2 System/ Produkt Use Case diagram... Use Case n Figur 30 Slide 4 af 5 Eksempel 2. - Logikanalysator Adresse A E 0 0 Data X X Tilstand Visning AE00 C3 jmp AE0 0 05 AE02 FE FE FE05 A inc a FE06 B inc b FE07 C3 jmp FE08 00 00 FE09 B B B00 C9 ret 0035 00 nop Konfigurer Start/Stop Figur 37 Slide 42 af 5
Deploymentdiagram for logikanalysator «PC» Logik Analysator «µprocessor POD» «µprocessor» Processor under test Se klassediagram over softwarestrukturen på næste slide Figur 38 Slide 43 af 5 Aktør-kontekstdiagram Udvikler Logik Analysator Microprocessor Probe Super bruger Figur 30 Slide 44 af 5
Use Case diagram for logikanalysator Udvikler foretag logikanalyse Microprocessor Probe indstil triggerbetingelse <<extend>> <<extend>> udfør måling <<extend>> analyser måledata foretag selvtest Super bruger konfigurer probe Figur 40 Slide 45 af 5 Klassediagram for logikanalysator SW Display viser data fra KontrolPanel styrer visning på opsætter en Konfigurering SampletDataLager styrer LogikAnalysator får opsætning fra gemmer data i Klassediagram uden attributter og associationer styrer Sampler <<Hardware>> MikroprocessorProbe Figur 4 Slide 46 af 5
Tilstandsdiagram for klassen LogikAnalysator konfigureringstaster / konfigurering.tast() Konfigurering konfigurer/ blink() start / sampler.start() stop / sampler.stop() Måling konfigurer / blink() måling udført / visdata() start / samper.start() display taster / display.tast() Visning af data Figur 42 Slide 47 af 5 Sekvensdiagram start scenario Figur 43 Slide 48 af 5
Sekvensdiagram måling udført scenario Figur 43 Slide 49 af 5 Klassediagram for logikanalysator styrer visning på <<Boundary>> Display aktuelvisning visdata() pilop() pilned() viser data fra <<Boundary>> KontrolPane l indlæstaster() styrer opsætter en LogikAnalysator Konfigurering triggeradresse triggerdata henttriggeradresse() henttriggerdata() pilop() pilned() pilhøjre() pilvenstre() SampletDataLager addresse og data info indsaetdata(adresse,data) hentdata() Klassediagram med attributter og associationer start() stop() konfigurer() målingudført() pilop() pilned() pilhøjre() pilvenstre() styrer Sampler triggeradresse triggerdata start() stop() nyedata() får opsætning fra gemmer data i <<Boundary>> MikroprocessorProbe Figur 44 Slide 50 af 5 enable()
Opsummering UML-Light er den delmængde af UML, der kan anvendes til Objektbaseret udvikling UML-Light kan anvendes til design/strukturering af såvel Software- som Hardwaredelen af et projekt UML-Light modellerne af softwaren kan implementeres i f.eks. C++, C eller assembler UML-Light tages i brug på. semester UML-Light++ anvendes på 2. semester ifm. objektorienteret udvikling i C++ Den fulde UML introduceres på 3. semester sammen med en analyse- og designmetode Slide 5 af 5