[G_PRO] Basis Programmeren en OO Programmeren
DigitAP
  • Welkom
  • Inleiding
    • Benodigdheden
    • Afspraken code
    • Afspraken oefeningen
    • Nuttige extras
    • Dankwoord
    • Mee helpen?
  • Semester 1: Programming Principles
    • H1: Werken met Visual Studio
      • Introductie tot C#
      • Visual Studio en .NET Core installeren
      • Een C# project maken in Visual Studio
      • Fouten in je code
      • Je eerste stappen in C#
      • Input/Output: ReadLine/WriteLine
      • Kleuren in Console
      • Oefeningen
    • H2: Variabelen en datatypes
      • De syntaxis van C#
      • Datatypes
      • Variabelen
      • Expressies en operators
      • Oefeningen
    • H3: Strings en hun methoden
      • Strings
      • Strings samenvoegen
      • Omzetten van en naar strings
      • Functionaliteit van strings
      • Oefeningen
    • H4: Beslissingen
      • Beslissingen intro
      • Enkelvoudige booleaanse expressies
      • If, else, else if
      • Samengestelde booleaanse expressies
      • Scope van variabelen
      • Switch
      • Oefeningen
    • H5: Loops
      • Loops intro
      • While en Do While
      • For
      • Debuggen
      • Oefeningen
    • H6: Arrays
      • Array principes
      • Alternatieve syntax
      • Werken met arrays
      • Defaultwaarden
      • List<T>
      • Oefeningen
    • H7: Methoden
      • Methoden intro
      • Parameters
      • Return waarden
      • Geavanceerde methoden
      • Oefeningen
    • Intermezzo: TextCell
    • H8: Numerieke data
      • De Math klasse
      • Random
      • Casting en conversie
      • Oefeningen
    • H9: Meerdimensionaal werken
      • N-dimensionale arrays
      • Geneste iteratie
      • Oefeningen
    • H10: Gevorderde tekstverwerking
      • Voorstelling van tekst
      • Interpolatie met formattering
      • Werken met arrays van strings
      • Input en output van tekstbestanden
      • Oefeningen
    • Afsluiter: TextCell2D
  • Semester 2 : OOP
    • H10: Klassen en objecten
      • OOP Intro
      • Klassen en objecten aanmaken
      • DateTime: leren werken met objecten
      • Enumeraties: nog een eigen datatype
      • Klassen en objecten weergeven deel 1
      • Attributen
      • Methoden
      • Access modifiers
      • Properties
      • Oefeningen
    • H11: Objecten (al dan niet) aanmaken
      • Constructors
      • Spelen met strings
      • Oefeningen
    • H12: Geheugenmanagement bij klassen
      • value en reference met eigen objecten
      • nullable value types
      • NullReference exception
      • Oefeningen
    • H13: Datastructuren
      • Foreach en var
      • List
      • Dictionary
      • Immutable datastructuren
      • Verdere datastructuren
      • Oefeningen
    • H14: Overerving
      • Overerving intro
      • Virtual en override
      • Abstract
      • Constructors bij overerving
      • Oefeningen
    • H15: Geavanceerde overerving
      • protected access modifier
      • Base keyword
      • System.Object
      • Oefeningen
    • H16: Exception handling
      • Werken met exceptions
      • Zelf uitzonderingen maken
      • Wanneer exceptions en handling gebruiken
      • Oefeningen
    • H17: Polymorfisme en interfaces
      • Polymorfisme
      • Polymorfisme in de praktijk
      • Interfaces
      • Losse koppeling
      • Oefeningen
    • H18: Testing
      • Intro Testing
      • Wat is Unit Testing
      • Waarom Unit Testing?
      • Wanneer Unit Testing?
      • Schrijven van een unit test: AAA methode
      • Eerste voorbeeld: Sum
      • Assert
      • Oefening even of oneven getal
      • TestInitialize en DataRows
      • Oefening BMI
      • Exception testing
      • Oefening BMI exception
      • Oefening SchoolAdmin test null-waarden en TestCleanup
      • Oefening SchoolAdmin test equals
      • Oefening SchoolAdmin test cursus zoeken met id
      • Dependencies bij Unit Testing
      • Mocking
      • Oefeningen Mocking
      • Test Driven Development
      • Class Library
      • Oefeningen TDD
    • H19: SOLID
      • Single Responsibility Principle (SRP)
      • Open/Closed Principle (OCP)
      • Liskov Substitution Principle (LSP)
      • Interface Segregation Principle (ISP)
      • Dependency Inversion Principle (DIP)
  • Appendix
    • Visual Studio Tips & Tricks
    • Ea-ict coding guidelines
    • Oefeningen kerkhof
  • Semester 1 appendix
    • Nice to know stuff
      • Out en Ref parameters
      • Jagged arrays
    • All-In-Projecten
      • Overzicht
      • Console Matrix
      • Ascii filmpjes maken met loops
      • Ascii filmpjes maken met methoden
      • Fun with methods: een verhaalgenerator
      • Tekst-gebaseerd Maze game
      • Conway game of life
  • Semester 2 appendix
    • Operator overloading
    • Object Initializer Syntax
    • Compositie en aggregatie
    • Nice to know stuff
      • Klassen herbruiken
      • Expression bodied members
    • All-In-Projecten
      • Overzicht
      • OO Textbased Game
      • War Simulator
      • Map Maker
      • Magic The Gathering API
      • SchoolAdmin
  • Pro (geen leerstof en/of in opbouw)
    • Bitwise operators
    • Generics en collections
      • Generics methoden en types
      • Generic classes en constraints
      • Collections
      • Labo-oefeningen
    • Events
      • Events
      • Chat server
    • Software engineering
      • SOLID
