C++ oder Java



  • Jester schrieb:

    Optimizer schrieb:

    Die kann man in C++ zum größten Teil bestenfalls als Objektbasiert bezeichnen, während sie in Java absolut mustergültig (sag ich jetzt mal) objektorientiert aufgebaut ist.

    Ich zitier mich hier einfach nochmal kurz.
    Hier steht: in Java ist die Bibliothek absolut mustergültig aufgebaut.

    Optimizer schrieb:

    Nein. Aber wirklich nicht. Ich habe mit Sicherheit nicht gesagt, dass dieser Generics-Workaround hervorragendes OO Design wäre.

    Oder jetzt doch nicht, oder was?

    Und dann schreibst Du: die Standardbiblithek ist bestenfalls objektbasiert.
    Und ich sage: nein, ist sie nicht. Sie ist generisch.

    Wenn Du Dich auf den Teil der Java-API zurückziehen darfst, der absolut toll ist, warum ich darf ich mich dann nicht auf den C++-Lib-Teil zurückziehen, der absolut toll ist?

    Ansonsten finde ich Deinen Diskussionsstil etwas gewöhnungsbedürftig. Könntest Du vielleicht einfach mal sachlich bleiben und nicht ständig versuchen mich irgednwie anzupissen? Vielleicht schaffen wir's uns auf ner normalen Ebene zu unterhalten? Ich werd mich jedenfalls bemühen.

    MfG Jester



  • @Hume: ja, hab den Artikel auch gelesen. Wollte aber nicht weiter drüber diskutieren, weil denke daß das zu nichts führt.



  • Jester schrieb:

    Hier steht: in Java ist die Bibliothek absolut mustergültig aufgebaut.

    Nein. Hier steht: in Java ist die Bibliothek absolut mustergültig objektorientiert aufgebaut. Dass sich "mustergültig" nicht auf "toll" oder "schlecht" sondern auf das Maß der Objektorientierung bezieht, kann man am Kontext erkennen, wo ich die Designprinzipien "objektorientiert" und "objektbasiert" vergleiche.

    Und dann schreibst Du: die Standardbiblithek ist bestenfalls objektbasiert.
    Und ich sage: nein, ist sie nicht. Sie ist generisch.

    Die C++ stdlib ist doch nicht generisch. Ein paar Klassen sind generisch, ein Teil. Deshalb ist das doch nicht gleich das ganze Designprinzip der stdlib. Es geht doch nicht darum, dass es eine generische Klasse std::vector gibt, sondern darum, wie die Klassen zueinander in Beziehung stehen. Und ich sehe keine großen Beziehungen zwischen den Klassen und vermisse im ganzen Design wichtige Aspekte der Objektorientierung. Daraus folgere ich, dass die stdlib "bestenfalls" (im Sinne von "höchstens") objektbasiert und nicht objektorientiert ist. Und einige Klassen sind generisch, was ein zugegebenermaßen nettes Zuckerl ist.

    Wenn Du Dich auf den Teil der Java-API zurückziehen darfst, der absolut toll ist, warum ich darf ich mich dann nicht auf den C++-Lib-Teil zurückziehen, der absolut toll ist?

    Wo habe ich mich zurückgezogen? Ich habe Beispiele genannt und ich könnte dir noch hundert weitere nennen. Da habe ich jetzt aber keine Lust dazu. Ich kann es ja auch lassen, Beispiele zu nennen, dann ist es aber auch wieder nicht recht.
    Auf jeden Fall solltest du daraus nicht folgern, dass ich mich auf einen kleinen Teil zurückziehe.

    Ansonsten finde ich Deinen Diskussionsstil etwas gewöhnungsbedürftig. Könntest Du vielleicht einfach mal sachlich bleiben und nicht ständig versuchen mich irgednwie anzupissen? Vielleicht schaffen wir's uns auf ner normalen Ebene zu unterhalten? Ich werd mich jedenfalls bemühen.

    Ich auch. Mit dem "anpissen" hast aber du mit deiner allgemeingültigen Aussage über Java-Programmierer angefangen.



  • Optimizer schrieb:

    Wo findet man in der std-lib schon Vererbung mit Polymorphie, was absoluter Bestandteil des Konzepts der Objektorientierung ist?

    Wo hast du deine Definition von Objektorientierung genommen? Soweit ich das Konzept kenne, sind Vererbung und Polymorphie nur Bestandteile, die aber nicht absolut vorkommen müssen. Da mir aber sowieso jeder, den ich treffe, vorwirft, ich wisse nicht was Objektorientierung sei, frage ich mal nach deiner Definition.

    Zur Polymorphie läßt sich aber sagen: Die std-lib verwendet sehr stark Templates. Templates werden jedoch nicht ohne Grund als Mittel für compile-time Polymorphie bezeichnet. Wenn man also Polymorphie schon beim Kompilieren anwenden kann, kann man zur Laufzeit verzichten.

    Ebenso kann die std-lib größtenteils auf Vererbung verzichten, da sie das Iteratorkonzept verinnerlicht. So gibt es stat eines vector::vector(Container const & input) einen template <typename Iter> vector::vector(Iter begin, Iter end); Zusammen mit der compile-time Polymorphie durch das Template ist letzteres allgemeiner als das erste Beispiel. Es gibt halt Datenbereiche, die nicht sinnvoll von Container abgeleitet werden können (z.B. ein Socketstream).

    Falls jedoch zur Objektorientierung Laufzeitpolymorphie und Vererbung zwangsläufig dazugehoeren, wird die std-lib nicht objektorientiert sein. Das ist danna aber auch besser so.



  • deleted



  • Ich wollte, wie gesagt, kein Urteil über gut oder schlecht abgeben (auch wenn ich dir so viel sagen kann, dass ich nicht deiner Meinung bin).

    Definitionen der Objektorientierung findest du eigentlich überall, auch in Wikipedia. Vererbung ist wesentlicher Bestandteil von Objektorientierung und mit Vererbung geht wohl meistens Laufzeitpolymorphie einher.
    Ob Laufzeitpolymorphie aber wirklich gefordert ist, weiß ich nicht.



  • Optimizer schrieb:

    Ich auch. Mit dem "anpissen" hast aber du mit deiner allgemeingültigen Aussage über Java-Programmierer angefangen.

    Okay, prima.

    Die Aussage über Java-Programmierer war auch nicht ernst gemeint. Ich fürchte nur, ich hab den hier 😉 vergessen.

    Das Problem mit "bestenfalls" ist, daß es sehr wohl eine Bewertung vornimmt:

    A hat bestenfalls Eigenschaft a, wohingegen B absolut mustergültig Eigenschaft b hat.
    

    Ich finde, das drückt aus, daß Eigenschaft b besser ist als a.

    Aber ansonsten sind wir uns jawohl größtenteils einig.



  • Ponto schrieb:

    Templates werden jedoch nicht ohne Grund als Mittel für compile-time Polymorphie bezeichnet. Wenn man also Polymorphie schon beim Kompilieren anwenden kann, kann man zur Laufzeit verzichten.

    cool, dann ist 'c' ja auch ein bisschen objektorientierung. #define, #ifdef etc. ist ja wohl auch compile-time polymorph 😉



  • moin ihr, vielelicht lasst ihr mich auch an eurem flamewar teilhaben 😉

    ich kann jetzt über java nicht allzuviel sagen(will ich auch garnicht ;)), aber zur stl kann ich mich äußern:

    die stl ist objektbasiert, aber auch nur als mittel zum zweck.
    Der Kern der stl ist in einem rein funktionalen stil gehalten(sogut wie alle verändernden stl algorithmen basieren auf funktoren um nur ein beispiel zu nennen), wohingegen die Schale rein generisch ist. Die objekte dienen sozusagen nur dazu, um sinneinheiten zusammenzuhalten. Auch vererbung kann man in der stl finden, als beispiele nenn ich mal die streams, oder die functoren die von unary/binary_function abgeleitet sind. Im endeffekt kann ich nur sagen, dass die stl ein paradebeispiel für den coding style von C++ ist(von den variablennamen mal abgesehen...),halt von allem etwas, funktionale programmierung, oop, generics, und das alles gut durchgerührt.

    Aber das ist nur meine interpretation des aufbaus, sicher werdet ihr mich jetzt in grund und boden flame

    //edit dummes forum-.-



  • Willst Du Deinen Postingzähler hochtreiben? 😉

    Die STL ist nicht funktional programmiert. Bitte schlag irgendwo nach was funktionale Programmierung ist.



  • hab ich, und dabei bin ich unter anderem auf diese aussage gestoßen(hab ja auch mal im rund um die programmeirung nach ner genauen definition gefragt, viel rumgekommen ist dabei aber auch nicht :D)



  • Ein Thread mit den Wörtern "Java" und "C++" im Titel und erst 4 Seiten?? 🕶



  • Wieso erst? Ich dachte, er würde nach Seite 1 geschlossen. Aber zumindest kann man hier jeden Mist reinschreiben und es wird kommentiert. Ist doch auch was.



  • Respekt, als ich es letzte mal geschaut hab, da war der Thread noch eine Seite
    lang. Unglaublich, wie schnell sich das bei den zwei Streitwoertern aendert :).

    Wollt ich auch mal gesagt haben, es sich immer nur zu denken ist langweilig.

    mfg
    v R



  • Auf Vererbung wird in der C++ std-lib größtenteils verzichtet und das macht Objektorientierung nun mal aus.

    Ach. Und wenn irgendwo nicht vererbt wird ist es definitiv nicht oo? Quatsch.

    @otze: Ich gebe dir zwar recht, das die STL in einigen Aspekte sehr funktional (vom Paradigma her) ist, aber die Aussage "Der Kern der stl ist in einem rein funktionalen stil gehalten" halte ich für falsch.



  • Und wenn irgendwo nicht vererbt wird ist es definitiv nicht oo?

    Das ist jetzt auch ziemlich überspitzt wiedergegeben. So in der Form habe ich das nie gesagt.

    Objektorientierung schließt den Einsatz von Vererbung ein, das heißt natürlich nicht, dass alles von java.lang.Objekt abgeleitet sein muss.
    Trotzdem ist Vererbung ein zentraler Bestandteil der Objektorientierung, ohne Vererbung spricht man von Objektbasierung.
    Und das trifft IMHO auf die stdlib, insbesondere auf den STL-Teil größtenteils zu (dass ohne Vererbung gearbeitet wird).



  • Optimizer schrieb:

    Objektorientierung schließt den Einsatz von Vererbung ein, das heißt natürlich nicht, dass alles von java.lang.Objekt abgeleitet sein muss.
    Trotzdem ist Vererbung ein zentraler Bestandteil der Objektorientierung, ohne Vererbung spricht man von Objektbasierung.

    ist doch egal. mit c++ kann man objektorientiert, objektbasiert, prozedural, generisch, mit inline assembler oder sonstwie coden. mit 'n paar defines macht man basic oder pascal draus. 😉
    welche andere sprache hat so viele möglichkeiten?



  • Helium schrieb:

    @otze: Ich gebe dir zwar recht, das die STL in einigen Aspekte sehr funktional (vom Paradigma her) ist, aber die Aussage "Der Kern der stl ist in einem rein funktionalen stil gehalten" halte ich für falsch.

    hab die stelle wieder gefunden, wo ich die aussage her hab: boost::spirit::phoenix dokumentation ;), ich halte diese quelle doch schon für sehr glaubwürdig 😃



  • HumeSikkins schrieb:

    // geht nicht in Java
    class Foo<T>
    {
        public void foo(T aT) {aT.doSomething();}
    }
    

    Ist zwar OT, aber...

    Als naiver Java-Programmierer habe ich mich schon immer gefragt, warum Leute soetwas tun sollten, was du da in deinem Beispiel machst. Mir stellt sich da in erster Linie folgende Frage:

    Wie ist aus der Schnittstelle erkenntlich, welche Anforderungen an den Typ T gestellt werden? Hier muss ja offensichtlich eine Methode "doSomething" vorhanden sein. Gibt es da wenigstens Hilfsmittel von den IDEs, die einen das erkennen lassen, oder muss man "mal zur Probe" kompilieren, um zu sehen, ob die Klasse Foo mit einem bestimmten Typ parametrisiert werden kann?



  • Gregor schrieb:

    Gibt es da wenigstens Hilfsmittel von den IDEs, die einen das erkennen lassen, oder muss man "mal zur Probe" kompilieren, um zu sehen, ob die Klasse Foo mit einem bestimmten Typ parametrisiert werden kann?

    Eine ordentliche Doku zur Klasse ist sicherlich das sinnvollste.


Anmelden zum Antworten