<Split aus "C/C++ oder C#">
-
Ja, das will ich ja auch nicht bestreiten. Ich wollte hauptsächlich darauf hinweisen, daß es nicht wirklich sinnig ist in diesem Zusammenhang von "mächtiger" zu sprechen ohne das genauer zu definieren. Wenn wir meinem was man damit für Programme schreiben kann, dann ist die Antwort einfach: mit jedem sind alle möglich. Deshalb kann keine Vererbung nicht weniger als Vererbung. Sie sind also in diesem Sinne gleichmächtig.
Ein anderes quantitatives Kriterium fällt mir ehrlich nicht ein. Wir können schlecht darüber diskutieren wie "schön" etwas ist. Zumindest nicht wenn wir einen objektiven Vergleich haben wollen. Aber wenn Dir ein gutes Kriterium einfällt immer her damit.
-
Jester schrieb:
[...]
Wenn wir meinem was man damit für Programme schreiben kann, dann ist die Antwort einfach: mit jedem sind alle möglich. Deshalb kann keine Vererbung nicht weniger als Vererbung. Sie sind also in diesem Sinne gleichmächtig.
[...]jop du hast da natürlich recht. Mit jedem kann man jedes Programm schreiben
aber schreiben ist nicht gleich schreiben, es geht auch um den Aufwand denn ich betriebn muss. Und in der heutigen Kultur heißt Aufwand Zeit und Zeit ist Geld und Geld hat niemand...Vererbung macht vieles einfacher und somit schneller im sinne des fertigstellens des Programms und der Wartbarkeit und dadurch produktiver
wie du immer Mächtigkeit definierst. Eine Programmiersprache zeichnet sich nicht nur dadurch aus das man am ende ein schnelles Programm hat. Der Weg dahin ist meistens entscheidender. Vererbung hat da nun viele Vorteile
-
Mir ging es auch nicht Geschwindigkeit. Wenn ich sage A ist mächtiger als B, dann heißt das für micht: Mit A kann man mehr machen als mit B. Und das funktioniert in diesem Szenario einfach nicht.
Wir könnten natürlich sagen: mit Vererbung kann man schneller entwickeln als ohne... das ist aber wohl nicht immer richtig (Ausnahmen bestätigen schließlich die Regel), und zum Zweiten hilft uns das nicht viel weiter. Denn auf die Frage ob man mit MI jetzt schneller entwickeln kann als ohne... tja, da entsteht höchstens ein Glaubenskrieg aber kein guter Vergleich.
-
Jester schrieb:
Natürlich ist sie nicht mächtiger. Einfachvererbung ist auch nicht mächtiger als garkeine Vererbung. [...]
nun ich bin auf diesen Satz von dir eingegangen weil ich mächtiger = besser gesetzt hab.
und ich bin der meinung das Vererbung um längen besser ist als keine Vererbung. Aber das ist meine Meinung.
Natürlich gibts Gründe wo ich selbst sagen würde: Vererbung, wofür?
Mir ging es auch nicht Geschwindigkeit. Wenn ich sage A ist mächtiger als B, dann heißt das für micht: Mit A kann man mehr machen als mit B. Und das funktioniert in diesem Szenario einfach nicht.
Ich kann mehr Programme schreiben als du weil ich durch Vererbung Zeit einsparre

