2010-07-17 148 views
10

Me pregunto si Java es ortogonal o no, y en caso afirmativo, cuáles son sus características que lo hacen ortogonal. ¿Cómo se puede determinar si un idioma es ortogonal o no? Por ejemplo, encontré en algún sitio web que C++ no es ortogonal, pero no hay explicaciones, por qué no. ¿Qué otros idiomas son ortogonales? Por favor, ayúdenme, porque casi no hay información en internet sobre este tema.¿Es Java ortogonal?

Gracias

+13

Proporcione una explicación o enlace directo a su definición de ortogonal. –

+0

La ortogonalidad raramente (si es que alguna vez) es booleana ("¿Es X ortogonal?") Pero una cuestión de (generalmente comparativa) grado ("X es más ortogonal que Y.") –

+1

pero ¿los lenguajes de programación también pueden ser lineales? – mvds

Respuesta

2

ortogonalidad es característica de su diseño independiente de la lengua. Claro que algunos idiomas le facilitan tener un diseño ortogonal para su sistema, pero no debe enfocarse en un lenguaje específico para mantener el diseño de su sistema lo más ortogonal posible.

+1

Aunque es raro, las personas también aplican el término a los lenguajes de programación. –

24

El Arte de Programar en Unix, Capítulo 4. La modularidad, ortogonalidad, Página 89:

ortogonalidad

ortogonalidad es uno de los más importantes propiedades que pueden ayudar a hacer aún diseños complejos compactos. En un diseño puramente ortogonal, las operaciones no tienen efectos secundarios; cada acción (ya sea una llamada a API, una invocación a macro o una operación de lenguaje ) cambia una sola cosa sin afectando a otras. Hay una y solo una forma de cambiar cada propiedad del sistema que sea de control.

Lenguaje de programación pragmática, Capítulo 6, página 228:

ortogonalidad significa que características pueden pueden utilizar en cualquier combinación, que los todas las combinaciones tienen sentido, y que la el significado de una característica dada es consistente, independientemente de las otras características de con las que se combina.

En Lisp, 5.2 Ortogonalidad:

Un lenguaje ortogonal es aquella en la que puede expresar una gran cantidad mediante la combinación de un pequeño número de operadores en un montón de maneras diferentes .


creo que un lenguaje de programación ortogonal sería aquel en cada una de sus características tienen efectos secundarios mínimos o nulos, por lo que se puede utilizar sin pensar en cómo afectará que el uso de otras características. Tomo prestado esto de la definición de una API ortogonal.

En Java tendría que evaluar, por ejemplo, si existe una combinación de palabras clave/construcciones que podrían afectarse entre sí cuando se utilizan simultáneamente en un identificador.Por ejemplo, al aplicar public y static a un método, no interfieren entre sí, por lo que estos dos son ortogonales (sin efectos secundarios además de lo que la palabra clave está destinada a hacer)

Tendría que hacer eso para todos sus características para demostrar la ortogonalidad. Esa es una forma de hacerlo. No creo que exista un claro corte es o tampoco es ortogonal en esta materia.

+0

Sí, entiendo la ortogonalidad en general, pero no puedo dar una explicación de por qué se considera que C++ no emplea ortogonalidad, y cómo se puede analizar. Quiero decir ... No puedo decir eso ... "Sí ... Java es algo ortogonal porque lo público y lo estático van juntos sin ningún problema". Intento encontrar algo más general en estos idiomas y no hay nada en lo que pueda pensar y tampoco hay información en Internet. – mbc

+1

Dije que, como ejemplo, no puede simplemente elegir dos características, tendría que hacer eso con todas sus características para probar la ortogonalidad. Esa es una forma de hacerlo. Encontré dos artículos en portal.acm.org, uno sobre ortogonalidad en los lenguajes de programación generales y uno sobre ortogonalidad en C++. No creo que exista un corte claro * is * or * is not * ortogonal tampoco en este asunto. – bakkal

2

El uso del término lenguaje de programación ortogonal es inusual. Por lo general, en ciencias de la computación realmente está hablando de orthogonal instruction-sets. Sin embargo, si queremos ampliar el significado a la gramática de un idioma:

"... lo que significa que [el lenguaje] tiene un número relativamente pequeño de construcciones básicas y un conjunto de reglas para combinar esas construcciones. tiene un tipo asociado con él y no hay restricciones sobre los tipos ...."see ALGOL

entonces podemos suponer que si no todas las instrucciones en el lenguaje puede trabajar en todos los tipos de datos dará lugar a la no-ortogonalidad. Sin embargo, esto no significa que lo contrario sea cierto, es decir, si todas las instrucciones de idioma funcionan en todos los tipos de datos, esto no significa necesariamente que el idioma sea ortogonal.

Más formalmente, un lenguaje ortogonal tendría exactamente UNA forma de hacer una operación determinada. Los lenguajes no ortogonales tendrían más de una forma de lograr el mismo efecto.

ejemplo más simple:

for loop; vs. while loop; 

para y mientras no son ortogonales.

+0

Por otra parte, muchos programadores ignoran la diferencia semántica entre los bucles for y while. Este es un problema que no está directamente relacionado con la ortogonalidad del lenguaje en sí mismo, pero en mi humilde opinión es un tema subyacente mucho más grande, que demuestra cierta falta de comprensión en los conceptos abstractos básicos. – Schedler

+0

Diría que aunque es "super" para (en terminología OOP), o "contiene" para (en términos de conjuntos) en que cualquier ciclo for se puede expresar como un tiempo, pero no todos los ciclos while se pueden expresar como para bucles. ¿Cómo impacta esto la ortogonalidad? Estoy leyendo en wikipedia, y parece que, dado que hay dos formas de hacer bucles, no sé. – Thufir

+0

En realidad esto se considera Simplicidad cuando se habla de evaluación de lenguaje –

1

ortogonalidad no es realmente una característica del lenguaje como tal, a pesar de que algunos idiomas tienen características que promueven la ortogonalidad (tales como anotaciones, una función de AOP, ..). Con respecto a la ortogonalidad en Java: He escrito un pequeño estudio de caso sobre esto usando log4j como ejemplo: "Orthogonality By Example" - puede que le resulte útil.

1

La falta de ortogonalidad en C:

  • Una matriz puede contener cualquier tipo de datos excepto void
  • Los parámetros se pasan por valor pero array se pasan por referencia
  • idioma

Una programación es considerar ortogonal if:

  1. hay un conjunto relativamente pequeño de construcciones primitivas que se pueden combinar en un número relativamente pequeño de maneras de construir estructuras de datos y de control

  2. todas las estructuras posibles es legal

Por ejemplo un idioma con 4 los tipos de datos primitivos (Int, Float, Double, Char) y dos operadores de tipo
(matriz y puntero) pueden crear una cantidad relativamente grande de estructuras de datos.

Así que la ventaja de la ortogonalidad es hacer que el lenguaje sea simple y regular porque hay menos excepciones.