Mailinglisten-Archive |
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