C++ | Java



  • dazu musst du auch noch wissen das java sehr umständlich ist(finde ich zumindest). JVM, JDK, und das ganze OOP zeug das in java sehr sehr streng genommen wird.

    so sieht in c++ ne helloworld so aus:

    #include <iostream>
    
    using namespace std;
    
    int main(){
    cout<<"hello World!";
    return 0;//(oder was du willst, einige haben nen problem mit return 0)
    }
    

    und in java:
    [java]

    public class hello{

    public static void main(String args[]){
    System.out.print("hello World!");

    }

    }
    [/cpp]

    Ich wollte dir nur mal ein Bsp zeigen, die Entscheidung liegt bei dir und kommt drauf an was und wie du ein projekt machen möchtest....

    bye donay



  • @donay: er hat ja schon erfahrung mit OOP und es hat ja auch vorteile

    und C++ sollte man ja auch mit OOP benutzen
    wenn du nur sequentiell programmieren willst dann kannst du ja gleich C oder pascal nehmen

    regards

    gomberl



  • dazu musst du auch noch wissen das java sehr umständlich ist
    

    nee muß er nicht, weils nicht stimmt 🙂 (finde ich zumindest)

    der Java-Code selber is jedenfalls nicht umständlicher als objektorientierter C++ - Code. Und OO an sich is nur für Leute die es nicht kapiert haben umständlicher als strukturierter Code.



  • Original erstellt von gomberl:
    **@donay: er hat ja schon erfahrung mit OOP und es hat ja auch vorteile
    und C++ sollte man ja auch mit OOP benutzen
    wenn du nur sequentiell programmieren willst dann kannst du ja gleich C oder pascal nehmen
    regards
    **

    er sagte, es werde ZU streng genommen. damit hat er recht. oder wo hängt sqrt() rum?
    daß java generell umständlicher sei, ist meiner meinung nach aber eher flasch. die sprache ist zwar schlechter, das wird aber durch dir prima bibliothek ausreichend kompensiert. gerade kleinere programe sind in java einfacher zu machen.



  • sqrt() ist eine statische Methode der Klasse Math und ist damit meiner Meinung nach sehr gut untergebracht 🙂

    wieso sollte Java schlechter sein? Weil es nicht so überfrachtig ist mit Sprachelementen?



  • Original erstellt von crass:
    wieso sollte Java schlechter sein? Weil es nicht so überfrachtig ist mit Sprachelementen?

    ohje. flamewar komme.



  • Original erstellt von crass:
    sqrt() ist eine statische Methode der Klasse Math und ist damit meiner Meinung nach sehr gut untergebracht 🙂

    Aha, wieso?

    da wird doch eine klasse nur als namespace missbraucht - ich sehe da keinen sinn warum man sqrt nicht in den namespace math geben sollte...

    btw: eine static methode ist ja auch nur eine funktion (da sie kein (this) objekt hat) - insofern ist es ein irrglaube das alles OOP sei, was in Klassen steckt.

    ich sehe keinen vorteil darin
    class Math { static double sqrt(double d){ ... } }
    darin zu schreiben wenn eigentlich
    namespace Math { double sqrt(double d) { ... } }
    gemeint war, zu schreiben.

    eine Klasse sollte man (IMHO) nicht als namespace verwenden...



  • ja klar, Klassen werden in Java auch als eine Art Namespace für statische Funktionen verwendet. Imo wirklich ne feine Sache, anstatt wieder ein (überflüssiges) neues Sprachkonzept wie namespace einzuführen. Mit Mißbrauch hat das nix zu tun



  • außerdem gehört double sqrt(double) in die klasse double rein, wenn mans richtig machen will.



  • Original erstellt von volkard:
    außerdem gehört double sqrt(double) in die klasse double rein, wenn mans richtig machen will.

    Exakt!

    ein

    result=value.sqrt();

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

    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 😞



  • da habt ihr wohl recht
    das ganze ist sogar mir zuwieder
    und ich habe java eigentlich fuer alles ganz gerne

    fuer viele dinge ist es halt ausreichend
    und es geht ja auch schneller

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

    dementsprechend
    zu jedem zwecke eine sprache 🙂

    gomberl



  • 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


Anmelden zum Antworten