Re(4): Scheinbar sieht die Lösung echt so aus...
Geizhals » Forum » Programmierung » Java-Dau-Anfängerproblem... (63 Beiträge, 279 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Java-Dau-Anfängerproblem...
11.07.2005, 13:50:53
Hi, Folks !

Habe mich in letzter Zeit wieder besseren Wissens in Java eingearbeitet...
Und hab' grad ein Micky-Maus-Prob:


public class Vater {

protected Vater() {}

public static boolean add ( int x ) {
return true;
}
}

public class Sohn extends Vater {

public static void main(String[] args) {
Sohn s = new Sohn();
Sohn.add(2);
}

public static int add ( int x ) {
return x;
}
}

---> Das ist nicht erlaubt - er motzt, weil die Methode add bei gleichen Parameter in Vater einen anderen Rückgabewert liefert als in Sohn...

Also in c++ wäre das erlaubt ;-).

Wozu braucht ma des ?

Also als Java-Laie dachte ich mir das wie folgt (und mußte daher schon viel umschreiben):
Es gibt eine Klasse Person - mit private-Gschichtln wie Zuname, Vorname, Gebdatum, ...
Person habe einen protected-Constructor - damit niemand selbst eine Person anlegen kann. Stattdessen gibt es eine Klassenmethode
> public static Person add(String Zuname, String Vorname, GregorianCal... GebDatum) - die zuerst mal nachsieht (in einem HashSet), ob es die Person schon gibt. wenn es sie gibt, liefert sie die bekannte Person zurück - wenn nicht, legt sie eine neue an und liefert die zurück. Grund: Auf diese Art will ich doppelte Personen vermeiden.

von Person gibt es eine abgeleitete Klasse Personal: sie hat dieselben Gschichtln wie Person - plus Job/Funktion, ...
Sie hat wieder einen protected Konstruktor - gleicher Grund wie bei Person.
Personal habe eine Reihe von Klassenmethoden "add"  -
so auch ein
> public static Personal add(String Zuname, String Vorname, GregorianCal... GebDatum)
---> Und genau da fetzt diese "$&%"!! Java-VM - eben wegen dem Rückgabewert von add().

Mir ist das ja komplett unklar...
Erstens sprech' ich hier von Klassenmethoden - also nix mit VMT. Irgendeine ominöse Forderung, warum das verboten sei in sauberen Design will noch nicht in meinen kleinen Schädel.
Zweitens ist mir der Workaround unklar...
Person::add() private machen nutzt auch nix - wieso net ???
Drittens scheint ein Object zurückliefern zwar als möglich aber bescheiden - denn jeder Aufrufende muß dann casten bzw. ein instanceOf scheint problematisch...
EDIT:
Viertens bin ich jetzt auf ein addPerson(), addPersonal(), ... ausgewichen - nur das ist ja auch besch*en... denn wozu sollte jede Klasse dann Trilliarden vererbter Methoden mitführen müssen ?

Ach ja, das bequeme Äquivalent in C++, das funktioniert:
class vater {
        public:
        static int add(int x);
};

int vater::add(int x)
{
        return 2;
}

class sohn: public vater
{
        public:
        static float add(int x);
};

float sohn::add(int x)
{
        return 2.3f;
}

int main() {
        sohn *s = new sohn();
        float f = s->add(2);
}



So oder so - ich denke wahrscheinlich zu C++-lastig...
wie macht man das sauber in Java ? Und /was/ ist der Hintergedanke von dieser IMHO stupiden, sinnlosen Limitierung ???

cu
ein frustrierter gepeinigter

11.07.2005, 14:10 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Alle Chronologisch
 
Melden nicht möglich
.  Re: Java-Dau-Anfängerproblem...  (Frankster am 11.07.2005, 14:07:47)
...  Re(3): Java-Dau-Anfängerproblem...  (Frankster am 11.07.2005, 14:19:36)
.....  Re(5): Java-Dau-Anfängerproblem...  (Frankster am 11.07.2005, 15:06:11)
.  Re: Java-Dau-Anfängerproblem...  (DeaconFrost am 11.07.2005, 17:13:42)
.......
Re(4): Scheinbar sieht die Lösung echt so aus...
12.07.2005, 14:23:44
Delegate, Interfaces,...