Powered by GitBook
On this page
  • Oefening: H11-FiguresWithConstructor
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • H11_1 SchoolAdmin Student Constructor
  • H11_2 SchoolAdmin Cursus Constructor
  • H11_3 SchoolAdmin CursusResultaat Constructor
  • H11_4 SchoolAdmin Student uit tekst lezen
  • Voorbeeldinteractie
  • Oefening: H11-FoodPurchase
  • Leerdoelen
  • Functionele analyse
  • Technische analyse
  • Voorbeeldinteractie
Export as PDF
  1. Semester 2 : OOP
  2. H11: Objecten (al dan niet) aanmaken

Oefeningen

Werk verder in de klasse ClassesAndObjects:

Oefening: H11-FiguresWithConstructor

Leerdoelen

  • werken met klassen en objecten

  • gebruik maken van properties om geldige waarden af te dwingen

  • gebruik van een constructor

Functionele analyse

Functioneel is dit programma hetzelfde als H10-figures.

Technische analyse

Voorzie je eerdere figuren (Rectangleen Triangle) van een constructor met twee parameters, waarvan de tweede telkens de hoogte voorstelt en de eerste de andere afmeting. Zorg dat deze constructor gebruik maakt van de properties, zodat je makkelijker objecten met de juiste afmetingen kan maken en toch dezelfde foutmeldingen krijgt als eerder.

Je zal een extra, parameterloze, constructor moeten toevoegen omdat DemoFiguresvan eerder moet blijven werken. Schrijf een nieuwe methode DemoFiguresWithConstructor om te tonen dat je hetzelfde kan bereiken met de constructor met twee parameters. Deze moet ook opgeroepen kunnen worden van uit je keuzemenu.

Voorbeeldinteractie(s)

Schrijf DemoFiguresWithConstructor zodanig dat je exact onderstaande interactie krijgt:

Het is verboden een breedte van -1 in te stellen!
Het is verboden een hoogte van 0 in te stellen!
Een rechthoek met een breedte van 2,2m en een hoogte van 1,5m heeft een oppervlakte van 3,3m².
Een rechthoek met een breedte van 3m en een hoogte van 1m heeft een oppervlakte van 3,0m².
Een driehoek met een basis van 3m en een hoogte van 1m heeft een oppervlakte van 1,5m².
Een driehoek met een basis van 2m en een hoogte van 2m heeft een oppervlakte van 2,0m².

H11_1 SchoolAdmin Student Constructor

We willen een constructor gebruiken in Student om zeker te zijn dat we de nodige attributen en properties initialiseren.

Klassediagram

Maak de constructor met 2 parameters. Zorg er ook voor dat je StudentNumberde waarde van StudentCounter toewijst en dat je StudentCounter met 1 verhoogt.

De default constructor kan nu niet meer gebruikt worden. Pas de code aan van DemoStudents met gebruik van de nieuwe constructor. Neem diezelfde code over in DemoCourses(zonder ShowOverview).

H11_2 SchoolAdmin Cursus Constructor

We wensen op verschillende manieren Course-objecten te kunnen aanmaken.

Klassediagram

Maak eerst de constructor met 3 parameters (titel, studenten en studiepunten). Initialiseer hier de nodige attributen en properties en zorg voor een juist Id van de cursus met behulp van maxId. Voeg het nieuwe object ook toe aan de list AllCourses.

Maak de tweede constructor met een chaining naar de eerste. Omdat een cursus meestal 3 studiepunten is, gaan we deze in dat geval gebruiken.

De derde met maar één parameter gebruiken we als er nog geen studentenlijst kan meegegeven worden. Gebruik hier een chaining naar de tweede constructor met een nieuwe lege lijst van studenten.

Pas de methode ShowOverviewaan zodat naast de Titlevan de cursus ook het Id getoond wordt tussen haakjes alsook het aantal studiepunten tussen haakjes met "stp" erbij.

