Meer informatie over polymorfisme

Oefening 1 Method overloading

Vul de ontbrekende delen in (__________) om method overloading correct te implementeren.

Specificaties

  • Vul de ontbrekende methodesignatures (__________) correct in.
  • Test de code in een C#-omgeving en controleer of alle methoden correct worden opgeroepen.

Verwachte output

Resultaat 1: 15  
Resultaat 2: 6  
Resultaat 3: 6  

Nu jij

using System;
 
class Berekenaar
{
    // Methode voor optellen van twee gehele getallen
    public int Optellen(__________)
    {
        return a + b;
    }
 
    // Overloaded methode voor optellen van twee kommagetallen
    public double Optellen(__________)
    {
        return a + b;
    }
 
    // Overloaded methode voor optellen van drie gehele getallen
    public int Optellen(__________)
    {
        return a + b + c;
    }
}
 
class Program
{
    static void Main()
    {
        Berekenaar berekenaar = new Berekenaar();
 
        int resultaat1 = berekenaar.Optellen(5, 10);
        double resultaat2 = berekenaar.Optellen(3.5, 2.5);
        int resultaat3 = berekenaar.Optellen(1, 2, 3);
 
        Console.WriteLine("Resultaat 1: " + resultaat1);
        Console.WriteLine("Resultaat 2: " + resultaat2);
        Console.WriteLine("Resultaat 3: " + resultaat3);
    }
}
 

Oefening 2 Method overloading

Vul de ontbrekende delen in (__________) om method overloading correct te implementeren.

Specificaties

  • Vul de ontbrekende methodesignatures (__________) correct in.
  • Test de code in een C#-omgeving en controleer of alle methoden correct worden opgeroepen.

Verwachte output

Resultaat 1: 20
Resultaat 2: 8.75
Resultaat 3: 7.5  

Nu jij

using System;
 
class Vermenigvuldiger
{
    // Methode voor vermenigvuldigen van twee gehele getallen
    public int Vermenigvuldig(int a, int b)
    {
        return ___________;
    }
 
    // Overloaded methode voor vermenigvuldigen van twee kommagetallen
    public double Vermenigvuldig(double a, double b)
    {
        return ___________;
    }
 
    // Overloaded methode voor vermenigvuldigen van een geheel getal en een kommagetal
    public double Vermenigvuldig(int a, double b)
    {
        return ___________;
    }
}
 
class Program
{
    static void Main()
    {
        Vermenigvuldiger rekenmachine = new Vermenigvuldiger();
 
        int resultaat1 = rekenmachine.Vermenigvuldig(4, 5);
        double resultaat2 = rekenmachine.Vermenigvuldig(2.5, 3.5);
        double resultaat3 = rekenmachine.Vermenigvuldig(3, 2.5);
 
        Console.WriteLine("Resultaat 1: " + resultaat1);
        Console.WriteLine("Resultaat 2: " + resultaat2);
        Console.WriteLine("Resultaat 3: " + resultaat3);
    }
}

Opdracht 3 Method overriding

Vul de ontbrekende delen in (__________) om method overriding correct te implementeren.

Specificaties

  • Vul de ontbrekende methodesignatures (__________) correct in.
  • Test de code in een C#-omgeving en controleer of alle methoden correct worden opgeroepen.

Verwachte output

Output:
Oppervlakte van een vierkant (5x5): 25
Oppervlakte van een rechthoek (5x10): 50
Oppervlakte van een cirkel (straal 3): 28.274333882308138

Nu jij

using System;
 
class OppervlakteBerekening
{
    public int BerekenOppervlakte(int lengte)
    {
        return lengte * lengte;
    }
 
    public int __________(__________)
    {
        return lengte * breedte;
    }
 
    public __________ BerekenOppervlakte(double __________)
    {
        return Math.PI * straal * straal;
    }
}
 
class Program
{
    static void Main()
    {
        OppervlakteBerekening berekening = new OppervlakteBerekening();
 
        Console.WriteLine("Oppervlakte van een vierkant (5x5): " + berekening.BerekenOppervlakte(5));
        Console.WriteLine("Oppervlakte van een rechthoek (5x10): " + berekening.BerekenOppervlakte(5, 10));
        Console.WriteLine("Oppervlakte van een cirkel (straal 3): " + berekening.BerekenOppervlakte(3));
    }
}

