Hallo Martin,
Kurz gesagt: Der absolute Vorteil von OOP liegt in der Wiederverwendbarkeit der Klassen.
Ja, unbedingt. Diesen Vorteil kann man aber mit prozeduralen Ansätzen auch haben, wenn man einzelne Module sauber kapselt und ihre Schnittstellen klar dokumentiert.
Du hast vollkommen Recht. Selbst der Linux Kernel ist auf diese Art und Weise geschrieben. Es ist aber nie echtes OOP - wenn jemand auf eine interne Variable zugreifen will, auf die er eigentlich gar nicht zugreifen sollte, so kann er das bei Sprachen wie C und C++ machen. Nicht so bei Java.
Oder du selbst das Projekt einige Monate lang ruhen lässt und schließlich wieder in Angriff nimmst? Oder das Projekt sehr groß wird? Kommentare sind hier natürlich immer angebracht.
Und genau hier komme ich und sage: Das ist die Theorie, und sie hört sich verdammt gut an.
Die Praxis ist leider oft, dass Klassen für bestimmte Aufgaben existieren, aber sie sind jämmerlich bis überhaupt nicht dokumentiert. Dann verbringe ich als Programmierer nämlich die meiste Zeit damit, den Quellcode der Klasse zu analysieren, die ich eigentlich bloß einfach benutzen wollte. Und diese Code-Analyse ist wegen der oft recht komplexen Strukturen in OOP meist wesentlich schwieriger als in der klassischen prozeduralen Programmierung. In der Zeit hätte ich den Code oft schon neu geschrieben.
Bei C / C++ habe ich bei meinen letzten Recherchen genau das erlebt, was du gesagt hast. Bei Java hatte ich eine eklige Begegnung mit FOP, dessen Doku wirklich "ein wenig" zu wünschen übrig lässt.
Ansonsten habe ich mit den Dokumentationen (sprich: JavaDocs) sehr gute Erfahrungen gemacht. Die Java API ist das beste Beispiel für gute OOP und gute Dokumentation.
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)