Was ist Objektorientierte Programmierung?

Sie können bereits jetzt dieses Kapitel sponsern!

Museo Guggenheim BilbaoWORK IN PROGRESS ... NOT READY ... DID I MISS SOMETHING VERY IMPORTANT FOR BEGINNERS? ... PLEASE COMMENT

Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance. Many modern programming languages now support OOP, at least as an option (Wikipedia).

Übersetzt heißt es etwa - Objektorientierte Programmierung bildet die Beziehungen und Strukturen von Objekten ab, wie im richtigen Leben!

Einige Menschen behaupten, dass das objektorientierte Programmierung die beste Idee seit geschnitten Brot ist, andere wiederum sagen, dass es das am Meisten überschätzte und überbewertete Programmierparadigma überhaupt ist.

Wie so oft, liegt die Wahrheit vermutlich irgendwo dazwischen.

Klassen, Objekte, Instanzen, Eigenschaften und Verhalten

Zunächst müssen wir zuerst ein paar grundlegende Begriffe der OOP klären.

  • Eine Klasse ist eine Sammlung gleichartiger Objekte
  • Ein Objekt ist eine Instanz in einer Klasse
  • Eine Instanz hat Eigenschaften (Attribute) und ein bestimmtes Verhalten (Methoden), die durch die Klasse definiert werden

Schauen Sie sich einmal um, vielleicht sehen Sie ja so etwas ähnliches wie in Bild1.

cocoate.com/node/9583

Bild 1: Klassen und Objekte

In der OOP ist eine Klasse eine Blaupause für ein Objekt, eine Instanz. In unserem Beispiel steht ein Girl als Basisausstattung für alle Girls bzw. die Klasse Boys steht als Basis für alle Boys.

Wir haben also nur zwei Klassen. Alle daraus abgeleiteten (instantiierten) Girls und Boys sind Objekte oder Instanzen, die diesen Klassen zugehörig sind.


class girl {
}

class boy {
}

Attribute/Eigenschaften

Jedes Girl und jeder Boy hat Attribute. Diese Attribute werden oft auch als Eigenschaften bezeichnet. Die genaue Bedeutung dieser Begriffe hängt von der Sprach- und Systemumgebung ab. Im Deutschen wird der Begriff 'Eigenschaft' umgangssprachlich verwendet, der Begriff 'Attribut' eher nicht. Daher ist die Abgrenzung dieser Begriffe ist nicht wirklich eindeutig.
In HTML beispielweise ist ein Attribut ein Teil eines Tags mit einer Art Schlüssel, der Begriff Eigenschaft ist hier bedeutungslos.

In unserem Beispiel haben die Klassen die Eigenschaften $eyecolor und $name.


class girl {
  //properties
   public $eyecolor;
   public $name;
}

class boy {
   //properties
   public $eyecolor;
   public $name;
}

Zugegeben, der Sourcecode beider Klassen ist ähnlich. Unbestritten, es gibt viele Unterschiede zwischen Girls und Boys, aber ich denke unser Beispiel verdeutlicht worum es hier bei der OOP geht.

Instantiation

Die "Geburt" der Objekte Girl und Boy nennt man Instantiierung. Das Objekt selbst heißt dann Instanz.


class girl {
   //properties
   public $eyecolor;
   public $name;
}

class boy {
   //properties
   public $eyecolor;
   public $name;
}
//Instantiation
$harold = new boy('brown', 'Harold Chasen'); 
$maude = new girl('grey', 'Maude Chardin'); 

Das Wort new steht für eine spezielle Methode, die Konstruktor Methode. Mittels dieser Methode werden alle Werte, die durch Parameter übergeben werden, genau für diese eine Instanz konfiguriert. Die Werte sind eindeutig für eine Instanz. 

Wir haben $harold und $maude kreiert! Jedes der beiden Objekte hat einen Namen und eine Augenfarbe. Sie sind also irgendwie "geboren" :)

Methoden, Verhalten

Jetzt, da wir zwei Instanzen kreiert haben, wollen wir ihnen auch gern ein paar Fähigkeiten mitgeben, sie sollen sprechen, laufen, denken,...
Solche Fähigkeiten nennt man in der OOP Methoden. Methoden definieren das Verhalten von Instanzen. In unserem Code Beispiel sehen die Methoden wie eine Funktion in PHP aus. Diese Benennung ist typisch für PHP, da PHP nicht von Beginn an objektorientiert war. Glücklicherweise heißt eine Methode in anderen Sprachen "Methode".


class girl {
   //properties
   public $eyecolor;
   public $name;

   //constructor is called while instatiation 
   public function __construct($eyecolor, $name) { 
       $this->eyecolor = $eyecolor;
       $this->name  = $name;
   }

   //method 
   public function sayName() {
       return 'My name ist '. $this->name;
   }
}

class boy {
   //properties
   public $eyecolor;
   public $name;

   //constructor is called while instatiation 
   public function __construct($eyecolor, $name) { 
       $this->eyecolor = $eyecolor;
       $this->name  = $name;
   }

   //method 
   public function sayName() {
       return 'My name ist '. $this->name;
   }
}

//Instantiation
$harold = new boy('brown', 'Harold Chasen'); 
$maude = new girl('grey', 'Maude Chardin'); 

Zugangsrechte

Vor dem Wort function steht das Wort public. Public drückt ein Zugangsrecht (access right) aus. Auch wenn unsere Isntanzen virtuell sind, sie benötigen dennoch Zugangsrechte. Eine public Methode kann auch von außerhalb einer Klasse aufgerufen werden, eine private Methode ausschließlich innerhalb einer Klasse. In unserem Beispiel ist die Methode sayName public. Das bedeutet, jemand kann "rufen" $harold->sayName() und Harold würde das tun. Die Realität ist ein wenig komplizierter. Harold müßte erst die Sprache lernen um den "Rufer" zu verstehen und dann bräuchte er noch eine "decision" Methode (er müßte seinen Verstand benutzen) um zu entscheiden, ob er antworten möchte oder nicht. In der Realität würde dieser Vorgang im Privaten stattfinden, hervorgerufen durch die "decision" Methode. Denn natürlich weiß nur Harold, oder genauer gesagt, seine "decision" Methode, ob er antworten sollte oder nicht.


//Instantiation
$harold = new boy('brown', 'Harold Chasen'); 

//Method call
$harold->sayName()

Das Ergebnis dieses kleinen Skripts wäre "My name ist Harold Chasen".

Wie benutzt man das OOP Paradigma in einer Website?

In unserem Beispiel haben wir eine oder mehrere Klassen.  Diese Klassen können in einer oder separaten Dateien gelagert werden. Das ist Ihre Entscheidung.
Wir haben beispielsweise eine Datei girl.php und eine Datei file boy.php mit inherenten Methoden. Diese Klassen haben keine Benutzeroberfläche und sie werden von einem anderen Skript aufgerufen.

Wenn jemand unsere besucht, möchte er vielleicht ein Benutzerkonto anlegen. Er füllt das Registrierungsformular aus und klickt auf den Button "Registrieren". Werte, wie beispielsweise der Name werden an eine Methode übergeben und die Instantiierung beginnt. Harold und Maude werden so zu Benutzern auf unserer Website.

Abstraction

 

Encapsulation

 

Messaging

 

Modularity

 

Polymorphism

 

Inheritance

Kommentare

$harold = new girl('brown', 'Harold Chasen');
$maude = new boy('grey', 'Maude Chardin');

Transgender?!?

Ich habe die geschlechter mal wieder sortiert :)
Danke für den Hinweis
Hagen