Anzeige:
Ergebnis 1 bis 15 von 15

Thema: Java: das Ding mit den eckigen Klammern oder auch: "Operatoren überladen"

  1. #1
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278

    Question Java: das Ding mit den eckigen Klammern oder auch: "Operatoren überladen"

    Hi,

    also, ich programmiere eigentlich schon länger. In letzter Zeit versuche ich mir Java wesentlich näher zu bringen. Ich habe so ein Grundlagenbuch und den Rest ziehe ich mir irgendwie aus dem Netz .

    Situation:

    Ich habe mir eine einfach-verkettete Liste gebaut. Die Methode
    Code:
    Object getData(int pos)
    gibt mir mir die Information der List an Stelle pos zurück. Weiter setzt die Methode
    Code:
    setData(int pos, Object oData)
    das Datum an die Stelle pos.

    Lieber wäre mir,

    dass ich mit der Liste, wie mir einem Array umgehen könnte. Entsprechend:
    Code:
    List list = new List(obj1);
    addElement(obj2);
    addElement(obj3);
    
    list[2] = obj1;
    So, da es sich dabei um überladen von Operatoren handelt, habe ich danach gesucht. Nun habe ich gelesen, dass dies nicht möglich sei. Stimm dies? Läßt es sich doch irgendwie realisieren?
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Also überladen kannst du nicht - aber du könntest das ganze beispielsweise gleich in einem Array abspeichern - oder hab ich was falsch verstanden?

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Operatoren überladen kommt erst mit Java 1.5 Und das gibts noch nicht.
    Allenfalls ne Preview oder so.

    Es gibt auch Ansätze mit Preprozessoren sowas zu emulieren. z.B. da:
    http://mindprod.com/jgloss/operatoroverloading.html (Ups, der Link ist broken, naja vielleicht sonst irgendwo)

    MfG Peschmä
    Geändert von peschmae (11-10-2003 um 10:16 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Thumbs up

    Original geschrieben von peschmae
    Operatoren überladen kommt erst mit Java 1.5
    Uuiuiui
    Das ist mir neu, gaaaanz feine Sache.

    Mit Generics und Operatoroverloading gibts dann eigentlich keine Defizite mehr in der Sprache selbst.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Original geschrieben von bischi
    Also überladen kannst du nicht - aber du könntest das ganze beispielsweise gleich in einem Array abspeichern - oder hab ich was falsch verstanden?

    MfG Bischi
    , naja, so war das nicht gemeint. Die Liste sollte ja dynamisch sein.

    Ich könnte natürlich auch das entsprechende zu ändernde Element löschen und ein neues anfügen, aber das finde ich nicht so toll.

    Dann schaue ich mich mal nach einem Erscheinungtermin von Java 1.5 um. Ist hier schon was bekannt dazu?

    MfG
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  6. #6
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ich hab mir C/C++ nur mal kurz angeschaut (VisualC++). Bin aber nie über Kommandozeilenprogs herausgekommen. Kann mir jemand mal erklären, was dieses Überladen denn genau bringt?

    MfG Bischi

    PS: Hoffentlich machen sie Swing in 1.5 nochmal was schneller!

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  7. #7
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Du kannst neue eigene Objekte erzeugen und die normalen (intuitiven) Operatoren nutzen.

    Beispiel:

    Ich habe für ein Kryptologieprogramm verschiedene Ideale unter C++ programmiert. Da man mit Idealen auch rechnen kann, habe ich den Operator "+" überladen und konnte zwei Ideale normal addieren.
    Code:
     ideal3 = ideal2 + ideal1;
    Ich hoffe, das wurde verständlich.

    Natürlich braucht man es nicht direkt, es ist nur eine Spur komfortabler .
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von Sym
    Natürlich braucht man es nicht direkt, es ist nur eine Spur komfortabler .
    Es erhöht auch die Lesbarkeit des Codes, weil dann zum Beispiel ein Vergleich auf Gleichheit immer mit dem == Operator geschrieben werden kann.

    Allerdings ist beim Überladen immer Vorsicht angebracht, damit man die Bedeutung eines Operators nicht verletzt, besonders bei Vergleichsoperatoren.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ups, sorry Leute, da hab ich wohl was durcheinandergekriegt

    Operatorenüberladen ist eben das was (neben all den anderen schönen dingen) für Java 1.5 nicht vorgesehen ist. Schade.

    Was kommt steht z.B. da http://www.petebevin.com/archives/000528.html

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  10. #10
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zum Operatorenüberladen, schau mal da:
    http://www.gginc.biz/jfront/index.html

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  11. #11
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Original geschrieben von peschmae
    Zum Operatorenüberladen, schau mal da:
    http://www.gginc.biz/jfront/index.html

    MfG Peschmä
    Jupp, dass sieht eigentlich ganz gut aus. Allerdings weiß ich nicht, wie ich das mit [] realisieren sollte. Gibt es irgendwie die Möglichkeit, zu schauen, wie das von sun umgesetzt wurde? Ich finde dazu leider (noch) nichts. Aber ich schaue mal weiter.

    Thx
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  12. #12
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Das Überladen der Operatoren erhöht zwar die Lesbarkeit, wenn man es jedoch verwendet ohne es zu kommentieren und das Projekt an einen anderen Entwickler übergibt sollte man lieber in deckung gehen wenn er wutentbrannt zur Kaffeetasse greift.
    Die meisten Entwickler sind nicht an das Überladen gewöhnt und blicken durch den Code nicht mehr durch - das sagt meine Erfahrung - und dann ist die Kacke richtig am dampfen!

    Mein Tipp: Lasst das Überladen sein und verwendet altbewährtes - derjenige der das Programm weiterentwickeln muss wird es euch danken.


  13. #13
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278
    Das sehe ich ein wenig anders.

    Wenn ich eine neue Klasse erzeuge, welche (wie in dem einen Link hier), komplexe Zahlen als Intanzen erzeugbar macht, ist es meiner Meinung nach schon sinnvoll.

    Den Code sollte jeder Programmierer schon nachvollziehen kann! Meist wird der entwickelte Code doch eh nicht weitergegeben. Die Forschung prüft die Algorithmen. Die Entwicklungsabteilung setzt dann meist die Alg. um und entwickelt das Produkt.

    Gebe ich einen Code von mir weiter, sollten die Kommentare reichen. Gebe ich nur die Klasse weiter, ist es für den Nutzer doch eher intuitiv, wenn er die Standard-Operatoren nutzen kann, oder?

    Meine Meinung.
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  14. #14
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    *zustimm*

    Schliesslich kannst du ja in der Javadoc zur Klasse auch erwähnen, dass die Standardoperatoren verwendet werden können..

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  15. #15
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das hängt wesentlich davon ab, was in der jeweiligen Sprache üblich ist.

    Ein C++ Programmierer wird dich bemitleiden, wenn du statt überladener Operatoren nur Methoden hast, und zu einer anderen Bibliothek greifen.

    In Java wird er dirhc erhängen, erschiessen und vierteile (nicht nötigenfalls in dieser Reihenfolge), weil dort zB == immer Referenzen vergleichen sollte und = eine Referenz zuweist, etc. (falls es überhaupt möglich ist, das zu ändern).

    Da es offensichtlich eh nicht in der nächsten Version vorgesehen ist, spielt das ja keine Rolle mehr.
    Soltle es in einer zukünftigen Version möglich sein, wird man aber sehr aufpassen müssen, wenn man Klassen für andere Entwickler schreibt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •