C++ nicht objektorientiert?
-
Jein. Es kommt darauf an, wie man diese Sprache verwendet. Man muss nicht objektorientiert arbeiten, um ein C++ - Programm zu erstellen (anders als bei Java). Jedoch wird dies als "alter Stil", "C with classes" etc. bezeichnet. C ist eine Untermenge von C++, man kann also bspw. Hilfklassen der STL verwenden, ohne wirklich objektorientiert zu arbeiten. Dieser Code wäre natürlich nicht mehr mit einem reinen C-Compiler kompilierbar.
Wenn der Informatiklehrer also behauptet, C++ sei grundsätzlich nicht objektorientiert, so ist dies falsch. Die Objektorientiertheitist nämlich eine der wirklichen Stärken von C++, die der Lehrer offenbar nicht verstanden hat.
-
Jein. C++ ist, frei nach Scott Meyers, eine Multiparadigmensprache; ein Verbund prozeduraler, objektorientierter, funktionaler, generischer und Metaprogrammierung. (vgl. Effective C++, Item 1)
C++ ist eine objektorientierte Programmiersprache in dem Sinne, dass es objektorientierte Programmierung unterstützt, aber nicht in dem Sinne, dass man dazu gezwungen wird, und guter C++-Code verbindet in aller Regel die verschiedenen Paradigmen miteinander.
-
Das war mal eine Werbe-Masche von Java. Sun sagte, Java sei rein objektorientiert, weil alles in einer Klasse stecken MUSS, wie java.lang.Math.sqrt(). Und C++ sei nicht richtig objektorientiert, weil da sqrt einfach eine freie Funktion ist. Reines Marketinggesülze.
Laß mich raten, er ist Java-Fanboy?
Außerdem sind am Ende nicht die Sprachen objektorientiert, sondern die Programme. Ob eine Sprache von den Massen als objektorientiert anerkannt ist, ist eher irrelevant.
-
Jein/eher nein schrieb:
Man muss nicht objektorientiert arbeiten, um ein C++ - Programm zu erstellen (anders als bei Java).
double w5=Math.sqrt(5);
ist nicht objektorientierter als
double w5=std::sqrt(5);
Objektorientierter wäre
double w5=(5.0).sqrt;
oder
w5 := 5.0 sqrt
-
-
AndreasBo schrieb:
Gut getippt
Ja er ist Java Funboy
Wahrscheinlich bestreitet er auch, dass man in Java strukturiert programmieren kann?
-
Ich wollte jetzt in keinster Weise irgendwelche Vorteile von Java herausstellen. Es stimmt, Java habe ich als erste Sprache gelernt (lernen müssen). Damals (schon etwas her) habe ich ein komplettes Mediacenter (Musik/Videos abspielen, Songtexte aus dem Internet laden etc.) mit Java programmiert; mit C++ und der WinApi hätte ich so etwas erst Jahre später geschafft.
Aber zum Thema: Mit Java MUSS man doch jeweils ableiten (extends ?), selbst wenn man nur ein Fenster erstellen und darin zeichnen will, oder ist das alles für mich schon zu lange her?
-
Jein/eher nein schrieb:
Ich wollte jetzt in keinster Weise irgendwelche Vorteile von Java herausstellen. Es stimmt, Java habe ich als erste Sprache gelernt (lernen müssen). Damals (schon etwas her) habe ich ein komplettes Mediacenter (Musik/Videos abspielen, Songtexte aus dem Internet laden etc.) mit Java programmiert; mit C++ und der WinApi hätte ich so etwas erst Jahre später geschafft.
Aber zum Thema: Mit Java MUSS man doch jeweils ableiten (extends ?), selbst wenn man nur ein Fenster erstellen und darin zeichnen will, oder ist das alles für mich schon zu lange her?Die Standardbibliothek von Java ist um Jahrzehnte moderner als die WinAPI.
Natürlich kann man in C++ auch anständige Bibliotheken basteln, die an passenden Stellen (und das paßt oft) Gebrauch von objektorientierten Spachmitteln machen.
-
Nein musst man nicht, ist für den faulen Programmiere bequemer. Siehe
Netbeans GUI Editor standardmäßig mit Vererbung
Idea GUI Editor standardmäßig mit Komposition
-
Zeus schrieb:
AndreasBo schrieb:
@volkard
Gut getippt
Ja er ist Java FunboyWahrscheinlich bestreitet er auch, dass man in Java strukturiert programmieren kann?
Gute Idee. Ich führe sie weiter...
http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.9
"The keywords const and goto are reserved, even though they are not currently used. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs."In Java gibt es kein goto. Also kann man darin gar nicht unstrukturiert programmieren. Spaghetti-Code ist unmöglich.
In C++ hingegen gibt es goto. Dort kann man nicht strukturiert programmieren. Alle C++-Programme bestehen aus Spaghetti-Code.
Das wäre zwar das Argumentsionsniveau. AndreasBos Sohn soll das ruhig mal benutzen. Dann kriegt er auch eine 1 im Zeugnis und nicht bloß eine 2. Spleens von Lehrern sind nur Griffe, mit denen man sich gute Noten heranziehen kann.
-
AndreasBo schrieb:
Der Informatiklehrer meines Sohnes behauptet:
C++ wäre keine objektorientierte Programmier-
sprache.Hat er recht?
Du hast einen Sohn und fragst in einem C++Forum, ob C++ objektorientiert ist. Interessante Konstellation. Warum fragt uns dein Sohn nicht selber? Wenn man bei Google "C++" eingibt kommt man als erstes auf Wikipedia und da steht das C++ objektorientiert ist. Hmm???
-
volkard schrieb:
Objektorientierter wäre
double w5=(5.0).sqrt;
oder
w5 := 5.0 sqrt
So richtig objektorientiert scheint mir zumindest das erste Beispiel eigentlich nicht. Auf die Gefahr hin, Gebiet zu betreten, über das man sich lange und ergebnislos streiten kann - für mein Verständnis dreht sich Objektorientierung vor allem um Datenkapselung und lose Kopplung. Eine Zahl als Objekt aufzufassen ist gut, aber sämtliche Operationen, die mit Zahlen umgehen, als Methoden einer Zahl aufzufassen, scheint mir ziemlich unpraktisch und alles andere als lose gekoppelt.
So wie ich das sehe, wäre ein objektorientierter Ansatz, die Funktion selbst als Objekt aufzufassen und mit der Zahl zusammenspielen zu lassen - ich denke da an Funktionszeiger bzw. std::tr1::function. In Pseudocode gegossen vielleicht etwas in dieser Größenordnung:
(5.0).apply(sqrt);
-
Du hast leider das Problem, dass du in dein Literal keine andere Zustand speichern kannst.
-
Eine Klasse SquareRootFunction wäre objektorientiert.
-
Das wäre ziemlich objektorientiert:
class Number virtual Number sqrt() class Double : Number override Number sqrt() Number n = 0.3 Double root = (Double)n.sqrt()
-
Die Aussage, das C++ nicht konsequent objektorientiert ist, habe ich schon vor etwa 20 Jahren im Zusammenhang mit Smalltalk gehört.
-
Die Java-Fanboys sind eh die Schärfsten. Hier mal ein paar Aussagen die ich mal im Javaforum gelesen habe, der Thread wurde leider gelöscht wie viele die mal ein paar moderne Ansätze in C++ dort klarstellen wollen.
- In C++ MUSST du Klassen in Header und Implementierung aufteilen
- Mit C++ kann man nicht plattformunabhängig programmieren
- C++ ist nicht großartig performanter als Java
- C++/Qt kommt kein Stück an Java mit seiner GUI ran
- Java ist für größere Projekte die bessere WahlWill man auch nur einen Punkt widerlegen wird man als Troll beschimpft und wenn man es dann doch belegt hat wird auch gerne mal der Thread gelöscht.
-
Ich programiere seit Jahren in C++ und war sprachlos. Deshalb habe ich gefragt.
BTW ich habe mit FORTRAN angefangen (1979) Für die, die diese Sprache
noch kennen. Das ergab dann meist wirklich Spagetticode.Aber volkard hat recht, wenn er sagt, dass es am Programierer liegt.
-
Wollen wir nun über das programmierte Ergebnis des Lehrers unterhalten?
-
Gib mir eine Definition von OOP und ich sage Dir, ob C++ oo ist. Über eine unklare Begrifflichkeit auf eine Programmiersprache angewendet zu diskutieren ergibt imo keinen Sinn (außer, dass der Gewinner der Diskussion, irgendwo in einer genau so schwammigen Diskussion mit dem Gefühl reingeht, er hätte erwiesenermaßen recht :P).