Objektorientierte Programmierung (OOP)

OBJEKTORIENTIERTE PROGRAMMIERUNG (OOP)

Für den Anfänger würde ich die OOP nicht empfehlen. Um ein Gefühl für die Programmierung zu bekommen, würde ich die „klassische“ Programmierung (prozedurale) vorerst bevorzugen. Bei der prozedurale Programmierung wird – etwas überspitzt formuliert – der Code einfach von oben nach unten Schrittweise abgearbeitet. Das kann aber bei größeren Projekten schnell unübersichtlich werden. Im professionellen Umfeld bzw. bei größeren Projekten wird man daher langfristig an der OOP nicht vorbeikommen. Die Vorteile der OOP werden auch erst bei größeren Programmierprojekten sichtbar. Es vereinfacht insgesamt die Wartung und Erweiterungen von Programmen.

Die OOP geht von der Annahme aus, dass alle realen Dinge Objekte sind, die sich klassifizieren lassen mit ihren Interaktionen. Diese sollen im Programm abgebildet werden. PHP ist auch eine der Sprachen, die es erlaubt, in Klassen und Objekten zu denken. Klassen sind Objekte identischer Art. Alle Objekte/Instanzen einer Klasse haben dabei die gleichen Eigenschaften. Die Ausprägungen der Eigenschaften variieren nur. Unterklassen können von der übergeordneten Klasse Eigenschaften erben.

Um das etwas zu veranschaulichen, nehmen wir uns als Vorlage das Haus.  Ein Haus könnte folgende Eigenschaften/Attribute (auch Member genannt) haben:

  • Fläche in qm
  • Anzahl der Zimmer
  • Anzahl Fenster
  • Etagen
  • Baujahr

Dann gibt es noch die Methoden/ Funktionen. Damit können den Objekten Funktionalität mitgegeben werden. Diese könnten im Beispiel Haus folgende sein:

  • Renovierung
  • Verkauf
  • Abriss

Was sind Klassen?

Klassen sind der Aufbau eines Objektes. Man kann es als Bauplan eines Objektes sehen. In der Klasse definiert man noch keine Werte/Inhalte fest, sondern nur die Eigenschaften/Attribute (salopp Variablen) und Methoden (salopp Funktionen/Fähigkeiten), die z.B. ein Haus haben soll.

Als weiteres Beispiel könnte man auch ein Auto nehmen. So könnte man aus der Klasse ein Objekt machen: Objektname = VW, Eigenschaft Farbe = blau und Fähigkeit Beschleunigung = rasant.

Die Eigenschaften und Methoden – z.B. „Fläche in qm“ oder Renovierung werden auch Member genannt.

Vererbung

Einige Klassen bauen auf andere Klassen auf und nehmen daher schon gewisse Eigenschaften und Methoden mit.

Konstruktor

Ist eine Methode, die bereits beim Instanziieren aufgerufen wird.

Instanz:  Instanziieren sind nur gleichbedeutend mit Objekten
Instanziierung:  Erstellen einer Instanz / ein Objekt der Klasse. In unserem Beispiel bedeutet Instanziierung den Bau eines Hauses.


Klassen in PHP

 

In den beiden folgenden PHP-Dateien habe ich das Prinzip etwas detaillierter beschrieben.

Hund.php

