Thread OOP Parameterübergabe direkt oder indirekt ? (21 answers)
Opened by der_thomas at 2014-04-26 00:16

rosti
 2014-04-28 08:00
#175084 #175084
User since
2011-03-19
3470 Artikel
BenutzerIn
[Homepage]
user image
Egal wie die Logik heißt, Sterben oder neue Datei anlegen, es ist besser, diese Logik in die main zu legen und nicht in den Konstruktor einer Klasse. Das ist eine Empfehlung, unter Anderem gedruckt in meiner Buchempfehlung weiter oben. Nach 15 Jahren Erfahrung im Programmieren gebe ich diese Empfehlung gerne weiter.

PS, Sorry, war ein bischen knapp heut morgen. Freilich gibts auch Logik in Modulen, Klassen. Getrennt jedoch von der Logik, die im Programm (main) steckt. Deswegen lassen wir auch ein Programm nicht übers Modul sterben, sondern fangen die Exception gleich im Modul auf und reichen den Grund der EX nach draußen. So früh wie möglich feststellbar und das betrifft dann auch mal den Konstruktor.

Wir können uns doch freuen, dass wir Perl haben, da ist Instanzerstellung und Initialisierung ein Aufwasch und wir können den weiteren Programmablauf daran festmachen, ob die Instanzerstellung erfolgreich war oder nicht:

Code (perl): (dl )
my $dict = Dict->new( file => $file); # or wir machen was Anderes


Der im Modul verfasste Grund "IO-Error: $!" steht in der main verfügbar somit in $@. Wir können das ignorieren oder auch untrennbar miteinander verbinden:

Code (perl): (dl )
1
2
3
4
my $dict = Dict->new( file => $file) || do{
   # lots of code ;)
   # Vorsicht, wenn wir hier jetzt wieder eine EX werfen, wird $@ überschrieben!
};


Guck mal nach Java rüber da gehts z.B. nur so zur Sache (PseudoCode):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
// Java Comics
Brille brille = new Brille; // geht komischerweise immer
// aber
// brille.gucken("nah");
// könnte ja eine EX werfen, wehe Du testest das nicht, daher
try{
brille.gucken("fern");
}
catch(){
brille.gucken("nah");
}
// na also, warum nicht gleich so ;)
// ungetestet


Kannste auch in Perl haben, musst aber nicht ;)
Mit eval BLOCK wird Vieles einfacher und: use Carp;

Schönen Abend ;)
Last edited: 2014-04-28 18:53:11 +0200 (CEST)

View full thread OOP Parameterübergabe direkt oder indirekt ?