Skip to main content

OOP

1 Wat is OOP en waarom gebruiken we het?

🎯 Leerdoelen

  • Je begrijpt het verschil tussen procedureel programmeren en OOP.
  • Je weet wat een klasse, object en methode zijn.
  • Je kunt herkennen wanneer OOP handig is in grotere projecten.

💡 Uitleg

Wat is OOP?

OOP staat voor Objectgeoriënteerd programmeren. In plaats van losse functies en variabelen, werk je met objecten die gedrag en gegevens combineren.

Waarom OOP gebruiken?

  • Je kunt code beter organiseren en hergebruiken.
  • Je maakt je programma makkelijker uitbreidbaar.
  • Je kunt complexe systemen opdelen in logische blokken (objecten).

Voorbeeld: procedureel vs OOP

Procedureel:

<?php
$naam = "Tessa";
$leeftijd = 19;

function begroet($naam) {
    echo "Hallo, ik ben " . $naam;
}

begroet($naam);
?>

Objectgeoriënteerd:

<?php
class Persoon {
    public $naam;
    public $leeftijd;

    public function begroet() {
        echo "Hallo, ik ben " . $this->naam;
    }
}

$tessa = new Persoon();
$tessa->naam = "Tessa";
$tessa->leeftijd = 19;
$tessa->begroet();
?>

🛠️ Opdracht – Van procedureel naar objectgeoriënteerd

Je gaat een simpel PHP-script omzetten naar OOP.

  1. Maak een bestand mijn-procedureel.php en schrijf de volgende code:
    <?php
    $autoMerk = "Toyota";
    $bouwjaar = 2018;
    
    function toonAuto($merk, $jaar) {
        echo "Dit is een $merk uit $jaar";
    }
    
    toonAuto($autoMerk, $bouwjaar);
    ?>
  2. Maak nu een tweede bestand: mijn-oop.php en herschrijf dit script in OOP-stijl:
    <?php
    class Auto {
        public $merk;
        public $bouwjaar;
    
        public function toon() {
            echo "Dit is een $this->merk uit $this->bouwjaar";
        }
    }
    
    $auto = new Auto();
    $auto->merk = "Toyota";
    $auto->bouwjaar = 2018;
    $auto->toon();
    ?>

🧠 Reflectie

  • Wat vond je makkelijker: de procedurele of de OOP-versie?
  • Waarom denk je dat OOP belangrijk is bij grotere projecten?
  • Kun je zelf een ander voorbeeld bedenken waarbij OOP handig zou zijn?

📤 Inleveren

  • Lever beide bestanden in: mijn-procedureel.php en mijn-oop.php
  • Maak een kort reflectiebestand: reflectie-les1-<jouw-naam>.txt
  • Let op: je code moet uitvoerbaar zijn in de browser (via XAMPP of localhost).

2 Klassen en objecten

🎯 Leerdoelen

  • Je weet wat een klasse en een object zijn.
  • Je kunt een eenvoudige klasse maken in PHP.
  • Je kunt een object aanmaken op basis van die klasse en ermee werken.

💡 Uitleg

Wat is een klasse?

Een klasse is een soort blauwdruk of bouwtekening. Je beschrijft hiermee hoe een bepaald type object eruitziet en wat het kan doen.

Wat is een object?

Een object is een concreet exemplaar van een klasse. Je maakt een object aan met new. Een klasse kun je meerdere keren gebruiken om verschillende objecten te maken.

Voorbeeld:

<?php
class Hond {
    public $naam;
    public $leeftijd;

    public function blaf() {
        echo "Woef! Ik ben " . $this->naam;
    }
}

$mijnHond = new Hond();
$mijnHond->naam = "Rex";
$mijnHond->leeftijd = 3;
$mijnHond->blaf();
?>

🛠️ Opdracht – Maak je eigen klasse

  1. Maak een nieuw bestand: mijn-klas.php
  2. Maak hierin een klasse Student met de eigenschappen voornaam, achternaam en opleiding.
  3. Maak een methode stelVoor() die zegt: "Hallo, ik ben [voornaam] [achternaam] en ik doe de opleiding [opleiding]."
  4. Maak een object van de klasse en test het resultaat in je browser.

🧠 Reflectie

  • Wat viel je op bij het maken van een object?
  • Wat betekent $this precies in de methode?
  • Wat gebeurt er als je een eigenschap niet vult voor je stelVoor() gebruikt?

📤 Inleveren

  • Bestandsnaam: mijn-klas.php
  • Reflectievragen in een apart txt- of PDF-bestand: reflectie-les2-<jouw-naam>.txt