jetzt mal im ernst:
warum sollst du mit Vererbung nicht mehr machen können als ohne?
Mit Vererbung kann ich mich der Natur annähren
Ich kann mir eine Klassenstruktur aufbauen
(und dann noch die wieteren Punkte die ich schon aufgeschrieben hab)Alleine Polymorphie wiederspricht deiner Aussage ("Wenn ich sage A ist mächtiger als B, dann heißt das für micht: Mit A kann man mehr machen als mit B. Und das funktioniert in diesem Szenario einfach nicht.")
gut, wenn du alles auf den gemeinsammen Nenner bringen willst:
Mit welchen Opcodes unterstütz Dein Prozessor Vererbung?
dann kann keine Programmiersprache mehr als alle die anderen. Sind doch alles sowieso Bits
-
Wir reden glaub ich aneinander vorbei: ich hab nie bestritten, daß Vererbung sinnvoll ist. Aber versuch mal das quantitativ zu fassen!
Meßbar ist: was ist realisierbar. Antwort: mit Vererbung alles und ohne auch. => kein Unterschied
also brauchen wir einen andere Maßstab. Nehmen wir Entwicklungsgeschwindigkeit. Prima man könnte also sagen mit Vererbung kann man schneller entwickeln also ohne.
Gut, eigentlich wollten wir mi mit si vergleichen. Kann man jetzt ohne mi schneller entwickeln also mit mi?
Tja keine Ahnung, man kann das einfach nicht objektiv vergleichen. Der eine sagt so, der andere so.Nebenbei bemerkt: ich hatte bei "mächtiger als" zunächst nen anderen Begriff im Kopf. Der besagt aber, daß ich mit dem einen genau das andere auch nachbauen kann. Sozusagen als Spezialfall enthalten. Das konnte aber nicht sein, da sonst mi mächtiger wäre als si und umgekehrt nicht. Das konnte Optimizer also nicht gemeint haben.
Letztlich ist es also schlicht quatsch zu versuchen die Mächtigkeit von sowas als formales Argument anzuführen. Mehr will ich garnicht sagen.
Aber zu sagen: "mit Vererbung kann man viel mehr machen, das müßte man ja sonst alles von Hand zusammenbasteln..." und andererseits: "mi braucht man nicht, kann man mit si alles zusammenbasteln." ist doch irgendwie schizophren, oder?
-
Letztlich ist es also schlicht quatsch zu versuchen die Mächtigkeit von sowas als formales Argument anzuführen.
also wenn du vorher nicht definierst was du unter mächtig verstehst ist es wohl zuerst als Vergleich zu sehen
und ein Vergleich setzt nun mal pro/contra aussagen voraus. Du hast mit deiner Aussage Verergung == nicht Vererbung gesetzt also sind die gleichwertig. Das können sie aber nur sein wenn sie in allen Punkten gleich sind. Das sind wir uns wohl Einig das das nicht der Fall sein kann.
welche Rolle die Mehrfachvererbung nun gegenüber der Vererbung spielt...das kann ich dir nicht sagen, darum ging es mir auch nie.
Villeicht hab ich dich wirklich falsch verstanden...
aber:
was ist realisierbar. Antwort: mit Vererbung alles und ohne auch. => kein Unterschied
diese Aussage ist wohl absolut Relativ. Es stellt sich nicht die Frage was ist realisierbar sondern was will ich machen und wie kann ich es realisieren.
Wie willst du .Net z.B. realiesieren mit dem Konzept das es beinhaltet. Es bassiert absolut auf Vererbung, also wäre es ohne diese nicht zu realisieren!
-
Wenn man nicht definiert was "gleichmächtig" heißt, dann kann man auch nicht sagen wann zwei Dinge gleichmächtig sind. Ich habe also mal eine Definition zugrundegelegt. Und zwar eine die man wenigstens ordentlich nachprüfen kann. Und es kam irgendwie nichts brauchbares raus. Wenn wir aber ein Definition wählen die nicht nachprüfbar ist, dann kann jeder alles behaupten und wir sind kein Stück weiter.
Realisierbar sollte hier heißen: Welche denkbaren Programme sind damit implementierbar. Im Sinne von Turing-Mächtigkeit. Das ist Absolut, nicht relativ.

Wie gesagt, wenn Dir eine schlaue Vergleichsmöglichkeit einfällt, die *nicht* subjektiv ist und die sich einfach nachprüfen läßt... nur her damit. Ich finde keine. Und ich glaube auch nicht, daß es wirklich ne gute gibt. Darauf wollte ich hinweisen.
-
Jester schrieb:
[...]
Realisierbar sollte hier heißen: Welche denkbaren Programme sind damit implementierbar. Im Sinne von Turing-Mächtigkeit. Das ist Absolut, nicht relativ.

