Objektorientierte Programmierung

Objektorientierte Programmierung (OOP)? Warum sollte ich das machen?

 

Ganz ehrlich, bevor ich angefangen habe, objektorientiert zu programmieren, habe ich mich über Jahre da nicht rangetraut. Mit Funktionen zu programmieren, hat bis jetzt doch gereicht - warum sollte ich da was Anderes machen? 

 

Naja, einfache Antwort: Objektorientiert zu programmieren ist einfach und vereinfacht programmiertechnische Probleme. Es macht Spaß und eröffnet einen neuen Horizont. Für mich besteht die Qualität eines Codes und damit natürlich auch die Fähigkeit des Programmierers aus 3 Stufen:

 

  1. Programmierung mittels ElseIf: Der Programmierer schreibt Tausende Zeilen ElseIf oder Switch-Abfragen, um ein Problem zu lösen. Der Code ist extrem unübersichtlich und nicht wiederverwendbar, da er nur für genau 1 Problem geschrieben wurde.
  2. Programmierung mittels Funktionen: Der Programmierer lagert wichtige Programmbausteine in Funktionen aus. Hier wird der Code schon übersichtlicher. Aber auch Funktionen sind eher statisch und lassen sich schwer für verschiedene Probleme anpassen. Außerdem können Variablenwerte nur schlecht von Funktion zu Funktion transportiert werden und man kann von einer Funktion auch keine andere ableiten. Schade eigentlich.
  3. Programmierung mittels Klassen (OOP): Das ist der Oberhammer ;) Hier kann man für verschiedene Aufgaben eine Klasse schreiben und dieser Funktionen zuweisen (das nennt man dann Methoden). Man kann von Klassen Methoden oder auch Variablen erben oder weitervererben. OOP lässt eigentlich kaum Wünsche offen.

 

Folgende Beispiele sollen die 3 Stufen verdeutlichen:

Programmierung mittels ElseIf

Eine normale Variable wird hochgezählt. Dabei wird jedesmal der numerische Wert abgefragt und ausgegeben.

Der Code ist sehr lang und unübersichtlich. Stellen wir uns mal vor, der Wert würde bei 100 seinen Endpunkt haben, das wären dann schon etliche hundert Zeilen Code.

$variable = 1;

if ($variable == 3) { echo "Variable ist gleich 3\n"; } 
	else { echo "Variable ist gleich ".$variable."\n"; $variable++; }
	// Variable ist gleich 1

if ($variable == 3) { echo "Variable ist gleich 3\n"; } 
	else { echo "Variable ist gleich ".$variable."\n"; $variable++; }
	// Variable ist gleich 2

if ($variable == 3) { echo "Variable ist gleich 3\n"; } 
	else { echo "Variable ist gleich ".$variable."\n"; $variable++; }
	// Variable ist gleich 3

Programmierung mittels Funktionen

Eine normale Variable wird hochgezählt. Die eigentliche ElseIf-Abfrage ist in eine Funktion ausgelagert worden. Naja, das sieht ja schonmal super übersichtlich aus. Prinzipiell könnte man also auch nur mit Funktionen programmieren. Aber, es gibt ein kleines Problem: In diesem Beispiel wird als Variablenwert immer 1 ausgegeben. Das ist so, weil Variablen in Funktionen eben nur dort ihre Gültigkeit haben und beim Beenden der Funktion verfallen. Deswegen wird die Variable $variable immer wieder 1.

$variable = 1;

function zaehlevariable($variable) {
	if ($variable == 3) { echo "Variable ist gleich 3\n"; } 
		else { echo "Variable ist gleich ".$variable."\n";  $variable++; }
	return $variable;
}

zaehlevariable($variable);	// Variable ist gleich 1
zaehlevariable($variable);	// Variable ist gleich 1
zaehlevariable($variable);	// Variable ist gleich 1

Aber das Problem kann man umgehen, indem man der Variable $variable die Funktion zuweist. Dann entspricht der Rückgabewert der Funktion der Variablen und sie wird so richtig hochgezählt. Naja, das ist nicht wirklich sauber. Es soll ja nur ein kleines Problem mit dem Arbeiten mit Funktionen verdeutlichen.

$variable = 1;

function zaehlevariablen($variable) {
	if ($variable == 3) { echo "Variable ist gleich 3\n"; } 
		else { echo "Variable ist gleich ".$variable."\n";  $variable++; }
	return $variable;
}

$variable = zaehlevariablen($variable);	// Variable ist gleich 1
$variable = zaehlevariablen($variable);	// Variable ist gleich 2
$variable = zaehlevariablen($variable);	// Variable ist gleich 3

Programmierung mittels Klassen

Hier wird die und schon bekannte Funktion in eine Klasse eingebettet. Das nennt man dann eine Methode. Also: Methode = Funktion in einer Klasse. Die Variable $variable ist in der Klasse eine Eigenschaft. Deswegen wird sie auch mit $this->variable weiter angesprochen - und: sie behält innerhalb der Klasse ihren Wert, sie verfällt nicht.

Wenn wir also die Methode immer wieder aufrufen, wird die Variable ordnungsgemäß hochgezählt. Ja, das ist doch das, was wir wollten: 1. wenig Code, 2. Übersichtlichkeit, 3. Variablen behalten ihre Werte.

class MeineKlasse {
public $variable = 1;
	
 function zaehlevariable() {
  if ($this->variable == 3) { echo "Variable ist gleich 3\n"; } 
   else { echo "Variable ist gleich ".$this->variable."\n";  $this->variable++; }
  return $this->variable;
 }
}

$klasse = new MeineKlasse();
$klasse->zaehlevariable();	// Variable ist gleich 1
$klasse->zaehlevariable();	// Variable ist gleich 2
$klasse->zaehlevariable();	// Variable ist gleich 3

In diesem kleinen Tutorial habe ich persönlich mehr Wert auf den Spaßfaktor gelegt. Es ist deshalb weit vom Anspruch der Vollständigkeit entfernt. Mein Hauptaugenmerk liegt eher darauf, was Klassen überhaupt sind, wie man überhaupt Objekte erzeugt, wie man mit Klassen Objekte erzeugt und wie man mittels MVC zu einem kleinen Framework kommt. Mal sehen :)

 

Wenn man sich einen etwas vollständigeren Überblick zu OOP verschaffen möchte, so ist diese Seite ein gutes Beispiel. Ansonsten machen wir jetzt mit der Einführung weiter.