Qu'est-ce que "Orthogonalité"?

Que signifie "orthogonalité" en parlant de langages de programmation?

Quels sont quelques exemples D'orthogonalité?

110
demandé sur George Stocker 2009-10-06 22:55:53

17 réponses

Orthogonality est la propriété qui signifie "Changer A ne change pas B". Un exemple d'un système orthogonal serait une radio, où changer la station ne change pas le volume et vice-versa.

Un système non orthogonal serait comme un hélicoptère où changer la vitesse peut changer la direction.

Dans les langages de programmation, cela signifie que lorsque vous exécutez une instruction, rien que cette instruction ne se produit (très important pour débogage).

Il y a aussi une signification spécifique en se référant à jeux d'instructions .

228
répondu C. Ross 2014-02-27 03:33:09

De Eric S. Raymond "art de la programmation UNIX"

L'orthogonalité est l'une des propriétés les plus importantes qui peuvent aider à rendre compactes les conceptions même complexes. Dans une conception purement orthogonale, les opérations n'ont pas d'effets secondaires; chaque action (qu'il s'agisse d'un appel D'API, d'une invocation de macro ou d'une opération de langage) ne change qu'une chose sans affecter les autres. Il y a une seule et unique façon de changer chaque propriété de n'importe quel système que vous contrôlez.

32
répondu Federico klez Culloca 2009-10-06 19:01:46

Pensez qu'il a été capable de changer une chose sans avoir un effet invisible sur une autre partie.

12
répondu Martin Beckett 2009-10-06 19:02:23

Globalement, l'orthogonalité est une relation entre deux choses telles qu'elles ont un effet minimal l'une sur l'autre.

Le terme vient des mathématiques, où deux vecteurs sont orthogonaux s'ils se croisent à angle droit.

Pensez à un espace cartésien 2 dimensions typique (Vous grille typique avec des axes X / Y). Tracer deux lignes: x = 1 et y = 1. Les deux lignes sont orthogonales. Vous pouvez changer x=1 en changeant x, et cela n'aura aucun effet sur l'autre ligne, et vice inversement.

Dans le logiciel, le terme peut être utilisé de manière appropriée dans les situations où vous parlez de deux parties d'un système qui se comportent indépendamment l'une de l'autre.

11
répondu timdev 2009-10-06 19:05:40

Si vous avez un ensemble de constructions. Un langauge est dit orthogonal s'il permet au programmeur de mélanger librement ces constructions. Par exemple, en C, vous ne pouvez pas retourner un tableau(tableau statique), C est dit non reconnu dans ce cas:

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.
9
répondu AraK 2009-10-06 19:03:49

La plupart des réponses sont très longues, et même obscures. Le point est: si un outil est orthogonal, il peut être ajouté, remplacé ou supprimé, en faveur de meilleurs outils, sans visser tout le reste.

C'est la différence entre un charpentier ayant un marteau et une scie, qui peut être utilisé pour marteler ou scier, ou ayant un nouveau-fangled marteau/scie combo, qui est conçu pour scier le bois, puis marteler ensemble. L'un ou l'autre fonctionnera pour scier puis marteler ensemble, mais si vous obtenez une tâche qui nécessite le sciage, mais pas le martelage, alors seuls les outils orthogonaux fonctionneront. De même, si vous avez besoin de visser au lieu de marteler, vous n'aurez pas besoin de jeter votre scie, si elle est orthogonale (pas mélangée avec) votre marteau.

L'exemple classique est les outils de ligne de commande unix: vous avez un outil pour obtenir le contenu d'un disque (dd), un autre pour filtrer les lignes du fichier (grep), un autre pour écrire ces lignes dans un fichier (cat), etc. Ceux-ci peuvent tous être mélangés et apparié à volonté.

4
répondu Lee B 2009-10-06 22:18:30

À Partir de wikipedia:

Informatique

