PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Klassen



tomi
01-05-2002, 16:23
wozu sind Klassen eigentlich gut? :rolleyes:

crac
01-05-2002, 17:47
der vorteil von klassen ist, dass sie sehr gut wiederverwendbar sind. d.h. dass du auch bei einem spaeteren projekt sie problemlos wieder miteinbeziehen kannst. zudem wird ein system, das hauptsaechlich aus klassen besteht, einfacher zu warten und zu ergaenzen, und wird auch uebersichtlicher ...

tomi
01-05-2002, 18:12
hm, da brauch ich doch keine Klassen dazu, für die einfache Wartung und spätere Verwendung, eignen sich doch Funktionen genauso gut.

Harry
01-05-2002, 18:32
Hallo Tomi,

Klassen kannst Du verwenden, wenn Du objektorientiert PHP-Skripte entwickeln möchtest. Damit kannst Du dann Methoden (Funktionen) und Eigenschaften (Variablen, Konstanten) in einer Klasse kapseln und davon ein Objekt erzeugen. Die Objektorientierung in PHP ist jedoch noch nicht so vollständig wie in anderen Sprachen (C++, Smalltalk, Java) implementiert; AFAIK fehlt insbesondere die Definition von private/protected Eigenschaften.

Bis zum Release von PHP5 wird sich da voraussichtlich noch was tun.

Wenn Du nicht objektorientiert entwickeln möchtest, dann wirst Du auch keine Klassen benötigen :cool:

Harry

tomi
01-05-2002, 18:53
Hallo Harry!

Kannst du mir deutlich machen, was der Unterschied/Vorteil von der objektorientierten Programmierung ist?
Danke!:cool:

Harry
01-05-2002, 21:04
Hallo Tomi,

das ist schwer mit nur ein paar Sätzen erklärbar, aber ich versuch' es mal.
:rolleyes:

Die Unterschiede zwischen der klassischen und der OO-Programmierung hatte ich ja bereits vorhin kurz aufgezeigt: Bei der OOP werden Eigenschaften und Methoden in einer Klasse gekapselt während hingegen bei der klassischen Programmierung ein Haufen Datenstrukturen irgendwo hier definiert wird und die Funktionen zum Umgang mit diesen irgendwo anders.

Die Vorteile in der OOP liegen zum einen in der besseren Wiederverwendbarkeit des Codes, denn alle Datenstukturen, die man zur Behandlung eines definierten Teilproblems benötigt, liegen gemeinsam mit den behandelnden Funktionen in einer Klasse vor und sollten kontextfrei herauslösbar und anderenorts wieder einsetzbar sein.
Eine bereits vorhandene Klasse kann quasi als Vorlage genutzt werden, um auf dieser Basis eine neue Klasse zu erstellen, die zunächst alle Eigenschaften und Methoden der Ursprungsklasse automatisch erbt aber darüber hinaus nahezu beliebig erweitert werden kann.

Zum anderen bietet die OOP Möglichkeiten, um eine weitere Abstraktionsebene zwischen den atomaren Funktionen und dem Anwender dieser Klasse (der Entwickler, der mit einer vorhandenen Klasse ein Gesamtproblem lösen will) zu erschaffen.
:confused:

Ich denke, OOP ist in dieser Kürze wirklich schwierig zu erklären, aber noch schwieriger zu verstehen, darum ein kurzes Beispiel:

<STORY>
Stelle Dir vor, jemand schenkt Dir ein Päckchen Programmcode. Dieser Programmcode stellt eine Klasse dar und sie nennt sich "Fahrrad". Dazu bekommst Du eine Beschreibung der Schnittstellen. Das sind alle Methoden (Funktionen) in dieser Klasse, die Du direkt ansteuern/aufrufen kannst, nachdem Du diese Klasse in Dein eigenes Programm eingebunden hast. Wie diese Klasse intern arbeitet, welche internen Eigenschaften/Variablen und internen Methoden/Funktionen sie selbst benötigt, weißt Du nicht, siehst Du nicht und brauchst Du auch nicht.

Nachdem Du die Klassenbeschreibung durchgelesen hast, stellst Du fest, dass die Klasse "Fahrrad" auf ein Hollandrad mit drei Gängen paßt und dass es Mehoden zum hoch- und runterschalten des Ganges gibt:


int schalt_hoch(void)
int schalt_runter(void)


Es gibt eine Methode zum Abfragen des gerade eingestellten Ganges:


int hole_geschalteten_gang(void)


Ebenso gibt es eine Methode zum Setzen einer anderen Anzahl von Gängen:


int setz_anzahl_gaenge(int anzahl)


Mit dem Hollandrad willst Du aber selbst nicht lange rumfahren, denn Du hast irgendwo ein Geländerad mit 21 Gängen.
Also nimmst Du Dir die Klasse "Fahrrad", erzeugst davon ein Objekt (damit Du dann auch damit fahren kannst) und bringst Deinem neuen Fahrrad-Objekt erstmal bei, dass es anstelle von nur drei sogar ganze einundzwanzig Gänge hat. Du schreibst also:


setz_anzahl_gaenge(21);


Dabei kann es Dir ganz und gar wurscht sein, wie die Klasse das intern regelt und welche Eigenschaften des Fahrrades dabei umgeschrieben werden. Du hast die Schnittstellenbeschreibung (also die Beschreibung der Funktionen, die von außen ansprechbar sind) und das reicht Dir ja.

Na, und dann kannst Du die Gänge hoch- und runterjubeln - von 1 bis 21 und zurück mit:


int gang=schalt_hoch();
int gang=schalt_hoch();
...
int gang=schalt_runter();


Wenn Du vielleicht dann steil am Berg bist und nochmal runterschalten willst, obwohl schon der erste Gang drin ist, dann kannst Du die Funktion schalt_runter() zwar noch aufrufen, aber leichter treten läßt es sich trotzdem nicht, denn Dein Fahrrad-Objekt merkt sicherlich, dass es sich schon im ersten Gang befindet und ein Gang Null kann hoffentlich nicht eingelegt werden.
</STORY>

Ok - das war jetzt ein kurzes Beispiel für die Wiederverwendbarkeit von Klassen und deren Abstaktion gegenüber dem Anwender. :p

Die Möglichkeiten die die OOP bei der Vererbung bietet, sind darüber hinaus noch viel weitreichender und interessanter, aber dies zu beschreiben, könnte ein Buch füllen.

:cool:
Aber: Eigentlich gibt es kein Problem, welches sich nicht auch durch die klassische Programmierung lösen lassen würde. Die OOP bietet sich bei umfangreicheren Projekten an, zum einen wegen der besseren Wiederverwendbarkeit des Codes und zum anderen wegen der Abstraktion und damit der besseren Übersichtlichkeit.

Wenn Du Dich weiter einlesen möchtest, dann schau vielleicht mal hier (http://www.ep1.ruhr-uni-bochum.de/~marcel/oop.html) hinein.

Harry

tomi
01-05-2002, 21:37
Hallo Harry!
Danke für die Mühe. Das Prinzip hab ich jetzt verstanden. :D

crac
02-05-2002, 14:36
einen ausfuehrlichen bericht ueber OOP (mit PHP) findet man hier:

http://www.zend.com/zend/tut/tutorial-johnson2.php