Fehlen Java oder C ++ OO-Funktionen?

8

Ich bin daran interessiert, objektorientierte Programmierung auf akademischere und abstraktere Weise zu verstehen als ich es derzeit tue und möchte wissen, ob es objektorientierte Konzepte gibt, die Java und C ++ nicht implementieren.

Ich weiß, dass keine der Sprachen "reine" OO ist, aber ich bin daran interessiert, was (wenn überhaupt) ihnen fehlt, nicht was sie extra haben.

    
tsvallender 16.03.2010, 19:33
quelle

9 Antworten

8

Von meinem Kopf weg würde ich sagen:

Ken 16.03.2010, 19:50
quelle
15

In den Worten von Alan Kay , dem Erfinder des Begriffs "Objektorientierung" :

  

OOP bedeutet für mich nur Messaging, lokal   Aufbewahrung und Schutz und Verstecken   des Staatsprozesses und extrem   Spätbindung aller Dinge. Es kann sein   in Smalltalk und in LISP gemacht. Dort   sind möglicherweise andere Systeme, in denen   das ist möglich, aber mir ist das nicht bekannt   sie.

C ++ erfüllt offensichtlich das Kriterium "extrem spät bindend" nicht, und sowohl Java als auch C ++ erfüllen das Kriterium "Messaging" aufgrund ihrer starren Klassen- / Methodenstruktur nicht. So wie ich es verstehe, betrachtet das Konzept von Kay Methoden mit einem bestimmten Namen und einer bestimmten Signatur als eine bequeme Möglichkeit, Message-Handler zu implementieren, aber keineswegs die einzige.

Weitere interessante Aussagen aus derselben Email:

  

Ich mochte den Weg Simula I oder nicht   Simula 67 hat Erbe [...] Also ich   beschlossen, die Erbschaft als a wegzulassen   eingebaute Funktion, bis ich es verstanden habe   besser.

und

  

Der Begriff "Polymorphismus" wurde eingeführt   viel später (ich denke von Peter Wegner)   und es ist nicht ganz gültig, da es wirklich aus der Nomenklatur von Funktionen kommt, und ich wollte ein bisschen mehr als Funktionen.

    
Michael Borgwardt 16.03.2010 19:37
quelle
3

Beide unterscheiden zwischen Primitiven und Objekten und sind daher auch nicht rein objektorientiert.

    
JRL 16.03.2010 19:40
quelle
2

Es gibt eine andere Art, über objektorientierte Programmierung nachzudenken, die sich von dem klassenbasierten System in Java und C ++ unterscheidet. Die prototypbasierte Programmierung wird von JavaScript verwendet. Wenn Sie sich die gesamte Palette der OOP-Stile anschauen möchten, sollten Sie sich einen Blick darauf werfen: Ссылка

    
Benson 16.03.2010 19:39
quelle
1

Java: Primitive Typen sind keine Objekte.

    
Tuomas Pelkonen 16.03.2010 19:37
quelle
1

Java verfügt nicht über mehrfache Vererbung, aber einige mögen sagen, dass dies eher ein Segen ist, da es erfordert, dass Benutzer an die richtige Architektur denken. Sie können Interfaces und abstrakte Klassen verwenden, um dies zu umgehen.

Die Mehrfachvererbung wurde für die folgenden Probleme kritisiert, die sie in bestimmten Sprachen verursacht, insbesondere in C ++:

  • Semantische Ambiguität oft zusammengefasst als das Diamantenproblem .
  • Nicht explizit erben können mehrere Male von einer einzigen Klasse
  • Reihenfolge der Vererbung, die die Klasse ändert Semantik
Chris Dennett 16.03.2010 19:35
quelle
1

Das wichtigste Merkmal der objektorientierten Programmierung ist die Kapselung. Das Ausblenden von Implementierungsdetails ist offensichtlich entscheidend für das Schreiben von wartbarem Code.

Da Sie in C ++ unkontrollierte Zeiger haben, ist es für ein schlecht geschriebenes Objekt möglich, buchstäblich alles mit einem anderen zu tun. Dies bedeutet, dass die Kapselung unterbrochen ist und Fehler nur schwer zu finden sind.

Java hat dieses Problem nicht, aber es fehlt grundlegende Konsistenz. Das ist nicht unbedingt ein objektorientiertes theoretisches Feature, aber in der Lage zu sein zu deklarieren, dass eine Methode schreibgeschützt ist oder dass ein Objekt schreibgeschützt ist, ist ein fantastischer Zuverlässigkeitsverbesserer in C ++, der nicht in Java ist.

Last, javas Template-Mechanismus ist eine blasse Imitation von C ++. Nicht in der Lage zu sein, Klassen zu parametrisieren ist ein großer Verlust für Java.

Da Java Zeiger auf Methoden nicht unterstützt und die Reflektion zu langsam ist, erzwingt es die Verwendung vieler kleiner Objekte, wenn ein Funktionszeiger dies tun würde. Manche mögen das für eine gute Sache halten.

    
Dov 19.03.2010 04:54
quelle
0

Java und C ++ erlauben prozedurale Programmierung. Das kann für einige Leute als ein Minus angesehen werden.

    
fastcodejava 16.03.2010 19:35
quelle
0

Die meisten interpretierten Sprachen erfüllen die spätbindenden Anforderungen. In Perl können Sie Code aus einer Datenbanktabelle extrahieren, ihn in den Interpreter werfen und dann Objekte der neuen Klasse instanziieren, die Sie gerade in das Programm eingeführt haben.

Erfüllt Python Kay's Definition von OOP vollständig? Ich habe nicht genug Arbeit in Python getan, um sicher zu sein. Ich vermute nicht, da Python 'native Typen' hat, die keine Objekte sind.

    
Wexxor 16.03.2010 19:54
quelle

Tags und Links