Introduktion til OO* og UML Struktureret Systemudvikling Jan Bendtsen Automation and Control
Indhold Hvad er OO*? UML Essensen af objekt-orienteret analyse og design: klassebegrebet Relationer mellem objekter UML og design
Forventninger I kender til C I ved hvad kompilere, fortolkere, osv. I har erfaring med udviklingsværktøjer I ved ikke noget om OO*, Java eller C++ Målsætningen er ikke at gøre Jer til eksperter i objekt-orienteret programmering, men at give Jer indsigt i OO metoder: I skal kende til basale OO koncepter og deres UMLrepræsentationer I skal kunne skrive simple OO programmer
Hvad er OO*? OO* : Object-Orienteret Analyse, Design og/eller Programming Et forsøg på at repræsentere virkelige ting på en form, som kan overføres på enkel vis til computer-sprog Imperativ programmering er ofte for stift til at understøtte systemer af større skala OO* understøtter god programmerings praksis: modularitet, kode-genbrug and abstraktion The basis for Design Patterns
Hvad er OO*? Objekt-orienteret analyse
Hvad er OO*? Objekt-orienteret design
Hvad er OO*? Objekt-orienteret programmering
Hvorfor OO*? Fortolkning af data data forstås i sammenhæng med et givet objekt og har derfor en vis betydning i en given kontekst. For eksempel kan variablen int numpoints = 6; repræsentere forskellige ting afhængig af om den bruges til at tegne polygoner på en skærm at angive point-tildeling i et spil noget helt tredie...
Hvorfor OO*? Grafik: Polygon #1 har 8 hjørnepunkter; polygon #2 har 4 hjørnepunkter etc. Spline interpolation: for (i = 0; i < numpoints; i++) { // Calculate interpolation }
Hvorfor OO*? Fortolkning af data vi ønsker at sammenkæde data og operationer Forskellige operationer giver mening for forskellige ting! På C-sprog: Et objekt minder om en struct med tilknyttede funktioner. For eksempel kan funktionskaldet compute(shape) have een betydning for en kubisk spline interpolation med numpoints = 6 og en helt anden for beregning af arealet af en polygon med numpoints = 6.
Hvorfor OO*? Indkapsling af data Skjul information, som udenforstående ikke behøver at kende til Nedarvning Nogle ting er fælles, andre ikke; genbrug så vidt muligt de fælles ting Polymorphisme evnen til at udføre de samme operationer på forskellige ting; f.eks. kan trekanter, rektangler, blokdiagrammer og bogstaver alle tegnes, fordi de alle er geometriske figurer Udveksling af information objekter kan kommunikere med hinanden ligesom i den virkelige verden
Eksempler på klasser Navn: MagLev tog Attributter: magnetfeltsstyrke, højde over spor, masse, køreplan Operationer: powerup(), setspeed(kmph), getspeed(), start(), accelerate(), brake(), stop(); Skjult information: køretid, maxhastighed, sikkerhedsprocedurer, strømforbrug, etc.
Eksempler på klasser Navn: Spildevandspumpe Attributter: rotationshastighed, løftehøjde, dynamik Operationer: reset(), setspeed(rotpermin), getspeed(), start(), stop(); Skjult information: antal drifttimer, max flow, max strøm, etc.
Eksempler på klasser Navn: Aktivt båndpasfilter Attributter: frekvenskarakteristik, fasekarakteristik Operationer: reset(), filter(samplesequenc), start(), stop(); Skjult information: nyquistfrekvens, mætning, etc.
Overordnet fremgangsmåde Forstå/definer systemets omgivelser og dets anvendelse (rigt billede, use cases) Design systemets overordnede arkitektur Identificer de vigtigste objekter i systemet (klassediagrammer) Opstil design-modeller Definer interfaces mellem objekter
Rigt Billede
UML Unified Modeling Language er en formalisme til at beskrive OO design med UML definerer model-notation, ikke en design-metodik UML er dagens standard de fleste OO* værktøjer bruger det UML kan bruges til at dokumentere design UML hjælper udviklerne til at kommunikere indbyrdes
UML diagramtyper Use Case-diagrammer Klassediagrammer Interaktions-diagrammer Tilstandsdiagrammer Aktivitetsdiagrammer Pakke-diagrammer Deployment-diagrammer Actors Usage, involvement Classes Association, inheritance, aggregation Objects Messages, lifelines States Transitions, behaviors Activities Guards, synchronization Packages Software dependencies Processors and Nodes Component dependency
Diagramtyper Work-flows Use Use Case-diag. Scenarier Aktivitetsdiag. Interaktionsdiag. Kommunikation mellem klasser Struktur Pakke Pakke -- og og Deployment- diag. diag. Structures Klassediagrammer Interaktion mlm. objekter Opførsel i individuelle klasser Tilstandsdiagrammer
Use Case-diagrammer Use cases beskriver hvorledes systemet skal reagere på stimuli fra brugere Use cases aktiveres/kommunikerer med aktører Eksempler på aktører: (menneskelige) brugere andre computere ressourcer (f.eks. log-filer, datakilder osv.) Use case-diagrammer bruges til at afgrænse systemet Hver use case skal have en tilhørende use case description
Eksempel på Use Case-beskrivelse View Telemetry data: En bruger angiver en mængde data (måledata, intern satellit-data, alarmer, etc.) han/hun ønsker at gennemse fra en liste. Derefter specificerer brugeren en start- og sluttid. Systemet henter det specificerede data fra persistent lager og præsenterer det via GUI. Hvis start- eller sluttid ikke specificeres af brugeren, anvendes default-værdier.
Eksempel på Use Case-diagram
Objekter Objekter er individuelle ting som kan have en tilstand, og som man kan gøre noget ved
Klasser Klasser er definitioner af grupper af objekter med de samme attributter og operationer Det nærmeste vi kommer det i C er typedef struct { int numpoints; point[] points; } polygon; De enkelte objekter kaldes også instancer af en given klasse; de kan oprettes og senere nedlægges
Klasser Employee + name: String + address: String + dateofbirth: Date - salary: integer - status: {current,...} - taxcode: integer + Employee() + join() + leave() + retire() + changedetails() + getname() - computesalary() - payemployeetax() Klassenavn Offentlige attributter Private attributter Constructor Offentlige metoder Private metoder
Klasser Employee + name: String + address: String + dateofbirth: Date - salary: integer - status: {current,...} - taxcode: integer + Employee() + join() + leave() + retire() + changedetails() + getname() - computesalary() - payemployeetax() Klassenavn Constructor Objekter instantieres (oprettes) ved kald til klassens Constructor Flere objekter af den samme klasse kan eksistere samtidig
Attributter Employee + name: String + address: String + dateofbirth: Date - salary: integer - status: {current,...} - taxcode: integer + Employee() + join() + leave() + retire() + changedetails() + getname() - computesalary() - payemployeetax() Navn og type angives i klassebeskrivelsen Attributter udtrykker det enkelte objekts tilstand De kan opfattes som variable i objektet Kaldes også sommetider felter
Metoder Employee + name: String + address: String + dateofbirth: Date - salary: integer - status: {current,...} - taxcode: integer + Employee() + join() + leave() + retire() + changedetails() + getname() - computesalary() - payemployeetax() Metoder bruges til at interagere med et objekt Et metodekald påvirker kun det angivne objekt Offentlige metoder
Eksempler på metodekald For eksempel (Java syntax): // Call a method associated with a // buffer object that returns the // next value in the buffer v = circularbuffer.get () ; // Call the method associated with a // thermostat object that sets the // temperature to be maintained thermostat.settemp (20) ;
Relationer mellem Klasser Office Aggregering A indeholder B 2 2 Employee
Relationer mellem Klasser Association A kender B Manager 00...... 22 Employee
Relationer mellem Klasser Employee Nedarvning (a.k.a generalisering) A er en B Manager - budgetscontrolled managebudgets()
Klassediagram eksempel fra designværktøj
Fra Use Case-beskrivelsen... View Telemetry data: En bruger angiver en mængde data (måledata, intern satellit-data, alarmer, etc.) han/hun ønsker at gennemse fra en liste. Derefter specificerer brugeren en start- og sluttid. Systemet henter det specificerede data fra persistent lager og præsenterer det via GUI. Hvis start- eller sluttid ikke specificeres af brugeren, anvendes default-værdier. Navneord i Use Case-beskrivelsen er kandidater til klasser!
TelemetryDataList Klassediagram
Interaktionsdiagrammer Når klasserne er på plads, er det tid at se på interaktion mellem objekter Interaktionsdiagrammer demonstrerer hvordan objekter samarbejder, herunder i hvilken rækkefølge de påvirker hinanden De kan også vise, hvornår objekter bliver oprettet eller nedlagt Sekvensdiagrammer og Collaboration-diagrammer (viser stort set samme information)
Eksempel på Sekvensdiagram
Tilstandsdiagrammer Viser den tilstand (state) et objekt er i, og hvilke tilstande det potentielt kan komme i Svarer nogenlunde til gode gammeldaws flowcharts: Begyndelsestilstand Gør noget Når noget er opfyldt skiftes til en ny tilstand etc.
Eksempel på tilstandsdiagram Initializing do/initialize variables Initialization done Processing Telemetry Request do/create list and telemetry data objects User request Waiting User commits choice Reading File do/create and start file reader object Reading done Showing Data do/pass data to GUI
Symboler i Tilstands- og Aktivitetsdiagrammer States ovaler der viser tilstande Transitions pile der viser mulige skift fra en tilstand til en anden (eller til den samme) Events tekst knyttet til transitionerne som viser en udefrakommende hændelse der får transitionen til at ske Conditions et sand/falsk udtryk i [ ] som angiver om en given hændelse kan indtræffe (aka. Guards) plus forskellige andre, sjældnere symboler...
Aktivitetsdiagrammer Aktivitetsdiagrammer beskriver workflow for hele systemet Ligner tilstandsdiagrammer, men er ikke begrænset til enkelte objekter Viser flow af aktiviter i og omkring systemet, i særdeleshed parallelle aktiviteter: Forks indikerer når flere forskellige aktiviteter sker på samme tid Merges indikerer når aktiviteter ikke længere foregår parallelt
Eksempel på aktivitetsdiagram User request received Handle request to view current location Check user authorization [user not authorized] [user authorized] DB Com established Obtain global data Sat Com established Obtain current data from satellite User feedback Aggregate data
Deployment-diagrammer Deployment-diagrammer viser Intelligente enheder i systemet Kommunikation mellem subsystemer Software-komponenter på de enkelte enheder Bruges normalt kun i distribuerede systemer (f.eks. clientserver-arkiitekturer) for at sikre at de enkelte programmer kommer til at køre på de bedst egnede maskiner
Eksempel på deployment-diagram Master Station UserInterface DataMgr Client PC NetworkMgr Browser Database Server DBServer Satellite Ground Station SatCom module
OO Design Requirement specification
OO Design Use case Diagrammer (basal systemopførsel) Indledende design
OO Design Klassediagrammer (Objektstrucktur, interface-spec.) Detaljeret design
OO Design Interaktionsdiagrammer (kommunikation mellem objekter) Object Object Object Detaljeret design
OO Design Aktivitetsdiagrammer (Workflow) Detaljeret design
OO Design Tilstansdiagrammer (objekters opførsel) State 1 State 2 State 4 State 3 Detaljeret design
OO Design Implementation, test & debugging /** * TelemetryDataList **/ import java.util.arraylist; package org.studentsat.telemetry; public class TelemetryDataList extends ArrayList implements Serializable { private Coordinate3D coordinates; private Coordinate3D velocity; private Quaternion attitude; public String[ ] getnames() { return coordinates.getaxisnames(); } private void compute(int numcoords) { Implementation
OO Design Deployment-diagrammer Telemetry server Database Server Browser User PC Udrulning Deployment