Programmeren 1
Home

Programmeren 1

Herhaling
Structs zijn als dozen met data die samen horen

Programmeren 1

Structs en value types vs. reference types

Doelstelling

We werken verder met structs. We onderzoeken ook het gedrag van structs als value types en vergelijken dit met het gedrag van reference types.

Leerpad

Lees aandachtig volgende delen van het Yellow Book.

  1. 4.3 Structs: volledig
  2. 4.4 (alles behalve 4.4.3)

Oefeningen

  1. Werk de recentste oefening uit de les af. De opgave was als volgt:

    • Schrijf (als deel van OefeningenStructs.cs) een struct Student met twee velden Name en Address. Kies zelf geschikte datatypes.
    • Schrijf vervolgens een struct Course met drie velden: Title, Hours en Students. Kies zelf geschikte datatypes.
    • Schrijf vervolgens een methode DemonstrateStudentsAndCourses. Deze maakt een array van Courses aan met daarin een Course aan met titel "Programmeren 1", 120 lestijden en een array met daarin twee studenten en een Course met titel "Datacommunicatie en netwerken", 60 lestijden en een array met daarin drie studenten. Let op: je arrays moeten dan wel maar 2 en 3 studenten bevatten, maar ze moeten groot genoeg zijn om telkens 50 studenten te bevatten.
    • Breid DemonstrateStudentsAndCourses uit om de namen van alle studenten die ingeschreven zijn in een cursus af te printen.
    • Breid je Program.cs uit om deze methode op te roepen en te tonen dat ze werkt.
    Enkele tips:
    • Kijk naar de vorige oefening rond ARPEntry als je niet meer weet hoe je een array moet doorlopen wanneer de lengte niet vastligt.
    • Als je ergens een nullreferentie tegenkomt, betekent dat waarschijnlijk dat je de arrays van studenten niet juist hebt geïnitialiseerd. Kijk naar eerdere voorbeelden waarin een nieuwe array wordt toegekend aan een variabele als je niet zeker bent hoe je dit moet doen.

  2. Opgelet! Deze oefening zal je alléén kunnen oplossen als je de stof in het Yellow Book hebt bestudeerd. Doe dat dus eerst, indien je dat nog niet hebt gedaan.

    • Schrijf een struct Database met drie velden: een veld Name van type String, een veld Counter van type int en een veld Entries van type string[].
    • Schrijf een methode UpdateDatabase(Database db). Deze heeft return type void, krijgt een database mee als parameter en past de database aan als volgt: ze zet de waarde db.Entries[db.Counter] op "een database entry" en verhoogt de counter van db met 1.
    • Schrijf een methode DemonstreerDatabase(). Deze heeft ook return type void. Ze maakt een database aan met de naam "mijnDB", counterwaarde 0 en een array waarin vijf strings passen voor Entries. Daarna roept ze vijf keer UpdateDatabase op met deze nieuw aangemaakte database.
    • Ten slotte print DemonstreerDatabase() de counter en de inhoud van het veld Entries van deze databank, die we voor het gemak even db noemen. Om de inhoud van de databank te printen kan je niet rechtstreeks Console.WriteLine(db.Entries) schrijven, maar moet je elke waarde van db.Entries apart printen. Dit doe je met een lus.
    • Test deze laatste methode uit via Program.cs
    • Wat wordt er uiteindelijk geprint? Schrijf een verklaring neer in woorden. Als je geen verklaring kan geven, schrijf je stap voor stap neer wat je denkt dat er gebeurt.
    • Tip: wat je ziet, heeft te maken met value types en reference types. Value types zijn datatypes die gekopieerd worden wanneer je ze als argument van een methode gebruikt. Reference types zijn datatypes waarvan dan geen kopie wordt gemaakt.
    • Hou je verklaring bij en breng ze mee naar de volgende les.

  3. In deze oefening zal je een versie maken van UpdateDatabase die wel doet wat je zou verwachten. Doe dit als volgt:

    • Schrijf een methode UpdateDatabase2(Database db) met return type Database. Deze doet hetzelfde als UpdateDatabase, maar bevat als laatste instructie een return die het ingevoerde argument (als je deze term niet kent, lees dan: "parameter") teruggeeft.
    • Schrijf een methode DemonstreerDatabase2() met return type void. Deze doet hetzelfde als DemonstreerDatabase, maar kent het resultaat van UpdateDatabase2 na elke oproep van UpdateDatabase2 terug toe aan de variabele die je als argument hebt meegegeven.
    • Test ook deze methode via Program.cs
    • Verklaar ook wat je hier ziet.
    • Breng je verklaring ook hier mee naar de volgende les.
VN
2018-12-13