<Split aus "C/C++ oder C#">
-
Kleiner_Prog schrieb:
PS: was ist ein FAQ
Da findet man Antworten auf häufig gestellte Fragen. Vor dem lesen sollte man da immer nachlesen. Schau dir einfach mal die Unterforen an, die mit "FAQ" anfangen.
FAQ
-
kingruedi schrieb:
Es geht darum, dass ich keine Lust habe auf diese ewigen Flamewars hier und ich will dir nur klar machen, dass dein Verhalten so etwas begünstigt.
Das Du das sagst bringt mich zum lachen, Du bist doch auch einer der in manchen Threads jedem seine Linuxmeinung aufdrücken will!
IMHO wurde Dir das sogar schon in einem Thread gesagt.
kingruedi schrieb:
Was meinst du mit "Es ist ja auch klar das jemand der sich an Linux einen ..., nie sagen wird, dass .NET gut ist."?
Nix, lass gut sein, nicht das Du den Thread noch dicht machst.

-
btw. ich glaube mich zu erinnern, daß die nächste .NET-Version sogar mehrfach-Vererbung unterstützen sollte. Dann könnten auch die .NET-Sprachen damit nachziehen.
Ich finde schon, daß das Fehlen von MI ein Nachteil sein kann. Wenn MI der beste Weg ist ein Design auszudrücken und ich aber kein MI habe, dann ist das ein Nachteil.Optimizer: Deine Aussage bezüglich MI verstehe ich nicht. Was meinst Du, daß das Design falsch ist wenn man von MI abhängt?
Ich meine entweder man braucht es nicht, dann sollte man es auch nicht benutzen, oder man braucht es. Dann hängt man wohl aber von MI ab und damit ist das Design schlecht? Oder übersehe ich den springenden Punkt?
-
Jester schrieb:
btw. ich glaube mich zu erinnern, daß die nächste .NET-Version sogar mehrfach-Vererbung unterstützen sollte.
Das glaube ich nicht, bzw. wäre es mir neu. Hast Du eine Quelle?
Momentan (Beta 1) funktioniert es nicht und ich denke auch nicht, dass es in der Final funktionieren wird.
-
@Noodles
es geht hier nicht um meine Meinung zu Linux. Darüber habe ich hier nichts geschrieben. Das ist auch gar nicht der Punkt von dem was ich dir sagen will. Hör einfach auf im Forum zu posten, wenn du dich genötigt fühlst ständig Flames zu provozieren.
-
kingruedi schrieb:
@Noodles
es geht hier nicht um meine Meinung zu Linux. Darüber habe ich hier nichts geschrieben.Ein Glück ...
kingruedi schrieb:
Das ist auch gar nicht der Punkt von dem was ich dir sagen will. Hör einfach auf im Forum zu posten, wenn du dich genötigt fühlst ständig Flames zu provozieren.
Das Wort ständig hätte ich gern belegt!
Aber Ok, Du bist Mod und hast immer Recht, sonst hörst Du ja nicht auf und teilst weiter Threads, lächerlich!
Edit: Ich bin erstaunt, dass Du antwortest, denn oft wenn Du kritisiert wirst, kommt ja nix mehr von Dir.
-
Hast du irgend ein Problem?
-
Jester schrieb:
btw. ich glaube mich zu erinnern, daß die nächste .NET-Version sogar mehrfach-Vererbung unterstützen sollte. Dann könnten auch die .NET-Sprachen damit nachziehen.
Ehrlich gesagt, kann ich mir das nicht vorstellen. Ich nehme das aber gerne zurück, wenn du mir dafür eine Quelle nennen kannst?
Optimizer: Deine Aussage bezüglich MI verstehe ich nicht. Was meinst Du, daß das Design falsch ist wenn man von MI abhängt?
Ich meine entweder man braucht es nicht, dann sollte man es auch nicht benutzen, oder man braucht es. Dann hängt man wohl aber von MI ab und damit ist das Design schlecht? Oder übersehe ich den springenden Punkt?
Wirklich brauchen tut man es doch nie. Es kann einem wohl scheinbar manchmal ersparen, ähnliche Sachen 2- oder 3mal zu implementieren, anstatt einmal. Die Nachteile, die man sich damit erkauft, sind ja hinlänglich bekannt und wiegen die Vorteile nicht immer auf. Tatsächliche glaube ich, dass Mehrfachvererbung von der Masse mehr falsch als richtig eingesetzt wird, oder zumindest unnötig eingesetzt wird.
Aber deinen Post deute ich jetzt so, dass es wohl Situationen gibt, in denen Mehrfachvererbung (von Implementierungen) wirklich braucht. Das kann ich nicht nachvollziehen, vielleicht kannst du dazu ein Beispiel geben?
Das eine Objekt mehrere Dinge sein kann, ist klar. Das lässt sich aber auch z.B. in Java implementieren.
(Wohnmobil extends Fahrzeug implements Wohnstätte. Ein Wohnmobil lässt sich jetzt sowohl als Fahrzeug als auch als Wohnstätte behandeln.)Das ist eigentlich schon mal grundlegende Mehrfachvererbung. Wenn ich jetzt eine Klassenhierarchie designe, die aber aus irgendeinem Grund das unbedingt nötig hat, von zwei konkreten Klassen zu erben, dann finde ich was komisch (das wollte ich eigentlich vorhin sagen). Mir fällt dazu beim besten Willen kein Beispiel ein. Fahrzeug und Wohnstätte sind ja nun mehr oder weniger abstrakt.
-
Noodles schrieb:
Das glaube ich nicht, bzw. wäre es mir neu. Hast Du eine Quelle?
Momentan (Beta 1) funktioniert es nicht und ich denke auch nicht, dass es in der Final funktionieren wird.Ne, leider nicht. Mein Prof hat das neulich behauptet. Er sprach allerdings von Version 3. Hab grad eben mal ne Weile gesucht aber nix gefunden im Netz.
-
Optimizer: natürlich kann man vollständig auf MI verzichten (man kann sogar auf OO verzichten!). Das ist nicht die Frage. Aber wenn es so ist, daß ich ohne MI ähnliche Sachen 2-3mal implementieren muß, dann ist das blöd. Code-Duplikation ist mit das ekligste was es gibt. Und genau das ist der Fall wo ich sage: ich brauche MI. Weil ohne muß ich was unschönes machen.
Letztlich haben wir doch all diese schönen Features die uns moderne Sprachen bieten nur zu einem Zweck: um unschönen Kram zu vermeiden bzw. wenigstens automatisch gemacht zu kriegen.MI wird oftmals falsch eingesetzt, das stimmt. Vererbung auch. Aber wenn man weiß was man tut dann ist es eine feine Sache. Und wenn man jetzt in der Situation ist ein wirklich gutes Design mit MI zu sehen und das aber in eine Sprache gießen muß die es nicht hat, dann ist das einfach ärgerlich.
-
Möchte mich nochmal dafür aussprechen, "Neuigkeiten aus der realen Welt" und "Bullshit/Flamewar/Troll" zu trennen... alle schmeißen ihren Müll hier rein...