ich könnte jetzt behaupten das du deine allgemeine Aussage jetzt so subjektiv umformst das sie deinen Kriterien entspricht

Wie gesagt, wenn Dir eine schlaue Vergleichsmöglichkeit einfällt, die *nicht* subjektiv ist und die sich einfach nachprüfen läßt... nur her damit. Ich finde keine. Und ich glaube auch nicht, daß es wirklich ne gute gibt. Darauf wollte ich hinweisen.
Man kann kein abgeschlossenes System messen. Jede Messung hat einen subjektiven Einfluss auf das Ergebnis.
-
Online schrieb:
Man kann kein abgeschlossenes System messen. Jede Messung hat einen subjektiven Einfluss auf das Ergebnis.
Wenn ich eine zwei Programmiersprachen habe kann ich mir anschaun ob beide Turing-Mächtig sind. Ist es eine nicht, so ist die andere klar mächtiger. Wo da irgendwelche subjektiven Einflüsse reinkommen ist mir schleiferhaft. Eine Sprache wird nicht turingmächtig weil ich mir das so arg wünsche.
-
Was ist mit Polymorphie? Ohne Vererbung nichts zu machen.
Ach? Dann versuchs mal mit 'ner Scriptsprache wie PHP. ODer versuchs mal mit 'ner Sprache, die auf strukturelles statt nominatives Subtyping setzt, wie O'Caml oder die abstract interfacces von Nice.
-
Jester schrieb:
Online schrieb:
Man kann kein abgeschlossenes System messen. Jede Messung hat einen subjektiven Einfluss auf das Ergebnis.
Wenn ich eine zwei Programmiersprachen habe kann ich mir anschaun ob beide Turing-Mächtig sind. Ist es eine nicht, so ist die andere klar mächtiger. Wo da irgendwelche subjektiven Einflüsse reinkommen ist mir schleiferhaft. Eine Sprache wird nicht turingmächtig weil ich mir das so arg wünsche.
das und das hier:
[...]Welche denkbaren Programme sind damit implementierbar. Im Sinne von Turing-Mächtigkeit.[...]
...das wiederspricht sich irgendwie oder? Du schreibst was von denkbaren Programmen und gleichzeitig schreibst du [...]irgendwelche subjektiven Einflüsse reinkommen ist mir schleiferhaft
Du denkst dir also das Messverfahren aus und hast keine Subjektiven Einflüße drin? Hast du schon mal in irgendeiner Weise Messtechnik gehabt?
Leitspruch: wer misst, misst Mist!Helium schrieb:
Ach? Dann versuchs mal mit 'ner Scriptsprache wie PHP.
kenn mich mit PHP nicht aus aber ich könnte jetzt schreien "ist doch keine P." ich lass das Thema mal lieber.
Helium schrieb:
die auf strukturelles statt nominatives Subtyping setzt,
keine Ahnung wo der Unterschied ist.
Helium schrieb:
abstract interfacces von Nice.
ich kenn Nice nicht aber muss man die Interface nicht vererben damit man was mit denen anfangen kann?
Na ja gut, vielleicht hab ich Polymorphie nur falsch verstanden oder ich benutze die falschen Sprachen.
-
Online: Du willst es nicht kapieren oder?
Turing-Mächtig heißt: Jedes Programm das man schreiben kann kann man auch damit schreiben. Das ist eine Eigenschaft, die man nachweisen oder widerlegen kann.
Genauso wie man von einer Zahl feststellen kann, ob sie >=5 ist oder nicht. Da gibt es keine Fehler!
Ich messe hier nichts, ich vergleiche was. Sagst Du, wenn auch, wenn Du 3+4 ausgerechnet hast und es kommt 7 raus, daß das wahrscheinlich fehlerbehaftet ist und möglicherweise 17 richtig ist?
Und genau solche Kriterie suche ich (und versuche Dir das seit 2 Tagen zu erklären). Ich will nicht solche die butterweich sind, sondern solche die man nachprüfen kann.
-
die auf strukturelles statt nominatives Subtyping setzt,
keine Ahnung wo der Unterschied ist.
Bei ersterem kommt es auf die Struktur an. Wenn etwas die entsprechenden Methoden bietet ist es ein Subtyp.
Bei letzterem kommt es an, ob ich namentlich angegeben habe, dass es sich um einen Subtyp handelt.
-
Online schrieb:
Na ja gut, vielleicht hab ich Polymorphie nur falsch verstanden oder ich benutze die falschen Sprachen.
Ne, weder falsch verstanden (zumindest lässt sich das nicht hieraus schließen) noch beutzt die falschen Sprachen (zumindest lässt sich das nicht hieraus schließen) - aber dein Horizont reicht nicht weit genug.
-
Jester schrieb:
Online: Du willst es nicht kapieren oder?
Turing-Mächtig heißt: Jedes Programm das man schreiben kann kann man auch damit schreiben. Das ist eine Eigenschaft, die man nachweisen oder widerlegen kann.
[..]
das war mir schon klar, du kannst viel theoretisch auseinandernehmen
ich versuche dir die gaze Zeit zu sagen das Theorie oft an der Praxis vorbei geht. Würde Vererbung gleichwertig sein mit "Nichtvererbung" so hätte es Vererbung nie in diesem Umfang gegeben.
Du hast in theoretischen Punkt recht aber an der Parxis geht das total vorbei
Shade Of Mine schrieb:
aber dein Horizont reicht nicht weit genug
vielleicht schaue ich in eine andere Richtung
-
Online schrieb:
ich versuche dir die gaze Zeit zu sagen das Theorie oft an der Praxis vorbei geht. Würde Vererbung gleichwertig sein mit "Nichtvererbung" so hätte es Vererbung nie in diesem Umfang gegeben.
Was natürlich Blödsinn ist. Denn Vererbung ist eben _ein_ beliebtes Mittel - aber nicht zwangsläufig _das_ Mittel schlecht hin.
Wenn dir Heliums Beispiele zu 'realitätsfern' sind, dann schau dir doch mal C++ an. Hier kann man zB Interfaces nahezu gänzlich ohne Vererbung machen, indem man statische Polymorphie mit Templates verwendet. Deshalb hat man in C++ ja auch größtenteils sehr flache Vererbungshierachien.
Man muss also nicht von einem Interface erben um es zu implementieren.
Wenn wir uns jetzt Python ansehen:
da kann man eine Klasse erweitern ohne von ihr zu erben
Du hast in theoretischen Punkt recht aber an der Parxis geht das total vorbei
Was ist für dich denn 'Praxis'? Nice, Heron, BIL sind für dich nicht 'Praxis'?
Sicher, Vererbung ist heutzutage ein sehr beliebtes Mittel - allerdings gibt es OO Ansätze die ohne Vererbung auskommen.
Und in 10 Jahren wird man vielleicht garnicht mehr Objekt Orientiert Programmieren wollen, weil es dann etwas besseres gibt.
Insofern sehe ich nicht, dass Vererbung essentiell ist (schließlich ist Vererbung ja nur ein abstraktes Mittel)
Shade Of Mine schrieb:
aber dein Horizont reicht nicht weit genug
vielleicht schaue ich in eine andere Richtung
Und verschließt deine Augen?
Hast du dich jemals mit anderen OO Konzepten als sie C++, Java, C#, D,... verwenden auseinander gesetzt?
-
Man muss also nicht von einem Interface erben um es zu implementieren.
Wenn wir uns jetzt Python ansehen:
da kann man eine Klasse erweitern ohne von ihr zu erbenhm...heißt Vererben nicht vorhandenes Weiterbenutzen und erweitern?
Ein Interface ist doch was vorhandenes und wird dann irgendwo eingesetzt oder wie läuft es denn in C++?
Und wenn du eine Klasse erweiterst benutzt du doch bestimmt das vorherige mit oder? Also setzt Vorhandenes ein und erweiterst es auch. Ist das nicht Vererbung?Was verstehst du unter Vererben?
Was ist für dich denn 'Praxis'? Nice, Heron, BIL sind für dich nicht 'Praxis'?
Sag mir, wo werden diese Sprachen eingesetzt? Sind sie Weltweit verbreitet, Dominant? Werden damit 100.000 von Programmen geschrieben? Oder sind das nur Nischenprodukte?
Was ist für dich denn 'Praxis'?
Unter Praxis versteh ich etwas das umfassend eingesetzt wird. Wird es umfassend eingesetzt wurde es vom Makrt für gut befunden und es hat sich somit durchgesetzt. Das nenn ich Praxis.
Sicher, Vererbung ist heutzutage ein sehr beliebtes Mittel - allerdings gibt es OO Ansätze die ohne Vererbung auskommen.
Und in 10 Jahren wird man vielleicht garnicht mehr Objekt Orientiert Programmieren wollen, weil es dann etwas besseres gibt.
Es geht mir darum was belibt ist und was bevorzugt wird nicht was irgendwo irgend wann möglich ist. Beliebt ist immer das was gut ist oder? Irgendwas tolle muss es an dieser Vererbung geben das sie so oft eingesetzt wird oder?
Und verschließt deine Augen?
Hast du dich jemals mit anderen OO Konzepten als sie C++, Java, C#, D,... verwenden auseinander gesetzt?eigentlich studiere ich Technische Informatik und nicht Programmiersprachen.
Man kann nicht alles wissen und erst recht nicht in jede Richtung schauen.
-
Online schrieb:
Beliebt ist immer das was gut ist oder?
Ne. Popmusik ist ja auch beliebt.
...und Windows und Moorhuhn auch. 
-
Online schrieb:
Es geht mir darum was belibt ist und was bevorzugt wird nicht was irgendwo irgend wann möglich ist. Beliebt ist immer das was gut ist oder? Irgendwas tolle muss es an dieser Vererbung geben das sie so oft eingesetzt wird oder?
Beliebt ist es auch, nicht RAII in C++ zu benutzen...
Aber klar, wenn du nur von beliebtheit ausgehst, dann muss man auf Java/C# sehen. Dann sind die C++ Templates bald Schnee von Gestern und wir alle erben von bald von einer ultimativen ABC genannt Object.
Nicht dass ich jetzt Java schlecht machen will - aber es gibt halt nicht nur einen Weg etwas zu machen. Und der beliebteste ist nicht immer der beste.
zB ist das Python Konzept von Klassen mit self als ersten Parameter viel besser als das herkömmliche Methode gehört _in_ Klasse. Weil man in C++ immer das Problem:
v.sort() versus sort(v)
hat.
in Python hat man einfach nur
v.sort() und gut (bzw. man hat eigentlich beides, aber man muss nur eine Funktion dafür schreiben).Aber dennoch verwendet man das herkömmliche Prinzip, wo man eben sort(v) und v.sort() hat, weil es alle machen. Wie du siehst, ist "was alle machen" nicht zwangsläufig das beste.
-
@Online: Wo es dir so sehr auf die Beliebtheit ankommt, interessiert dich vielleicht der Tiobe Programming Community Index, der letztendlich Programmiersprachen anhand ihrer Popularität ordnen soll:
also... C solltest du mal lernen. Scheint äußerst beliebt zu sein, unterstützt aber nicht gerade OOP. (...gerade als TI-Student solltest du C auf jeden Fall daruf haben.)