Was bedeutet "Orthogonalität", wenn über Programmiersprachen gesprochen wird?
Was sind einige Beispiele für Orthogonalität?
language-agnostic
terminology
lexicon
AhmetB - Google
quelle
quelle
Aus Eric S. Raymonds "Art of UNIX Programming"
quelle
Denken Sie daran, dass es in der Lage ist, eine Sache zu ändern, ohne einen unsichtbaren Einfluss auf einen anderen Teil zu haben.
quelle
Wenn Sie eine Reihe von Konstrukten haben. Eine Sprache wird als orthogonal bezeichnet, wenn der Programmierer diese Konstrukte frei mischen kann. In C können Sie beispielsweise kein Array (statisches Array) zurückgeben. In diesem Fall wird C als unorthognal bezeichnet:
quelle
Im Allgemeinen ist Orthogonalität eine Beziehung zwischen zwei Dingen, so dass sie nur minimale Auswirkungen aufeinander haben.
Der Begriff stammt aus der Mathematik, wo zwei Vektoren orthogonal sind, wenn sie sich im rechten Winkel schneiden.
Stellen Sie sich einen typischen zweidimensionalen kartesischen Raum vor (ein typisches Gitter mit X / Y-Achsen). Zeichnen Sie zwei Linien: x = 1 und y = 1. Die beiden Linien sind orthogonal. Sie können x = 1 ändern, indem Sie x ändern. Dies hat keine Auswirkungen auf die andere Zeile und umgekehrt.
In der Software kann der Begriff in Situationen verwendet werden, in denen es sich um zwei Teile eines Systems handelt, die sich unabhängig voneinander verhalten.
quelle
Die meisten Antworten sind sehr langatmig und sogar dunkel. Der Punkt ist: Wenn ein Werkzeug orthogonal ist, kann es zugunsten besserer Werkzeuge hinzugefügt, ersetzt oder entfernt werden, ohne alles andere zu vermasseln.
Es ist der Unterschied zwischen einem Schreiner mit einem Hammer und einer Säge, die zum Hämmern oder Sägen verwendet werden kann, oder einer neuartigen Hammer / Säge-Kombination, die Holz sägen und dann zusammenschlagen soll. Entweder funktioniert das Sägen und dann das Zusammenhämmern. Wenn Sie jedoch eine Aufgabe erhalten, die das Sägen erfordert, aber nicht das Hämmern, funktionieren nur die orthogonalen Werkzeuge. Wenn Sie schrauben anstatt hämmern müssen, müssen Sie Ihre Säge nicht wegwerfen, wenn sie orthogonal (nicht mit Ihrem Hammer verwechselt) ist.
Das klassische Beispiel sind Unix-Befehlszeilentools: Sie haben ein Tool zum Abrufen des Inhalts einer Festplatte (dd), ein anderes zum Filtern von Zeilen aus der Datei (grep), ein anderes zum Schreiben dieser Zeilen in eine Datei (cat) usw. Diese können alle nach Belieben gemischt und angepasst werden.
quelle
Wenn Sie über Projektentscheidungen zu Programmiersprachen sprechen, kann Orthogonalität als eine Möglichkeit angesehen werden, andere Dinge über diese Sprache für das vorherzusagen, was Sie in der Vergangenheit gesehen haben.
Zum Beispiel können Sie in einer Sprache Folgendes haben:
zum Teilen eines Strings und
für die Länge zu bekommen.
In einer orthogonaleren Sprache würden Sie immer str.x oder x (str) verwenden.
Wenn Sie ein Objekt klonen oder etwas anderes tun, wissen Sie, ob Sie es verwenden sollen
oder
Dies ist einer der Hauptpunkte bei orthogonalen Programmiersprachen. So vermeiden Sie, dass Sie das Handbuch konsultieren oder jemanden fragen.
Der Wikipedia-Artikel spricht mehr über Orthogonalität bei komplexen Designs oder einfachen Sprachen. Wie oben in einem Kommentar vorgeschlagen, spricht das Sebesta-Buch sauber über Orthogonalität.
Wenn ich nur einen Satz verwenden würde, würde ich sagen, dass eine Programmiersprache orthogonal ist, wenn ihre unbekannten Teile wie erwartet wirken, basierend auf dem, was Sie gesehen haben. Oder ... keine Überraschungen.
;)
quelle
aus Wikipedia :
Computerwissenschaften
Orthogonalität ist eine Eigenschaft des Systemdesigns, die die Machbarkeit und Kompaktheit komplexer Designs erleichtert. Die Orthogonalität garantiert, dass das Ändern des technischen Effekts, der von einer Komponente eines Systems erzeugt wird, keine Nebenwirkungen erzeugt oder auf andere Komponenten des Systems überträgt. Das entstehende Verhalten eines Systems, das aus Komponenten besteht, sollte streng durch formale Definitionen seiner Logik und nicht durch Nebenwirkungen kontrolliert werden, die sich aus einer schlechten Integration ergeben, dh einem nicht orthogonalen Design von Modulen und Schnittstellen. Orthogonalität reduziert die Test- und Entwicklungszeit, da es einfacher ist, Designs zu überprüfen, die weder Nebenwirkungen verursachen noch von diesen abhängen.
Zum Beispiel hat ein Auto orthogonale Komponenten und Steuerungen (z. B. beeinflusst das Beschleunigen des Fahrzeugs nichts anderes als die Komponenten, die ausschließlich mit der Beschleunigungsfunktion befasst sind). Andererseits kann bei einem nicht orthogonalen Design die Lenkung das Bremsen beeinflussen (z. B. elektronische Stabilitätskontrolle) oder die Geschwindigkeit die Federung optimieren. 1 Folglich wird diese Verwendung aus der Verwendung von Orthogonal in der Mathematik abgeleitet: Man kann einen Vektor auf einen Unterraum projizieren, indem man ihn separat auf jedes Mitglied eines Satzes von Basisvektoren projiziert und die Projektionen genau dann addiert, wenn die Basisvektoren sind zueinander orthogonal.
Ein Befehlssatz wird als orthogonal bezeichnet, wenn ein Befehl ein beliebiges Register in einem beliebigen Adressierungsmodus verwenden kann. Diese Terminologie ergibt sich aus der Betrachtung eines Befehls als Vektor, dessen Komponenten die Befehlsfelder sind. Ein Feld identifiziert die Register, die bearbeitet werden sollen, und ein anderes Feld gibt den Adressierungsmodus an. Ein orthogonaler Befehlssatz codiert alle Kombinationen von Registern und Adressierungsmodi eindeutig.
quelle
Aus Wikipedia :
Um es so einfach wie möglich auszudrücken: Zwei Dinge sind orthogonal, wenn eine Änderung keine Auswirkung auf die andere hat.
quelle
Berücksichtigen Sie als Beispiele für den Mangel an Orthogonalität in einer Hochsprache die folgenden Regeln und Ausnahmen in C. Obwohl C zwei Arten von strukturierten Datentypen aufweist, Arrays und Datensätze (Strukturen), können Datensätze von Funktionen zurückgegeben werden, Arrays jedoch nicht. Ein Mitglied einer Struktur kann ein beliebiger Datentyp sein, außer void oder eine Struktur desselben Typs. Ein Array-Element kann ein beliebiger Datentyp sein, außer void oder eine Funktion. Parameter werden als Wert übergeben, es sei denn, es handelt sich um Arrays. In diesem Fall werden sie tatsächlich als Referenz übergeben (da das Auftreten eines Array-Namens ohne Index in einem C-Programm als Adresse des ersten Elements des Arrays interpretiert wird).
quelle
In Programmiersprachen wird ein Programmiersprachenmerkmal als orthogonal bezeichnet, wenn es ohne Einschränkungen (oder Ausnahmen) begrenzt ist. Beispielsweise können in Pascal-Funktionen keine strukturierten Typen zurückgegeben werden. Dies ist eine Einschränkung für die Rückgabe von Werten von einer Funktion. Daher wird es als nicht orthogonales Merkmal betrachtet. ;)
quelle
Orthogonalität in der Programmierung:
von Wikipedia
quelle
Orthogonalität in einer Programmiersprache bedeutet, dass ein relativ kleiner Satz primitiver Konstrukte auf relativ kleine Weise kombiniert werden kann, um die Steuerungs- und Datenstrukturen der Sprache aufzubauen. Darüber hinaus ist jede mögliche Kombination von Grundelementen legal und sinnvoll. Betrachten Sie beispielsweise Datentypen. Angenommen, eine Sprache hat vier primitive Datentypen (Integer, Float, Double und Character) und zwei Typoperatoren (Array und Zeiger). Wenn die beiden Typoperatoren auf sich selbst und die vier primitiven Datentypen angewendet werden können, kann eine große Anzahl von Datenstrukturen definiert werden. Die Bedeutung eines orthogonalen Sprachmerkmals ist unabhängig vom Kontext seines Auftretens in einem Programm. (Das Wort orthogonal stammt aus dem mathematischen Konzept der voneinander unabhängigen orthogonalen Vektoren. ) Orthogonalität ergibt sich aus einer Symmetrie der Beziehungen zwischen Primitiven. Ein Mangel an Orthogonalität führt zu Ausnahmen von den Regeln der Sprache. In einer Programmiersprache, die Zeiger unterstützt, sollte es beispielsweise möglich sein, einen Zeiger zu definieren, der auf einen bestimmten in der Sprache definierten Typ verweist. Wenn Zeiger jedoch nicht auf Arrays zeigen dürfen, können viele potenziell nützliche benutzerdefinierte Datenstrukturen nicht definiert werden. Wir können die Verwendung der Orthogonalität als Entwurfskonzept veranschaulichen, indem wir einen Aspekt der Assemblersprachen der IBM Mainframe-Computer und der VAX-Serie von Minicomputern vergleichen. Wir betrachten eine einfache Situation: Hinzufügen von zwei 32-Bit-Ganzzahlwerten, die sich entweder im Speicher oder in Registern befinden, und Ersetzen eines der beiden Werte durch die Summe. Die IBM Mainframes verfügen zu diesem Zweck über zwei Anweisungen:
wobei Reg1 und Reg2 Register darstellen. Die Semantik davon ist
Der VAX-Additionsbefehl für 32-Bit-Ganzzahlwerte lautet
dessen Semantik ist
In diesem Fall kann jeder Operand ein Register oder eine Speicherzelle sein. Das VAX-Befehlsdesign ist insofern orthogonal, als ein einzelner Befehl entweder Register oder Speicherzellen als Operanden verwenden kann. Es gibt zwei Möglichkeiten, Operanden anzugeben, die auf alle möglichen Arten kombiniert werden können. Das IBM Design ist nicht orthogonal. Nur zwei von vier Operandenkombinationsmöglichkeiten sind zulässig, und die beiden erfordern unterschiedliche Anweisungen, A und AR. Das IBM Design ist eingeschränkter und daher weniger beschreibbar. Beispielsweise können Sie nicht zwei Werte hinzufügen und die Summe an einem Speicherort speichern. Darüber hinaus ist das IBM Design aufgrund der Einschränkungen und der zusätzlichen Anweisungen schwieriger zu erlernen. Orthogonalität ist eng mit Einfachheit verbunden: Je orthogonaler das Design einer Sprache ist, desto weniger Ausnahmen erfordern die Sprachregeln. Weniger Ausnahmen bedeuten einen höheren Grad an Regelmäßigkeit im Design, wodurch die Sprache leichter zu lernen, zu lesen und zu verstehen ist. Jeder, der einen wesentlichen Teil der englischen Sprache gelernt hat, kann die Schwierigkeit bezeugen, seine vielen Regelausnahmen zu lernen (z. B. i vor e, außer nach c).
quelle
Orthogonalität bedeutet den Grad, in dem Sprache aus einer Reihe unabhängiger primitiver Konstrukte besteht, die nach Bedarf kombiniert werden können, um ein Programm auszudrücken. Features sind orthogonal, wenn keine Einschränkungen hinsichtlich der Kombination bestehen
PASCAL: Funktionen können keine strukturierten Typen zurückgeben. Funktionale Sprachen sind stark orthogonal.
quelle
Die Grundidee der Orthogonalität ist, dass Dinge, die konzeptionell nicht miteinander verbunden sind, im System nicht miteinander verbunden werden sollten. Teile der Architektur, die wirklich nichts mit der anderen zu tun haben, wie die Datenbank und die Benutzeroberfläche, sollten nicht zusammen geändert werden müssen. Eine Änderung an einer sollte keine Änderung an der anderen bewirken.
quelle
Überprüfen Sie die Orthogonalität der Matrizen:
Orthogonalität kann auch in Bezug auf Matrizen sein,
Klicken Sie auf den folgenden Link, um ein YouTube-Video zur Orthogonalität anzuzeigen.
https://youtu.be/tNekLaxnfW8
quelle