it-swarm.com.de

Was sind die Vorteile einer "reinen" objektorientierten Sprache gegenüber einer nicht reinen objektorientierten Sprache?

Meine erste Programmiersprache ist C++. C++ ist eine Multi-Paradigma-Programmiersprache. Eines der von C++ unterstützten Paradigmen ist die objektorientierte Programmierung. Ich möchte sagen, dass ich die allgemeine Idee und die Vorteile von OOP, wie in C++ veranschaulicht) verstehe.

Ich habe vor kurzem begonnen, ein Projekt in Android Studio. Eine der Sprachen Android Studio unterstützt Java ist. Java ist) Eine 'reine' objektorientierte Programmiersprache. Pure steht in erschreckenden Anführungszeichen, da Java primitive Datentypen unterstützt).

Meine Frage ist, warum Java voll wird OOP wo C++ nicht das Bedürfnis hat, in diesem Ausmaß zu gehen. Der Ansatz von C++ scheint "vernünftiger" zu sein Ich bin mir jedoch sicher, dass es bestimmte Gründe gibt, warum Java macht es so wie es macht. Wo alles ein Objekt ist, muss alles als öffentlich, geschützt usw. deklariert werden. Alles ist lose verwendet.

3
FernandoH-G

Java ist in der Tat objektorientierter als C++:

  • Das Objektmodell von Java ist unabhängig vom zugrunde liegenden Speichermodell.
  • Einige objektorientierte C++ - Funktionen erfordern ein Verständnis des zugrunde liegenden Speichermodells. Um beispielsweise Objekte dynamisch zu erstellen/löschen, benötigen Sie Zeiger oder intelligente Zeiger, um den Unterschied zwischen der Adresse des Objekts und dem Objekt selbst zu machen. Außerdem können Sie in C++ Code unabhängig von jeder Klasse erstellen.

Aber seien wir provokativ: Java ist keine reine objektorientierte Sprache:

  • nicht alles ist ein Objekt in Java: Grundtypen wie int werden nicht als Objekte behandelt und erben nicht von Object. Sie müssten einen Wrapper der Klasse Integer verwenden, um dies zu erreichen.
  • statische Methoden können in einer Klasse definiert werden, sind jedoch nicht an ein bestimmtes Objekt gebunden. Diese Funktion macht Java eher zu einer klassenorientierten als zu einer objektorientierten Sprache.

Die erhöhte Objektorientierung hat einige Vorteile:

  • erhöhte Portabilität (d. h. Sie verlassen sich nur auf ein abstraktes Objektmodell).
  • konsistenz der Sprachkonstrukte (alles ist ein Objekt).

Ich weiß nicht, ob es viele reine OO Sprachen) gibt. Smalltalk wäre ein guter Kandidat. Es erfordert jedoch einen Paradigmenwechsel, der sogar einige einfach macht Code schwer zu lesen.

Am Ende ist OO wie Sauerstoff (O₂): In angemessener Dosis erzeugt es frische Luft und ermöglicht ein komplexes Leben; in reiner Konzentration entzieht es der Luft andere nützliche Dinge. Dies trägt sicherlich zur Erklärung der derzeitige Dominanz der Multi-Paradigmen-Sprachen.

5
Christophe

Der Vorteil einer "reinen" Sprache eines Paradigmas ist, dass Sie sich (im Idealfall) nicht ständig daran erinnern müssen, dem Paradigma zu folgen, da die Sprache Sie nichts tun lässt, wenn Sie dies nicht tun.

Zum Beispiel Java ist eine 'reine' Struktursprache. Dies ist nur eine ausgefallene Art zu sagen, dass es kein Goto gibt. Stattdessen haben Sie while, do while, for, break und continue. None von denen Sie brauchen, wenn Sie gehen. Es sind die Dinge, die Sie nicht in einer Sprache tun können, die es "rein" machen.

Was ist das für objektorientierte Sprachen? Primitive. Wenn Sie möchten, dass Ihre Sprache rein objektorientiert ist, muss alles ein Objekt sein. Keine Grundelemente.

Wenn Sie das unbefriedigend finden, beschuldige ich Sie nicht. Das größte Merkmal von OOP ist die Weitergabe polymorpher Nachrichten, aber das Fehlen von Grundelementen ist das, was Sprachen berücksichtigen müssen 'pure' OO .

Leider bedeutet dies, dass selbst 'pure' OOP Sprachen Sie nicht zwingen, die besten Funktionen von OO zu verwenden. Sie zwingen Sie nur, die OOP) zu verwenden = Funktionen, die erzwungen werden können.

6
candied_orange

Eine wichtige Überlegung beim Sprachdesign ist die Komplexität. Wie viele Funktionen hat die Sprache? Wie schwer ist es zu lernen? Indem Sie die Anzahl der Funktionen reduzieren, erleichtern Sie normalerweise das Erlernen der Sprache.

Wenn Sie einem einzelnen Paradigma folgen, können Sie Features entfernen.

Dann gibt es Programmdesign. Als Programmierer müssen Sie darüber nachdenken, wie Sie Ihr Programm strukturieren können. Wenn Ihre Programmiersprache Ihnen viel Flexibilität in der Struktur bietet, können Sie am Ende zu einem besseren Design gelangen, aber Sie müssen auch über mehr Möglichkeiten nachdenken. Das Arbeiten in einer eingeschränkteren Sprache fühlt sich oft produktiver an (und kann es sogar sein), denn selbst wenn Ihr Design nicht so optimal ist wie das, das Sie in einer flexibleren Sprache hätten erreichen können, sind Sie schneller dort angekommen.

Indem Sie einem einzelnen Paradigma folgen, optimieren Sie den Anwendungsentwurfsprozess.

Wenn es weniger Möglichkeiten für das Anwendungsdesign gibt und Sie auf eine unbekannte Codebasis stoßen, sollte es daher einfacher sein, das Design zu verstehen, da es nur so viele Möglichkeiten gibt. Dies erleichtert die Einführung neuer Programmierer in das Entwicklungsteam.

Indem Sie einem einzelnen Paradigma folgen, schränken Sie den Entwurfsraum ein und erleichtern so das Einbinden neuer Teammitglieder.

2
Sebastian Redl

Im Fall von Java und C++ basierte C++ auf C, sodass alle Nicht-OO-Inhalte kostenlos zur Verfügung standen. Das Entfernen hätte Zeit und Geld gekostet und viel verdient Es ist schwieriger, Software von C nach C++ zu verschieben.

Im Fall von Java hätten sie zusätzliche Arbeit in der Sprache, im Compiler und in der virtuellen Maschine hinzufügen müssen, damit Nicht-OO-Code funktioniert. JNI ist eine Art Nicht-OO und das wurde erst später hinzugefügt.

0
gnasher729