Hallo nochmal,
Ja ich wills jetzt auch speziell für Perl wissen. Ich habe mir das angeschaut: http://de.selfhtml.org/perl/sprache/objekte.htm und naja ob ich jetzt daten->add(); (mit dem sub Teil in einer extra Datei) oder add(daten) (mit dem sub Teil in der selben Datei) schreibe erscheint mir grad gleichwertig.
Dem Rechner ist es auch schnurz, ob Du OO-programmierst oder nicht, insofern stimmt "gleichwertig" schon - ausführen wird er es natürlich in jedem Fall, und geschwindigkeitsmäßig machts auch keinen Unterschied (bzw. wenn ist OO sogar eine Winzigkeit langsamer, wenn überhaupt).
Es hängt eher von dem Projekt ab:
Ist das nur ein kleines Projekt, ein paar wenige hundert Zeilen...dann kann man das auch noch sehr gut prozedural lösen, und muss sich in Perl nicht mit diesem Bless-Referenzen-Kram herumärgern.
Für alle größeren Projekte, oder Projekte, an denen mehere Programmierer sitzen, empfiehlt sich aber OO-Programmierung, weil sie (wie gesagt) näher an unserem Denken dran ist, und auch wieder-verwendbarer - dadurch wird es einfach inuitiver, damit umzugehen, man kennt sich schneller im Code aus, es passieren einem weniger Fehler usw.
Es ist Geschmacksache, aber etwas wie daten->add() ist auch nicht unbedingt ein Vorzeige-Beispiel von OO-Programmierung - es zeigt zwar das Prinzip (das ist denke ich auch die Absicht des SELFHTML-Artikels) aber nicht unbedingt die Vorteile.
Ob ich schreibe:
add_data ("Test", "Selfhtml", 47);
oder
$data = new DataObject ("Test", "Selfhtml", 47)
$data->add();
macht tatsächlich wenig unterschied, da ich in beiden Fällen noch sehr nah an der Implementierung (Daten, Tabellen,...) klebe.
Interessanter wird es, wenn ich Objekte konstruiere, die sich von der eigentlichen Implementierung loslösen. Z.b. ein Konto:
my $konto = new Konto();
$konto->setEigentuemer("Joerg");
$konto->load();
$konto->einzahlen(100);
$konto->abheben(100);
$konto->save();
Ein Programmierer, der dieses Konto-Objekt benutzt, braucht nicht mehr wissen, WAS genau bei "save" oder "load" passiert (vermutlich sowas wie eine Datenbank-Abfrage, aber wie gesagt, das kann ihm egal sein). Er muss nur das Konto-Objekt kennen, und welche Methoden (load,save,einzahlen,abheben) es hat.
So kann das Konto ein Programmierer entwickeln, während ein anderer z.b. eine Verwaltung von Konten programmieren kann, ohne dass beide die Details des anderen wissen müssen.
Natürlich kann man diese Dinge auch durch andere Prinzipien erreichen als OO-Programmierung und umgekehrt kann man seine Klassen und Objekte auch so schlecht bauen, dass die Objektorienierung gar nix bringt.
-> Fazit: OO-programmierung ist ein Hilfs- aber kein Allerheilmittel, um wartbare, wiederverwendbare Software zu schreiben...nicht mehr, nicht weniger.
Viele Grüße,
Jörg