Pregunta

¿Qué significa "ortogonalidad" significa que cuando se habla de lenguajes de programación?

¿Cuáles son algunos ejemplos de Ortogonalidad?

¿Fue útil?

Solución

ortogonalidad es la propiedad que significa "Cambio A no cambia B". Un ejemplo de un sistema ortogonal sería una radio, donde el cambio de la estación no cambia el volumen y vice-versa.

Un sistema no ortogonal sería como un helicóptero, donde el cambio de la velocidad se puede cambiar la dirección.

En los lenguajes de programación, esto significa que cuando se ejecuta una instrucción, nada más que la instrucción sucede (muy importante para la depuración).

También hay un significado específico cuando se refiere a la instrucción conjuntos .

Otros consejos

A partir de "El arte de la programación UNIX" de Eric S. Raymond

  

La ortogonalidad es una de las propiedades más importantes que pueden ayudar a hacer diseños más complejos compacto. En un diseño puramente ortogonal, las operaciones no tienen efectos secundarios; cada acción (si es una llamada a la API, una invocación de la macro, o una operación de idioma) cambia sólo una cosa sin afectar a los demás. Hay una y sólo una manera de cambiar a cada propiedad de cualquier sistema que se está controlando.

Piense en ello tiene poder cambiar una cosa sin tener un efecto no visto en otra parte.

En términos generales, la ortogonalidad es una relación entre dos cosas de manera que tengan un efecto mínimo sobre la otra.

El término viene de las matemáticas, donde dos vectores son ortogonales si se intersecan en ángulo recto.

Piense en un espacio típico 2 dimensional cartesiano (que rejilla típica con X ejes / Y). Plot dos líneas: x = 1 e Y = 1. Las dos líneas son ortogonales. Puede cambiar x = 1 x cambiando, y esto no tendrá ningún efecto en la otra línea, y viceversa.

En el software, el término puede usarse adecuadamente en situaciones en las que estás hablando de dos partes de un sistema que se comportan de forma independiente el uno del otro.

Si usted tiene un conjunto de construcciones. A langauge se dice que es ortogonal si permite al programador para mezclar estos constructos libremente. Por ejemplo, en C no se puede devolver una matriz (array estática), se dice que C ser unorthognal en este caso:

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.

La mayoría de las respuestas son de muy largo aliento, e incluso en la oscuridad.El punto es:si una herramienta es ortogonal, se puede agregar, reemplazar o retirar, en favor de mejores herramientas, sin atornillar todo lo demás.

