Doel: Pas de bestaande Meetlat klasse uit het vorige hoofdstuk aan om met een constructor te werken.
Stappenplan:
- Verwijder de write-only property
BeginLengte.
- Voeg toe een private instantievariabele:
private double lengteInMeter;.
- Maak een Constructor die één parameter aanvaardt (type
double) en wijs deze waarde toe aan lengteInMeter.
- Pas de werking van de overige properties aan zodat ze nu deze nieuwe variabele gebruiken in plaats van de property.
Voorbeeldgebruik:
// Oude manier (werkt NIET meer na aanpassing):
// Meetlat m = new Meetlat();
// m.BeginLengte = 5;
// Nieuwe manier:
Meetlat m = new Meetlat(5);
Console.WriteLine(m.LengteInCm);
{% hint style="info" %}
Deze oefening werd gemaakt (en aangepast nadien) met behulp van volgende GPT en heeft daarom de tag (GPT) achter de titel staan.
Doel: Gebruik constructors en object initializers om personen aan te maken.
Specificaties:
- Klassenaam:
Persoon
- Properties (Auto):
Voornaam (string)
Achternaam (string)
Geboortejaar (int)
Email (string)
- Constructor:
- Parameters:
voornaam, achternaam.
- Validatie:
- Indien
voornaam gelijk is aan achternaam -> Werp een ArgumentException op met de boodschap "Voornaam en achternaam mogen niet hetzelfde zijn".
- Methode:
ToonInformatie() (void): Toont de tekst: "{Voornaam} {Achternaam} geboren in {Geboortejaar} heeft emailadres: {Email}".
Opdracht in Main:
- Maak een
Persoon object aan met de constructor.
- Gebruik Object Initializer Syntax om ook meteen
Geboortejaar en Email in te stellen.
- Voorbeeld:
new Persoon("Jan", "Janssens") { Geboortejaar = 1990, ... }
- Roep
ToonInformatie() aan.
- Schrijf code die test of je applicatie niet krasht als je een foutieve naam ingeeft (gebruik
try-catch).
Doel: Breid de BibBoek klasse uit met default waarden en statische logica.
Aanpassingen aan BibBoek:
- Default Constructor:
- Stel
Uitgeleend in op DateTime.Now.
- Overloaded Constructor:
- Parameter:
DateTime startDatum.
- Stel
Uitgeleend in op deze parameter.
- Validatie: Indien
startDatum in de toekomst ligt -> Werp exception.
- Statische Methode:
static void VeranderAlgemeneUitleenTermijn(int dagen)
- Werking:
- Maak een
private static int uitleenTermijnInDagen aan in de klasse (standaardwaarde bv. 14).
- Pas de methode aan zodat deze statische variabele wordt gewijzigd.
- Pas de property
InleverDatum aan zodat hij deze statische variabele gebruikt voor de berekening (i.p.v. de hardcoded 14 dagen).
{% hint style="info" %}
Maak je oplossing in een kopie van volgende solution met bijhorende unittests.
Specificaties:
- Klassenaam:
DigitaleKluis
- Velden:
private int code (de echte code).
private int aantalPogingen (standaard 0).
- Properties:
CanShowCode (bool): Mag de code getoond worden?
Code (int): Full property met private set.
- Get logica:
- Als
CanShowCode == true: Geef de echte code terug.
- Als
CanShowCode == false: Geef altijd -666 terug.
CodeLevel (int) - ReadOnly:
- Formule:
code / 1000 (gehele deling).
Constructors:
- Constructor die één
int aanvaardt en deze instelt als de code.
Methode TryCode(int ingevoerdeCode): Deze methode controleert de code en geeft true (juist) of false (fout) terug. De methode print ook feedback naar de console.
Beslissingstabel voor TryCode:
| Situatie | Conditie | Actie (Console Output) | Return Waarde |
| Valsspeler | ingevoerdeCode == -666 | "CHEATER" | false |
| Reeds Geblokkeerd | aantalPogingen >= 10 | "Je hebt je 10 pogingen opgebruikt." | false |
| Juiste Code | ingevoerdeCode == code | "Geldige code. Aantal pogingen = {aantalPogingen}" | true |
| Foute Code | ingevoerdeCode != code | "Geen geldige code." (Verhoog aantalPogingen met +1) | false |
Voeg een statische methode toe om een kluis te kraken via brute-force.
Specificaties:
- Locatie: In de klasse
DigitaleKluis.
- Signatuur:
static void BruteForce(DigitaleKluis kluis)
- Werking:
- Start een lus die 10 keer herhaalt.
- Kies telkens een willekeurig getal.
- Probeer dit getal op de meegegeven
kluis via kluis.TryCode(getal).
- Als
TryCode true teruggeeft: Stop en toon "Gekraakt!".
Test dit in je Main door een kluis aan te maken en DigitaleKluis.BruteForce(mijnKluis) aan te roepen.
Pas je Pokemon klasse aan zodat deze op 3 manieren aangemaakt kan worden. Dit betekent dat je 2 constructors moet toevoegen (de default constructor bestaat al, tenzij je die overschreven hebt).
De 3 manieren:
- Default Constructor:
- Gebruik:
new Pokemon()
- Actie: Stel alle 6 base-stats standaard in op 10.
- Overloaded Constructor:
- Gebruik:
new Pokemon(hp, att, def, spAtt, spDef, speed)
- Actie: Stel de 6 base-stats in met de meegegeven waarden.
- Object Initializer:
- Gebruik:
new Pokemon() { HP_Base = 40, Naam = "Pikachu" }
- Actie: Hiervoor hoef je niets speciaals te doen, dit werkt automatisch als je een parameterloze constructor hebt en de properties toegankelijk zijn.
{% hint style="info" %}
Zet de setters van je Base Stat properties op private. Hierdoor kunnen ze alleen aangepast worden tijdens de constructie (via constructor of initializer), maar niet meer daarna.
{% hint style="info" %}
Student Kevin Van Rooy maakte volgende applicatie waarbij bovenstaande opgave als initiële inspiratie diende: