Welk taalconcept moet toegepast worden in de casus?
Specificaties
Je werkt aan een betalingssysteem waarin verschillende betaalmethoden moeten worden ondersteund, zoals creditcard, PayPal en bankoverschrijving. Elke betaalmethode heeft een eigen manier van verwerking, maar moet op een uniforme manier worden aangesproken.
Mogelijke uitwerking
Antwoord: Polymorfisme
Uitleg: Polymorfisme stelt je in staat om een gemeenschappelijke interface te definiëren en verschillende implementaties voor specifieke betaalmethoden te maken. Hierdoor kan de code flexibel nieuwe betaalmethoden ondersteunen zonder bestaande code aan te passen.
Voorbeeldcode:
public interface IPaymentMethod{ void ProcessPayment(decimal amount);}public class CreditCardPayment : IPaymentMethod{ public void ProcessPayment(decimal amount) { Console.WriteLine($"Processing credit card payment of {amount}"); }}public class PayPalPayment : IPaymentMethod{ public void ProcessPayment(decimal amount) { Console.WriteLine($"Processing PayPal payment of {amount}"); }}// Gebruik van polymorfismepublic class PaymentProcessor{ public void Process(IPaymentMethod paymentMethod, decimal amount) { paymentMethod.ProcessPayment(amount); }}
Opdracht 2
Welk taalconcept moet toegepast worden in de casus?
Specificaties
Je ontwikkelt een applicatie waarin gebruikers hun persoonlijke gegevens kunnen bekijken, maar deze mogen alleen worden gewijzigd via specifieke validatieregels binnen een methode. Directe wijzigingen buiten deze methode moeten worden voorkomen.
Mogelijke uitwerking
Antwoord: Encapsulatie
Uitleg: Encapsulatie verbergt interne implementatiedetails en zorgt ervoor dat wijzigingen alleen via gecontroleerde methoden kunnen worden doorgevoerd, waardoor de data consistent blijft.
Voorbeeldcode:
public class User{ private string email; public string GetEmail() { return email; } public void SetEmail(string newEmail) { if (newEmail.Contains("@")) { email = newEmail; } else { throw new Exception("Invalid email format"); } }}
Opdracht 3
Welk taalconcept moet toegepast worden in de casus?
Specificaties
Je werkt aan een systeem waarbij een OrderProcessor afhankelijk is van een factuur- en e-mailservice. Later kan de implementatie van deze services wijzigen, bijvoorbeeld door een externe API te gebruiken in plaats van een interne klasse. Hoe zorg je ervoor dat je de implementatie later eenvoudig kunt vervangen zonder de OrderProcessor zelf aan te passen?
Mogelijke uitwerking
Antwoord: Dependency Injection
Uitleg: Door Dependency Injection te gebruiken, injecteer je afhankelijkheden via de constructor in plaats van ze direct in de klasse te definiëren. Hierdoor kun je de implementatie eenvoudig wijzigen zonder de hoofdklasse aan te passen.
Voorbeeldcode:
public class OrderProcessor{ private readonly IInvoiceService _invoiceService; private readonly IEmailService _emailService; public OrderProcessor(IInvoiceService invoiceService, IEmailService emailService) { _invoiceService = invoiceService; _emailService = emailService; }}
Opdracht 4
Welk taalconcept moet toegepast worden in de casus?
Specificaties
Je ontwikkelt een webapplicatie waarin gebruikers een grote dataset kunnen exporteren. Dit proces kan enkele seconden duren. Je wilt voorkomen dat de gebruiker moet wachten en de UI niet meer reageert.
Mogelijke uitwerking
Antwoord: Asynchrone bewerkingen
Uitleg: Asynchrone bewerkingen zorgen ervoor dat een programma taken op de achtergrond kan uitvoeren zonder de hoofdthread te blokkeren, waardoor de UI responsief blijft.
Voorbeeldcode:
public async Task ExportLargeDatasetAsync(){ await Task.Run(() => { Console.WriteLine("Exporting data..."); Thread.Sleep(5000); // Simulatie van lang proces Console.WriteLine("Export completed."); });}
Opdracht 5
Welk taalconcept moet toegepast worden in de casus?
Specificaties
Je hebt een systeem waarin je verschillende soorten berichten moet kunnen versturen (e-mail, sms, pushberichten). Elke berichtsoort heeft een eigen implementatie, maar ze moeten allemaal hetzelfde interface volgen zodat je ze op dezelfde manier kunt aanroepen. De gebruiker moet het type bericht kunnen kiezen, en je wilt geen aparte logica hoeven te schrijven voor elk type bericht.
Mogelijke uitwerking
Antwoord: Polymorfisme
Uitleg: Polymorfisme maakt het mogelijk om meerdere implementaties van dezelfde interface te creëren en deze op een uniforme manier te gebruiken. Het maakt je code flexibeler en uitbreidbaar, omdat je eenvoudig nieuwe berichttypen kunt toevoegen zonder de bestaande code te breken.
Voorbeeldcode:
// Interface voor berichtverzendingpublic interface IMessageSender{ void SendMessage(string message);}// Implementatie voor e-mailpublic class EmailSender : IMessageSender{ public void SendMessage(string message) { Console.WriteLine($"Sending email: {message}"); }}// Implementatie voor smspublic class SmsSender : IMessageSender{ public void SendMessage(string message) { Console.WriteLine($"Sending SMS: {message}"); }}// Implementatie voor pushberichtenpublic class PushNotificationSender : IMessageSender{ public void SendMessage(string message) { Console.WriteLine($"Sending push notification: {message}"); }}// Client codepublic class MessageProcessor{ public void ProcessMessage(IMessageSender messageSender, string message) { messageSender.SendMessage(message); }}