Drop links or images here to add them to the editor.

OOP — Inleiding: wat is Object-Georiënteerd Programmeren?

Wat je al weet: procedureel programmeren

Tot nu toe schreef je code als een lange reeks instructies, van boven naar beneden. Soms splits je die op in methoden zodat je stukken code kan hergebruiken. Dat heet procedureel programmeren.

Een eenvoudig voorbeeld: je wil twee auto’s bijhouden in een programma.

string auto1Merk  = "Toyota";
string auto1Model = "Corolla";
int    auto1Km    = 0;

string auto2Merk  = "BMW";
string auto2Model = "M3";
int    auto2Km    = 15000;

auto1Km += 100;
auto2Km += 50;

Console.WriteLine($"{auto1Merk} {auto1Model}: {auto1Km} km");
Console.WriteLine($"{auto2Merk} {auto2Model}: {auto2Km} km");

Dit werkt nog voor twee auto’s. Maar wat als je tien auto’s wil bijhouden? Dan heb je twintig aparte variabelen. En wat als je ook de kleur, het bouwjaar en de eigenaar wil bijhouden? Dit wordt al snel een enorme chaos.


Het probleem duidelijk gemaakt

Stel: je schrijft een programma voor een autodealer met 50 wagens. Met de procedurele aanpak:

Dat zijn honderden variabelen, en je hebt geen manier om ze logisch samen te houden. Object-Georiënteerd Programmeren (OOP) lost dit op.


De oplossing: denk in objecten

In plaats van “wat moet mijn programma doen?” vraag je je af: “met welke dingen werkt mijn programma?”

Bij een autodealer zijn de dingen: auto’s, klanten, facturen. Elk van die dingen heeft eigenschappen (data) en gedrag (wat het kan doen).

mindmap
  root((Autodealer))
    Auto
      Merk
      Model
      Kilometers
      Kleur
      Rij km toevoegen
      Toon info
    Klant
      Naam
      Email
      Koop auto
    Factuur
      Bedrag
      Datum
      Druk af

In OOP groepeer je de data en het gedrag van één ding samen in een klasse.


De blauwdruk-metafoor

De beste manier om OOP te begrijpen is de blauwdruk-metafoor.

flowchart LR
    A["📐 Blauwdruk\n(Klasse: Auto)"] -->|new Auto()| B["🚗 Wagen 1\nMerk: Toyota"]
    A -->|new Auto()| C["🚗 Wagen 2\nMerk: BMW"]
    A -->|new Auto()| D["🚗 Wagen 3\nMerk: Volvo"]
Begrip Metafoor In C#
Klasse Blauwdruk van een huis class Auto { }
Object Een echt gebouwd huis new Auto()
Eigenschap Aantal kamers, kleur dak Merk, Model, Km
Methode Wat je met het huis doet Rij(), ToonInfo()

Met één blauwdruk kan je oneindig veel objecten maken. Elk object heeft zijn eigen waarden voor de eigenschappen, maar ze delen dezelfde structuur.


Van procedureel naar OOP — zij aan zij

Hier zie je hetzelfde programma op twee manieren geschreven:

Procedureel (zoals je het kent):

string auto1Merk = "Toyota";
string auto1Model = "Corolla";
int auto1Km = 0;

auto1Km += 100;
Console.WriteLine($"{auto1Merk} {auto1Model}: {auto1Km} km");

Object-georiënteerd (wat je nu gaat leren):

Auto mijnAuto = new Auto("Toyota", "Corolla");
mijnAuto.Rij(100);
mijnAuto.ToonInfo();

De OOP-versie is korter, leesbaarder en makkelijker uit te breiden.


Wat zit er in een klasse?

Een klasse kan drie soorten dingen bevatten:

classDiagram
    class Auto {
        +string Merk
        +string Model
        +int AantalKm
        +Auto(merk, model)
        +Rij(km)
        +ToonInfo()
    }
Onderdeel Wat is het? Voorbeeld
Eigenschap (property) Slaat data op over het object Merk, Model, AantalKm
Constructor Maakt een nieuw object aan new Auto("Toyota", "Corolla")
Methode Wat het object kan doen Rij(100), ToonInfo()

De vier principes van OOP — A PIE

OOP steunt op vier basisprincipes. Onthoud ze via de afkorting A PIE:

flowchart TD
    A["🥧 A PIE"] --> AB["A — Abstractie\nVerberg complexiteit,\nbied een simpele interface"]
    A --> P["P — Polymorfisme\nEén naam, meerdere gedragingen\n(later in de cursus)"]
    A --> I["I — Inheritance (overerving)\nKlassen die van anderen erven\n(later in de cursus)"]
    A --> E["E — Encapsulatie\nVerberg interne data,\nbescherm het object"]

In dit hoofdstuk focussen we op Abstractie en Encapsulatie. De rest volgt later.

Abstractie = je hoeft niet te weten hoe iets werkt om het te gebruiken.

Je gebruikt elke dag een smartphone zonder te weten hoe de processor werkt. Dat is abstractie.

Encapsulatie = de interne werking is verborgen en beschermd.

Een bankautomaat toont je je saldo, maar je kan de database niet rechtstreeks aanpassen. Dat is encapsulatie.


Samenvatting

Onthoud

  • Procedureel: code als reeks instructies → wordt al snel chaotisch bij grotere programma’s
  • OOP: code georganiseerd rond objecten — elk object heeft data en gedrag
  • Een klasse is de blauwdruk; een object is een concreet exemplaar
  • Een klasse bevat: eigenschappen (data), constructor (aanmaken) en methoden (gedrag)
  • De vier principes: A PIE — Abstractie, Polymorfisme, Inheritance, Encapsulatie

In de volgende lessen leer je stap voor stap hoe je een klasse schrijft in C#.