<?php

 // Namen einer Klassen müssen mit Buchstanden oder einem Unterstrich (_) angfangen

  class Hund 
  {
		
   /* jede Eigenschaft ist dann gültig, wenn Sie mit einem Schlüsselwort versehen 
   ist - private, protected oder public. Damit wird die Art und Weise deutlich
   gemacht, wie man auf diese Elemente zugreifen kann. Man spricht hierbei auch von
   der Sichtbarkeit/Verkapselung von den Eigenschaften und Methoden. 

   public: Zugriff von überall möglich (aber auch von überall veränderbar). Wird oft
   bei Interfaces zu anderen Klassen eingesetzt.

   private: Nur innerhalb der Klasse zugreifen möglich

   protected: Innerhalb der Klasse und die Kindklassen (Vererbung) können auf dieses Element zugreifen		

   Es ist üblich, den Eigenschaftennamen 
   klein zu schreiben, um diesen von dem Klassennamen besser zu unterscheiden
   */
		
   // Rasse
   public $familie;
   // Namen
   public $hundName1;  	
   public $hundName2; 
   // Alter
   protected $age = 1; 	// direkte Initialisierung einer Eigenschaft möglich			
   // Besitzer
   private $besitzerID;
   private $besitzerVorname;	
   private $besitzerName;
	
   // Eine Methode ist nicht anderes als eine Funktion. Eine Funktion innerhalb einer Klasse
   // Ausgabe in HTML

   function showMe ()
    {
		
   $out = '';
		
   /* Mit der Pseudoklasse $this kann man innerhalb auf die klasseninternen 
   Eigenschaften zurückgreifen	*/
		
   $out .= $this->hundName1; //OHNE DOLLARZEICHEN!
		
   $out .= '<br>';
   $out .= 'ist ein ' .$this->familie;
		
   return $out;
			
    }			
   }

?>

Weiteres Beispiel mit einem PKW:


Man kann mit den folgenden Befehl auch direkt eine Eigenschaft des Objektes aufrufen:

echo $pkw_1->kraftstoff;

Diese PHP-Datei greift mit dem Befehl „require“ auf die Hund.php:

<?php

// Klasse-Einbindung
require 'Hund.php';

// Klasse "Hund" wird instanziiert bzw. erzeugt.
echo "INSTANZIIEREN <br>";
$hund = new Hund;

echo "leeres Objekt abzeigen:<br><br>";
/* var_export() liefert strukturierte Informationen zum Inhalt der übergebenen Variable. 
Das Verhalten ist ähnlich dem der var_dump(), allerdings ist hier das Ergebnis valider PHP-Code 
mit dem sich der Inhalt der Variable wieder herstellen lässt. */
echo "<b><pre>" . var_export ($hund, TRUE) . "</pre></b>";

//Werte zuweisen

echo "Werte zuweisen und anzeigen:<br><br>";

$hund->hundName1 = "Bello";
$hund->hundName2 = "Buddy"; 
$hund->familie = "Dackel";

echo "<b><pre>" . var_export ($hund, TRUE) . "</pre></b>";


// Methode ausgeben lassen
echo "Anzeigen der Werte<br><br>";

echo $hund->showMe(); //Mit der function ShowMe wird die Funktion ausgegeben


?>

Der Browser sollte folgendes anzeigen:

Ich habe den Code etwas schlanker gemacht und in der folgenden Datei (inkl. Ausgabe im Internetbrowser) in eine Übersicht gepackt:

Weiteres Beispiel (Webseiten generieren):

<?php

class Webseiten
{


function neueSeite() 
{

echo "<html><title>Hallo</title><body>";

echo "<h2>"; 
echo $this -> Ueberschrift;
echo "</h2>"; 

echo $this -> MeinInhalt;

echo "</body></html>";

}


}

$Webseiten1 = new Webseiten;

$Webseiten1-> Ueberschrift = "Meine Überschrift";

$Webseiten1-> MeinInhalt = "Was soll das?";

$Webseiten1-> neueSeite();

?>

Webseite wurde erzeugt:

is_object

Mit is_object kann man überprüfen, ob es sich um ein Objekt handelt:

// Typ prüfen
if (is_object($hund))
	echo "<b>Das ist ein Objekt!</b><br><br>";
Objekt-Vererbung

Unterklassen können von der übergeordneten Klasse Eigenschaften erben. Das erfolgt mi dem Schlüsselbegriff extends:

class unterklasse extends uebergeordneteKlasse

{

public function xyz....

    {

    echo "xzy..."

    }

}

 

 

 

einen Kommentar senden...

Die E-Mail-Adresse wird nicht veröffentlicht.