Was bedeutet "Orthogonalität", wenn über Programmiersprachen gesprochen wird?
Was sind einige Beispiele für Orthogonalität?
Was bedeutet "Orthogonalität", wenn über Programmiersprachen gesprochen wird?
Was sind einige Beispiele für Orthogonalität?
Antworten:
Orthogonalität ist die Eigenschaft, die bedeutet, dass "Ändern von A B nicht ändert". Ein Beispiel für ein orthogonales System wäre ein Funkgerät, bei dem durch Ändern des Senders die Lautstärke nicht geändert wird und umgekehrt.
Ein nicht orthogonales System wäre wie ein Hubschrauber, bei dem eine Änderung der Geschwindigkeit die Richtung ändern kann.
In Programmiersprachen bedeutet dies, dass beim Ausführen einer Anweisung nur diese Anweisung ausgeführt wird (sehr wichtig für das Debuggen).
Es gibt auch eine bestimmte Bedeutung, wenn auf Befehlssätze Bezug genommen wird .
Aus Eric S. Raymonds "Art of UNIX Programming"
Orthogonalität ist eine der wichtigsten Eigenschaften, die dazu beitragen können, auch komplexe Designs kompakt zu gestalten. In einem rein orthogonalen Design haben Operationen keine Nebenwirkungen. Jede Aktion (ob es sich um einen API-Aufruf, einen Makroaufruf oder eine Sprachoperation handelt) ändert nur eine Sache, ohne andere zu beeinflussen. Es gibt nur eine Möglichkeit, jede Eigenschaft des von Ihnen gesteuerten Systems zu ändern.
Denken Sie daran, dass es in der Lage ist, eine Sache zu ändern, ohne einen unsichtbaren Einfluss auf einen anderen Teil zu haben.
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:
int[] fun(); // you can't return a static array.
// Of course you can return a pointer, but the langauge allows passing arrays.
// So, it is unorthognal in case.
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.
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.
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:
str.split
zum Teilen eines Strings und
len (str)
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
Klon (obj)
oder
obj.clone
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.
;)
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.
Aus Wikipedia :
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 ein nicht orthogonales Design durch seine Lenkung das Bremsen (z. B. elektronische Stabilitätskontrolle) oder durch die Geschwindigkeitsanpassung der Federung beeinflussen. [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.
Um es so einfach wie möglich auszudrücken: Zwei Dinge sind orthogonal, wenn eine Änderung keine Auswirkung auf die andere hat.
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).
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. ;)
Orthogonalität in der Programmierung:
Orthogonalität ist ein wichtiges Konzept, das sich mit der Frage befasst, wie eine relativ kleine Anzahl von Komponenten auf relativ kleine Weise kombiniert werden kann, um die gewünschten Ergebnisse zu erzielen. Es ist mit Einfachheit verbunden; Je orthogonaler das Design, desto weniger Ausnahmen. Dies erleichtert das Lernen, Lesen und Schreiben von Programmen in einer Programmiersprache. Die Bedeutung eines orthogonalen Merkmals ist unabhängig vom Kontext. Die Schlüsselparameter sind Symmetrie und Konsistenz (zum Beispiel ist ein Zeiger ein orthogonales Konzept).
von Wikipedia
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:
A Reg1, memory_cell
AR Reg1, Reg2
wobei Reg1 und Reg2 Register darstellen. Die Semantik davon ist
Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)
Der VAX-Additionsbefehl für 32-Bit-Ganzzahlwerte lautet
ADDL operand_1, operand_2
dessen Semantik ist
operand_2 ← contents(operand_1) + contents(operand_2)
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).
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
Example : non-orthogonality
PASCAL: Funktionen können keine strukturierten Typen zurückgeben. Funktionale Sprachen sind stark orthogonal.
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.
Überprüfen Sie die Orthogonalität der Matrizen:
Orthogonalität kann auch in Bezug auf Matrizen sein,
Matrix *(transpose of matrix)= identity matrix.
Klicken Sie auf den folgenden Link, um ein YouTube-Video zur Orthogonalität anzuzeigen.
https://youtu.be/tNekLaxnfW8