web-dev-qa-db-fra.com

Qu'est-ce que "l'orthogonalité"?

Que signifie "orthogonalité" lorsqu'on parle de langages de programmation?

Quels sont quelques exemples d'orthogonalité?

118
AhmetB - Google

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

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

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

Il y a aussi une signification spécifique lorsque l'on se réfère à jeux d'instructions .

247
C. Ross

D'après 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 des conceptions même complexes. Dans une conception purement orthogonale, les opérations n'ont pas d'effets secondaires; chaque action (que ce soit un appel d'API, un appel de macro ou une opération de langage) ne change qu'une chose sans en affecter d'autres. Il existe une et une seule façon de modifier chaque propriété du système que vous contrôlez.

33

Pensez qu'il a pu changer une chose sans avoir un effet invisible sur une autre partie.

13
Martin Beckett

D'une manière générale, l'orthogonalité est une relation entre deux choses de telle sorte 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 coupent à angle droit.

Pensez à un espace cartésien typique à 2 dimensions (votre grille typique avec des axes X/Y). Tracez 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 versa.

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

11
timdev

Si vous avez un ensemble de constructions. Une langauge serait orthogonale si elle permet au programmeur de mélanger ces constructions librement. Par exemple, en C, vous ne pouvez pas retourner un tableau (tableau statique), C est dit non orthogonal 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
AraK

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

C'est la différence entre un charpentier ayant un marteau et une scie, qui peut être utilisé pour marteler ou scier, ou avoir un combo marteau/scie nouveau, conçu pour scier du bois, puis le marteler ensemble. L'un ou l'autre fonctionnera pour scier puis marteler ensemble, mais si vous obtenez une tâche qui nécessite un sciage, mais pas de martelage, alors seuls les outils orthogonaux fonctionneront. De même, si vous devez visser au lieu de marteler, vous n'aurez pas besoin de jeter votre scie, si elle est orthogonale (non 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. peuvent tous être mélangés et appariés à volonté.

4
Lee B

de wikipedia :

L'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 aux autres composants du système. Le comportement émergent d'un système composé 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 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 et n'en dépendent pas.

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 avec la fonction d'accélération). D'un autre côté, une conception non orthogonale peut avoir une influence de la direction sur son freinage (par exemple, un contrôle électronique de la stabilité), ou sur sa vitesse. Ajuster sa suspension . 1 Par conséquent, cet usage semble dériver utilisation de l'orthogonal en mathématiques: on peut projeter un vecteur sur un sous-espace en le projetant séparément sur chaque membre d'un ensemble de vecteurs de base 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 n'importe quel mode d'adressage. Cette terminologie résulte du fait de considérer une instruction comme un vecteur dont les composants sont les champs d'instructions. Un champ identifie les registres à opérer et un autre spécifie le mode d'adressage. Un ensemble d'instructions orthogonales code de manière unique toutes les combinaisons de registres et de modes d'adressage.

2
TheVillageIdiot

De Wikipedia :

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 aux autres composants du système. Le comportement émergent d'un système composé 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 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 et n'en dépendent pas.

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 avec la fonction d'accélération). D'un autre côté, une conception non orthogonale pourrait avoir sa direction influencer son freinage (par exemple le contrôle électronique de stabilité), ou sa vitesse Tweak sa suspension. [1] Par conséquent, cet usage est considéré comme dérivé de l'utilisation de l'orthogonal en mathématiques: on peut projeter un vecteur sur un sous-espace en le projetant 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 mutuellement orthogonales.

Un jeu d'instructions est dit orthogonal si une instruction peut utiliser n'importe quel registre dans n'importe quel mode d'adressage. Cette terminologie résulte du fait de considérer une instruction comme un vecteur dont les composants sont les champs d'instructions. Un champ identifie les registres à opérer et un autre spécifie le mode d'adressage. Un ensemble d'instructions orthogonales code de manière unique toutes les combinaisons de registres et de modes d'adressage.

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

2

Tout en parlant des 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 clonez un objet ou faites quoi que ce soit d'autre, vous savez si vous souhaitez utiliser

clone (obj)

ou

obj.clone

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

L'article de wikipedia parle davantage d'orthogonalité sur des conceptions complexes ou des langages de bas niveau. Comme quelqu'un l'a suggéré ci-dessus dans un commentaire, le livre Sebesta parle clairement d'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 surprise.

;)

1
Asrail

Orthogonalité dans la programmation:

L'orthogonalité est un concept important, qui traite de la manière dont un nombre relativement petit de composants peut être combiné de manière relativement petite pour obtenir les résultats souhaités. Il est associé à la simplicité; plus la conception est orthogonale, 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 la symétrie et la cohérence (par exemple, un pointeur est un concept orthogonal).

de Wikipedia

1
Majid

L'idée de base de l'orthogonalité est que les choses qui ne sont pas liées conceptuellement ne devraient pas l'être 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. Un changement à l'un ne devrait pas entraîner un changement à l'autre.

0
acohen

L'orthogonalité signifie le degré auquel la langue consiste en un ensemble de constructions primitives indépendantes qui peuvent être combinées selon les besoins pour exprimer un programme. Les entités sont orthogonales s'il n'y a aucune restriction sur la façon dont elles peuvent être combinées

Example : non-orthogonality

Pascal: les fonctions ne peuvent pas renvoyer de types structurés. Les langages fonctionnels sont hautement orthogonaux.

0
mali

Dans les langages de programmation, une caractéristique du 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 de types structurés. Il s'agit d'une restriction sur le retour des valeurs d'une fonction. C'est pourquoi nous la considérons comme une caractéristique non orthogonale. ;)

0
Dil

Comme exemples du manque 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, des tableaux et des enregistrements (structs), les enregistrements peuvent être renvoyés à partir de fonctions, mais pas les tableaux. 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 fait, passés par référence (car l'apparition d'un nom de tableau sans indice dans un programme C est interprétée comme l'adresse du premier élément du tableau)

0
Imagination