La Programacin Orientada a Aspectos (POA): es un paradigma de
programacin relativamente reciente cuya intencin es permitir una adecuada modularizacin de las aplicaciones y posibilitar una mejor separacin de conceptos. Gracias a la POA se pueden capturar los diferentes conceptos que componen una aplicacin en entidades bien definidas, de manera apropiada en cada uno de los casos y eliminando las dependencias inherentes entre cada uno de los mdulos. De esta forma se consigue razonar mejor sobre los conceptos, se elimina la dispersin del cdigo y las implementaciones resultan ms comprensibles, adaptables y reusables. Varias tecnologas con nombres diferentes se encaminan a la consecucin de los mismos objetivos y as, el trmino POA es usado para referirse a varias tecnologas relacionadas como los mtodos adaptivos, los filtros de composicin, la programacin orientada a sujetos o la separacin multidimensional de competencias. La programacin orientada a objetos (POO) supuso un gran paso en la ingeniera del software, ya que presentaba un modelo de objetos que pareca encajar de manera adecuada con los problemas reales. La cuestin era saber descomponer de la mejor manera el dominio del problema al que nos enfrentramos, encapsulando cada concepto en lo que se dicen llamar objetos y hacindoles interactuar entre ellos, habindoles dotado de una serie de propiedades. Surgieron as numerosas metodologas para ayudar en tal proceso de descomposicin y aparecieron herramientas que incluso automatizaban parte del proceso. Esto no ha cambiado y se sigue haciendo en el proceso de desarrollo del software. Sin embargo, frecuentemente la relacin entre la complejidad de la solucin y el problema resuelto hace pensar en la necesidad de un nuevo cambio. As pues, nos encontramos con muchos problemas donde la POO no es suficiente para capturar de una manera clara todas las propiedades y comportamientos de lo que queremos dotar nuestra aplicacin. As mismo, la programacin procedural tampoco nos soluciona el problema. Por lo que ante tales problemas, se utiliza la POA. Los conceptos y tecnologas reunidos bajo el nombre "programacin orientada a aspectos" (AOP, por las siglas de Aspect-OrientedProgramming; o AOSD, por Aspect-Oriented Software Development) buscan resolver un problema identificado hace tiempo en el desarrollo de software. Se trata del problema de la separacin de incumbencias (separation of concerns). AOP no es el nico intento por solucionar este problema, del que se habla a continuacin: hay varias propuestas, muchas de las cuales se agrupan (junto con AOP) en el campo de estudio denominado ASoC (Advanced Separationof Concerns).
La programacin orientada a aspectos (POA) es una nueva metodologa de
programacin que aspira a soportar la separacin de competencias para los aspectos antes mencionados. Es decir, que intenta separar los componentes y los aspectos unos de otros, proporcionando mecanismos que hagan posible abstraerlos y componerlos para formar todo el sistema. En definitiva, lo que se persigue es implementar una aplicacin de forma eficiente y fcil de entender.
Principio Separacin de Incumbencias
El principio de separacin de incumbencias fue identificado en la dcada de 1970, plantea que un problema dado involucra varias incumbencias que deben ser identificadas y separadas. Las incumbencias son los diferentes temas o asuntos de los que es necesario ocuparse para resolver el problema. Una de ellas es la funcin especfica que debe realizar una aplicacin, pero tambin surgen otras como por ejemplo distribucin, persistencia, replicacin, sincronizacin, etc. Separando las incumbencias, se disminuye la complejidad a la hora de tratarlas y se puede cumplir con requerimientos relacionados con la calidad como adaptabilidad, mantenibilidad, extensibilidad y reusabilidad. El principio puede aplicarse de distintas maneras. Por ejemplo, separar las fases del proceso de desarrollo puede verse como una separacin de actividades de ingeniera en el tiempo y por su objetivo. Definir subsistemas, objetos y componentes son otras formas de poner en prctica el principio de separacin de incumbencias. Por eso podemos decir que se trata de un principio rector omnipresente en el proceso de desarrollo de software. Las tcnicas de modelado que se usan en la etapa de diseo de un sistema se basan en partirlo en varios subsistemas que resuelvan parte del problema o correspondan a una parte del dominio sobre el que trata. Estas tcnicas sufren en su mayora la llamada "tirana de la descomposicin dominante" que consiste en guiarse al modelar, implcita o explcitamente, por una visin jerrquica determinada de la organizacin del sistema. La desventaja de estas particiones es que muchas de las incumbencias a tener en cuenta para cumplir con los requerimientos (en particular, habitualmente, las incumbencias no funcionales) no suelen adaptarse bien a esa descomposicin, como veremos ms adelante. Las construcciones provistas por los lenguajes de programacin, que fueron creados para implementar los modelos generados por las tcnicas de diseo existentes, reproducen las jerarquas y, por lo tanto, comparten el defecto explicado en el prrafo anterior. En el paradigma de programacin imperativa, la descomposicin consiste en identificar procedimientos que resuelvan parte del problema, y la jerarqua se da en el rbol de ejecucin, segn el cual los procedimientos se invocan unos a otros. En el caso de la programacin
orientada a objetos, la jerarqua generada en la etapa de diseo suele
plasmarse en las relaciones de herencia o de composicin entre objetos. Por ejemplo, algunos patrones de diseo de uso habitual como observador (observer), visitante (visitor) y mediador (mediator) exhiben estos problemas, ya que para aplicarlos es necesario adaptar a ellos ms de una clase.
Fundamentos de la Programacin Orientada a Aspectos
Para tener un programa orientado a aspectos necesitamos definir los siguientes elementos:
Un lenguaje para definir la funcionalidad bsica. Este lenguaje se conoce
como lenguaje base. Suele ser un lenguaje de propsito general, tal como C++ o Java. En general, se podran utilizar tambin lenguajes no imperativos. El lenguaje de aspectos define la forma de los aspectos por ejemplo, los aspectos de AspectJ se programan de forma muy parecida a las clases. El tejedor se encargar de combinar los lenguajes. El proceso de mezcla se puede retrasar para hacerse en tiempo de ejecucin, o hacerse en tiempo de compilacin.
Caracteristicas de POA De la consecucin de estos objetivos se pueden obtener las siguientes ventajas:
Un cdigo menos enmaraado, ms natural y ms reducido.
Una mayor facilidad para razonar sobre las materias, ya que estn separadas y tienen una dependencia mnima. Ms facilidad para depurar y hacer modificaciones en el cdigo. Se consigue que un conjunto grande de modificaciones en la definicin de una materia tenga un impacto mnimo en las otras. Se tiene un cdigo ms reusable y que se puede acoplar y desacoplar cuando sea necesario.