L'orthogonalité est une propriété de conception de système facilitant la faisabilité et la compacité de conceptions complexes. L'orthogonalité garantit que la modification de l'effet technique produit par un composant d'un système ne crée ni ne propage d'effets secondaires à d'autres composants du système. Le comportement émergent d'un système constitué de composants doit être contrôlé strictement par des définitions formelles de sa logique et non par des effets secondaires résultant d'une mauvaise intégration, c'est-à-dire d'une conception non orthogonale des modules et des interfaces. L'orthogonalité réduit le temps de test et de développement car il est plus facile de vérifier les conceptions qui ne provoquent pas d'effets secondaires ni ne dépendent d'elles.

Par exemple, une voiture a des composants et des commandes orthogonaux (par exemple, l'accélération du véhicule n'influence rien d'autre que les composants impliqués exclusivement dans la fonction d'accélération). D'autre part, une conception non orthogonale pourrait avoir son la direction influence son freinage (par exemple Contrôle électronique de stabilité), ou sa vitesse modifie sa suspension.1 par conséquent, cette utilisation est considérée comme dérivée de l'utilisation de orthogonale en mathématiques: On peut projeter un vecteur sur un sous-espace par les projette sur chaque membre d'un ensemble de vecteurs de base séparément et en ajoutant les projections si et seulement si les vecteurs de base sont orthogonaux entre eux.

Un jeu d'instructions est dit orthogonal si une instruction peut utiliser n'importe quel Registre dans tout mode d'adressage. Cette terminologie résulte de la prise en compte d'une instruction comme un vecteur dont les composants sont les champs d'instruction. Un champ identifie les registres à utiliser, et un autre spécifie le mode d'adressage. Un jeu d'instructions orthogonales code de manière unique toutes les combinaisons de registres et de modes d'adressage.

2
répondu TheVillageIdiot 2009-10-06 19:01:11

À Partir De Wikipedia:

L'orthogonalité est une conception de système propriété facilitant la faisabilité et compacité des conceptions complexes. L'orthogonalité garantit que modification de l'effet technique produit par un composant d'un système de ni crée ni propage le côté effets d'autres composantes de la système. Le comportement émergent d'un système composé de composants devrait être contrôlé strictement par les définitions de sa logique et non par côté les effets qui résultent de la mauvaise intégration, c'est-à-dire non orthogonale conception de modules et d'interfaces. L'orthogonalité réduit les tests et temps de développement parce que c'est plus facile pour vérifier les conceptions qui ne causent les effets secondaires ne dépendent pas d'eux.

Par exemple, une voiture a orthogonales composants et commandes (par exemple l'accélération du véhicule n'est pas influence autre chose que le composants impliqués exclusivement avec la fonction d'accélération). Sur le d'autre part, une conception non orthogonale pourrait avoir son influence de direction son freinage (par exemple stabilité électronique contrôle), ou sa vitesse tweak son suspension.[1] par conséquent, cette l'utilisation est considérée comme dérivée de la utilisation de l'orthogonale en mathématiques: un peut projeter un vecteur sur un sous-espace en la projetant sur chaque membre d'un ensemble de vecteurs de base séparément et ajout des projections si et seulement si les vecteurs de base sont mutuellement orthogonal.

Un jeu d'instructions est dit être orthogonale si une instruction peut utiliser tout enregistrer dans n'importe quel mode d'adressage. Cette terminologie résulte de considérer une instruction comme un vecteur dont les composants sont l'instruction Fields. Un champ identifie le les registres à utiliser, et un autre spécifie le mode d'adressage. Un jeu d'instructions orthogonales unique Code toutes les combinaisons de registres et modes d'adressage.

Pour le dire dans les termes les plus simples possibles, deux choses sont orthogonales si changer l'un n'a aucun effet sur l'autre.

2
répondu Laurence Gonsalves 2009-10-06 19:03:02

Tout en parlant de décisions de projet sur les langages de programmation, l'orthogonalité peut être considérée comme la facilité pour vous de prédire d'autres choses sur ce langage pour ce que vous avez vu dans le passé.

Par exemple, dans une langue, vous pouvez avoir:

Str.split

Pour diviser une chaîne et

Len (str)

Pour obtenir la longueur.

Sur une langue plus orthogonale, vous utiliseriez toujours str.x ou x(str).

Lorsque vous cloner un objet ou faire autre chose, vous sauriez s'il faut utiliser

Clone (obj)

Ou

Obj.clone

C'est L'un des principaux points sur les langages de programmation étant orthogonaux. Qui vous évite de consulter le manuel ou de demander à quelqu'un.

L'article de wikipedia parle plus d'orthogonalité sur des conceptions complexes ou des langages de bas niveau. Comme quelqu'un l'a suggéré ci-dessus sur un commentaire, le Livre de Sebesta parle proprement de l'orthogonalité.

Si je n'utilisais qu'une seule phrase, je dirais qu'un langage de programmation est orthogonal lorsque ses parties inconnues agissent comme prévu en fonction de ce que vous avez vu. Ou... pas de surprises.

;)

