Christoph: klassische OO? reine OO? ... oh, oh, ...

Beitrag lesen

Moin.

was waeren denn das fuer sprachen - zumindest in der prototypenfraktion laesst
sich doch nur »Self« zum vergleich heranziehen. in den klassenbasierten sprachen
bin ich nicht so bewandert, kenne mich eigentlich nur mit »JAVA« aus und wuesste
auch nicht, welche sprache(n) dort als *klassisch* bezeichnet werden koennte(n) -
vielleicht ja doch wieder C++ ?;-)

Klassen-basiert z.B. Smalltalk, Simula 87, Java/C#, C++ ;)
Prototypisch z.B. Self, Io, Lisaac(?)

... ist man es gewohnt, eine komplexe Vererbungshierarchie aufzubauen. In
JavaScript tut man (zumindest ich ;)) das in der Regel nicht. Daher ist
JavaScript keine klassische OO-Sprache.

au backe ... , ... wie die durch eine sprache zur verfuegung gestellten konzepte
schlussendlich genutzt werden, steht und faellt doch zuallerersteinmal mit dem
anwendungs(um)feld, der art der dortigen problemstellungen und deren moeglicher
komplexitaet sowie der grundsaetzlichen loesbarkeit einer aufgabe innerhalb der
vorhandenen rahmenbedingungen.

Wie baut man denn in JavaScript *nur mit Bordmitteln* Vererbungs_hierarchien_?

und wenn ich Deiner argumentation folgte, und »Self« als klassisch klassenlose
OO-sprache heranzoege, zerfiele doch das argument komplexer vererbungshierarchien
als kriterium klassischer 00-sprachen gleich wieder.

In Self ist es einfach möglich, eine Vererbungshierarchie mit Tiefen > 1 zu bauen, in JavaScript nicht.

Weiterhin wird man in JavaScript nicht dazu gezwungen, objektorientiert zu
Programmieren. Also ist es keine reine OO-Sprache, obwohl Objekte ein integraler
Bestandteil des Sprachkerns sind.

in welchen sprachen der OOP wird man denn dazu gezwungen 00 zu programmieren?
und dass mein ich nicht als theoretischen scheingegenargument. OO ist eine denke,
ein geistiger werkzeugkasten, um komplexe probleme moeglichst effizient zu loesen.
jede sprache, die es mir ermoeglicht, aufgaben auf dem wege der OOP zu loesen,
darf auch als sprache der OO bezeichnet werden.

Also ist laut deinen Aussagen C eine OO-Sprache. Gewagt.

und wenn eine sprache auch noch anderen programmierparadigmen genuegt, disqualifiziert
sie dies dann natuerlich fuer das brustschildchen *_reine_ objektorientierte sprache*.

Definitionssache. Für mich ist eine Multiparadigmen-Sprache keine reine OO-Sprache, genausowenig, wie bereits Scheme keine rein funktionale Sprache im eigentlichen Sinn ist (vergleiche die Links meines vorletzten(?) Posts).

was bleibt dann aber zur etikettierung noch uebrig? - »Smalltalk«? ...

Richtig.

... ich weis es nicht, und ich finde es ebenfalls muessig, soetwas auszudiskutieren.
aber wenn man dies fuer eine sprache - wie hier zum bsp. fuer JavaScript - tut, dann
sollten die argumente schon stichhaltiger sein.

Ich halte meine Argumentation durchaus für stichhaltig ;)

man kann aeusserst effizient programmieren, wenn man sich gar nicht erst
auf die von »constructor.prototpe« als fata morgana unscharf am horizont
versprochene emulation einer klassenbasierenden vererbung einlaesst.

... man bleibe in seiner komoden funktionalen oase und preise deren
    immerfrischen quellen [apply] und [call].

Aber dieser Programmierstil ist dann nicht mehr OO, da Daten und Funktionalität
nicht in einem Paket zusammengefasst werden, sondern Funktionalität aus beliebiger
Quelle nach gutdünken hinzugemischt wird. ...

was ist an schnittstellenvererbung und objektkomposition nicht OO?

Vielleicht habe ich nur noch nicht herausgefunden, wie man in JavaScript objektorientiert programmiert? Meinst du mit Schnittstellenprogrammierung/Objektkomposition, dass man sich zunächst ein Schnittstellen-Objekt mit geeigneten Methoden baut und diese dann jedem Objekt, dass dies Schnittstelle implementiert, (bzw. dem Prototyp dessen Konstruktors) hinzufügt? Das wäre eine Möglichkeit, objektorientiert in JavaScript zu Programmieren (ich arbeite in der Regel nicht so).
Allerdings bietet JavaScript keine syntaktische Unterstützung für diesen Programmierstil (was sich natürlich problemlos in 3 Zeilen Code beheben lässt), aber damit wären wir wieder beim Argument, dass auch in C objektorientiert programmiert werden kann, nur halt ohne nette Syntax.

In meinen Augen sind nur die folgenden Alternativen konsistent:
  1. C ist keine OO-Sprache, JavaScript ist OO-Sprache (aber weder eine reine noch eine klassische)
  2. C ist OO-Sprache, JavaScript ist reine OO-Sprache

Ich tendiere stark zu 1.

[...]

(habe ich bereits erwähnt, dass ich JavaScript - trotz aller Ecken und Kanten - mag?).

... ich hab' dich auch lieb ...

Na jetzt kann ich wieder beruhigt schlafen ;)

Über die genaue Klassifikation der Sprache Java/ECMA-Script lässt sich sicherlich
noch herrlich, aber letztlich sinnlos weiterdiskutieren. Aber hey, solange man Spaß
daran hat und dank Bänderriss auch keine andere Freizeitbeschäftigung, stehe ich dazu
gerne weiter zur Verfügung ;)

... ach noe lass mal - wie gefaellt Dir denn »Ruby«s vererbungskonzept so?...  ;-)

Keine Ahnung, ich habe noch nie in Ruby programmiert. Aber man munkelt, es handle sich um eine ver-perl-ten Bastard von Smalltalk.

Christoph