-
Optimizer: natürlich kann man vollständig auf MI verzichten (man kann sogar auf OO verzichten!). Das ist nicht die Frage. Aber wenn es so ist, daß ich ohne MI ähnliche Sachen 2-3mal implementieren muß, dann ist das blöd. Code-Duplikation ist mit das ekligste was es gibt.
Volle Zustimmung. Ich mag Code-Duplizierung auch nicht.
Und wenn man jetzt in der Situation ist ein wirklich gutes Design mit MI zu sehen und das aber in eine Sprache gießen muß die es nicht hat, dann ist das einfach ärgerlich.
Hmmmmm, jain. Unterschiedliche Sprachen können unterschiedliches Design erfordern. Das ist ärgerlich, aber definitiv nicht zu ändern.
Ich halte MI nicht für einen Designfehler (um das nochmal klarzustellen). Ich halte es aber für einen Designfehler, eine Klassenhierarchie zu haben, die nichts anderes erlaubt, als Implementierung über MI, ohne 50mal Code zu duplizieren.Ich bin kein Philosoph und kenne nicht die genaue Ursache wie und wann und wo man in so eine Situation kommt. Tatsache ist aber, dass Verzicht auf MI nicht automatisch Codeduplizierung bedeutet. Das Java API ist unglaublich fett (verdammt madig unglaublich hardcore fett
). Da ist garantiert keine Mehrfachvererbung drin. Und ganz bestimmt auch keine Codeduplizierung. Irgendwas läuft IMHO falsch, wenn man MI wirklich braucht.
Wenn man MI benutzt, sollte man eine akzeptable Alternative zur Hand haben und trotzdem seine guten Gründe haben, es zu benutzen. Finde ich. Aber überhaupt keine Alternative zu sehen, das kommt mir schon wirklich nicht geheuer vor.
'Mehrfachvererbung' und 'MI' soll hier jetzt "Mehrfachvererbung von Implementierungen" bezeichnen.
HEZ schrieb:
Möchte mich nochmal dafür aussprechen, "Neuigkeiten aus der realen Welt" und "Bullshit/Flamewar/Troll" zu trennen... alle schmeißen ihren Müll hier rein...

