Objektorientierte Programmierung: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
Zeile 143: Zeile 143:
 
* '''protected''': Zugriff nur innerhalb der Klasse und innerhalb von Kindklassen möglich.
 
* '''protected''': Zugriff nur innerhalb der Klasse und innerhalb von Kindklassen möglich.
 
* '''private''': Zugriff nur innerhalb der Klasse. Nicht von der Kindklasse.
 
* '''private''': Zugriff nur innerhalb der Klasse. Nicht von der Kindklasse.
 +
 +
== Statische Methoden und Eigenschaften==
 +
* Statische Methoden werden oft für '''Funktionssammlungen''' benutzt.
 +
* Statische Eigenschaften kann man nutzen, wenn zwei oder mehr Instanzen immer eine '''gemeinsame Eigenschaft''' haben sollen.
 +
* Es sind Funktionen und Eigenschaften, die man nutzen kann '''ohne vorher eine Instanz zu erzeugen.'''
 +
 +
'''Beispiel PHP'''
 +
 +
<pre>
 +
class Luxusliner extends Ship{
 +
  protected static $supportNumber = '+49 1111 1111';
 +
 +
  public function reportProblem(){
 +
    echo 'Auf dem Schiff ' . $this->name . ' wurde ein Problem festgestellt. Informieren Sie: ' . self::$supportNumber;
 +
  }
 +
 +
  public static function setSupportNumber($newNumber){
 +
    self::$supportNumber = $newNumber;
 +
  }
 +
}
 +
 +
$fidelio = new Luxusliner('Fidelio',125);
 +
$figaro = new Luxusliner('Figaro',233);
 +
 +
$fidelio->reportProblem();
 +
$figaro->reportProblem();
 +
 +
Luxusliner::setSupportNumber('+49 2222 2222');
 +
 +
$fidelio->reportProblem();
 +
$figaro->reportProblem();
 +
 +
</pre>
 +
Ausgabe:
 +
<pre>
 +
Auf dem Schiff Fidelio wurde ein Problem festgestellt. Informieren Sie: +49 1111 1111
 +
Auf dem Schiff Figaro wurde ein Problem festgestellt. Informieren Sie: +49 1111 1111
 +
Auf dem Schiff Fidelio wurde ein Problem festgestellt. Informieren Sie: +49 2222 2222
 +
Auf dem Schiff Figaro wurde ein Problem festgestellt. Informieren Sie: +49 2222 2222
 +
 +
</pre>

Aktuelle Version vom 1. Oktober 2014, 09:32 Uhr

Diese Seite enthält eine kurze Einführung in wichtige Begrifflichkeiten und Modelle.


Klassen und Objekte[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

Methoden überschreiben[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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;
  }
}

Sichtbarkeiten: public, private, protected[Bearbeiten]

Der Zugriff auf Eigenschaften und Methoden wird mit diesen Schlüsselwörtern geregelt. Die Auswirkungen sind folgende.

  • public: Auf diese Eigenschaften kann von außerhalb des Objektes zugegriffen werden (standard wenn kein Schlüsselwort angegeben ist)
  • protected: Zugriff nur innerhalb der Klasse und innerhalb von Kindklassen möglich.
  • private: Zugriff nur innerhalb der Klasse. Nicht von der Kindklasse.

Statische Methoden und Eigenschaften[Bearbeiten]

  • Statische Methoden werden oft für Funktionssammlungen benutzt.
  • Statische Eigenschaften kann man nutzen, wenn zwei oder mehr Instanzen immer eine gemeinsame Eigenschaft haben sollen.
  • Es sind Funktionen und Eigenschaften, die man nutzen kann ohne vorher eine Instanz zu erzeugen.

Beispiel PHP

class Luxusliner extends Ship{
  protected static $supportNumber = '+49 1111 1111';

  public function reportProblem(){
    echo 'Auf dem Schiff ' . $this->name . ' wurde ein Problem festgestellt. Informieren Sie: ' . self::$supportNumber;
  }

  public static function setSupportNumber($newNumber){
    self::$supportNumber = $newNumber;
  }
}

$fidelio = new Luxusliner('Fidelio',125);
$figaro = new Luxusliner('Figaro',233);

$fidelio->reportProblem();
$figaro->reportProblem();

Luxusliner::setSupportNumber('+49 2222 2222');

$fidelio->reportProblem();
$figaro->reportProblem();

Ausgabe:

Auf dem Schiff Fidelio wurde ein Problem festgestellt. Informieren Sie: +49 1111 1111
Auf dem Schiff Figaro wurde ein Problem festgestellt. Informieren Sie: +49 1111 1111
Auf dem Schiff Fidelio wurde ein Problem festgestellt. Informieren Sie: +49 2222 2222
Auf dem Schiff Figaro wurde ein Problem festgestellt. Informieren Sie: +49 2222 2222