Oefening 4 Method overloading

Je gaat een method overloading toepassen om berichten op verschillende manieren te tonen. Vul de ontbrekende delen in (__________) om method overloading correct te implementeren.

Specificaties

  • Vul de ontbrekende methodesignatures (__________) correct in.
  • Test de code in een C#-omgeving en controleer of alle methoden correct worden opgeroepen.

Verwachte output

Hallo, wereld!  
Dit is een waarschuwing! (geel gekleurd)  
Dit wordt 3 keer herhaald.  
Dit wordt 3 keer herhaald.  
Dit wordt 3 keer herhaald.  

Nu jij

using System;
 
class BerichtenService
{
    public void ToonBericht(__________)
    {
        Console.WriteLine(__________);
    }
 
    public void ToonBericht(__________, __________)
    {
        Console.ForegroundColor = __________;
        Console.WriteLine(__________);
        Console.ResetColor();
    }
 
    public void ToonBericht(__________, __________)
    {
        for (int i = 0; i < __________; i++)
        {
            Console.WriteLine(__________);
        }
    }
}
 
class Program
{
    static void Main()
    {
        BerichtenService service = new __________();
 
        service.ToonBericht("Hallo, wereld!");
        service.ToonBericht("Dit is een waarschuwing!", ConsoleColor.Yellow);
        service.ToonBericht("Dit wordt 3 keer herhaald.", __________);
    }
}
 

Opdracht 5 Interface implementation

Je gaat polymorfisme toepassen door een interface te implementeren in verschillende klassen. Het onderwerp van deze oefening is “Betaalsystemen”. Je gaat een interface IBetaalMethode maken en verschillende betaalmethoden implementeren:

Creditcard: Hiermee kan een betaling worden verwerkt met een kaartnummer. PayPal: Hiermee kan een betaling worden verwerkt met een e-mailadres. Cryptocurrency: Hiermee kan een betaling worden verwerkt met een wallet-adres.

Vul de ontbrekende delen in (__________) om method overloading correct te implementeren.

Specificaties

  • Vul de ontbrekende methodesignatures (__________) correct in.
  • Test de code in een C#-omgeving en controleer of alle methoden correct worden opgeroepen.

Verwachte output

Betaling van €100,00 uitgevoerd met creditcard: 1234-5678-9012-3456  
Betaling van €50,00 uitgevoerd via PayPal-account: gebruiker@email.com  
Betaling van €0,01 uitgevoerd met cryptocurrency-wallet: 1A2b3C4d5E6F  

Nu jij

using System;
 
interface IBetaalMethode
{
    void VoerBetalingUit(__________);
}
 
class CreditcardBetaling : IBetaalMethode
{
    private string kaartNummer;
 
    public CreditcardBetaling(string kaartNummer)
    {
        this.kaartNummer = __________;
    }
 
    public void VoerBetalingUit(__________)
    {
        Console.WriteLine($"Betaling van {bedrag:C} uitgevoerd met creditcard: {kaartNummer}");
    }
}
 
class PayPalBetaling : __________
{
    private string email;
 
    public PayPalBetaling(string email)
    {
        this.email = __________;
    }
 
    public void VoerBetalingUit(__________)
    {
        Console.WriteLine($"Betaling van {bedrag:C} uitgevoerd via PayPal-account: {email}");
    }
}
 
class CryptoBetaling : __________
{
    private string walletAdres;
 
    public CryptoBetaling(string walletAdres)
    {
        this.walletAdres = __________;
    }
 
    public void VoerBetalingUit(__________)
    {
        Console.WriteLine($"Betaling van {bedrag:C} uitgevoerd met cryptocurrency-wallet: {walletAdres}");
    }
}
 
class BetaalProcessor
{
    public void VerwerkBetaling(__________, __________)
    {
        betaalMethode.VoerBetalingUit(__________);
    }
}
 
