===== 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? ----