1
répondu Asrail 2009-10-06 19:22:52

Orthogonalité en programmation:

Orthogonalité est un concept important, portant sur un nombre relativement restreint de composants peuvent être combinés dans un relativement petit nombre de façons d'obtenir les résultats souhaités. Il est associé à la simplicité; plus le design est orthogonal, moins il y a d'exceptions. Cela facilite l'Apprentissage, la lecture et l'écriture de programmes dans un langage de programmation. La signification d'une caractéristique orthogonale est indépendante du contexte; les paramètres clés sont symétrie et cohérence (par exemple, un pointeur est un concept orthogonal).

À Partir De Wikipedia

1
répondu Majid 2014-01-18 12:28:21

Première fois que vous entendez le mot, mais Wikipedia semble avoir quelque chose dessus:

Http://en.wikipedia.org/wiki/Orthogonality#Computer_science

0
répondu Nasir 2009-10-06 19:00:18

Dans les langages de programmation, une fonctionnalité de langage de programmation est dite orthogonale si elle est limitée sans restrictions (ou exceptions). Par exemple, en Pascal, LES FONCTIONS NE PEUVENT PAS renvoyer les types structurés. C'est une restriction sur le retour des valeurs d'une fonction. Par conséquent, nous il est considéré comme une caractéristique non orthogonale. ;)

0
répondu Dil 2013-11-12 12:29:02

