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?
fuente
Respuestas:
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.
fuente
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.
fuente
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.
fuente