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