3 Constructors en eigenschappen

🎯 Leerdoelen

  • Je weet wat een constructor is in een klasse.
  • Je kunt automatisch waarden toekennen bij het maken van een object.
  • Je begrijpt het verschil tussen eigenschappen (properties) en methoden.

💡 Uitleg

Wat is een constructor?

Een constructor is een speciale methode die automatisch wordt uitgevoerd als je een object maakt. In PHP heet deze methode __construct().

Waarom handig?

Met een constructor hoef je niet handmatig eigenschappen toe te wijzen nadat je een object hebt aangemaakt.

Voorbeeld zonder constructor:

<?php
class Auto {
    public $merk;
    public $bouwjaar;
}

$auto = new Auto();
$auto->merk = "Toyota";
$auto->bouwjaar = 2018;
?>

Voorbeeld met constructor:

<?php
class Auto {
    public $merk;
    public $bouwjaar;

    public function __construct($merk, $bouwjaar) {
        $this->merk = $merk;
        $this->bouwjaar = $bouwjaar;
    }
}

$auto = new Auto("Toyota", 2018);
?>

🛠️ Opdracht – Constructor gebruiken

  1. Maak een nieuw bestand: les3-student.php
  2. Maak opnieuw een klasse Student met eigenschappen: voornaam, achternaam en opleiding.
  3. Voeg een constructor toe waarin deze waarden worden ingesteld.
  4. Maak een methode stelVoor() die de gegevens netjes toont.
  5. Maak minstens twee objecten aan en laat de stelVoor()-methode zien in de browser.

🧠 Reflectie

  • Wat is het voordeel van een constructor ten opzichte van handmatige toekenning?
  • Wat gebeurt er als je het aantal parameters niet goed doorgeeft?
  • Wat betekent $this->... in de constructor?

📤 Inleveren

  • Bestandsnaam: les3-student.php
  • Reflectievragen in een apart bestand: reflectie-les3-<jouw-naam>.txt

4 Methoden met parameters en returnwaardes

🎯 Leerdoelen

  • Je begrijpt hoe je een methode maakt die parameters accepteert.
  • Je kunt een methode schrijven die een waarde teruggeeft met return.
  • Je ziet hoe objectmethoden kunnen samenwerken met parameters uit de code.

💡 Uitleg

Wat is een parameter?

Een parameter is een waarde die je doorgeeft aan een methode, zodat deze methode die waarde kan gebruiken in de berekening of actie.

Wat is een returnwaarde?

Met return geef je een resultaat terug uit een methode, zodat je dat resultaat ergens anders kunt gebruiken.

Voorbeeld:

<?php
class Rekening {
    public $saldo = 0;

    public function stort($bedrag) {
        $this->saldo += $bedrag;
    }

    public function toonSaldo() {
        return $this->saldo;
    }
}

$mijnRekening = new Rekening();
$mijnRekening->stort(50);
echo "Je saldo is: ". $mijnRekening->toonSaldo();
?>

🛠️ Opdracht – Werk met parameters en return

  1. Maak een nieuw bestand: les4-rekening.php
  2. Maak een klasse Rekening met een startsaldo van 0.
  3. Voeg een methode stort($bedrag) toe die het bedrag bij het saldo optelt.
  4. Voeg een methode opname($bedrag) toe die het bedrag van het saldo afhaalt.
  5. Voeg een methode toonSaldo() toe die het saldo teruggeeft met return.
  6. Test de klasse met een paar stortingen en opnames. Toon telkens het saldo in de browser.

🧠 Reflectie

  • Wat gebeurt er als je een opname doet die groter is dan je saldo?
  • Wat zijn de voordelen van werken met return?
  • Kun je meerdere parameters doorgeven aan een methode? Probeer dit eens uit.

📤 Inleveren

  • Bestandsnaam: les4-rekening.php
  • Reflectievragen in een apart bestand: reflectie-les4-<jouw-naam>.txt

5 Encapsulation en private properties

🎯 Leerdoelen

  • Je weet wat encapsulation is.
  • Je begrijpt het verschil tussen public en private.
  • Je kunt getters en setters gebruiken om toegang tot eigenschappen te regelen.

💡 Uitleg

Encapsulation betekent dat je data (eigenschappen) beschermt tegen direct aanpassen van buitenaf. In plaats daarvan gebruik je methoden om de data op een gecontroleerde manier te bekijken of aan te passen.

Waarom gebruiken?

Zo voorkom je fouten doordat andere delen van je code zomaar eigenschappen aanpassen zonder controle.

Voorbeeld:

