Week 1 "Intermezzo"
Dit labo bereidt je voor op het werken met objecten. We leren hoe we gegevens kunnen structureren in C#. Je maakt best eerst deze oefeningen voor je de bijhorende leerstof in het handboek van hoofdstuk 9 doorneemt.
Dit (nieuwe) aanvullend intermezzo werd opgesteld in samenspraak met Gemini 3 Pro (High).
Oefening 1: De Data Architect (Essential)
Deel 1: De chaos van losse variabelen
Stel je voor: je moet de gegevens van één student bijhouden. Als we alles in losse variabelen stoppen, wordt onze code al snel onoverzichtelijk.
Maak een nieuw Console Application project.
Maak in
Mainvolgende variabelen aan:Een
stringvoor de naam.Drie
intvariabelen voor de scores.
Schrijf een methode
CalculateAveragedie deze 4 variabelen aanvaardt en het gemiddelde berekent.
string name = "Alex";
int score1 = 14;
int score2 = 16;
int score3 = 11;
double average = CalculateAverage(score1, score2, score3);
Console.WriteLine($"{name} scoorde gemiddeld: {average}");Reflectie:
Wat als je nu een 4e score wilt toevoegen? Hoeveel code moet je aanpassen?
Wat als je methode per ongeluk
CalculateAverage(score1, score1, score3)aanroept?
Deel 2: Structureren met Structs
In plaats van losse variabelen, kunnen we gegevens groeperen in een struct. Zie dit als een container waar alle info van één student in zit.
We gaan deze struct in een apart bestand plaatsen, net zoals we dat het hele semester zullen doen:
Klik in de Solution Explorer met de rechtermuisknop op je projectnaam.
Kies Add > New Item... (of Class...).
Selecteer Class en geef het de naam
StudentData.cs.Klik op Add.
Visual Studio heeft nu een nieuwe class voor je gemaakt. Verander het woordje class naar struct en maak het public. Je bestand moet er zo uitzien:
Vervang nu in je
Mainde losse variabelen door één variabele van het typeStudentData.Ken de waarden toe aan de properties van de struct.
Wat is een struct?
Een struct (structure) is een manier om verschillende variabelen die logisch bij elkaar horen, samen te binden in één nieuwe variabele.
Je kan het zien als een blauwdruk.
De
structdefinitie (in je nieuwe bestand) is het ontwerp (het plan).De variabele
myStudent(inMain) is het daadwerkelijke object (het huis) dat je op basis van dat ontwerp hebt gebouwd.
Vanaf nu kent C# dus niet alleen int, string en bool, maar ook jouw eigen type StudentData!
Deel 3: Scores verwerken
Het grote voordeel is dat we nu de volledige student in één keer kunnen doorgeven aan methoden.
Herschrijf de methode
CalculateAverage.De methode aanvaardt nu één parameter van het type
StudentDatain plaats van losse ints.De methode haalt de scores uit de struct (
student.Scores) om het gemiddelde te berekenen.
Merk op dat als we nu een score toevoegen aan de array, we de methode CalculateAverage niet meer hoeven aan te passen!
Uitbreiding (Essential)
Kan je je programma uitbreiden met volgende functionaliteiten?
Maak een methode
bool HasPassed(StudentData student)dietrueteruggeeft als het gemiddelde >= 10.Maak een methode
int GetHighestScore(StudentData student)die het hoogste cijfer uit de struct haalt.
Labo 2: De RPG Inventory
In dit deel gaan we een stap verder. We weten nu wat een struct is (een "doos"). Maar wat als we een hele stapel dozen hebben?
Deel 1: De Inventory Item
In een RPG game heeft je character vaak tientallen items bij zich. Stel je voor dat je dit met losse arrays zou doen: string[] itemNames, double[] itemWeights, int[] itemValues...
Dat is vragen om problemen. Wat als index 5 van names niet meer klopt met index 5 van weights?
We gaan dit oplossen met één struct.
Maak een nieuw project "RPGInventory".
Voeg een nieuwe struct
InventoryItem.cstoe via Add New Item.Zorg dat de struct volgende eigenschappen heeft:
Name(string): bv "Iron Sword"Weight(double): bv 2.5Value(int): bv 150 (goudstukken)
Deel 2: De Schatkist (Arrays van Structs)
Nu kunnen we een array maken van deze struct. Dit is onze "rugzak".
Maak in
Maineen array aan die plaats biedt voor 3 items.Vul de array met 3 items (verzin zelf leuke namen!).
Deel 3: De Inventory Manager
We willen nu methoden schrijven die onze rugzak kunnen analyseren.
Maak een methode
ShowInventorydie de volledige array als parameter krijgt.Gebruik een
foreachloop om elk item netjes op het scherm te tonen.
Roep deze methode aan in
Main.
Uitbreiding
Nu je de basis hebt, kan je de "Inventory Manager" slimmer maken. Voeg de volgende methodes toe:
Total Value: Maak een methode
int CountTotalValue(InventoryItem[] items)die berekent hoeveel je hele inboedel waard is.Heavy Lifting: Maak een methode
InventoryItem FindHeaviestItem(InventoryItem[] items)die het zwaarste object uit de lijst teruggeeft. Tip: Begin met het eerste item als "zwaarste tot nu toe" en loop door de rest. Print in Main de naam van dit object af.Encumbrance Rule: Maak een methode
bool IsOverencumbered(InventoryItem[] items, double maxWeight). Deze geefttrueterug als het totale gewicht van alle items hoger is danmaxWeight. Test dit inMain: als je rugzak te zwaar is, toon dan een waarschuwing "Je kan niet meer rennen!".
Last updated
Was this helpful?