Programmering nivå 2 med HTML, CSS och JavaScript

Kapitel 3: Objektorientering och modellering

Introduktion till objektorienterade principer och hur modelleringsverktyg som UML hjälper till vid design.

Innehåll

Lär dig att modellera problem med klasser, relationer och användningsfall (use cases).

3.1 Grundläggande objektorientering

Objektorientering (OOP) organiserar kod runt objekt som har ansvar, data och beteenden. Kärnidéerna är klasser, instanser, metoder och attribut.

Mål

  • förstå klasser och instanser
  • kunna beskriva ansvar och gränssnitt för ett objekt
  • använda enkla exempel för att modellera en domän

Övning

Identifiera tre klasser i ett enkelt system (t.ex. quiz, användare, fråga) och beskriv deras ansvar.

3.2 Klassdiagram (UML)

Klassdiagram visar klasser, deras attribut, metoder och relationer (association, arv, beroende). UML är ett standardiserat sätt att dokumentera design.

Exempel

Rita ett klassdiagram där en `Quiz` innehåller flera `Question`-objekt och varje `Question` har text, alternativ och korrekt svar.

classDiagram
      class Course {
        +String title
        +String description
        +List~Chapter~ chapters
        +addChapter(chapter)
      }
      class Chapter {
        +String title
        +String content
        +List~Quiz~ quizzes
      }
      class Quiz {
        +String id
        +List~Question~ questions
        +checkAnswers()
      }
      class Question {
        +String prompt
        +List~String~ options
        +int correctIndex
      }
      Course "1" o-- "*" Chapter : contains
      Chapter "1" o-- "*" Quiz : contains
      Quiz "1" o-- "*" Question : contains
    

Övning

Skapa ett enkelt klassdiagram för din tidigare identifierade klasser.

3.3 Användningsfall och use-cases

Användningsfall (use cases) beskriver hur en användare interagerar med systemet. De hjälper till att fånga krav och scenarier innan detaljerad design.

Exempel

Use case: 'Ta quiz' — beskriver steg: starta quiz, välj svar, skicka in, se resultat.

Övning

Skriv ett use-case för ett scenario där en användare skapar ett nytt konto och genomför ett quiz.

3.4 Sekvensdiagram och interaktion

Sekvensdiagram visar hur objekt interagerar över tid. Det är användbart för att beskriva flödet av meddelanden mellan objekt vid t.ex. ett quiz.

Övning

Rita ett sekvensdiagram för när användaren skickar in ett quiz och systemet räknar poäng.

sequenceDiagram
      participant Student
      participant Browser
      participant Server
      Student->>Browser: öppnar kapitel
      Browser->>Server: GET /chapters/chapter-3.html
      Server-->>Browser: levererar HTML-sida
      Student->>Browser: svarar på quiz och klickar 'Skicka'
      Browser->>Browser: initializeQuizzes() validerar svar
      alt alla svar korrekta
        Browser-->>Student: Visa korrekt feedback och sammanfattning
      else några felaktiga svar
        Browser-->>Student: Visa förklaring för felaktiga frågor
      end
    

3.5 Design och överföring till kod

När modellen är klar omvandlas klassdiagram och use-cases till kod: skapa klasser, metoder och definiera ansvar. Håll designen enkel och testbar.

Övning

Implementera de viktigaste klasserna för quiz-exemplet i JavaScript och skriv korta enhetstester för centrala metoder.

Fortsätt sedan med Kap 3.8 - Generiska klasser och metoder för att se hur klasser och metoder kan göras återanvändbara för flera datatyper.

Projekt: Quizapp — Uppgift för Kapitel 3

I detta kapitel börjar ni implementera den genomgående quizappen. Nedan följer de konkreta uppgifterna som eleverna förväntas göra nu. Se även den fullständiga projektbeskrivningen: QUIZ_APP_PROJECT.md.

Mål för kapitlets projektarbete

  • Implementera JavaScript-klasserna `Quiz`, `Question` och `QuizStore` enligt ert klassdiagram.
  • Skriv ett enkelt UML-klassdiagram och ett sekvensdiagram för scenariot "Ta quiz" (använd Mermaid eller rita för hand och ladda upp).
  • Gör en enkel implementation av `initializeQuizzes()` i JavaScript som validerar svar och visar feedback (återanvänds i kursen).
  • Skriv minst två enhetstester för centrala metoder (t.ex. poängräkning och validering av svar).
  • Commit och beskriv era diagram och kod i en kort teknisk rapport (README eller kort dokument).

Förslag på filer att skapa

  • `quiz-project/src/quiz.js` — JavaScript-implementation av klasser
  • `quiz-project/index.html` — Enkel sida som använder klasserna
  • `quiz-project/css/quiz.css` — Kapitelstil för quiz
  • `quiz-project/tests/quiz.test.ts` — Enhetstester

Bedömning (kapitelmoment)

Denna del bedöms främst på att klasserna finns och följer designen, UML‑diagrammet visar viktiga relationer, samt att grundläggande tester finns.

Quiz

Testa din förståelse av objektorientering och UML.

1. Vad är skillnaden mellan en klass och en instans?

2. Vad visar ett klassdiagram vanligtvis?

3. Vad beskriver ett use-case?

4. Vad visar ett sekvensdiagram?