[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
  • H12_2 SchoolAdmin: cursus opzoeken op Id
  • H12_3 SchoolAdmin: gelinkte objecten
  • Functionele analyse
  • Technische analyse
  • H12_4 SchoolAdmin: Studieprogramma
  • H12_5 SchoolAdmin: Studieprogramma aanpassen
Export as PDF
  1. Semester 2 : OOP
  2. H12: Geheugenmanagement bij klassen

Oefeningen

PreviousNullReference exceptionNextH13: Datastructuren

Last updated 8 months ago

H12_2 SchoolAdmin: cursus opzoeken op Id

Functionele analyse

We willen cursussen makkelijk kunnen opvragen via Id. Schrijf in de klasse Course een methode SearchCourseById die dit doet.

Technische analyse

Deze methode werkt op klasseniveau, want je hebt geen cursus nodig om een andere cursus te vinden. Ze heeft één parameter, id. Het return type is Course, maar het kan zijn dat je geen cursus met het gevraagde Id kan terugvinden.

De methode werkt door AllCourseselement per element te doorlopen en de waarde van het attribuut Id van elk element te vergelijken met het meegegeven argument. Als de gevraagde cursus niet bestaat, mag je programma niet crashen, maar krijg je null terug.

Klassediagram

H12_3 SchoolAdmin: gelinkte objecten

Functionele analyse

Het is niet handig dat onze klasse CourseRegistrationeen cursus voorstelt als string. Dat maakt dat we de functionaliteit van Courseniet kunnen gebruiken. Pas daarom CourseRegistration aan zodat de klasse echt gelinkt is aan Course. Dit vereist aanpassingen op een aantal plaatsen.

Technische analyse

Wijzig de klasse CourseRegistration: verwijder Name, voeg de full property Coursetoe en pas de constructor aan.

Klassediagram

Door deze aanpassing moeten er een aantal wijzigingen gebeuren:

  1. in de klasse Student: - pas de methode RegisterCourseResult aan door het parametertype van course te veranderen - zorg ervoor dat in ShowOverview in plaats van de Namevan een cursus de Titlevan de cursus getoond wordt

  2. In de methode DemoStudents(Program) moet je eerst 4 Course-objecten aanmaken die je vervolgens als argument kan gebruiken bij het toepassen van RegisterCourseResult.

  3. In de methode DemoCourses worden reeds 4 Cursus-objecten aangemaakt. Pas de oproepen naar de methode RegisterCourseResult aan en schuif ze verder naar onderen zodat deze methode terug correct werkt.

  4. Aanpassingen ReadTextFormatStudent: Vanaf nu gebruiken we in de csv-gegevens van een student niet meer de naam van een cursus maar het ID. Met behulp van de methode SearchCourseById kan je dan de juiste cursus terugvinden en deze gebruiken (als deze niet null is) in RegisterCourseResult .

Controleer ook dat al je testmethodes nog dezelfde resultaten leveren als eerder.

Voorbeeldinteractie

Na het uitvoeren van optie 2 (DemoCourses) en optie 3 (ReadTextFormatStudent):

H12_4 SchoolAdmin: Studieprogramma

Functionele analyse

We wensen cursussen te groeperen in studieprogramma's.

Technische analyse

Schrijf een klasse StudyProgram. Deze heeft een Name(enkele een getter) en bevat een lijst van cursussen. ShowOverviewtoont de naam van het programma en daaronder het overzicht voor elke cursus.

Voorzie ook een methode DemoStudyProgram die hieronder gegeven wordt:

Gebruik volgende code voor de demonstratiemethode:

       Course communicatie = new Course("Communicatie");
       Course programmeren = new Course("Programmeren");
       Course databanken = new Course("Databanken");
       List<Course> courses = new List<Course>() { communicatie, programmeren, databanken };
       StudyProgram programmerenProgram = new StudyProgram("Programmeren");
       StudyProgram snbProgram = new StudyProgram("Systeem- en netwerkbeheer");
       programmerenProgram.Courses = courses;
       snbProgram.Courses = courses;
       programmerenProgram.ShowOverview();
       snbProgram.ShowOverview();

Klassediagram

H12_5 SchoolAdmin: Studieprogramma aanpassen

Functionele analyse

We willen aanpassingen doen aan het studieprogramma SNB. Eerst schrappen we de cursus Databanken en vervolgens wijzigen we de titel van de cursus programmeren naar "Scripting".

Technische analyse

Eerste wijziging:

Pas DemoStudyProgram aan met een Remove van de cursus Databanken uit het programma van SNB:

       Course communicatie = new Course("Communicatie");
       Course programmeren = new Course("Programmeren");
       Course databanken = new Course("Databanken");
       List<Course> courses = new List<Course>() { communicatie, programmeren, databanken };
       StudyProgram programmerenProgram = new StudyProgram("Programmeren");
       StudyProgram snbProgram = new StudyProgram("Systeem- en netwerkbeheer");
       programmerenProgram.Courses = courses;
       snbProgram.Courses = courses;
       //we willen hieronder Databanken schrappen uit het programma SNB
       snbProgram.Courses.Remove(databanken);
       programmerenProgram.ShowOverview();
       snbProgram.ShowOverview();

Hier loopt iets mis. Benoem de oorzaak en corrigeer de fout.

Tweede wijziging:

Gebruik nu volgende code voor de demonstratiemethode:

    Course communicatie = new Course("Communicatie");
    Course programmeren = new Course("Programmeren");
    Course databanken = new Course("Databanken");
    List<Course> coursesProgrammeren = new List<Course>() { communicatie, programmeren, databanken };
    List<Course> coursesSNB = new List<Course>() { communicatie, programmeren, databanken };
    StudyProgram programmerenProgram = new StudyProgram("Programmeren");
    StudyProgram snbProgram = new StudyProgram("Systeem- en netwerkbeheer");
    programmerenProgram.Courses = coursesProgrammeren;
    snbProgram.Courses = coursesSNB;
    //we willen hieronder Databanken schrappen uit het programma SNB
    snbProgram.Courses.Remove(databanken);
    //voor SNB wordt de titel van de cursus Programmeren veranderd naar "Scripting"
    snbProgram.Courses[1].Title = "Scripting";
    programmerenProgram.ShowOverview();
    snbProgram.ShowOverview();

Opnieuw loopt het fout. Benoem zelf de oorzaak en corrigeer de fout.