Es la diferencia entre un carpintero tener un martillo y una sierra, que puede ser utilizado para martillar o aserrado, o tener algunos novedosos martillo/sierra combo, que está diseñado para sierra de madera, a continuación, martillo juntos.Ya sea de trabajo para el aserrado y, a continuación, el martilleo juntos, pero si usted consigue una tarea que requiere de aserrar, pero no martilleo, a continuación, sólo el ortogonal herramientas de trabajo.Del mismo modo, si usted necesita tornillos en lugar de martillar, usted no tendrá que tirar de su sierra, si es ortogonal (no se mezclen con el martillo.

El ejemplo clásico es el de unix herramientas de línea de comandos:usted tiene una herramienta para obtener el contenido de un disco (dd), otro para el filtrado de las líneas del archivo (grep), otro para escribir esas líneas a un archivo (cat), etc.Todos estos pueden ser mezclados y emparejados a voluntad.

Wikipedia :

Informática

La ortogonalidad es un establecimiento de diseño de sistema que facilite la viabilidad y la compacidad de diseños complejos. Ortogonalidad garantiza que la modificación del efecto técnico producido por un componente de un sistema no crea ni se propaga efectos secundarios a otros componentes del sistema. El comportamiento emergente de un sistema que consta de los componentes debe ser controlada estrictamente por definiciones formales de su lógica y no por efectos secundarios resultantes de la mala integración, es decir, el diseño no ortogonal de módulos e interfaces. Ortogonalidad reduce el tiempo de desarrollo de pruebas y porque es más fácil para verificar diseños que ni causan efectos secundarios ni dependen de ellos.

Por ejemplo, un coche tiene componentes ortogonales y controles (por ejemplo, la aceleración del vehículo no influye en todo lo demás pero los componentes implicados exclusivamente con la función de aceleración). Por otra parte, un diseño no ortogonal podría tener su dirección influyen en su frenado (por ejemplo, control electrónico de estabilidad), o su velocidad de ajustar su suspensión 1 en consecuencia, este uso se ve que se derivan de la utilización de ortogonal en matemáticas: Uno puede proyectar un vector sobre un subespacio proyectándola en cada miembro de un conjunto de vectores de la base por separado y la adición de las proyecciones si y sólo si los vectores de la base son mutuamente ortogonales.

Un conjunto de instrucciones se dice que es ortogonal si ninguna instrucción puede usar cualquier registro en cualquier modo de direccionamiento. Esta terminología resulta de considerar una instrucción como un vector cuyos componentes son los campos de instrucciones. Un campo identifica los registros que se va a operar, y otro especifica el modo de direccionamiento. Una instrucción ortogonal establecer únicamente codifica todas las combinaciones de registros y modos de direccionamiento.

Wikipedia :

  

La ortogonalidad es un diseño de sistema   propiedad viabilidad y facilitación   compacidad de diseños complejos.   garantías de que ortogonalidad   modificar el efecto técnico   producido por un componente de un sistema de   no crea ni se propaga lado   efectos de otros componentes de la   sistema. El comportamiento emergente de una   sistema que consta de componentes debe   ser controlada estrictamente por formales   definiciones de su lógica y no por   efectos secundarios derivados de una mala   la integración, es decir, no ortogonal   diseño de módulos e interfaces.   Ortogonalidad reduce las pruebas y   el tiempo de desarrollo, ya que es más fácil   para verificar los diseños que ni la causa   ni los efectos secundarios dependen de ellos.

     

Por ejemplo, un coche tiene ortogonal   componentes y controles (por ejemplo,   acelerar el vehículo no lo hace   influencia otra cosa que la   componentes involucrados exclusivamente con   la función de aceleración). Sobre el   Por otra parte, un diseño no ortogonal   podría tener su dirección influyen en su   de frenado (por ejemplo estabilidad electrónico   control), o su velocidad de ajustar su   suspensión. [1] En consecuencia, este   uso se ve que es derivado de la   ortogonal uso de las matemáticas: Uno   puede proyectar un vector sobre un subespacio   proyectándola en cada miembro de una   conjunto de vectores de la base por separado y   la adición de las proyecciones si y sólo si   los vectores base son mutuamente   ortogonal.

     

Un conjunto de instrucciones se dice que es   ortogonales si ninguna instrucción puede utilizar   cualquier registro en cualquier modo de direccionamiento.   Esta terminología resulta de   teniendo en cuenta una instrucción como un vector   cuyos componentes son la instrucción   campos. Un campo identifica el   registra a ser operado, y   otra especifica el modo de direccionamiento.   Una instrucción ortogonal el único situado   codifica todas las combinaciones de registros   y modos de direccionamiento.

Para decirlo en los términos más simples posibles, dos cosas son ortogonales si el cambio de una no tiene ningún efecto sobre el otro.

Al hablar sobre las decisiones del proyecto en los lenguajes de programación, ortogonalidad puede ser visto como lo fácil que es para que usted pueda predecir otras cosas acerca de que el lenguaje de lo que ha visto en el pasado.

Por ejemplo, en un idioma que puede tener:

  

str.split

para dividir una cadena y

  

len (str)

para obtener la longitud.

En un lenguaje más ortogonales, siempre se utilizaría str.x ox (str).

Cuando usted clonar un objeto o hacer cualquier otra cosa, usted sabría si desea utilizar

  

clone (obj)

o

  

obj.clone

Ese es uno de los puntos principales de los lenguajes de programación ortogonales. Que evita que consultar el manual o preguntar a alguien.

artículo de Wikipedia habla más de ortogonalidad en diseños complejos o lenguajes de bajo nivel. Como alguien sugirió anteriormente en un comentario, el libro habla Sebesta limpiamente sobre ortogonalidad.

Si yo usaría sólo una frase, diría que un lenguaje de programación es ortogonal cuando sus partes desconocidas actúan como era de esperar sobre la base de lo que has visto. O ... no hay sorpresas.

;)

La ortogonalidad en Programación:

  

La ortogonalidad es un concepto importante, el problema de cómo un número relativamente pequeño de componentes se pueden combinar en un número relativamente pequeño de maneras de conseguir los resultados deseados. Se asocia con la simplicidad; cuanto más el diseño ortogonal, el menor número de excepciones. Esto hace que sea más fácil de aprender, leer y escribir programas en un lenguaje de programación. El significado de una función ortogonal es independiente del contexto; los parámetros clave son la simetría y consistencia (por ejemplo, un puntero es un concepto ortogonal).

Wikipedia

En los lenguajes de programación una función de lenguaje de programación se dice que es ortogonal si está delimitado sin restricciones (o excepciones).  Por ejemplo, en funciones de Pascal no puede volver tipos estructurados. Esto es una restricción de Devolución de valores de una función. Por lo tanto, se considera como una característica no ortogonal. ;)