Voorbeeld van het resultaat van ShowOverview:

Gebruik de 3 constructors in DemoCourses: Herschrijf de code: - plaats eerst de code om de studenten said en mieke te maken; - maak vervolgens een List van type Student en voeg said en mieke toe; - maak een cursus communicatie met de lijst van studenten die je net gemaakt hebt en met 6 studiepunten (constructor 1); - maak een cursus programmeren met dezelfde lijst van studenten en 3 studiepunten (constructor 2); - maak cursussen webtechnologie en databanken met enkel de titel (constructor 3); - voeg said toe aan de list Studentsvan webtechnologie en mieke aan die van databanken; - toon de overzichten van de cursussen.

H11_3 SchoolAdmin CursusResultaat Constructor

We willen gemakkelijker CourseResult-objecten kunnen aanmaken met behulp van een constructor.

Klassediagram

Maak de property Nameread-only.

Voeg een constructor toe met de parameters name en result.

De default constructor kan nu niet meer gebruikt worden en dat heeft gevolgen in de klasse Student. Pas de methode RegisterCourseResult aan.

H11_4 SchoolAdmin Student uit tekst lezen

na spelen met strings

Zorg ervoor dat een gebruiker één regel tekst kan intypen met alle gegevens over een student, zonder veel verdere interactie.

Schrijf hiervoor in Program.cs een methode ReadTextFormatStudentdie vraagt om de tekstvoorstelling van één student in te typen. Je mag veronderstellen dat de gebruiker dat in het juiste formaat ingeeft; eerst de naam van de student, gevolgd door een puntkomma, gevolgd door de geboortedag, puntkomma, geboortemaand, puntkomma, geboortejaar. Alle elementen van de geboortedatum worden voorgesteld als getallen, volgens de afspraken die je ook toepast om datums te noteren in het Belgische formaat. Het kan zijn dat er ook informatie is om de student meteen te registreren voor een of meerdere cursusresultaten. In dat geval staat er na het geboortejaar nog een puntkomma, dan de naam van de cursus, dan het behaalde cijfer. Per cursus herhaalt deze groep van twee elementen zich. Bijvoorbeeld:

Bart Van Steen;04;03;1998;Boekhouden;14;Macro-economie;8;Frans, deel 2;18

Gebruik deze gegevens om een nieuw student-object te maken en de student te registreren voor de ingegeven cursussen. Toon vervolgens het overzicht van de student.

De student hoeft niet opgenomen te worden in de lijstStudents van een Course-object. We verbeteren dit later nog.

Voorbeeldinteractie

Geef de tekstvoorstelling van 1 student in CSV-formaat:
>Bart Van Steen;04;03;1998;Boekhouden;14;Macro-economie;8;Frans, deel 2;18

Bart Van Steen, 22 jaar

Cijferrapport:
**********
Boekhouden:     14
Macro-economie: 8
Frans, deel 2:  18
Gemiddelde      13,3

Oefening: H11-FoodPurchase

Leerdoelen

  • herhalingsoefening van onderwerpen 10 en 11

Functionele analyse

We willen de aankoop van één bepaald voedingsproduct voorstellen. Je kan je dit inbeelden als één regel op een kasticket.

Technische analyse

Schrijf een eigen klasse FoodPurchase. Het klassendiagram ziet er als volgt uit:

Deze klasse bevat:

  • Attribuut Refrigerate:

    • Hierin wordt bijgehouden of het voedingsproduct koel moet bewaard worden

  • Property ProductName:

    • Read-only

    • Wordt altijd in hoofdletters weergegeven

  • Property Number:

    • Bevat het aantal aangekochte producten

    • Als er hier een waarde kleiner of gelijk aan 0 wordt gegeven, dan toon je: “Ongeldig aantal”

  • Property UnitPrice:

    • Prijs van het product

    • Er wordt een foutmelding geprint op de console als de prijs kleiner is dan 0 of groter is dan 5000: “Ongeldige eenheidsprijs”

  • Computed property ExpirationDate:

    • Dit is de vervaldatum van het product

    • Deze is altijd 2 maanden later.

  • Constructor:

    • Parameters: de naam van het product, het aantal, de prijs en het al dan niet koud bewaren

  • Methode CalculateTotalPrice:

    • Deze geeft prijs x aantal

In de klasse ClassesAndObjects maak je:

  • Methode DemoPurchase:

    • De methode maakt eerst een object waarbij er 2 stuks kaas worden aangekocht van 2,45 euro. Toon hiervan de totaalprijs en de vervaldatum.

    • Vervolgens maak je een object waarbij 0 stuks boter wordt aangekocht aan 5555 euro.

Voorbeeldinteractie

PreviousSpelen met stringsNextH12: Geheugenmanagement bij klassen

Last updated 1 year ago