Es scheint, dass es viele Leute gibt, die sagen, dass Java alt und vom Standpunkt der "Imadoki" -Sprache nicht cool ist. Andererseits ist meine Behauptung [^ 1] von Heisei, dass "Nein, Java strebt in erster Linie ein großartiges Medium an, also ist das in Ordnung", C ++ - Design. Und Evolution “ist die Basis für lose Poesie.
[^ 1]: Ich denke nur
Es versteht sich von selbst, dass Java von C ++ beeinflusst wird. Und natürlich hat Java einige Möglichkeiten von C ++ und einige nicht. Wenn wir "C ++ Design and Evolution" lesen, das in seinen eigenen Worten erzählt, wie Strausstrap C ++ hergestellt hat, können wir auch sehen, wie Java den aktuellen Pfad gewählt hat. Überlegen. Abgesehen davon sollte "Design and Evolution of C ++" von jedem Programmierer gelesen werden, der Programmiersprachen liebt, nachdem er die Bewusstseinsbarriere überwunden hat, dass "jede Sprache sich bewegen kann", unabhängig davon, ob C ++ ausgeführt werden kann. Ich denke, es ist ein gutes Buch.
Das Problem ist, dass neue Produkte nicht mehr verfügbar sind. Beim Schreiben dieses Artikels habe ich ihn zum ersten Mal seit einiger Zeit aus der Bibliothek ausgeliehen und gelesen ...
Sofern nicht anders angegeben, stammen die folgenden Anführungszeichen aus "C ++ Design and Evolution".
Wie Sie alle wissen, verfügt Java über Klassen, abstrakte Klassen und Schnittstellen, aber ich bin sicher, dass einige von Ihnen sich Sorgen über die Verwendung der einzelnen Klassen machen, insbesondere über abstrakte Klassen und Schnittstellen.
Funktionsdefinitionen werden normalerweise "außerhalb" (außerhalb der Klassendeklaration) angegeben. Das heißt, die Klassendeklaration (...) ist rein wie eine Schnittstellenspezifikation.
In Java ist dies Klasse und Schnittstelle, nicht wahr? Man kann sagen, dass die Schnittstelle nur so vorbereitet wurde, dass sie den Spezifikationen der Schnittstelle entspricht.
C ++ - Benutzern wurde nicht korrekt erklärt, dass abgeleitete Klassen verwendet werden, um die Schnittstelle von der Implementierung zu trennen. Ich habe versucht, es zu erklären, aber es schien nicht den Zweck zu vermitteln. Vielleicht liegt der Hauptgrund für diesen Fehler darin, dass sich viele (die meisten?) C ++ - Programmierer und andere an C ++ interessierte Programmierer in Klassendeklarationen ausdrücken, die Schnittstellen angeben - eine der Implementierungen von Objekten. Ich hätte nie gedacht, dass ich einen Club schreiben könnte und dass ich das tun müsste. Wenn can als Muss missverstanden wird und der Ausdruck "immer" (Implementierung) in der Klassendeklaration geschrieben ist, verschwinden die Vorteile der abgeleiteten Klasse, die ich zu erklären versuchte. Natürlich.
Ja, Sie können die Implementierung auch in die Schnittstelle schreiben. Dies ist eine abstrakte Klasse.
Ich bin nicht sicher, ob das Java-Klassensystem tatsächlich in Übereinstimmung mit der Idee von Strawstrap entworfen wurde, aber wenn ja, wäre es besser, mit Schnittstelle zu entwerfen und mit Klasse, abstrakte Klasse zu implementieren. Ich denke, es ist möglich zu glauben, dass es keinen besonderen Bedarf gab. Java scheint sich jedoch dafür entschieden zu haben, den Teil, den C ++ als Ergebnis hatte, als abstrakte Klasse zu verwenden. "Der Ausdruck - ein Teil der Implementierung des Objekts - kann in die Klassendeklaration geschrieben werden, die die Schnittstelle angibt." Scheint zu sein. Ich denke, es gab eine Option, keine abstrakte Klasse zu haben, aber Java hat es gewagt.
Es gibt mehrere Gründe, warum wir keinen großen Unterschied zu C gemacht haben. Die Integration der Eignung von C für die Systemprogrammierung in die Fähigkeit von Simula, Programme zu organisieren, war eine große Herausforderung. Das Hinzufügen wichtiger Funktionen anderer Sprachen nacheinander hätte sich in eine "Einkaufslisten" -Sprache verwandelt und eine nicht fokussierte Sprache erzeugt.
Wenn wir die implementierten Technologien von C und Simula von Anfang an ignoriert hätten, hätte die Reife von C mit Klassen und C ++ länger gedauert.
Ich denke, dies sind wahrscheinlich Geschichten zur Sprachimplementierung, aber selbst in Bezug auf Sprachspezifikationen wäre es für die Verbreitung von großer Bedeutung gewesen, nicht zu ändern, was bereits vorhanden ist.
Die C-Syntax, die ich am meisten hasse, ist die Deklarationssyntax. Viele Menschen sind verwirrt, weil es sowohl Präfix- als auch Suffixoperatoren für die Deklaration gibt.
Die negative Reaktion der Benutzer auf diesen Teil der Änderung war sehr stark.
Auch in Java zum Beispiel die Deklaration eines Arrays
String[] values = null;
Obwohl diese Notation empfohlen wird
String values[] = null;
Es ist in Ordnung, der Variablen []
hinzuzufügen
Was, wenn
//Auch ohne Leerzeichen
String[]values = null;
//Auch wenn es am Anfang der Variablen bleibt
String []values = null;
//Auch wenn es unheimlich ist
String [] values = null;
//Auch wenn Sie eine Linie brechen
String values
[] = null;
All dies wird ebenfalls akzeptiert. Ich bin mir wieder sicher, dass es die Wahl gab, nur die erste Notation zuzulassen, Java jedoch nicht. Java hat sich auch dafür entschieden, keine Syntaxänderungen vorzunehmen, die Straustrap in C ++ nicht durchführen konnte.
Außerdem, warum gibt es einen primitiven Typ und er ist nicht so rein wie OOPL? Ich bin sicher, dass es viele Teile gibt, die mich dazu bringen, etwas zu sagen, aber ich bin sicher, dass Java alles weiß und es auswählt. Für immer und ewig stumpf und gemäßigt bleiben.
Ich liebe Java so.
Recommended Posts