Beispiel Klasse/Objekt

Nach der vielen Theorie nun zur Veranschaulichung ein Beispiel:

PHP-Quellcode: Beispiel Objektorientierte Programmierung in PHP
<?php
 
// die Klasse "Auto" definieren
class auto
{
 
    // eine Eigenschaft/Attribut festlegen
    var $benoetigter_kraftstoff;
 
    // eine Methode festlegen (nennt sich Funktion, 
    // ist aber in einer Klasse und 
    // wird somit als Methode bezeichnet) 
    function tankdeckel_oeffnen()
    {
        // Ihr Auto spricht mit Ihnen - wenn der
        // Tankdeckel geöffnet wird, sagt es, welchen
        // Kraftstoff es benötigt
        echo "<p>Bitte mit ";
        echo $this->benoetigter_kraftstoff;
        echo " betanken";
    }
}
 
// bisher passiert noch gar nichts,
// jetzt wird aus der Klasse ein Objekt erzeugt
$auto_1 = new auto;
 
// dem Auto wird nun der Kraftstoff zugewiesen,
// eine Eigenschaft (Attribut) wird definiert
$auto_1->benoetigter_kraftstoff = "Diesel";
 
// und nun wird das erste mal die Methode (Funktion)
// tankdeckel_oeffnen aufgerufen und das Auto sagt
// freudig, was es für Sprit benötigt
$auto_1->tankdeckel_oeffnen();
?>

Das mag für die wenige Funktion erscheinen, als schieße man auf Spatzen mit Kanonen (soll vorkommen). Interessant ist es, wenn wir nun für die ganze Familie die Autos erzeugen.

PHP-Quellcode: weitere Instanzen erzeugen
// das neues Objekt auto_2 wird "gekauft"
$auto_2 = new auto;
$auto_2->benoetigter_kraftstoff = "Super";
 
// das neues Objekt auto_3 wird erstellt
$auto_3 = new auto;
$auto_3->benoetigter_kraftstoff = "Ethanol";
 
// Wird nun mit Auto 3 tanken gegangen,
// erhält man den richtigen Hinweis,
// was das Auto schluckt mit:
$auto_3->tankdeckel_oeffnen();

Aufgabe

Ergänzen Sie das Beispiel oben, dass das Auto nicht nur sagt, was es für Treibstoff benötigt, sondern auch, was für eine Marke es ist (z. B. ein Benz, ein BMW, eine ABC-Klasse oder so).

Gedächtnis des Objektes

Jedes Objekt hat sein eigenes Gedächtnis (die Daten sind gekappselt) - im obigen Beispiel merkt sich das Auto nun, wie oft es in seinem Leben betankt wurde. Dazu benötigen wir eine weitere Eigenschaft (anzahl_betankungen) und die Methode tankdeckel_oeffnen wird erweitert (OK, nicht jedesmal, wenn der Tankdeckel geöffnet wird, wird auch getankt - aber so ist es nett einfach)

PHP-Quellcode: Gedächtnis des Objektes
<?php
// die Klasse "Auto" definieren
class auto
{
    // eine Eigenschaft/Attribut festlegen
    var $benoetigter_kraftstoff;
 
    // Eigenschaft anzahl_betankung setzen und 
    // Start-Wert zuweisen
    var $anzahl_betankungen = 0;
 
    // eine Methode (flapsig Funktion) festlegen
    function tankdeckel_oeffnen()
    {
        // Ihr Auto spricht mit Ihnen - wenn der
        // Tankdeckel geöffnet wird, sagt es, welchen
        // Kraftstoff es benötigt
        echo "<p>Bitte mit ";
        echo $this->benoetigter_kraftstoff;
        echo " betanken";
        echo "<p>Ich wurde ";
        echo $this->anzahl_betankungen;
        echo " mal betankt";
 
        // Anzahl der betankungen wird um 1 erweitert
        $this->anzahl_betankungen++;
    }
}
 
// bisher passiert noch gar nichts,
// jetzt wird aus der Klasse ein Objekt erzeugt
$auto_1 = new auto;
 
// dem Auto wird nun der Kraftstoff zugewiesen,
// eine Eigenschaft (Attribut) wird definiert
$auto_1->benoetigter_kraftstoff = "Diesel";
 
// und nun wird das erste mal die Methode (Funktion)
// tankdeckel_oeffnen aufgerufen und das Auto sagt
// freudig, was es für Sprit benötigt
$auto_1->tankdeckel_oeffnen();
 
// Damit man das Gedächtnis des Objektes sieht
$auto_1->tankdeckel_oeffnen();
?>

Anwendung von Objektorientierter Programmierung oder Prozeduraler Programmierung

Bei einigen Programmen wird es nicht sinnvoll sein, diese objektorientiert zu erstellen, da wirklich mit Kanonen auf Spatzen geschossen wird, bei anderen Programmen wird es sehr wohl sinnvoll sein. Dies ist immer die Entscheidung des Programmierers. Wenn Sie sich verschiedene Programme von anderen Programmierern ansehen, werden Sie sich manchmal fragen, warum nicht objektorinentiert. Das kann verschiedene Gründe haben, wie z.B. dass das Ursprungsprogramm ganz ganz klein war und erst mit der Zeit in Größe und Komplexität gewachsen ist oder schlicht und ergreifend der entsprechende Programmierer nicht firm ist in Objektorientierter Programmierung. Der erste Schritt zum Verständnis ist wichtig und kann unter Umständen mehrere Anläufe benötigen ? aber es lohnt sich!

Ausgabe der Eigenschaften eines Objektes:

Sie können auch die Eigenschaften direkt abfragen (das sollte aber in der Regel über die Methoden stattfinden:

PHP-Quellcode: Ausgabe der Eigenschaften eines Objektes
echo $auto_1->benoetigter_kraftstoff;
echo $auto_1->anzahl_betankungen;

Aufgabe:

Erstellen Sie die Klasse "student"

Diese Klasse hat die Eigenschaft:

  • Geschlecht
  • Alter in Jahren
  • Hauptfach

Und es gibt die Methoden

  • hat Geburtstag (Alter steigt i.d.R. um 1 Jahr) und eine Ausgabe auf dem Bildschirm erscheint mit dem entsprechenden Alter
  • wechselt Hauptfach und eine Ausgabe auf dem Bildschirm erscheint, welches das alte Fach war und welches das neue Fach ist.

Leiten Sie 2 Objekte ab:

  1. Objekt: Susi S., Alter 22, Hauptfach Englisch
  2. Objekt: Alfred A., Alter 24, Hauptfach Ameisenkunde

Lassen Sie Alfred 2 mal Geburtstag haben und Susi das Fach wechseln nach Latein