Comme exemples de l'absence d'orthogonalité dans un langage de haut niveau, considérez les règles et exceptions suivantes dans C. Bien que C ait deux types de types de données structurées, les tableaux et les enregistrements (structs), les enregistrements peuvent être renvoyés à partir de fonctions, mais les tableaux ne le peuvent pas. Un membre d'une structure peut être n'importe quel type de données sauf void ou une structure du même type. Un élément de tableau peut être n'importe quel type de données sauf void ou une fonction. Les paramètres sont passés par valeur, sauf s'ils sont des tableaux, auquel cas ils sont, en effet, passé par référence (parce que l'apparence d'un nom de tableau sans indice dans un programme C est interprétée à l'adresse du premier élément du tableau)

0
répondu Imagination 2015-08-15 22:09:36

L'orthogonalité désigne le degré auquel le langage se compose d'un ensemble de constructions primitives indépendantes qui peuvent être combinées si nécessaire pour exprimer un programme. Les caractéristiques sont orthogonales s'il n'y a pas de restrictions sur la façon dont elles peuvent être combinées

Example : non-orthogonality

PASCAL: LES FONCTIONS NE PEUVENT PAS renvoyer les types structurés. Les langages fonctionnels sont hautement orthogonaux.

0
répondu mali 2015-12-09 14:13:33

L'idée de base de l'orthogonalité est que les choses qui ne sont pas liées conceptuellement ne devraient pas être liées dans le système. Les parties de l'architecture qui n'ont vraiment rien à voir avec l'autre, telles que la base de données et L'interface utilisateur, ne devraient pas avoir besoin d'être modifiées ensemble. Une modification à l'un ne devrait pas provoquer un changement à l'autre.

0
répondu acohen 2018-05-03 17:17:41

L'orthogonalité dans un langage de programmation signifie qu'un ensemble relativement petit de les constructions primitives peuvent être combinées d'un nombre relativement faible de façons de construire les structures de contrôle et de données du langage. En outre, chaque pos- la combinaison simple de primitives est légale et significative. Par exemple, considérez les types de données. Supposons qu'une langue ait quatre types de données primitives (entier, flottant, double, et caractère) et deux opérateurs de type (tableau et pointeur). Si les deux les opérateurs de type peuvent être appliqué à eux-mêmes et aux quatre types de données primitifs, un grand nombre de structures de données peuvent être définis. La signification d'une caractéristique orthogonale du langage est indépendante de contexte de son apparition dans un programme. (le mot orthogonal vient du concept mathématique de vecteurs orthogonaux, qui sont indépendants de chacun autre.) L'orthogonalité découle d'une symétrie des relations entre les primi- tives. Un manque d'orthogonalité conduit à des exceptions aux règles de la langue. Par exemple, dans un langage de programmation qui prend en charge les pointeurs, il devrait être possible de définir un pointeur sur un type spécifique défini dans la langue. Toutefois, si les pointeurs ne sont pas autorisés à pointer vers des tableaux, de nombreuses structures de données définies par l'utilisateur potentiellement utiles ne peuvent pas être définies. Nous pouvons illustrer l'utilisation de l'orthogonalité comme concept de conception par compar- ing un aspect des langages d'assemblage des ordinateurs centraux IBM et la série VAX de minicomputers. Nous considérons un simple simple situation: ajout de deux valeurs entières 32 bits qui résident dans la mémoire ou les registres et remplacer l'une des deux valeurs par la somme. Les mainframes IBM ont deux instructions à cet effet, qui ont les formes

A Reg1, memory_cell
AR Reg1, Reg2

Où Reg1 et Reg2 représentent des registres. La sémantique de ceux-ci sont

Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)

L'instruction d'addition VAX pour les valeurs entières 32 bits est

ADDL operand_1, operand_2

, Dont la sémantique est

operand_2 ← contents(operand_1) + contents(operand_2)

Dans ce cas, l'un ou l'autre opérande peut être un registre ou une mémoire cellule. La conception de l'instruction VAX est orthogonale en ce sens qu'une seule instruction peut utilisez des registres ou des cellules de mémoire comme opérandes. Il y a deux façons de spécifiez les opérandes, qui peuvent être combinés de toutes les manières possibles. IBM conception n'est pas orthogonale. Seulement deux des quatre possibilités de combinaisons d'opérandes sont juridique, et les deux exigent des instructions différentes, A et AR . IBM conception est plus restreint et donc moins accessible en écriture. Par exemple, vous ne pouvez pas ajouter deux valeurs et stocker la somme dans un l'emplacement de la mémoire. En outre, IBM la conception est plus difficile à apprendre en raison des restrictions et des instructions supplémentaires. L'orthogonalité est étroitement liée à la simplicité: plus l'orthogonalité est conception d'une langue, moins les règles linguistiques exigent d'exceptions. Moins de les exceptions signifient un degré plus élevé de régularité dans la conception, ce qui rend l' langue plus facile à apprendre, lire et comprendre. Toute personne qui a appris un sig- une partie importante de la langue anglaise peut témoigner de la difficulté d'apprendre son de nombreuses exceptions de règle (par exemple, i avant e sauf après c).

-1
répondu Imagination 2015-08-15 22:17:52

Vérifier l'orthogonalité des matrices:

L'orthogonalité peut aussi être par rapport aux matrices,

Matrix *(transpose of matrix)= identity matrix. 

Cliquez sur le lien ci-dessous pour afficher une vidéo YouTube sur l'Orthogonalité.
https://youtu.be/tNekLaxnfW8

-4
répondu Roopesh 2017-05-01 11:55:54