¿Es la programación orientada a aspectos un nombre inapropiado?

8

De todo lo que he aprendido sobre "Programación orientada a aspectos" o "Desarrollo de software orientado a aspectos", etiquetarlo como un paradigma o metodología de programación parece ser inexacto. Por lo que puedo decir, no es una técnica fundamental para la programación.

Para precisar qué se entiende por "paradigma" y "metodología", consulte las siguientes definiciones del American Heritage Dictionary. Compare qué tan bien o mal se aplica la "Programación Orientada a Objetos" a cada uno versus qué tan bien se ajusta el AOP.

Paradigma: conjunto de supuestos, conceptos, valores y prácticas que constituyen una forma de ver la realidad para la comunidad que los comparte, especialmente en una disciplina intelectual.

Metodología: conjunto de prácticas, procedimientos y reglas utilizados por quienes trabajan en una disciplina o realizan una investigación; Un conjunto de métodos de trabajo.

La "medicina basada en la evidencia" satisface la definición de paradigma, pero la "medicina basada en la histerectomía" sería un nombre inapropiado porque el espacio del problema es demasiado estrecho.

Tengo la impresión de que AOP puede tener un nombre incorrecto porque, basándose en el sufijo de "programación orientada", AOP alega ser tanto un paradigma como una metodología de la misma manera que lo es la "Programación orientada a objetos".

Ambos términos (paradigma y metodología) indican una técnica fundamental, donde lo que entiendo sobre los aspectos es una tecnología para resolver un alcance de problema estrecho, quizás comparable en magnitud a la característica variable estática de Java.

Si es cierto que los aspectos resuelven un conjunto limitado de problemas, y AOP no es un nombre inapropiado, entonces, ¿por qué no todas las técnicas de programación deberían recibir el sufijo "programación orientada a la herencia", como "programación orientada a la herencia", "dependencia- programación orientada "o" ¿programación orientada al alcance?

glenviewjeff
fuente
¿Tiene un ejemplo de una metodología de desarrollo de software real?
back2dos

Respuestas:

3

Creo que este es un tema realmente dudoso porque la definición de "metodología" y "paradigma" y "programación orientada" es potencialmente un poco floja en este contexto, pero voy a jugar al abogado del diablo y decir " sí, es un nombre inapropiado ".

Incluso si no usó AOP o las características de AOP para resolver un problema, todavía estaría pensando en esos aspectos; puede que los tenga escritos como documentación en alguna parte, o puede usar un generador de código; de cualquier manera, el concepto de aspectos sigue ahí. Eso también podría ir con cualquier paradigma; aunque sería bastante feo, aún podrías hacer POO en C.

Entonces, ¿eso no significaría que AOP es tan una metodología como lo es OOP? Creo que hay más que eso.

La razón es que una metodología ofrece solución a un tipo particular de problema . No utiliza más de una metodología para resolver un problema conceptual, aunque podría utilizar dos o más en el esquema más amplio. Puede usar OOP y de procedimiento para escribir una IU de entrada de datos, pero solo está usando OOP para describir la estructura abstracta de la IU, y solo está usando procedimientos (más exactamente, métodos) para describir su comportamiento. En los componentes centrales de un problema, las metodologías son mutuamente excluyentes, y AOP aún puede participar en la resolución de un problema con código funcional, OOP o de procedimiento.

AOP resuelve problemas en el sentido de que reduce la cantidad de código repetido, pero eso está dentro de la descripción del trabajo de una función de lenguaje. Realmente no ha resuelto ningún problema real conceptualmente al decir que obtendrá el compilador o el tiempo de ejecución para inyectar un código que no tuvo que escribir explícitamente; Acabas de hacer tu código un poco más organizado. Declarar que "todas mis funciones registrarán sus tiempos de inicio y finalización" no es una solución a un problema; Es solo una declaración del problema.

Creo que sería más apropiado para ellos simplemente llamarse "Aspectos", como una característica del lenguaje.

Rei Miyasaka
fuente
2
AOP definitivamente no es la misma categoría de cosas que OOP. Creo que lo que sucedió es que alguien dijo "los aspectos son una construcción del lenguaje; los objetos son una construcción del lenguaje; si estás usando objetos, estás haciendo POO; POR LO TANTO, si estás usando aspectos, estás haciendo AOP". Cuando realmente, una construcción comparable a un aspecto sería una excepción, un puntero de función o algo así, y nadie dice "programación orientada a la excepción".
Tom Anderson
@Tom Esa es una forma realmente convincente de verlo.
Rei Miyasaka
5

Todas las metodologías de desarrollo son meramente formas de pensar sobre la organización del código. Cada metodología de desarrollo puede producir un código de aspecto muy diferente, o pueden producir un código similar. También pueden requerir bibliotecas o funciones de idioma para soporte.

En C ++, por ejemplo, AOP se implementa típicamente usando clases de rasgos y polimorfismo en tiempo de compilación. No es una "característica" del lenguaje en absoluto: construye los diversos aspectos de su tipo y los combina como quiera con las plantillas.

En lenguajes como Java que no tienen plantillas, es necesario utilizar funciones de lenguaje dedicadas proporcionadas por preprocesadores (p AspectJ. Ej. ) Para programar de manera orientada a los aspectos, simplemente porque el lenguaje original no tiene la capacidad de implementando el verdadero AOP en sí mismo.

Como resultado, los programas AOP se verán muy diferentes en C ++ en comparación con Java, pero lo más importante es cómo el programador está pensando en su diseño, no en cómo se ve el código.