class Program
{
    static void Main()
    {
        BetaalProcessor processor = new __________();
 
        IBetaalMethode creditcard = new __________("1234-5678-9012-3456");
        IBetaalMethode paypal = new __________("gebruiker@email.com");
        IBetaalMethode crypto = new __________("1A2b3C4d5E6F");
 
        processor.VerwerkBetaling(creditcard, 100.00m);
        processor.VerwerkBetaling(paypal, 50.00m);
        processor.VerwerkBetaling(crypto, 0.005m);
    }
}

Opdracht 6 Interface implementation

Je gaat polymorfisme toepassen door een interface te implementeren in verschillende klassen. In deze variatie voegen we validatie toe aan de betaalmethoden:

Creditcard: Controleert of het kaartnummer uit 16 cijfers bestaat. PayPal: Controleert of het e-mailadres een geldig formaat heeft. Cryptocurrency: Controleert of het wallet-adres minstens 10 tekens lang is. Als de validatie mislukt, wordt een foutmelding weergegeven.

Vul de ontbrekende delen in (__________) om method overloading correct te implementeren.

Specificaties

  • Vul de ontbrekende methodesignatures (__________) correct in.
  • Test de code in een C#-omgeving en controleer of alle methoden correct worden opgeroepen.

Verwachte output

Betaling van €100,00 uitgevoerd met creditcard: 1234567812345678  
Betaling van €50,00 uitgevoerd via PayPal-account: gebruiker@email.com  
Betaling van €0,01 uitgevoerd met cryptocurrency-wallet: 1A2b3C4d5E6F  
Fout bij aanmaken betaalmethode: Ongeldig kaartnummer. Moet 16 cijfers bevatten.  

Nu jij

using System;
using System.Text.RegularExpressions;
 
interface IBetaalMethode
{
    void VoerBetalingUit(__________);
}
 
class CreditcardBetaling : IBetaalMethode
{
    private string kaartNummer;
 
    public CreditcardBetaling(string kaartNummer)
    {
        if (kaartNummer.Length == __________)
            this.kaartNummer = kaartNummer;
        else
            throw new ArgumentException("Ongeldig kaartnummer. Moet 16 cijfers bevatten.");
    }
 
    public void VoerBetalingUit(__________)
    {
        Console.WriteLine($"Betaling van {bedrag:C} uitgevoerd met creditcard: {kaartNummer}");
    }
}
 
class PayPalBetaling : IBetaalMethode
{
    private string email;
 
    public PayPalBetaling(string email)
    {
        if (Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$"))
            this.email = __________;
        else
            throw new ArgumentException("Ongeldig e-mailadres.");
    }
 
    public void VoerBetalingUit(__________)
    {
        Console.WriteLine($"Betaling van {bedrag:C} uitgevoerd via PayPal-account: {email}");
    }
}
 
class CryptoBetaling : IBetaalMethode
{
    private string walletAdres;
 
    public CryptoBetaling(string walletAdres)
    {
        if (walletAdres.Length >= __________)
            this.walletAdres = walletAdres;
        else
            throw new ArgumentException("Ongeldig wallet-adres. Moet minstens 10 tekens lang zijn.");
    }
 
    public void VoerBetalingUit(__________)
    {
        Console.WriteLine($"Betaling van {bedrag:C} uitgevoerd met cryptocurrency-wallet: {walletAdres}");
    }
}
 
class BetaalProcessor
{
    public void VerwerkBetaling(__________, __________)
    {
        try
        {
            betaalMethode.VoerBetalingUit(__________);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Fout bij betaling: {ex.Message}");
        }
    }
}
 
class Program
{
    static void Main()
    {
        BetaalProcessor processor = new BetaalProcessor();
 
        try
        {
            IBetaalMethode creditcard = new CreditcardBetaling("1234567812345678");
            IBetaalMethode paypal = new PayPalBetaling("gebruiker@email.com");
            IBetaalMethode crypto = new CryptoBetaling("1A2b3C4d5E6F");
 
            processor.VerwerkBetaling(creditcard, 100.00m);
            processor.VerwerkBetaling(paypal, 50.00m);
            processor.VerwerkBetaling(crypto, 0.005m);
 
            // Foutieve betalingen
            IBetaalMethode ongeldigeCreditcard = new CreditcardBetaling("1234");
            processor.VerwerkBetaling(ongeldigeCreditcard, 20.00m);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Fout bij aanmaken betaalmethode: {ex.Message}");
        }
    }
}