phpbar.de logo

Mailinglisten-Archive

[php] Kommandozeilen-Argumente

[php] Kommandozeilen-Argumente

Laura Reising laura.reising_(at)_onlinehome.de
Tue, 21 Mar 2000 12:55:17 +0100


DimitrijBolgar wrote:
> 
> Was sind Klassen??

Klassen sind ein Begriff aus der objektorientierten
Programmierung, oft als OOP (object oriented programming)
abgekürzt. Um eine vollständige Antwort zu erhalten, solltest Du
die Grundlagen des OOP am Beispiel eines typischen Vertreters
dieser Sprache wie Java oder C++ erlernen.

Wenn ich Freunden die nicht wissen wie man ein Programm startet
erklären muß, was eine Klasse ist, versuche ich es mit folgendem
Bild. Es gibt drei Arten der Datenspeicherung bei der
Computerprogrammierung:

- Schublade mit einem Namen (skalare Variable) 
- Schublade mit einem Namen und [benannten] Unterteilungen
(Array) 
- Rollkontainer mit einem Namen, benannten Schubladen und
Aktenordnern mit Handlungsanweisungen (Objekt/Klasse)

In eine Schublade kann man genau einen Wert/eine Sache packen.
Ein Computer kann soviele Schubladen zur Verfügung stellen wie er
Hauptspeicher besitzt. Um auf den Wert zugreifen zu können, muß
man die Schublade benennen:

$a = 1;
$a = "emil";
(skalare Variable)

Manche Schubladen enthalten Unterteilungen. Diese werden
durchnummeriert oder einzeln beschriftet. 

$a = array(10,20,30);     // $a[2] = 20
$a = array("ene" => 10);  // $a["ene"] = 10

Dies kennen Computerprogramme schon eine Ewigkeit. Mit der
steigenden Komplexität, wurde nach höheren Abstraktionsformen
gesucht. Es folgte eine Klasse:

class foo {
  var $a = 1;
  var $b = array();

  function incA($value = 1) {
    $this->a = $this->a + $value;
    $this->b[] = $this->a;
  }

  function getA() {
    return $this->a;
  }

  function getB() {
    return $this->b;
  }
};

In dieser Klasse foo sind Handlungsanweisungen und Daten
enthalten. Die Funktionen in einer Klasse werden Methoden
genannt, die Variablen werden Instanzvariablen, Slots und
gelegentlich auch Variablen genannt.

Um mit einer Klasse arbeiten zu können, muß man sich eine Kopie
der Klasse (des Musters) machen. Die Kopie wird Objekt genannt:

$foo = new foo;
$foo->incA(10);
print $foo->getA()

Was soll das? Die Klasse foo ist eine in sich abgeschlossene
Black-Box, die bestimmte Schnittstellen (Methoden) zur Verfügung
stellt und autonom alle zur Black-Box gehörenden Daten verwaltet.

Wann kann man solch eine Black-Box gut gebrauchen, was ist ein
sinnvolles Beispiel? Stell Dir vor, Du sollst die Mitarbeiter
einer Firma verwalten. Alle Mitarbeiter haben eine gemeinsame
Schnittmenge von Daten:

class mitarbeiter {
  
  var $geburtsdatum;
  var $einstellung;
  var $gehalt = 0;

}

Um einen typischen Mitarbeiter zu verwalten, benötigt man
bestimmte Schnittstellen/Methoden, z.B. für die
Gehaltsberechnung:

class mitarbeiter {

  var $geburtsdatum;
  var $einstellung;
  var $gehalt = 0;

  var $monatsgehaelter = 13;

  function getGehalt() {
    return $this->gehalt;
  }

  function getJahresgehalt() {
    return $this->monatsgehaelter*$this->gehalt;
  }

  function getZulage() {
    $jahre = ...
   return ($jahre*$this->monatgehaelter*$this->gehalt)*0.2;
  }

}

Wir sind jetzt auf dem Weg alle Mitarbeiter eine einheitliche
Grundform zu verpassen. Doch genau gleich sind die Mitarbeiter
nicht. Jede Instanz (Kopie der Klasse) ist etwas anders, z.B. im
Geburtsdatum, Einstellungsdatum und Gehalt. Die Variablen 
müssen individuell vorbelegt werden. Hierzu benutzt man einen
Konstruktor. Dies ist eine Methode mit dem Namen der Klasse.

class mitarbeiter {
  function mitarbeiter($geburtsdatum, $einstellung, $gehalt) {
    $this->geburtsdatum = $geburtsdatum;
    $this->einstellung = $einstellung;
    $this->gehalt = $gehalt;
  }
  [...]
}

Jetzt sind wir so weit, um Mitarbeiter zu erzeugen:

$wendel = new mitarbeiter("10.07.1974", "01.10.1998", 500);
$meier = new mitarbeiter("12.03.1971", "01.01.1994", 1300);

echo $wendel->getJahresgehalt();
echo $meier->getJahresgehalt();

Puh - die Abstraktion ist gestiegen. Manche Chefs sind anders als
normale Mitarbeiter z.B. bei der Berechnung der Zulage:

class chef extends mitarbeiter {

  var $monatsgehaelter = 14;

  funcion getZulage() {
    $jahre = ...
    return ($jahre*$this->monatsgehaelter*$this->gehalt)*0.4;
  }
}

$chef = new chef("12.03.1972", "01.01.1994", 1700);

chef erbt das komplette Muster von Mitarbeiter, überschreibt
jedoch die Methode für die Berechnung der Zulage und den Wert für
die Monatsgehälter.

Es gibt noch viele Feinheiten, die man nicht mal ebend zeigen
kann. Kauf Dir ein gutes Buch zum Thema und arbeite dran. Für
mich waren Klassen zunächst nicht viel mehr als Haufen von
Funktionen. Bald wirst Du jedoch sehen, daß es weit mehr ist.

Ulf

--
Ulf Wendel
NetUSE Kommunikationstechnologie GmbH
Siemenswall, D-24107 Kiel, Germany
Fon: +49 431 386435 00  --  Fax: +49 431 386435 99


php::bar PHP Wiki   -   Listenarchive