Danke, dass du dazu beiträgst, das Niveau zu heben.
-
Optimizer schrieb:
[...]
Das eine Objekt mehrere Dinge sein kann, ist klar. Das lässt sich aber auch z.B. in Java implementieren.
(Wohnmobil extends Fahrzeug implements Wohnstätte. Ein Wohnmobil lässt sich jetzt sowohl als Fahrzeug als auch als Wohnstätte behandeln.)
[...]ich würde eher sagen ein Wohnmobil ist ein Fahrzeug mit einer Wohnung.
Ist ein Fahrzeug, hat eine Wohnung.
Somit abgeleitet von Fahrzeug mit der Eigenschaft Wohnung.
Einfachvererbung
-
Hmmmm guter Einwurf. Wie immer hängt es natürlich vom Programm ab. Es kann auch unklug sein, Pinguin von Vogel abzuleiten.
Jetzt muss man aber den Begriff genau differenzieren.
Wenn eine Wohnung eine Adresse hat, trifft das tatsächlich nicht mehr auf Wohnmobile zu. Dann könnte eine Wohnung aber genauso nicht alleine stehen, sondern müsste auch ein Member eines Hauses sein.Ich sagte aber Wohnstätte. Ein Haus ist eine Wohnstätte (bietet Unterkunft, enthält ein Bett), genauso wie ein Wohnmobil. Kommt wieder darauf an, wie man Wohnstätte definiert, aber IMHO muss das nicht zwangsläufig sowas wie ein Haus sein. Könnte auch ein verwahrloster Platz unter einer Brücke sein. Ich hatte Wohnstätte nicht zuletzt deshalb als abstrakt bezeichnet.
Ein Wohnmobil muss nicht fahrfähig sein. Vielleicht macht es Sinn, von Wohnmobil ein fahrtüchtiges Wohnmobil abzuleiten. Kann man wohl nicht allgemein sagen. Lass es mal als Beispiel gelten.

-
Optimizer schrieb:
HEZ schrieb:
Möchte mich nochmal dafür aussprechen, "Neuigkeiten aus der realen Welt" und "Bullshit/Flamewar/Troll" zu trennen... alle schmeißen ihren Müll hier rein...

Danke, dass du dazu beiträgst, das Niveau zu heben.
Sorry, habe ehrlich nicht gedacht, dass ihr die Kurve wieder kriegt...

-
Optimizer schrieb:
Ich halte es aber für einen Designfehler, eine Klassenhierarchie zu haben, die nichts anderes erlaubt, als Implementierung über MI, ohne 50mal Code zu duplizieren.
Aber wenn ich eine Klassenhierarchie habe, dann ist da entweder MI drin oder nicht. Eine Implementierung ohne MI wird eine andere Struktur haben als die Implementierung mit.
Ein Beispiel wo man MI wirklich gut gebrauchen kann ist, wenn man eine Klasse schreiben will, die mit zwei Bibliotheken zusammenarbeitet. Sie muß also zwei Interfaces anbieten und vielleicht am besten auch gleich noch die passende Default-Implementierung einiger Methoden. Insbesondere wenn man die beiden Libs nicht selbst geschrieben hat wird das schwierig.
-
Jester:
http://www.artima.com/intv/dotnet.html.NET wird also mit ziemlich großer Wahrscheinlichkeit keine Mehrfachvererbung haben - das hindert die einzelnen Sprachen aber nicht daran trotzdem eine anzubieten

