Achim Schrepfer: <= Modular programmieren

Beitrag lesen

Hi,

Ja super, aber was denn jetzt für eine API???? Wo zwischen? zwischen Klasse und Script? Also ich denke ich schreibe eine Klasse (mit PHP) in eine extra Datei, z.B. Klassenname.class

der Dateiname nebst Endung spielt bei PHP keine Rolle. Du kannst auch mehrere Klassen in einer einzigen Datei definieren.

Dann binde ich diese Datei per include() in ein Script ein und kann die Klasse verwenden. Aber was hat das jetzt mit APIs zu tun?

Ein API ist nichts weiter als Deine (bzw. des Programmierers) Definition, welche Daten an eine Funktion (oder bei Klassen: Methode) übergeben werden und in welcher Art das Ergebnis zurückgeliefert wird. Sozusagen hat jede Funktion, die ein Argument annimmt und z.B. einen String zurückgibt ein eigenes API.

Es stimmt, dass für modulares Programmieren (um beim Thema zu bleiben) nicht zwingend Klassen erforderlich sind. Aber gerade in PHP kannst Du damit für bestimmte Funktionen eigene Datenbereiche reservieren innerhalb derer Deine Funktionen agieren können. Das ist ein grosser Vorteil, wenn z.B. mehrere Funktionsbibliotheken in einem einzigen Skript verwendet werden sollen, da sich die Bibliotheken nicht in die Quere kommen mit z.B. gleichlautenden globalen Variablen. Mal ein Beispiel: Du schreibst eine Klasse, die ein HTML-Textfeld ausgeben soll (Klassenname: htmltext). Innerhalb dieser Klasse gibt es einige Methoden (Funktionen), die bestimmte Eigenschaften des Textfeldes verändern. Zum Beispiel eine Methode size(), die eben das Attribut für die Grösse setzt. Weiterhin enthält die Klasse Eigenschaften (also Variablen), in denen diese Eigenschaften gespeichert werden. Hier z.B. $size. Ausserdem gibt es eine Methode, die das HTML entsprechend den vorgenommenen Einstellungen als String zurückgibt (z.B. eine output()-Methode).

Das API (in Deinem Kopf) sieht vor, dass ein Programmierer, der die Funktionen Deiner Klasse nutzen will, etwa folgenden Code schreiben muss:

$myobj = new htmltext();
$myobj -> size(35);
echo $myobj -> output();

Wenn Du den Code Deiner Klasse nun umschreiben willst, z.B. weil sich die HTML-Standards geändert haben, dann musst Du nur beachten, dass es bereits Skripten gibt, die in der obigen Form (also gemäss Deines API) die Funktionen der Klasse nutzen. Anonsten bist Du völlig frei in der Gestaltung deines Codes.

Gut, unter http://www.dynamic-webpages.de/php/language.oop.php war da ja ein Beispiel für PHP, ganz einfach, eine Klasse "Einkaufswagen", in der verschiedene Funktionen und Variablen stehen, die man dann in dem Script abfragen und ändern kann. Nur was bringt mir das praktisch? Ich verwende zur Zeit immer Funktionen direkt und z.B. MySQL um irgendwelche Daten zu speichern, da behalte ich die wenigstrens, in der Klasse sind die Informationen am Ende des Scriptes doch weg, oder? Zur Zeit finde ich einfach keinen Vorteil zu Funktionen außer dass man das etwas übersichtlicher hat. Aber auch das könnte man ja mit Dateien genau so machen. Irgendwie ist der Groschen da noch nicht gefallen. An dem Beispiel des Links denke ich die ganze Zeit, mit Sessions oder DB wäre das doch viel besser gemacht!?

Da sieht man mal wieder wie irreführend jedes noch so gut gemeinte Beispiel sein kann ;-) Die Klasse Einkaufswagen behält die Daten selbstverständlich nur für die Dauer der Skriptausführung, aber sie könnte ja z.B. erweitert werden um Sessionhandling und MySQL-speicherung. In dem Beispiel geht es nur darum, die grundsätzliche Funktion von Klassen aufzuzeigen.

Der Vorteil von Klassen ist nicht nur die Übersicht, sondern der völlig eigene Datenbereich der Objekte, die auf der Klasse basieren. Ein neues Objekt wird mit

$myobject = new yourclass();

erzeugt. In einem Skript kannst Du zig Objekte der selben Klasse erzeugen, und alle sind völlig unabhängig voneinander. Jedes Objekt (also jeder Einkaufswagen) enthält seine eigenen Daten und die dazugehörigen Funktion, um die Daten zu bearbeiten. Das geht mit in Dateien ausgelagerten Funktionen nicht so leicht (eigentlich gar nicht).

Ich denke, das ist vielleicht ein bisschen viel auf einmal für Dich, deshalb würde mich eigentlich interessieren, was Du eigentlich konkret "modular" programmieren willst, damit ich mir das besser vorstellen kann, was Du vorhast.

Viele Grüsse
Achim