Por lo tanto, AOP ciertamente es una metodología de desarrollo.

Billy ONeal
fuente
1
+1. Noam Chomsky dice que el lenguaje es lo que define la cognición, y está limitado y basado en la forma en que formula sus pensamientos. En otras palabras, puede abordar todo como una característica del lenguaje, pero no será útil.
P Shved
Utiliza la frase "metodología de desarrollo" y luego dice que se trata de organizar el código. Eso no es cierto: la metodología de desarrollo se refiere específicamente al proceso. Los ejemplos de metodologías de desarrollo son iterativos, incrementales, secuenciales, ágiles, etc. AOP no es una metodología de desarrollo. Sin embargo, es un paradigma de programación.
Thomas Owens
@Thomas: Creo que podemos estar de acuerdo en estar en desacuerdo allí. :)
Billy ONeal
Creo que el problema aquí es que hay muchos ángulos que deben considerarse durante el desarrollo del software: manejo de errores, alcance, encapsulación, etc. Cada una de esas dimensiones estrechamente enfocadas no constituye su propio paradigma o metodología. Mi pregunta realmente está tratando de descubrir, "¿son aspectos de alcance limitado" como estas características? Si es así, AOP tiene un nombre incorrecto.
glenviewjeff
1

Aquí hay dos cosas en juego: paradigma de programación versus metodología de desarrollo de software .

Sí, la programación orientada a aspectos es un paradigma de programación. Aprovecha ciertas características del lenguaje para representar las construcciones que son necesarias para llevar a cabo una tarea o para hacer que el código sea más legible. Es una técnica que puede ser empleada por un programador. Muchas veces, usted ve el AOP utilizado junto con la Programación Orientada a Objetos para eliminar preocupaciones transversales. Sin embargo, también puede implementar programación orientada a aspectos además de un lenguaje funcional. No es necesariamente un paradigma completamente nuevo, sino una extensión de OOP y programación funcional para aliviar problemas conocidos. La razón principal por la que creo que debería considerarse un paradigma es que cambia la forma en que piensas acerca de llegar a una solución al problema. Al igual que la programación funcional, la programación de procedimientos, la programación lógica y la programación orientada a objetos tienen soluciones drásticamente diferentes al mismo problema, la programación orientada a aspectos agrega otra solución al conjunto de problemas.

No, la programación orientada a aspectos no es una metodología de desarrollo. Una metodología de desarrollo es un marco que puede usar para crear un sistema de software. Especifica qué tareas lleva a cabo y cómo las lleva a cabo, desde los requisitos hasta el final de la vida útil. AOP no dice nada sobre esto. Sin embargo, algunos paradigmas de programación han llevado a enfoques de metodología de desarrollo para el ciclo de vida del software. Hubo un enfoque llamado Ingeniería de software orientada a objetos, que fue desarrollado por Ivar Jacobsonque especificó un ciclo de vida completo para diseñar y desarrollar sistemas orientados a objetos, pero ha caído en desgracia y ha sido reemplazado por UML y Rational Unified Process. Sinceramente, no veo las metodologías de influencia de AOP de la misma manera que lo hizo OOP. De hecho, solo mirar las tendencias parece indicar que las metodologías deberían trascender el lenguaje y los paradigmas utilizados para construir el software. Puede haber técnicas de modelado enfocadas en AOP y vocabulario utilizado durante el diseño y desarrollo, pero no veo una metodología completa centrada en AOP.

Thomas Owens
fuente
El diccionario American Heritage define el paradigma como "Un conjunto de supuestos, conceptos, valores y prácticas que constituyen una forma de ver la realidad para la comunidad que los comparte, especialmente en una disciplina intelectual". La programación orientada a objetos me parece claramente una técnica para modelar la realidad. En mi experiencia de codificación, todavía tengo que encontrar un caso de uso aplicable para el soporte del lenguaje AOP, y tan abierto como me veo a mí mismo, en este punto me parece un enorme salto aplicar la etiqueta del paradigma a los aspectos.
glenviewjeff
@glenviewjeff Así no se define el término "paradigma" cuando se refiere a un paradigma de programación. En este contexto, un paradigma es un método para resolver un problema. La orientación de aspecto es solo eso: está utilizando aspectos para resolver un problema. Si busca la definición de paradigma de programación, las primeras páginas de búsquedas de Google concuerdan con mi definición. Es muy común, especialmente en el campo técnico, que las palabras cambien el significado de su uso común.
Thomas Owens
1
AOP no es un paradigma. Es una instalación útil, pero es una característica en un paisaje, no un paisaje en sí mismo.
Tom Anderson
no es que una oración de Wikipedia sin fuente sea una referencia confiable, pero ciertamente está a la par con una colección de resultados de Google sin fuente. La primera oración en el artículo de Wikipedia sobre "paradigma de programación" dice "Un paradigma de programación es un estilo fundamental de programación de computadoras". Creo que esto es completamente consistente con la definición de paradigma del diccionario American Heritage.
glenviewjeff
1
@Tom Anderson @glenviewjeff La razón por la que sí es un paradigma es que cambia la forma en que piensas sobre un problema. Una característica hace que sea más fácil resolver un problema, pero no cambia su forma de pensar. Un ejemplo de una característica es un ciclo para cada uno: no cambia su forma de pensar acerca de un problema que implica iterar sobre una colección, pero hace que sea más fácil hacerlo. Un paradigma cambia drásticamente cómo llega a su solución, y creo que AOP lo hace. Sin AOP, su solución sería muy, muy diferente que con AOP.
Thomas Owens