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.
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.
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 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.
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.
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() |
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.
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#.