Hmm... Ich meinte das Design-Pattern "delegate" - wo natürlich Interfaces zum Einsatz kommen...

Den Interface-Ansatz unter Java finde ich derzeit sowieso irgendwo zwischen broken und crude... Denn einerseits definiere ich via Interface ja nur, was die das Interface implementierenden Klassen anbieten müssen - andererseits brauche ich zu jedem Interface [fast zwingend] eine Referenzimplementierung - eben weil mir Macros, ... fehlen und man bei n das Interface implementierenden Klassen net n-mal teilweise denselben Code schreiben will/soll.

IMHO sind Interfaces nix anderes als der "letzte Ausweg", wenn man mit Brachialgewalt auf die Vielfachvererbung von mehreren Objekten verzichten will... Sie sind ein Umgehungsweg, der funktioniert - nur IMHO zu einem hohen Preis. [Wie gesagt, alles Java-Anfängergedanken].


(wenn ich Objekte mit new erzeuge muss ich ja zumindest den Klassennamen kennen).

Naja, im Anderen fall muß ich den Namen der Factory plus den Namen der aufrufenden Methode kennen ;-)... Also den Vorteil seh' ich nicht.
Ich verstehe aber, daß einem nichts anderes übrig bleibt als viele Factories zu bauen... warum viele ?


Also ich dachte mir das so:
Ein package "person" - mit Klassen "Person", "Personal", "PersonFactory".
Person und Personal implementiert alle Konstructoren als protected. Nur PersonFactory nutzt sie - und die add()-Methoden wandern von Person und Personal zur Factory - als "addPerson" bzw. "addPersonal".
Nun gibt's bei mir eine andere Klassen-"Gschicht" mit "Job".
Also ein Package "job" mit den Klassen "Job", "AußendienstJob", "InnendienstJob", "ManagerJob", ... - und... *tusch* eine JobFactory. Dort wäre ja wieder alles analog zum Personen-Package zu lösen.

Es scheint für mich also derzeit zu sein, als würden alle Klassen eines Themenbereichs nach einem Package zu rufen... Und es scheint außerdem, daß jedes Package nach zumindest einer Factory ruft ;-)

EDIT: Danke auf jeden Fall für deine Unterstützung - lehrreich für mich.
zu meinem Wissensstand: Rd. 2000 Seiten an Java-Doku bin ich durch. Ich komm' klar mit Interfaces, Klassen, Applets (naja, JApplet ist mir unklar - ich dachte, in Browsern klappt swing net), Swing, Netzwerkprogrammierung, JDBC wird nächstes Thema... RMI wollt' ich mir ansehen, versteh' aber inzwischen den Sinn nicht mehr... Insbesondere erkenn' ich keinerlei Vorteil gegenüber Corba... Außer, daß man andere Sprachen aussperrt ;-)
Kurzum: Ich profitier IMHO von mehr als 20 erlernten Sprachen (mit Dialekten weit mehr)... Also ich fange net ganz bei Null an.

12.07.2005, 14:28 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
...  Re(3): Java-Dau-Anfängerproblem...  (DeaconFrost am 12.07.2005, 12:09:04)
.....  Re(5): Java-Dau-Anfängerproblem...  (DeaconFrost am 12.07.2005, 13:29:44)
.......  Re(7): Java-Dau-Anfängerproblem...  (DeaconFrost am 12.07.2005, 14:28:09)
.........  Re(9): Java-Dau-Anfängerproblem...  (DeaconFrost am 12.07.2005, 15:11:21)
.  Re: Java-Dau-Anfängerproblem...  (adhoc am 13.07.2005, 12:03:34)
...  Re(3): Java-Dau-Anfängerproblem...  (adhoc am 13.07.2005, 13:31:54)
...  Re(3): Java-Dau-Anfängerproblem...  (adhoc am 13.07.2005, 13:40:48)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung