Wann werden Objekte oder etwas anderes in einer bestimmten Programmiersprache als "erstklassig" bezeichnet und warum? Worin unterscheiden sie sich von Sprachen, in denen sie nicht sind?
BEARBEITEN. Wenn man sagt "alles ist ein Objekt" (wie in Python), meint er dann tatsächlich, dass "alles erstklassig ist"?
python
language-agnostic
Federico A. Ramponi
quelle
quelle
Antworten:
Kurz gesagt bedeutet dies, dass die Verwendung des Objekts nicht eingeschränkt ist. Es ist das gleiche wie bei jedem anderen Objekt.
Ein erstklassiges Objekt ist eine Entität, die dynamisch erstellt, zerstört, an eine Funktion übergeben, als Wert zurückgegeben werden kann und über alle Rechte verfügt, die andere Variablen in der Programmiersprache haben.
Quelle .
In C ++ sind Funktionen selbst jedoch keine erstklassigen Objekte:
In C ++ sind Klassen keine erstklassigen Objekte, sondern Instanzen dieser Klassen. In Python sind sowohl die Klassen als auch die Objekte erstklassige Objekte. ( Weitere Informationen zu Klassen als Objekte finden Sie in dieser Antwort .)
Hier ist ein Beispiel für erstklassige Javascript-Funktionen:
Quelle .
Entitäten, die keine erstklassigen Objekte sind, werden als Objekte zweiter Klasse bezeichnet. Funktionen in C ++ sind zweitklassig, da sie nicht dynamisch erstellt werden können.
In Bezug auf die Bearbeitung:
Der Begriff Objekt kann lose verwendet werden und bedeutet nicht, erstklassig zu sein. Und es wäre wahrscheinlich sinnvoller, das gesamte Konzept als "erstklassige Entitäten" zu bezeichnen. Aber in Python wollen sie alles erstklassig machen. Ich glaube, die Absicht der Person, die Ihre Aussage gemacht hat, bedeutete erstklassig.
quelle
"Wenn man sagt" alles ist ein Objekt "(wie in Python), meint er dann tatsächlich, dass" alles erstklassig ist "?"
Ja.
Alles in Python ist ein richtiges Objekt. Sogar Dinge, die in anderen Sprachen "primitive Typen" sind.
Sie finden, dass ein Objekt wie
2
tatsächlich eine ziemlich reichhaltige und ausgefeilte Oberfläche hat.Da in Python alles ein erstklassiges Objekt ist, gibt es relativ wenige undurchsichtige Sonderfälle.
In Java gibt es beispielsweise primitive Typen (int, bool, double, char), die keine richtigen Objekte sind. Deshalb muss Java Integer, Boolean, Double und Character als erstklassige Typen einführen. Anfängern kann dies schwer beizubringen sein - es ist nicht offensichtlich, warum sowohl ein primitiver Typ als auch eine Klasse nebeneinander existieren müssen.
Dies bedeutet auch, dass die Klasse eines Objekts - selbst - ein Objekt ist. Dies unterscheidet sich von C ++, wo die Klassen zur Laufzeit nicht immer eine bestimmte Existenz haben.
Der Typ von
2
ist dastype 'int'
Objekt, das Methoden, Attribute und einen Typ enthält.Der Typ eines eingebauten Typs wie
int
ist dastype 'type'
Objekt. Dies hat auch Methoden und Attribute.quelle
int
. Also die "alten" versus "neuen" Klassen (und in 3 gibt es keine alten Klassen mehr)."First Class" bedeutet, dass Sie sie auf die übliche Weise bearbeiten können. In den meisten Fällen bedeutet dies nur, dass Sie diese erstklassigen Bürger als Argumente an Funktionen übergeben oder von Funktionen zurückgeben können.
Dies ist für Objekte selbstverständlich, für Funktionen oder sogar Klassen jedoch nicht immer so offensichtlich:
Dies ist ein Beispiel in C #, wo Funktionen eigentlich keine erstklassigen Objekte sind. Der obige Code verwendet daher eine kleine Problemumgehung (nämlich einen generischen Delegaten, der aufgerufen wird
Action<>
), um eine Funktion als Argument zu übergeben. In anderen Sprachen wie Ruby können sogar Klassen und Codeblöcke als normale Variablen behandelt werden (oder im Fall von Ruby Konstanten).quelle
Aus einer Folie in Struktur und Interpretation von Computerprogrammen , Vorlesung 2A (1986), in der wiederum Christopher Stracey zitiert wird :
Die Rechte und Privilegien erstklassiger Bürger:
quelle
IMO ist dies eine dieser Metaphern, mit denen Dinge in einer natürlichen Sprache beschrieben werden. Der Begriff wird im Wesentlichen im Zusammenhang mit der Beschreibung von Funktionen als erstklassige Objekte verwendet.
Wenn Sie eine objektorientierte Sprache in Betracht ziehen, können wir Objekten verschiedene Funktionen zuweisen, z. B. Vererbung, Klassendefinition, Fähigkeit zur Übergabe an andere Codeabschnitte (Methodenargumente), Fähigkeit zur Speicherung in einer Datenstruktur usw. Wenn wir dies tun können Ähnlich wie bei einer Entität, die normalerweise nicht als Objekt betrachtet wird, wie Funktionen im Fall von Java-Skripten, werden solche Entitäten als erstklassige Objekte betrachtet.
Erste Klasse bedeutet hier im Wesentlichen, nicht als zweite Klasse behandelt zu werden (mit verschlechtertem Verhalten). Im Wesentlichen ist die Verspottung perfekt oder nicht zu unterscheiden.
quelle