C++ | Java



  • Original erstellt von Shade Of Mine:
    **
    was wenn ich nämlich math nicht kenne?(**

    ...dann hast du Glück, dass Java ausgezeichnet dokumentiert ist. So findest du meistens in kürzester Zeit, was du brauchst.

    ...und solche Funktionen, wie sqrt findet man ja sowieso in jedem Standard-Javabuch im Inhaltsverzeichnis.



  • Original erstellt von Shade Of Mine:
    **
    result=value.sqrt();

    liest sich auch viel besser als ein
    result=math.sqrt(value);
    (**

    BTW: Mit Java 1.5 werden statische Imports eingeführt. Damit kann das dann so aussehen:

    result=sqrt(value);

    ...also so ähnlich, als ob da in C++ vorher sowas wie "using namespace blah" stehen würde.

    [ Dieser Beitrag wurde am 09.05.2003 um 19:00 Uhr von Gregor editiert. ]



  • zitiere mich bitte ganz.

    ich sagte: weil math zufällig auch was anderes sein kann.
    zB Maxi Hubers neue supa dupa geile library.

    ob statische imports der sprache gut tun würde ich bezweifeln...
    ein using namespace std; schreibe ich höchstens aus faulheit.

    das einzige was sinnvoll ist (obwohl ichs auch nicht verwende) ist using std::string; (oder dergleichen)

    IMHO verleitet das dazu schlampig zu werden und vorallem verleitet es dazu den sinn von namespaces zu umgehen...



  • Original erstellt von Shade Of Mine:
    **zitiere mich bitte ganz.
    **

    OK:

    Original erstellt von Shade Of Mine:
    **was wenn ich nämlich math nicht kenne? (weil es uU nicht math sondern foobar ist - und das ist was total super tolles was nicht jeder kennt) - dann würde ich verzweifelt nach der foobar deklaration suchen
    **

    ...dann hast du Glück, dass Java ausgezeichnet dokumentiert ist. So findest du meistens in kürzester Zeit, was du brauchst.

    ...und solche Funktionen, wie sqrt findet man ja sowieso in jedem Standard-Javabuch im Inhaltsverzeichnis. <- (Dieser Satz bezieht sich nur auf dein Beispiel)



  • wenn es dann gefinkelter wird macht es auch mit C++ und allen feinheiten davon (Templates, namespaces, STL, destruktoren, ....) mehr spass und ist auch sinnvoller

    ich weiß zwar nicht was "gefinkelter" bedeutet, aber die von dir aufgezählten Dinge sind mit Ausnahme von Templates (und das solls angeblich bald ebenfalls in Java geben) alles Sachen für die es in Java was Äquivalentes gibt:

    namespaces -> Klassen und Packages
    STL-> java.util und andere Teile des JDKs
    Destruktoren -> Methode finalize



  • Also ich weiß nicht. In Java werden Classen als Namespace missbraucht. Wie grausam. Programmiert auf keinen Fall Java, die benutzen einen Trick, weil die Sprache ein Feature nicht unterstüzt.

    Oh. Und bitte programmiert alle kein C++, weil da unmengen an Tricks verwendet werden, um irgendwelche Features, die man gerne hätte nachzubauen. Beispielsweise bei www.gotw.ca findet man eine ganze menge davon, aber auch hier im C++-Forum wurde schon öfters soetwas diskutiert (bsp. Überladung anhand der Rückgabe).

    Ich glaube ich sollte komplett aufhören zu Programmieren, da es wohl keine Sprache gibt, in der es alle Features gibt, die ich vielleicht mal brauchen könnte.



  • btw. wenn ja streng OOP wär, dann sollte ja folgendes gehen

    1.add(2)
    

    weil 1 ja eigentlich eine Instanz von int sein sollte 🙄

    in den totalen OO Sprachen wie Smalltalk und Ruby ist das ja so!



  • Dafür hat Java aber entsprechende Wrapper Klassen.Man kann jetzt darüber streiten ob ein Wert auch gleichzeitig ein Objeckt sein sollte. In anderen OOP Sprachen sind auch ganze Codefragmente ein Objekt. Kennt C++ auch nicht!
    Ist ohnehin ne Diskussion ohne Ende 😉

    MfG Spacelord 🙂



  • namespaces -> Klassen und Packages
    STL-> java.util und andere Teile des JDKs
    Destruktoren -> Methode finalize

    namespaces und Packages unterscheiden sich schon etwas
    einfachstes beispiel: du kannst nicht sagen use "Package" in java
    du kannst es nur importieren
    und sobald du jede Menge Packages.* inkludierst
    kann es schon vorkommen das du zB
    Element el = e.getElement(1);
    machst und der compiler liefert ambiguous Class Name Element - org.w3c.dom.Element und irgendwas.sax.Element gibt es da zum beispiel

    ich weiss schon das man eigentlich nichtmit .* importieren sollte und mache es auch nicht - nur ein beispiel

    in C++ wuerde ich zB namespace org.w3c.dom nehmen und das funktioniert dann schon

    STL-> java.util und andere Teile des JDKs
    stl und java.util kann man nun nicht ganz vergleichen da die STL ja die standard template libary ist und java wie du auch sagst keine templates unterstuetzt - und templates sind schneller als die nutzung genereller klassen
    ausserdem spart man sich das ganze casten

    Destuktoren und finalize sind fuer mich unterschiedlich
    da ich in finalize ja keinen speicher freigebe
    ich mache nur abschluss arbeiten vor dem entladen
    in C++ jedoch sage jedoch auch ich was ich freigeben will (und muss)
    und weiss genau wann welcher speicher freigegeben ist
    und das ist bei geringem speicherverbrauch halt wichtig
    die GC schluckt halt zeit und speicher als auch das es laenger dauert bis das ganze freigegeben ist



  • die GC schluckt halt zeit

    Der GC schluckt so gut wie keine Zeit. AFAIK ist der GC in Java sehr effizient.

    Siehe zum Beispiel hier: Wie heißt der Nachfolger ...

    namespaces und Packages unterscheiden sich schon etwas
    einfachstes beispiel: du kannst nicht sagen use "Package" in java
    du kannst es nur importieren
    und sobald du jede Menge Packages.* inkludierst
    kann es schon vorkommen das du zB
    Element el = e.getElement(1);
    machst und der compiler liefert ambiguous Class Name Element - org.w3c.dom.Element und irgendwas.sax.Element gibt es da zum beispiel

    ich weiss schon das man eigentlich nichtmit .* importieren sollte und mache es auch nicht - nur ein beispiel

    in C++ wuerde ich zB namespace org.w3c.dom nehmen und das funktioniert dann schon

    Ich verstehe nicht ganz, was du hier sagen willst. Stört es dich, dass Java meckert, wenn du Mehrdeutigkeiten in deinen Code eingebaut hast? 😕

    Was macht denn C++, wenn du 2 Namespaces mit "using" einbindest, die beide eine Funktion mit dem gleichen Namen beinhalten?



  • @Spacelord

    Kennt C++ auch nicht!

    Jo, C++ ist ja auch nur eine mittel OO Programmiersprache (falls man das überhaupt so einstufen sollte ;)). Mir ging es nur darum, die Behauptung von SUN, dass Java die OO Sprache ist relativieren.

    Ist ohnehin ne Diskussion ohne Ende 😉

    Ja und die wird auch immer langweiliger 😉

    @Gregor

    Was macht denn C++, wenn du 2 Namespaces mit "using" einbindest, die beide eine Funktion mit dem gleichen Namen beinhalten?

    namespace A {
      void foo(void);
    }
    namespace B {
      void foo(void);
    }
    
    using namespace A;
    using namespace B;
    
    //noch kein Problem
    
    int main(void) {
      foo(); //oh oh doppel Deutig
      A::foo(); //dann so :) (bzw. B::foo(); *rolleyes* )
    }
    

    ich bin mir nicht sicher, aber vielleicht geht ja auch der folgende Code, dass man explizit die Funktion in den globalen Namespace holt

    using namespace A;
    using namespace B;
    using A::foo;
    


  • int main(void) {
    foo(); //oh oh doppel Deutig
    A::foo(); //dann so 🙂 (bzw. B::foo(); *rolleyes* )
    }

    Ach so! Also letztendlich genau das Gleiche, wie in Java. 🙂

    [ Dieser Beitrag wurde am 11.05.2003 um 15:06 Uhr von Gregor editiert. ]



  • ich dachte eigentlich das in der letzten ueberarbeitung des C++ standard zusaetze zum namespace gemacht wurden wo man auswaehlen kann in welchem namespace man gerade ist

    na dann doch nicht 😮

    die GC schluckt halt zeit
    Der GC schluckt so gut wie keine Zeit. AFAIK ist der GC in Java sehr effizient.

    also bei der middleware an der ich kurz getunt hatte schluckte die gc schon zeit
    - man merkte richtig wenn sie einsetzte (kurzer performance einbruch) und ein paar (zehn)tausend objekte loeschte
    ich musste dann mit verschiedensten gc-algorithmen herumtun (java hat ja mehrere) bis das ganze dann richtig smooth gelaufen ist

    aber ich muss sagen das war keine end user anwendung
    da war die vorgabe: respondzeiten so kurz wie moeglich damit immer objekt angelegt und geloescht werden koennen

    auch lege ich zB fuer meine planungsengine die GUI graphisch dynamisch zur laufzeit an und halte die ganzen plan daten im speicher
    das sind je nach xml spec fuer nen plan zwischen 20-40 MByte die alle zum start initialisiert werden muessen weil sie alle voneinander abhaengen und das auf einem enduser rechner - dementsprechend muss das ganze auch auf nem P2 gut laufen - und mindestanforderung ist 64 MByte RAM - mit OS und dem dynamischen start screen - das heisst haendische gc aufrufe sonst werden die objekte zu lang im speicher gehalten

    regards

    gomberl


Anmelden zum Antworten