===== Tænkeøvelse: Identificer potentielle interfaces i et programmeringsprojekt =====
**Mål**: Denne øvelse hjælper dig med at forstå, hvordan du kan bruge interfaces i C# til at skabe fleksibel og genbrugelig kode. (Her arbejder man sammen i grupper af 2 personer)
**Læringsmål**
- Forstå hvordan interfaces kan bruges til at definere fælles funktionalitet, som flere klasser skal implementere.
- Anvende interfaces til at opnå **polymorfi**, hvor forskellige objekter kan behandles ensartet på et højere niveau.
- Reducere afhængigheden mellem komponenter ved at implementere løs kobling i systemet.
----
==== Scenario: Byg et system til styring af forskellige transportmidler ====
Forestil dig, at du skal bygge et program, som håndterer forskellige typer transportmidler – biler, både, cykler, fly osv. Hver transporttype har nogle fælles funktioner, men de implementeres på forskellige måder afhængigt af transporttypen.
==== Trin 1: Tænk på de fælles funktioner ====
* Hvilke **fælles funktioner** kunne alle transportmidler have?
* Hvordan ville du senere implementere disse funktioner for forskellige transportmidler?
* Diskutér, hvordan bilens funktioner kan adskille sig fra en båd eller en cykel.?
++++ Hint |
Tænk på funktioner som:
* **Start**: Alle transportmidler skal kunne starte.
* **Stop**: Alle transportmidler skal kunne stoppe.
* **Accelerer**: Alle transportmidler skal kunne accelerere.
* **Bremse**: Alle transportmidler skal kunne bremse.
++++
----
==== Trin 2: Brainstorm et Interface ====
Kom på et **interface**, der kan beskrive de funktioner, du har diskuteret. Dette interface skal definerer de nødvendige metoder, som alle transportmidler skal implementere.
++++ Hint |
public interface ITransport
{
void Start();
void Stop();
void Accelerate();
void Brake();
}
++++
----
==== Trin 3: Implementer de forskellige transportmidler ====
Nu kan du tænke på, hvordan de forskellige transportmidler (bil, båd osv.) implementerer dette interface. Her er et eksempel på, hvordan det kan gøres for en bil og en båd:
++++ Hint |
public class Car : ITransport
{
public void Start()
{
Console.WriteLine("Starting the car.");
}
public void Stop()
{
Console.WriteLine("Stopping the car.");
}
public void Accelerate()
{
Console.WriteLine("Accelerating the car.");
}
public void Brake()
{
Console.WriteLine("Braking the car.");
}
}
public class Boat : ITransport
{
public void Start()
{
Console.WriteLine("Starting the boat engine.");
}
public void Stop()
{
Console.WriteLine("Stopping the boat.");
}
public void Accelerate()
{
Console.WriteLine("Accelerating the boat.");
}
public void Brake()
{
Console.WriteLine("Braking the boat.");
}
}
++++
----
==== Trin 4: Diskutér fordelene ved at bruge et Interface ====
Hvordan gør brugen af et interface koden mere fleksibel og genbrugelig?
- Hvordan ville det være at håndtere disse transportmidler uden et interface?
- Hvordan gør interfacet det lettere at tilføje nye transportmidler som fly, cykler eller tog uden at ændre eksisterende kode?
- Hvad sker der, hvis du ændrer implementeringen af et transportmiddel (f.eks. ændrer hvordan bilen accelererer)? Hvordan gør interfaces det lettere at ændre implementeringen uden at bryde eksisterende kode?
----