Ist das nicht die gleiche Diskussion wie beim Goto? Es stellt sich doch die Frage, was Sprachfeatures sollen, deren Verwendung im Allgemeinen zum schlechten Code führen. Klar ist ihre versehentliche Verwendung ausgeschlossen, aber aus ihrer Existenz folgt auch zwangsläufig ihr Einsatz. Der Vorteil von Java, für Firmen die ihren Code für lange Zeit und von den Entwicklern die ihn produzierten unabhängig warten müssen, ist doch gerade, dass sie eine Garantie haben, dass solche Features nicht benutzt werden.
Java ist crap
|
Anmeldungsdatum: Beiträge: 1261 |
|
|
Ehemalige
Anmeldungsdatum: Beiträge: 4735 |
@phst: Was meinst Du damit, dass Python keinen richtigen Unicode-Support in der Standardbibliothek hat!? Es gibt einen eigenen Typ @Hello World: Ich bin auch kein Fan auf OOP "auf Teufel komm raus" oder noch schlimmer, Sprachen die einen zwingen alles in Klassen zu stecken. Das ist eben nicht immer sinnvoll. Auf der anderen Seite gibt's Sprachen mit dem Motto "alles ist Objekt", die einem trotzdem nicht für alles einen OOP-Stil aufzwingen. Je mehr man sich dem ursprünglichen OO-Modell nähert, dass ein Programm aus Objekten besteht, die über Nachrichten miteinander kommunizieren, und zum Beispiel Klassen ganz weg lässt, umso mehr kann man sich interessanterweise einem funktionalen Programmierstil annähern. Siehe zum Beispiel die Sprache Io, wo sogar die Kontrollstrukturen wie @Kinch: Also Bei Python ist Mehrfachvererbung möglich, aber man sieht sie selten im Einsatz, und wenn dann fast immer als Mixin-Klassen. Und auch so Sachen wie Metaklassen werden nicht ständig verwendet. |
|
Anmeldungsdatum: Beiträge: 5792 |
Kinch schrieb:
Im Falle von Mehrfachvererbung und Python ist dieser Schluss falsch. Man muss schon lange suchen, um Mehrfachvererbung in Python zu finden, während man in Javas Standardbibliothek keine zwei Sekunden braucht, um das erste Interface zu finden. Im Vergleich zu Javas Vererbungshierarchien ist Python gerade zu putzig. |
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 3620 |
Kinch schrieb:
Grady Booch (Miterfinder der UML) hat mal gesagt: "Multiple inheritance is like a parachute; you don't need it very often, but when you do it's essential". Man kann sein Design mit oder ohne Mehrfachvererbung versauen. Das ist aber kein Grund, diese nicht zu erlauben, denn manchmal stellt sie einfach die eleganteste Lösung für ein Problem dar. Wo kämen wir denn hin, wenn alles, womit man Mist bauen kann, verboten würde? Keine while-Schleifen mehr, weil man ja Endlosschleifen bauen kann? |
|
Anmeldungsdatum: Beiträge: 826 |
Hello World schrieb:
Wie der Handwerker wird der Entwickler auch kaum bewusst die Entscheidung treffen, Mehrfachvererbung falsch einzusetzen. Und wenn er das doch tut, ist nicht der Entwickler der Leittragende, sondern der, der die Software einsetzt. Aus diesem Grunde halte ich gewisse Schutzmechanismen für essentiell, besonders wenn Dritte dadurch zu Schaden kommen können. Lunar schrieb:
Vorsicht, die Implementierung mehrerer Interfaces ist keine Mehrfachvererbung. Es ist mit Interfaces unmöglich, die Probleme der Mehrfachvererbung umzusetzen, siehe folgenden Pseudocode: class KlasseA {
print() {
gebeAus("Hello World");
}
}
class KlasseB {
print() {
gebeAus("Hello Lunar");
}
}
class KlasseC extends KlasseA, KlasseB { }Was gibt KlasseC aus, wenn ich klasseC.print() aufrufe, "Hello World" oder "Hello Lunar"? |
|
Anmeldungsdatum: Beiträge: 371 |
ryiden schrieb:
Ämmm wenn ein entwickler absichtichlich schlechte Software entwickeln möchte schafft der das. Egal mit welcher Sprache! |
|
Anmeldungsdatum: Beiträge: 2420 |
ryiden schrieb:
Probier’s doch aus ☺ |
|
Anmeldungsdatum: Beiträge: 826 |
Wenn man von der Absicht ausgeht, dann trifft das durchaus zu. |
|
Anmeldungsdatum: Beiträge: 371 |
Wenn ich etwas bewusst tue (wie du schreibst) ist das dann nicht absichtlich?! |
|
Anmeldungsdatum: Beiträge: 826 |
Das könnte ich tun, aber dann würde ich nur ein Compiler-Abhängiges Ergebnis feststellen. CompilerA entscheidet sich für die print-Methode aus KlasseA, CompilerB für die print-Methode aus KlasseB und CompilerC bemerkt das Problem und gibt einen Fehler aus. |
|
Anmeldungsdatum: Beiträge: 826 |
Nilres schrieb:
Ich habe kaum bewusst geschrieben, das ist genau das Gegenteil 😉 |
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 3620 |
ryiden schrieb:
Bei solchen Fragen mit Pseudocode anzukommen ist ziemlich sinnlos, da solche Sachen eben in erheblichem Maße davon abhängen, wie das in der jeweiligen Sprache geregelt ist. In C++ lässt sich so etwas gar nicht übersetzen, und das ist nicht compilerspezifisch, sondern im Standard festgelegt. mi.cc:17: error: request for member ‘print’ is ambiguous mi.cc:8: error: candidates are: void KlasseB::print() mi.cc:3: error: void KlasseA::print() |
|
Anmeldungsdatum: Beiträge: 826 |
Falsch, mit Deinem C++-Compiler lässt sich so etwas nicht übersetzen. Ich zitiere mich an dieser Stelle mal selbst:
Als ich damals mit meiner Ausbildung angefangen hatte, wurden solche Fehler vom C++-Compiler noch nicht bemerkt. Kannst Du mal die Stelle im Standard posten, in der das festgelegt ist? Es kann zwar sein, dass ältere C++-Compiler solche Standards noch nicht vollständig umgesetzt haben, aber ich würde das gerne mal vergleichen. EDIT: Hat sich erledigt, die Sprachnorm gibt es erst seit 1998 und es hat wohl mehrere Jahre gedauert, bis alles umgesetzt wurde. |
|
Anmeldungsdatum: Beiträge: 371 |
ryiden schrieb:
Wöde ich mal so verstehen das du das gegenteil von kaum bewusst meinst ⇒ bewusst ⇒ absicht. |
|
Anmeldungsdatum: Beiträge: 826 |
Ein Synonym für kaum ist sehr wenig, somit ist kaum bewusst = unbewusst. |