AOP depende de dos cosas:
- la capacidad de inyectar código adicional en una unidad existente de código
- Un mecanismo para colocar las condiciones en donde se debe inyectar código.
Esto se conoce comúnmente como código de tejido. Es una especialización dentro del estudio más amplio de la transformación del programa.
Los lenguajes compilados JIT tienen más opciones para implementar el entretejido de códigos que los programas compilados estáticamente porque se conserva más información en el bytecode/IL. También son compatibles con la reflexión, que ofrece la capacidad de manipular código en tiempo de ejecución.
Delphi.NET y Prism tienen el mismo acceso a estas capacidades que cualquier otro lenguaje .NET.
Existen dos marcos AOP para Delphi Win32 que conozco. El primero es MeAOP, que ya se ha mencionado. El segundo es Infra. Ambos proyectos adoptan un enfoque similar al AOP. Utilizan una combinación de RTTI y la manipulación inteligente del puntero para interceptar las llamadas a los métodos para que pueda ejecutar código adicional antes o después de la llamada al método. Usted define su característica transversal como una subclase de la clase AOP del marco. Registra los métodos que desea interceptar pasando el nombre del método como un argumento de cadena al marco AOP.
Ambas estructuras todavía se desarrollan activamente y tienen un alcance mayor que el AOP. Lamentablemente, la documentación es algo escasa (y en el caso de Infra principalmente en portugués)
Otro proyecto intentó AOP a través del código fuente que se remontaba en 2004 con cierto éxito. Básicamente, construyeron un tejedor de aspecto sobre una herramienta de transformación de programa de propósito general llamada DMS y lo usaron para inyectar código en los archivos fuente delphi antes de la compilación. Su aspecto orientado al lenguaje fue influenciado principalmente por AspectJ.
http://www.gray-area.org/Research/GenAWeave/ tiene enlaces al documento original y la presentación, así como algunos videos del proceso de transformación.
También es posible utilizar instrumentación de código de tiempo de ejecución para lograr esto. Es una técnica utilizada por algunos perfiladores para inyectar contadores y apilar trazas en código en ejecución sin modificar la fuente original. Se podría usar una técnica similar para inyectar preocupaciones de corte transversal en un ejecutable compilado estáticamente. El proyecto PinTool es un buen ejemplo de esto.
Para el prisma Delphi, ahora hay soporte para AOP listo para usar: http://prismwiki.codegear.com/en/Cirrus – Miel
AOP también se puede hacer utilizando una tabla de métodos virtuales ocultos (VMT), el tejido no es la única opción. – Johan
¿Cuidar para elaborar? –