Moin!
Richtig, und die einzige Chance dagegen ist, dass man das Paket einfach "vernünftig" nutzt.
LOL ! :-)
Dann versuch ich mal eine "Kritik der reinen Vernunft" :Wenn ich ein Paket schreibe dass ich haeufig wiederverwenden und ggf. auch anderen Programmierern zur Verfuegung stellen werde, moechte ich, dass es moeglichst robust ausgelegt ist und Nebeneffekte moeglichst minimiert.
Wenn's dir wirklich um handfeste Objektorientiertheit gehen würde, dann würdest du sicherlich etwas anderes als Perl benutzen. Dessen Objektorientiertheit läßt ja, genau wie PHP 4, viele Dinge vermissen. Interfaces und private bzw. geschützte Eigenschaften und Methoden beispielsweise. Von außen _kann_ man, muß aber nicht, das gesamte Innenleben eines Objektes sehen.
und entsprechende Fehlerwerte zurückgeben. Sollte sie zumindest.
Das gesamte Objekt und alle seine Variablen jeweils auf Konsistenz zu pruefen hielte ich fuer sehr aufwendig und ggf. fehleranfaellig.
Nicht das ganze Objekt. Aber die Dinge, die die Methode braucht, und die ggf. fehlschlagen können. Wie eine fehlende DB-Verbindung oder eine ungeöffnete Datei, weil der Konstruktor nicht aufgerufen wurde.
Gerne kann man daraus natürlich auch eine Grundvereinbarung machen: Der Konstruktor setzt im Objekt immer ein Flag - und wenn die Methode das Flag nicht findet, ist sie wohl statisch aufgerufen worden.
P.S.: Ein Singleton habe ich deshalb als Beispiel gewaehlt, da man hier die Moeglichkeit hat, die Schnittstelle aus Klassen- und Instanzmethoden zu kombinieren; bei Klassen mit hoeherer Multiplizitaet ist "das" Set von Instanzvariablen ja undefiniert.
Man koennte auf diese Weise einem Singleton-Paket zusaetzlich eine prozedurale Schnittstelle geben und diese geeignet skalieren.
Würde ich einer Log-Klasse noch eine prozedurale Schnittstelle geben wollen, würden die Prozeduren ganz schlicht die Methoden der Klasse aufrufen, und fertig.
Es ist nun mal so, dass man mit Code ziemlich viel erreichen kann - aber je mehr man erreichen muß, desto komplizierter wird's.
Und eine Log-Klasse ist nun beileibe kein einfaches Ding. Jedenfalls dann nicht, wenn die Klasse auch I/O implementiert. Dann wird's nämlich schwierig mit den Unit-Tests.
- Sven Rautenberg
"Love your nation - respect the others."