~~NOTOC~~ {{ prog:images:banner_ooa.jpg |}} ====== Objektorienteret Analyse (OOA) ====== OOA handler om at **forstå et problem** ved at beskrive det i form af klasser/objekter, som ligner ting, vi kender fra virkeligheden. Objektorienteret analyse hjælper dig med at forstå og modellere et system, __inden__ du begynder at programmere. Ved at identificere **objekter**, deres **egenskaber** og **relationer** kan du skabe et klart billede af, hvordan systemet skal fungere.\\ Denne metode gør det lettere at designe vedligeholdelsesvenlig kode og sikre, at systemet opfylder kravene.\\ OOA er et vigtigt skridt mellem idé og implementering og giver dig en struktureret tilgang til komplekse programmeringsopgaver. {{ :images:ooa_kategorier.png?420 |}} * Things the System **Knows** (Data og tilstande systemet holder styr på) * **Eksempler:** Kundeoplysninger, produktdata, sensormålinger, dokumenter * **UML-elementer:** Klassediagrammer, Objektdiagrammer * **Formål:** At modellere hvad systemet ved og hvordan det organiseres * Things the System **Does** (Handlinger og funktioner systemet udfører) * **Eksempler:** Opret bruger, send e-mail, beregn pris, valider input * **UML-elementer:** Use Case-diagrammer, Aktivitetsdiagrammer, Sekvensdiagrammer * **Formål:** At modellere funktionalitet og interaktioner * How the System **Behaves** : Hvordan systemet reagerer og ændrer tilstand) * **Eksempler:** Workflow-logik, tilstandsskift, regler for automatisering * **UML-elementer:** State Machine-diagrammer, Aktivitetsdiagrammer * **Formål:** At modellere adfærd og reaktioner på hændelser === Fra virkelighed til model === OOA kan ses som at lave et **kort over virkeligheden**: * Find de vigtigste objekter/klasser * Beskriv deres egenskaber (attributter) * Beskriv deres handlinger (metoder) * Tegn diagrammer (f.eks. UML-klassediagram) Dette skaber en fælles forståelse, **før systemet designes eller programmeres**. **Eksempel: Et bibliotekssystem betragtes** * Objekter: Bog, Låner, Lånekort * Egenskaber: Titel, Forfatter, Status * Handlinger: Låne(), Reservere() Ved OOA identificeres klasser/objekter, samt deres egenskaber og handlinger **uden at skrive kode**, det gøres gennem at forstå virkeligheden for pågældende problem-domæne. ---- ==== Sproglig tilgang til OOA ==== Man kan bruge grammatik til at identificere objekter, attributter og metoder i krav eller beskrivelser. ^ Ordklasse ^ Eksempel ^ UML-element ^ | Substantiv | bog, elev | Klasse/Objekt | | Adjektiv | gammel, ledig | Attribut/Egenskab | | Verbum | låne, reservere | Metode/Handling | | Adverbium | hurtigt, regelmæssigt | Kan hjælpe med metodeparametre | | Præpositioner | af, med, til | Relation/Association | (todo: eksempel på præposition anvendt til at konstruktion af klasse-relation) **Eksempel** Tekst: “En elev kan aflevere en opgave, og opgaven kan have en karakter.” Class Elev + afleverOpgave(opgave: Opgave) Class Opgave - status: string + tildelKarakter(k: Karakter) Class Karakter - værdi: int ---- ==== Samlet proces ==== - Læs krav/tekst → marker substantiver, verber, adjektiver - Identificer objekter, attributter og handlinger - Tegn UML-diagram - Brug modellen som grundlag for design og programmering ---- ==== Øvelser ==== * [[prog:exercises:ooa_1|Objekt Orienteret Analyse - Et Simpelt Spil]] * [[prog:exercises:ooa_del2|Implementering (OOP)]] ---- ==== Slides ==== * {{ :prog:slides:oo_klasser_og_objekter.pdf |}} ----