Daniel Thoma: / (PHP) OOP vs. gekapselte Funktionen

Beitrag lesen

Hallo Stefanie,

der größere Vorteil der OOP liegt m.E. nicht im objektorientierrten Programmcode, sondern im objektorientierten Design, zu dem dich eine objektorientierte Sprache eher zwingt. Es liegt der menschlichen Denke näher.

In gewisser Weise ja, da man sein Programm strukturieren kann, wie man üblicherweise auch die Realität strukturiert. Allerdings muss man sich dafür auch wirklich die Struktur, die man Abbilden will, bewusst machen. Außerdem braucht man noch ein gewisses Abstraktionsvermögen, da man für ein objektorientiertes Modell eben doch in strengeren Formalismen (Objekten und Beziehungen) denken muss, als das die normale Wahrnehmung der Realität ist. Zudem schrenken objektorientierte Sprachen die Abstraktionsmöglichkeiten auch ein, sodass sich nicht jede Vorstellung auch sinnvoll als Objektmodell umsetzen lässt.
Daher mag OOP zwar in gewisser weise natürlich sein, ist aber für viele doch recht schwer erlernbar, jedenfalls ist das mein Eindruck.

Das führt dazu, dass die Sofware-(Architektur) in sich schlüssiger designed wird, leichter nachvollziehbar ist, besser gekapselt und dadurch fehlerresistenter, leichter (auch automatisiert) testbar, einfacher erweiterbar,

Auch hier muss man aufpassen. Mit OOP kann man erstmal, vorausgesetzt man investiert auch die notwendige Überlegung, erreichen, dass ein Programm einfacher erweiterbar ist und dass Fehler besser behoben werden können. Das erreicht man durch die typische, stärkere Modularisierung. Wenn das gut gemacht ist, kann man Anpassungen durch Änderung einzelner Module vornehmen.
Testbarkeit ist nicht unbedingt so einfach zu erreichen. Zwar ist JUnit-Testing einzelner Klassen sehr verbreitet, aber objektorientierte Programme realisieren oft komplexeres Verhalten durch zusammenspiel vieler Objekte. Das zu testen kann sehr schwierig sein, jedenfalls viel schwieriger, als eine Prozedur mit einem Satz von Parametern aufzurufen. Auch das Debugging kann recht kompliziert sein, wenn man es eben mit nicht-lokalen Effekten zu tun hat. Also Fehlern, die erst durch das Zusammenspiel vieler Objekte entstehen.

Ich will hier wirklich nicht die objektorientierte Programmierung kritisieren, aber man sollte schon erwähnen, dass man all diese wünschenswerten Eigenschaften nur erreicht, wenn man sich darum bemüht, sie zu erreichen und dass es meist viel mehr benötigt, als einfach nur mal verstanden zu haben, was ein Objekt ist.

Grüße

Daniel