Re(18): Scheinbar sieht die Lösung echt so aus...
Geizhals » Forum » Programmierung » Java-Dau-Anfängerproblem... (63 Beiträge, 290 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(18): Scheinbar sieht die Lösung echt so aus...
13.07.2005, 12:00:20
Error/Exceptions sind mir in Java schon klar... und die Catch-or-Throw-Regel gilt ja in jeder Sprache mit Exceptions - wenn schon nicht explizit, dann implizit ;-).

RuntimeExceptions... Da hab' ich mit meinem Java-entwickelnden Freund des öfteren eine religiöse Debatte (er setzt immer auf die falsche Religion ;-) ).

Division durch 0:
Sein Statement: Programmierfehler. Darf es nicht geben - denn vor jeder Division hätte man zu checken.
Mein Statement: Entweder die JavaVM braucht unendlich lange für's ExceptionHandling oder er schreibt schlechten Code... Denn man /darf/ net vor jeder Division checken, ob der Divisor 0 werden kann - kostet sinnlos Zeit. Zumindest in Assembler ist ein "einfach mal Dividieren und notfalls Exception abfangen" ohne Zeitverlust möglich - während ein Divisorcheck doch einige Statements kostet. Wenn die Division eh nur selten passiert, ist's wurscht... Wenn das aber in einer inneren Loop passiert... wird's teuer...

Er läßt sich aber nicht überzeugen... Wie sieht's aus in Java ? Ist dort das Exception-Handling derart teuer, daß man möglichst drauf verzichtet ? Dann sollte man tendenziell Exceptions catchen statt throwen (natürlich nur in den Fällen, wo es vom Design her wurscht ist, wie mans löst)... Oder hat er nur die falsche Religion ?

Weak- und Soft-References
Seeehr guter Tipp - das kann man sicher sehr oft brauchen... das paßt perfekt in einige meiner getter-Methoden. Bisher dachte ich, ich füll einfach meine VM oder laß alles in der DB oder mach eine final-Konstante, wieviel Objecte ich Cache (zB 100 Personen, ..)
Alles an sich unbrauchbar - oder zumindest net optimal. Da klingt dein Lösungsansatz seeehr perfekt... Cache solange wie geht (also vermutlich je nach Wunsch Benutzer) und kümmer dich selbst... Kann man das parametrisieren ? Sinngemäß: Laß immer zumindest Platz für 10*sizeof(Person), ... damit der Benutzer wenn er navigiert auf jeden Fall noch Platz hat für neue Anzeigen ? Weak/Soft-Referenzen sind das eigentlich Synonyme ? Oder verschiedene Sachen ? Sind das die Begriffe, nach denen ich in der API-Beschreibung von Java Suchen soll ? Gibt's einen empfehlenswerten Link zu dem Thema ?

Thx für den Tipp
gepeinigter

EDIT:
Je nach Wunsch Benutzer - damit meine ich seine Storage-Parameter beim Aufruf der VM... Wie klappt das eigentlich bei Applets ? Wo definiert man da, wieviel Stack/Heap/... die VM bekommen soll ? Hätte so eine Einstellung in Browsern noch nie bemerkt... Oder ist das eine fixe Konstante ?

13.07.2005, 12:03 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
[ Dieser Beitrag wurde inzwischen editiert. Die aktuelle Version befindet sich 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