Como ejemplos de la falta de ortogonalidad en un lenguaje de alto nivel, considere las siguientes reglas y excepciones en C. Aunque C tiene dos tipos de datos estructurados tipos, arrays y registros (estructuras), los registros pueden ser devueltos de funciones, pero matrices no pueden. Un miembro de una estructura puede ser cualquier tipo de datos excepto vacío o una estructura del mismo tipo. Un elemento de matriz puede ser cualquier tipo de datos excepto nula o una función. Los parámetros se pasan por valor, a menos que sean arrays, en cuyo caso son, en efecto, pasar por referencia (ya que la aparición de un nombre de matriz sin un subíndice en un programa C se interpreta como la dirección del primer elemento de la matriz)

Ortogonalidad significa el grado en que la lengua consiste en un conjunto de constructos primitivos independientes que se pueden combinar según sea necesario para expresar un programa.     Las características son ortogonales si no hay restricciones sobre la forma en que se pueden combinar

Example : non-orthogonality

PASCAL: funciones no pueden volver tipos estructurados. Los lenguajes funcionales son altamente ortogonal.

La idea básica de ortogonalidad es que las cosas que no están relacionadas conceptualmente no deben estar relacionados en el sistema. Partes de la arquitectura que realmente no tienen nada que ver con la otra, como la base de datos y la interfaz de usuario, no debe ser necesario cambiar juntos. Un cambio a uno no debería causar un cambio en el otro.

La ortogonalidad en un lenguaje de programación significa que un conjunto relativamente pequeño de construcciones primitivas se pueden combinar en un número relativamente pequeño de maneras de construir las estructuras de control y de datos de la lengua. Además, todas las posesiones sible combinación de primitivas es legal y significativa. Por ejemplo, considere los tipos de datos. Supongamos que una lengua tiene cuatro tipos de datos primitivos (entero, flotante, doble, y carácter) y dos operadores de tipo (array y puntero). Si los dos operadores de tipo pueden aplicarse a sí mismos y los cuatro tipos de datos primitivos, un gran número de estructuras de datos se puede definir. El significado de una característica del lenguaje ortogonal es independiente de la contexto de su aparición en un programa. (La palabra viene de la ortogonal concepto matemático de vectores ortogonales, que son independientes de cada Otros.) Ortogonalidad sigue de una simetría de las relaciones entre primi- tantes. A falta de ortogonalidad da lugar a excepciones a las reglas de la lengua. Por ejemplo, en un lenguaje de programación compatible con punteros, debe ser posible definir un puntero para señalar a ningún tipo específico definido en el lenguaje. Sin embargo, si punteros no se les permite apuntar a arrays, muchas estructuras de datos definidos por el usuario potencialmente útiles no pueden ser definidos. Podemos ilustrar el uso de la ortogonalidad como un concepto de diseño por compa- ing un aspecto de los idiomas de montaje de los ordenadores centrales de IBM y la serie de miniordenadores VAX. Consideramos que una sola situación sencilla: la adición de dos valores enteros de 32 bits que residen en la memoria o registros y la sustitución de uno de los dos valores con la suma. Las unidades centrales de IBM tienen dos instrucciones para este fin, que tienen las formas

A Reg1, memory_cell
AR Reg1, Reg2

donde Reg1 y reg2 representan registros. La semántica de estos son

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

La instrucción Además VAX para valores enteros de 32 bits es

ADDL operand_1, operand_2

cuya semántica es

operand_2 ← contents(operand_1) + contents(operand_2)

En este caso, ya sea operando puede ser un registro o una célula de memoria. El diseño de la instrucción VAX es ortogonal en la que una sola instrucción puede utilizar cualquiera registros o células de memoria como los operandos. Hay dos maneras de especificar los operandos, que se pueden combinar de todas las maneras posibles. El diseño de IBM No es ortogonal. Sólo dos de las cuatro posibilidades de combinaciones de operandos son legal, y los dos se requieren diferentes instrucciones, A y AR. El diseño de IBM es más restringida y por lo tanto menos grabable. Por ejemplo, no se puede añadir dos valores y almacenar la suma en una posición de memoria. Por otra parte, la IBM diseño es más difícil de aprender debido a las restricciones y la instrucción adicional. Ortogonalidad está estrechamente relacionada con la simplicidad: Cuanto más ortogonal del diseño de un idioma, el menor número de excepciones al régimen lingüístico requieren. Menos excepciones significan un mayor grado de regularidad en el diseño, lo que hace que el idioma más fácil de aprender, leer y comprender. Cualquiera que haya aprendido sig- sig- parte del idioma Inglés puede dar fe de la dificultad de aprender su muchas excepciones de reglas (por ejemplo, i antes de e excepto después de c).

Comprobar la ortogonalidad de las matrices:

Ortogonalidad también puede ser con respecto a las matrices,

Matrix *(transpose of matrix)= identity matrix. 

Haga clic en el siguiente enlace para ver un vídeo de YouTube en la ortogonalidad.
https://youtu.be/tNekLaxnfW8

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top