<?php
class Bankrekening {
    private $saldo = 0;

    public function stort($bedrag) {
        if ($bedrag > 0) {
            $this->saldo += $bedrag;
        }
    }

    public function getSaldo() {
        return $this->saldo;
    }
}

$rekening = new Bankrekening();
$rekening->stort(100);
echo "Saldo: ".$rekening->getSaldo();
?>

🛠️ Opdracht – Bescherm je data

  1. Maak een nieuw bestand: les5-bankrekening.php
  2. Maak een klasse Bankrekening met een private eigenschap $saldo.
  3. Maak een stort()-methode die alleen positief bedrag accepteert.
  4. Maak een getSaldo()-methode die het saldo teruggeeft.
  5. Test de klasse met verschillende stortingen en probeer ook een negatieve storting (die moet worden geweigerd).

🧠 Reflectie

  • Wat is het verschil tussen public en private?
  • Waarom zou je eigenschappen private maken?
  • Wat gebeurt er als je probeert $saldo direct aan te passen?

📤 Inleveren

  • Bestandsnaam: les5-bankrekening.php
  • Reflectievragen in een apart bestand: reflectie-les5-<jouw-naam>.txt

6 Objecten in objecten (Samenstelling)

🎯 Leerdoelen

  • Je leert hoe objecten eigenschappen van andere objecten kunnen bevatten.
  • Je begrijpt hoe objecten kunnen samenwerken.
  • Je kunt objecten combineren in een programma.

💡 Uitleg

In OOP kun je een object gebruiken als eigenschap van een ander object. Dat noemen we "compositie" of "samenstelling". Zo kun je complexe structuren maken.

Voorbeeld:

<?php
class Adres {
    public $straat;
    public $huisnummer;

    public function __construct($straat, $huisnummer) {
        $this->straat = $straat;
        $this->huisnummer = $huisnummer;
    }
}

class Persoon {
    public $naam;
    public $adres;

    public function __construct($naam, $adres) {
        $this->naam = $naam;
        $this->adres = $adres;
    }

    public function toonInfo() {
        echo $this->naam . " woont op " . $this->adres->straat . " " . $this->adres->huisnummer;
    }
}

$mijnAdres = new Adres("Lindelaan", 12);
$persoon = new Persoon("Ali", $mijnAdres);
$persoon->toonInfo();
?>

🛠️ Opdracht – Objecten combineren

  1. Maak een bestand les6-persoonadres.php.
  2. Maak een klasse Adres met de eigenschappen straat en huisnummer.
  3. Maak een klasse Persoon met naam en een eigenschap adres (die een Adres-object bevat).
  4. Maak van beide klassen een object aan in je script, en toon de combinatie van gegevens.

🧠 Reflectie

  • Wat zijn voordelen van het werken met samengestelde objecten?
  • Hoe helpt dit om je code overzichtelijk te houden?

📤 Inleveren

  • Bestandsnaam: les6-persoonadres.php
  • Reflectievragen in een apart bestand: reflectie-les6-<jouw-naam>.txt

7 Constructors en automatische initialisatie

🎯 Leerdoelen

  • Je begrijpt wat een constructor is.
  • Je kunt een constructor gebruiken om eigenschappen meteen in te stellen.
  • Je kunt de constructor van samengestelde objecten gebruiken.

💡 Uitleg

Een constructor is een speciale functie in een klasse die automatisch wordt uitgevoerd bij het aanmaken van een object. Hiermee kun je meteen eigenschappen instellen.

Voorbeeld:

<?php
class Student {
    public $naam;
    public $leeftijd;

    public function __construct($naam, $leeftijd) {
        $this->naam = $naam;
        $this->leeftijd = $leeftijd;
    }

    public function toon() {
        echo \"$this->naam is $this->leeftijd jaar oud.\";
    }
}

$student = new Student(\"Fatima\", 17);
$student->toon();
?>

🛠️ Opdracht – Maak je eigen constructor

  1. Maak een nieuw bestand les7-student.php.
  2. Maak een klasse Student met de eigenschappen naam en leeftijd.
  3. Voeg een constructor toe die deze eigenschappen invult.
  4. Voeg een methode toe die de naam en leeftijd toont.
  5. Maak een object aan met jouw gegevens en test het script.

🧠 Reflectie

  • Waarom is het handig dat de constructor automatisch wordt uitgevoerd?
  • Hoe verschilt dit van handmatig eigenschappen instellen?

📤 Inleveren

  • Bestandsnaam: les7-student.php
  • Reflectievragen in een apart bestand: reflectie-les7-<jouw-naam>.txt