12
votes

Java orthogonal est-il?

Je me demande si Java est orthogonal ou non, et si oui, qui sont ses caractéristiques qui le rendent orthogonal. Comment pouvez-vous déterminer si une langue est orthogonale ou non? Par exemple, j'ai trouvé sur certains sites Web que c ++ n'est pas orthogonal, mais aucune explication, pourquoi pas. Quelles autres langues sont orthogonales? S'il vous plaît aidez-moi, car il n'y a presque aucune information sur Internet sur ce sujet.

merci


5 commentaires

S'il vous plaît donner une explication directe ou un lien vers votre définition envisagée de orthogonal.


Orthogonalité est rarement (si jamais) un booléen ("est x orthogonal?") Mais une question de degré (généralement comparatif) ("x est plus orthogonal que Y.")


Mais les langues de programmation peuvent-elles également être linéaires?


Cette question devrait-elle être marquée des devoirs?


Hein, et ici, je pensais que Orrhogonal était un terme initié qui signifiait que le jeton était comme tirer des dents.


5 Réponses :


2
votes

L'orthogonalité est une caractéristique de votre conception indépendante de la langue. Bien sûr, une langue vous permet de concevoir une conception orthogonale pour votre système, mais vous ne devriez pas vous concentrer sur une langue spécifique pour que la conception de votre système soit aussi orthogonale que possible.


1 commentaires

Bien que rares, les gens appliquent également le terme aux langues de programmation.



26
votes

L'art de la programmation Unix, chapitre 4. Modularité, orthogonalité, page 89:

orthogonalité

orthogonalité est l'un des plus propriétés importantes qui peuvent aider faire des conceptions encore complexes compactes. Dans une conception purement orthogonale, des opérations ne pas avoir d'effets secondaires; chaque action (Que ce soit un appel API, une macro Invocation ou une opération de langue ) change juste une chose sans affectant les autres. Il y en a un et Un seul moyen de changer chaque propriété quel que soit le système que vous êtes contrôler.

Pragmatics linguistiques de programmation, chapitre 6, page 228:

orthogonalité signifie que les fonctionnalités peuvent être utilisé dans n'importe quelle combinaison que le Les combinaisons ont tous un sens, et que La signification d'une caractéristique donnée est cohérent, quelle que soit l'autre caractéristiques avec lesquelles il est combiné .

sur LISP, 5.2 orthogonalité:

Une langue orthogonale est une langue dans laquelle Vous pouvez exprimer beaucoup en combinant un petit nombre d'opérateurs dans beaucoup de différentes manières.


Je pense qu'un langage de programmation orthogonal serait celui où chacune de ses caractéristiques a des effets secondaires minimes ou sans effets secondaires , ils peuvent donc être utilisés sans réfléchir à la manière dont cette utilisation affectera d'autres caractéristiques. Je l'emprunte de la définition d'une API orthogonale.

Dans Java, vous devez évaluer par exemple s'il ya une combinaison de mots-clés / constructions qui pourraient s'affronter mutuellement lorsqu'ils sont utilisés simultanément sur un identifiant. Par exemple, lors de l'application de publique et statique à une méthode, ils n'interfèrent pas les uns avec les autres, de sorte que ces deux sont orthogonaux (aucun effet secondaire à part ce que le mot clé est destiné à faire )

Vous devez faire cela à toutes ses fonctionnalités pour prouver l'orthogonalité. C'est une façon d'y aller. Je ne pense pas qu'il existe une coupe transparente est ou n'est pas orthogonal dans cette affaire non plus.


2 commentaires

Oui, je comprends l'orthogonalité en général, mais je ne peux pas donner une explication pourquoi C ++ est considéré comme à ne pas utiliser l'orthogonalité et comment pouvez-vous l'analyser. Je veux dire .. Je ne peux pas dire ça .. "Ouais .. Java est gentil de orthogonal parce que le public et le statique vont ensemble sans aucun problème". J'essaie de trouver quelque chose de plus général dans ces langues et je ne peux rien penser et il n'y a aucune information sur Internet non plus.


J'ai fourni que comme exemple, vous ne pouvez pas simplement choisir deux fonctionnalités, vous devez le faire à toutes ses fonctionnalités pour prouver l'orthogonalité. C'est une façon d'y aller. J'ai trouvé deux papiers sur Portal.acm.org, un sur la programmation générale des langues d'orthogonalité et une sur l'orthogonalité C ++. Je ne pense pas qu'il existe une coupe claire est ou n'est pas orthogonal dans cette affaire non plus.



3
votes

Utiliser le terme langage de programmation orthogonal est inhabituel. En règle générale, en informatique, vous parlez vraiment de orthogonal instructions-ensembles . Cependant, si nous devons étendre le sens à la grammaire d'une langue:

"... [interprétation] a un nombre relativement petit de constructions de base et un ensemble de règles pour combiner ces constructions. Chaque Construire a un type associé à celui-ci et il n'y a pas de restrictions sur ces types .... " Voir Algol

Ensuite, nous pouvons supposer que sinon toutes les instructions de la langue peuvent travailler sur tous les types de données produira une non-orthogonalité. Cela ne signifie toutefois pas que l'inverse est vrai, c'est-à-dire si toutes les instructions de langue fonctionnent sur tous les types de données, cela ne signifie pas nécessairement que la langue est orthogonale.

plus formellement, une langue orthogonale aurait exactement un moyen de faire une opération donnée. Les langues non orthogonales auraient plus d'une façon d'atteindre le même effet.

Exemple le plus simple: xxx

pour et pendant le non-orthogonal. < / p>


3 commentaires

Ensuite, de nombreux programmeurs ignorent la différence sémantique entre et tandis que les boucles. Il s'agit d'un problème qui n'est pas directement lié à l'orthogonalité de la langue elle-même, mais dans une émission sous-jacente beaucoup plus grande, qui démontre un certain manque de compréhension des concepts abstraits de base.


Je dirais que tout en est "Super" à (en terminologie de l'OOP) ou "contient" pour (en termes d'ensembles) en ce que tout pour la boucle peut être exprimé de temps, mais pas tout pendant que des boucles peuvent être exprimées comme pour boucles. Comment cette incidence de l'orthogonalité? Je lis sur Wikipedia et, il semble que, comme il y a deux façons de faire pour les boucles ... Je ne sais pas.


En fait, cela est considéré comme une simplicité lorsque vous parlez d'évaluation linguistique



1
votes

orthogonalité n'est pas vraiment une caractéristique linguistique en tant que telle, même si certaines langues ont des caractéristiques qui favorisent l'orthogonalité (telles que les annotations, l'AOP intégré, ..). En ce qui concerne l'orthogonalité à Java: J'ai écrit une petite étude de cas à ce sujet à l'aide de log4J à titre d'exemple: " orthogonalité par exemple " - Vous pourriez trouver cela utile.


0 commentaires

1
votes

manque d'orthogonalité en C:

  • Un tableau peut contenir n'importe quel type de données, sauf void
  • Les paramètres sont passés par la valeur mais la matrice est transmise par référence

    Un langage de programmation est considéré orthogonal si:

    1. Il existe un ensemble relativement petit de constructions primitives pouvant combiner à un nombre relativement petit de façons de créer des structures de données et de contrôle

    2. Chaque structure possible est légale

      Par exemple, une langue avec 4 types de données primitifs (int, flotteur, double, char) et deux
      Les opérateurs de type (tableau et pointeur) peuvent créer un nombre relativement important de structures de données.

      L'avantage de l'orthogonalité est donc de rendre la langue simple et régulière car il y a moins d'exceptions.


0 commentaires