HTX Frederikshavn & Hjørring

Det har aldrig været sjovere at være nørd

Brugerværktøjer

Webstedsværktøjer


prog:exercise:interfaces1v5

Øvelse: Fleksibelt notifikationssystem (med interfaces)

Baggrund

En virksomhed vil kunne sende notifikationer til kunder via forskellige kanaler: SMS, e-mail eller push-notifikation.

  • Kunder har forskellige præferencer.
  • Systemet skal kunne udvides med nye notifikationstyper uden at ændre eksisterende kode.

Her skal vi bruge interfaces:

  • En EmailNotifier er ikke en „specialform“ af SmsNotifier.
  • Vi har forskellige typer med samme adfærd, men ingen naturlig arv.

Opgave 1

1. Definér interface

Lav et interface INotifier med metoden:

void Send(String recipient, String message);

2. Implementér forskellige notifikatorer

  • EmailNotifier → udskriver fx: „Sending EMAIL to alice@mail.com: Hello Alice“
  • SmsNotifier → udskriver fx: „Sending SMS to +4522334455: Hello Alice“
  • PushNotifier → udskriver fx: „Sending PUSH notification to user123: Hello Alice“

3. NotificationService

  • Lav en klasse NotificationService, som har en liste af Notifier-objekter.
  • Tilføj en metode NotifyAll(String recipient, String message), der sender beskeden via alle notifiers i listen.

4. Afprøvning

  • I din main-metode:
    1. Opret NotificationService.
    2. Tilføj flere notifiers (EmailNotifier, SmsNotifier, PushNotifier).
    3. Send en testbesked til en kunde.

Opgave 2: UML-diagram for Notifikationssystemet

Baggrund

Efter at have implementeret dit notifikationssystem med interfaces, skal du nu visualisere systemet med et UML-diagram. Dette hjælper med at forstå, hvordan klasser og interfaces hænger sammen, og hvordan polymorfi via interface fungerer.

Opgave 2

Tegn UML-diagrammet

Lav et UML-diagram der viser:

  • Interfacet Notifier
  • Klasserne EmailNotifier, SmsNotifier og PushNotifier
  • Klassen NotificationService med en liste af Notifier-objekter
  • Metoderne, som du har implementeret (fx Send og NotifyAll)
  • Relation mellem klasser og interface.

2. UML-specifikation for interface

Når man tegner et interface i UML:

  • Skriv interface-navnet øverst i en boks, typisk med «interface» skrevet over navnet.
  • Tegn metoderne inde i boksen.
  • For klasser der implementerer interfacet, tegn en stiplet linje med en åben trekant fra klassen til interfacet (``implements``-relation).

Tommelfingerregler

Når skal man bruge interfaces vs. arv?

Situation Brug interface Brug arv
Klasser er helt forskellige, men har fælles adfærd ✅ ❌
Klasser har fælles tilstand og fælles kode ❌ ✅
Klassen skal kunne udføre flere roller/adfærd samtidig ✅ (flere interfaces) ❌ (kun én baseklasse)
Der er en klar „er-en“-relation ❌ ✅
Du vil have løs kobling → nemt at udvide med nye typer ✅ ❌
prog/exercise/interfaces1v5.txt · Sidst ændret: af 127.0.0.1