Objektorientierte Programmierung: Unterschied zwischen den Versionen
| Zeile 113: | Zeile 113: | ||
function setupCoaches(){ | function setupCoaches(){ | ||
echo("Kabine wird eingerichtet..."); | echo("Kabine wird eingerichtet..."); | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | Bei einem Interface sind '''alle Methoden abstrakt'''. Sie werden mit dem Schlüsselwort ''interface'' erstellt und mit ''implements'' in die Kindklasse implementiert. Alle Methoden im Interface sind abstrakt und müssen dann implementiert / angelegt werden. | ||
| + | |||
| + | '''Beispiel PHP''' | ||
| + | |||
| + | <pre> | ||
| + | interface SatelliteTV{ | ||
| + | public function enableTV(); | ||
| + | public function disableTV(); | ||
| + | } | ||
| + | |||
| + | class Luxusliner extends Ship implements SatelliteTV{ | ||
| + | protected $tvEnabled = FALSE; | ||
| + | public function enableTV(){ | ||
| + | $this->tvEnabled = TRUE; | ||
| + | } | ||
| + | public function disableTV(){ | ||
| + | $this->tvEnabled = FALSE; | ||
} | } | ||
} | } | ||
</pre> | </pre> | ||
Version vom 1. Oktober 2014, 09:17 Uhr
Diese Seite enthält eine kurze Einführung in wichtige Begrifflichkeiten und Modelle.
Klassen und Objekte
Beispiel PHP
class Ship{
public $name;
public $speed;
function startEngine() {
$this->speed=200; // this kann auf Eigenschaften und Methoden innerhalb der Klasse zugreifen.
}
function moveTo($location) {}
}
$fidelio = new Ship();
$fidelio->name = "FIDELIO";
$fidelio->startEngine();
$fidelio->moveTo("Bahamas");
var_dump($fidelio);
Konstruktor
Unterscheidet sich ziemlich in div. Programmiersprachen. Funktion ist aber gleich: Der Konstruktor wird beim erstellen einer Objektinstanz aufgerufen und kann zum initialisieren dienen.
Beispiel PHP
In PHP wird falls vorhanden die Funktion __construct() aufgerufen.
class Ship{
public $name;
public $coaches;
public $speed;
...
function __constuct($name, $numberOfCoaches) {
$this->name = $name;
$this->coaches = $numberOfCoaches;
echo("Das Schiff heißt: " . $this->name . " und besitzt " . $this->coaches . " Kabinen.");
}
...
}
$fidelio = new Ship("Fidelio",125);
Vererbung
Eine Klasse kann ihre Eigenschaften und Methoden an eine neue Klasse vererben. Die neue Klasse kann erweitert werden.
Beispiel PHP
class Luxusliner extends Ship {
public $luxuryCoaches;
function golfSimulatorStart(){
echo "Golfsimulator gestartet";
}
}
$maryqueen = new Luxusliner("Mary Queen",650);
Methoden und Eigenschaften
Methoden überschreiben
Beispiel PHP
class Ship{
$engineStatus = 'OFF';
function startEngine(){
$this->engineStatus = 'ON';
}
}
class Luxusliner extends Ship{
additionalEngineStatus = 'OFF';
function startEngine(){ // Gibt es schon -> wird überschrieben...
$this->engineStatus = 'ON'; // Doppelt gemoppelt -> nicht praktisch. Besser siehe unten.
$this->additionalEngineStatus = 'ON';
}
}
Zugriff auf Methode der Elternklasse
Manchmal ist es besser, mit Hilfe von parent, die Methoden der Elternklasse zu nutzen.
Beispiel PHP
class Luxusliner extends Ship{
additionalEngineStatus = 'OFF';
function startEngine(){
parent::startEngine(); // Besser -> passt sich an wenn Elternklasse geändert wird.
$this->additionalEngineStatus = 'ON';
}
}
Abstrakte Klassen und Interfaces
Eine abstrakte Klasse enthält Platzhalter Methoden. Diese werden in der Elternklasse angelegt. Dann muß die Klasse die erbt (Kindklasse), diese Methoden Implementieren. Die Elternklasse nennt sich abstrakte Klasse, weil sie abstrakte Methoden enthält.
Beispiel PHP
abstract class Ship{
function __construct(){
$this->setupCoaches();
}
abstract function setupCoaches();
}
class Luxusliner extends Ship{
function setupCoaches(){
echo("Kabine wird eingerichtet...");
}
}
Bei einem Interface sind alle Methoden abstrakt. Sie werden mit dem Schlüsselwort interface erstellt und mit implements in die Kindklasse implementiert. Alle Methoden im Interface sind abstrakt und müssen dann implementiert / angelegt werden.
Beispiel PHP
interface SatelliteTV{
public function enableTV();
public function disableTV();
}
class Luxusliner extends Ship implements SatelliteTV{
protected $tvEnabled = FALSE;
public function enableTV(){
$this->tvEnabled = TRUE;
}
public function disableTV(){
$this->tvEnabled = FALSE;
}
}