-
Aber wenn ich eine Klassenhierarchie habe, dann ist da entweder MI drin oder nicht. Eine Implementierung ohne MI wird eine andere Struktur haben als die Implementierung mit.
Ja. Aber die muss nicht zwangsläufig redundanter sein. Dass man bei verschiedenen Sprachen evtl. das Design ändern muss, haben wir ja schon festgestellt.
wenn man eine Klasse schreiben will, die mit zwei Bibliotheken zusammenarbeitet. Sie muß also zwei Interfaces anbieten und vielleicht am besten auch gleich noch die passende Default-Implementierung einiger Methoden.
Ist doch halb so schlimm, wenn sie keine Default-Implementierung liefert. Angenommen die eine "Bibliothek" ist eine Art sortierte Datenbank, dann muss meine Klasse halt z.B. das Interface 'CompareableObject' implementieren.
Was für einen Sinn würde es jetzt machen, jetzt eine Default-Implementierung für alle Compareable-Klassen zu liefern?
Da wir ja tolle MI verwenden, können das völlig unterschiedliche Objekte sein, du kannst aber nicht für Sockets eine ähnliche Default-Implementierung zum Vergleichen liefern wie für Rationale Zahlen. Bei Mehrfachvererbung muss ja keineswegs irgendeine großartige Beziehung zwischen zwei "benachbarten" Klassen im Vererbungsgraph bestehen, außer eben, was die Basisklasse vorgibt.Du kannst die Methoden wenn du Pech hast fast immer redefinieren. Seltsamerweise stoße ich auf sowas bei meinen Überlegungen dauernd.
Wenn ich jetzt dagegen verschiedene Arten von Zahlenklassen angucke, da könnte es wirklich Sinn machen, eine Default-Implementierung für compare() zu liefern, nämlich den Betrag vergleichen.
Dann schreib ich diese Implementierung aber in eine Basisklasse Number und nicht nicht CompareableObject.Ich hoffe, es ist klar, was ich meine. Es geht mir darum, dass man fast immer ohne Verbiegen noch eine Zwischenklasse finden kann, die dann Defaultimplementierungen liefern kann.
Vielleicht kannst du ja dein Beispiel auch mehr konkretisieren, damit es klarer wird. Irgendwas mit zwei Bibliotheken ist halt noch nicht sehr konkret. Es ist btw. angeblich erwiesen, dass Mehrfachvererbung nicht mächtiger ist als Einfachvererbung.
In Anbetracht dessen, mit was für Nachteilen man sich das erkauft, kann man wirklich schon fast darauf verzichten. Die armen C++ Compilerbauer. *kopfschüttel*
-
Natürlich ist sie nicht mächtiger. Einfachvererbung ist auch nicht mächtiger als garkeine Vererbung. Aber das geht am Thema vorbei.
Wenn Du jetzt natürlich ein beliebiges Beispiel anführst bei dem man's nichts braucht dann sagt das darüber, ob es Fälle gibt wo man's braucht gerade mal garnichts aus.Nimm doch mal an Du hast eine Bibliothek. Damit Du mit der arbeiten kannst mußt Du von einer Basisklasse arbeiten. Und bei einer zweiten Bibliothekt genauso. Uned jetzt möchtest Du eine Klasse bauen, die von beiden Bibliotheken polymorph verwendet wird. Dann hast Du eine Situation wo Du ohne MI nicht so gut wegkommst.
MfG Jester
-
Jester schrieb:
Natürlich ist sie nicht mächtiger. Einfachvererbung ist auch nicht mächtiger als garkeine Vererbung. [...]
ohoh...ich wette das ist ein Gerücht.