fbpx
Wikipedia

Programación orientada a aspectos

La Programación Orientada a Aspectos o POA (en inglés: aspect-oriented programming) es un paradigma de programación que permite una adecuada modularización de las aplicaciones y posibilita una mejor separación de responsabilidades (Obligación o correspondencia de hacer algo).

Gracias a la POA se pueden encapsular los diferentes conceptos que componen una aplicación en entidades bien definidas, eliminando las dependencias entre cada uno de los módulos. De esta forma se consigue razonar mejor sobre los conceptos, se elimina la dispersión del código y las implementaciones resultan más comprensibles, adaptables y reusables. Varias tecnologías con nombres diferentes se encaminan a la consecución de los mismos objetivos y así, el término POA es usado para referirse a varias tecnologías relacionadas como los métodos adaptativos, los filtros de composición, la programación orientada a sujetos o la separación multidimensional de competencias.

Objetivo

El principal objetivo de la POA es la separación de las funcionalidades dentro del sistema:

  • Por un lado funcionalidades comunes utilizadas a lo largo de la aplicación.
  • Por otro lado, las funcionalidades propias de cada modelo

Cada funcionalidad común se encapsulará en una entidad.

Conceptos Básicos

  • Aspecto (en inglés Aspect) es una funcionalidad transversal (cross-cutting) que se va a implementar de forma modular y separada del resto del sistema. El ejemplo más común y simple de un aspecto es el logging (registro de sucesos) dentro del sistema, ya que necesariamente afecta a todas las partes del sistema que generan un suceso.
  • Punto de Cruce o de Unión (en inglés Join point) es un punto de ejecución dentro del sistema donde un aspecto puede ser conectado, como una llamada a un método, el lanzamiento de una excepción o la modificación de un campo. El código del aspecto será insertado en el flujo de ejecución de la aplicación para añadir su funcionalidad.
  • Consejo (en inglés Advice) es la implementación del aspecto, es decir, contiene el código que implementa la nueva funcionalidad. Se insertan en la aplicación en los Puntos de Cruce.
  • Puntos de Corte (en inglés Pointcut) define los Consejos que se aplicarán a cada Punto de Cruce. Se especifica mediante Expresiones Regulares o mediante patrones de nombres (de clases, métodos o campos), e incluso dinámicamente en tiempo de ejecución según el valor de ciertos parámetros.
  • Introducción (en inglés Introduction) permite añadir métodos o atributos a clases ya existentes. Un ejemplo en el que resultaría útil es la creación de un Consejo de Auditoría que mantenga la fecha de la última modificación de un objeto, mediante una variable y un método setUltimaModificacion(fecha), que podrían ser introducidos en todas las clases (o sólo en algunas) para proporcionarles esta nueva funcionalidad.
  • Destinatario (en inglés Target) es la clase aconsejada, la clase que es objeto de un consejo. Sin AOP, esta clase debería contener su lógica, además de la lógica del aspecto.
  • Resultante (en inglés Proxy) es el objeto creado después de aplicar el Consejo al Objeto Destinatario. El resto de la aplicación únicamente tendrá que soportar al Objeto Destinatario (pre-AOP) y no al Objeto Resultante (post-AOP).
  • Tejido (en inglés Weaving) es el proceso de aplicar Aspectos a los Objetos Destinatarios para crear los nuevos Objetos Resultantes en los especificados Puntos de Cruce. Este proceso puede ocurrir a lo largo del ciclo de vida del Objeto Destinatario:
    • Aspectos en Tiempo de Compilación, que necesita un compilador especial.
    • Aspectos en Tiempo de Carga, los Aspectos se implementan cuando el Objeto Destinatario es cargado. Requiere un ClassLoader especial.
    • Aspectos en Tiempo de Ejecución.

Problemas de otros paradigmas

Muchas veces nos encontramos, a la hora de programar, con problemas que no podemos resolver de una manera adecuada con las técnicas habituales usadas en la programación imperativa o en la programación orientada a objetos. Con éstas, nos vemos forzados a tomar decisiones de diseño que repercuten de manera importante en el desarrollo de la aplicación y que nos alejan con frecuencia de otras posibilidades.

A menudo, hace falta escribir líneas de código que están distribuidas por toda o gran parte de la aplicación, para definir la lógica de cierta propiedad o comportamiento del sistema, con las consecuentes dificultades de mantenimiento y desarrollo. En inglés este problema se conoce como scattered code, que podríamos traducir como código disperso. Otro problema que puede aparecer, es que un mismo módulo implemente múltiples comportamientos o aspectos del sistema de forma simultánea. En inglés este problema se conoce como tangled code, que podríamos traducir como código enmarañado. El hecho es que hay ciertas decisiones de diseño que son difíciles de capturar, debido a que determinados problemas no se pueden encapsular claramente de igual forma que los que habitualmente se resuelven con funciones u objetos.

Desarrollo en POA

AspectC++ es un compilador que permite desarrollar aspectos en C++.

AspectJ es una extensión Java del proyecto Eclipse para ayudar en el desarrollo orientado a aspectos.

Aspect, un módulo Perl disponible en CPAN para la Programación Orientada a Aspectos (en inglés).

PHP-AOP (AOP.io) es una lib que proporciona todo el paradigma de la POA en PHP.

phpAspect es una extensión PHP para implementar el paradigma de la POA, que, mediante árboles de decisión XML, realiza el weaving del software para ser ejecutado como PHP estándar.

FLOW3 es un framework MVC de PHP incluye un para poder realizar Programación orientada a Aspectos en nuevos desarrollos.

AOP con SpringFramework 2.5 es un Framework de Java que permite programar en el paradigma de Aspectos utilizando Anotación Java.

es un módulo de Python que permite incluir Programación orientada a Aspectos a programas ya existentes escritos en Python o a nuevos desarrollos.

Enlaces externos

  • Grupo de investigación Demeter
  • aosd.net - Desarrollo de Software Orientado a Aspectos
  • LOOM.NET
  • SPRING.NET
  • Addressing aspect interactions in an industrial setting: experiences, problems and solutions. Zambrano Polo y La Borda, Arturo Federico (5 de junio de 2013).

Páginas de personas involucradas en la investigación de la POA:

  • Gregor Kiczales
  • Cristina Videira Lopes
  • Karl Lieberherr
  • Stefan Hanenberg
  • Antonia Mª Reina Quintero
  •   Datos: Q30267

programación, orientada, aspectos, programación, orientada, aspectos, inglés, aspect, oriented, programming, paradigma, programación, permite, adecuada, modularización, aplicaciones, posibilita, mejor, separación, responsabilidades, obligación, correspondencia. La Programacion Orientada a Aspectos o POA en ingles aspect oriented programming es un paradigma de programacion que permite una adecuada modularizacion de las aplicaciones y posibilita una mejor separacion de responsabilidades Obligacion o correspondencia de hacer algo Gracias a la POA se pueden encapsular los diferentes conceptos que componen una aplicacion en entidades bien definidas eliminando las dependencias entre cada uno de los modulos De esta forma se consigue razonar mejor sobre los conceptos se elimina la dispersion del codigo y las implementaciones resultan mas comprensibles adaptables y reusables Varias tecnologias con nombres diferentes se encaminan a la consecucion de los mismos objetivos y asi el termino POA es usado para referirse a varias tecnologias relacionadas como los metodos adaptativos los filtros de composicion la programacion orientada a sujetos o la separacion multidimensional de competencias Indice 1 Objetivo 2 Conceptos Basicos 3 Problemas de otros paradigmas 4 Desarrollo en POA 5 Enlaces externosObjetivo EditarEl principal objetivo de la POA es la separacion de las funcionalidades dentro del sistema Por un lado funcionalidades comunes utilizadas a lo largo de la aplicacion Por otro lado las funcionalidades propias de cada modeloCada funcionalidad comun se encapsulara en una entidad Conceptos Basicos EditarAspecto en ingles Aspect es una funcionalidad transversal cross cutting que se va a implementar de forma modular y separada del resto del sistema El ejemplo mas comun y simple de un aspecto es el logging registro de sucesos dentro del sistema ya que necesariamente afecta a todas las partes del sistema que generan un suceso Punto de Cruce o de Union en ingles Join point es un punto de ejecucion dentro del sistema donde un aspecto puede ser conectado como una llamada a un metodo el lanzamiento de una excepcion o la modificacion de un campo El codigo del aspecto sera insertado en el flujo de ejecucion de la aplicacion para anadir su funcionalidad Consejo en ingles Advice es la implementacion del aspecto es decir contiene el codigo que implementa la nueva funcionalidad Se insertan en la aplicacion en los Puntos de Cruce Puntos de Corte en ingles Pointcut define los Consejos que se aplicaran a cada Punto de Cruce Se especifica mediante Expresiones Regulares o mediante patrones de nombres de clases metodos o campos e incluso dinamicamente en tiempo de ejecucion segun el valor de ciertos parametros Introduccion en ingles Introduction permite anadir metodos o atributos a clases ya existentes Un ejemplo en el que resultaria util es la creacion de un Consejo de Auditoria que mantenga la fecha de la ultima modificacion de un objeto mediante una variable y un metodo setUltimaModificacion fecha que podrian ser introducidos en todas las clases o solo en algunas para proporcionarles esta nueva funcionalidad Destinatario en ingles Target es la clase aconsejada la clase que es objeto de un consejo Sin AOP esta clase deberia contener su logica ademas de la logica del aspecto Resultante en ingles Proxy es el objeto creado despues de aplicar el Consejo al Objeto Destinatario El resto de la aplicacion unicamente tendra que soportar al Objeto Destinatario pre AOP y no al Objeto Resultante post AOP Tejido en ingles Weaving es el proceso de aplicar Aspectos a los Objetos Destinatarios para crear los nuevos Objetos Resultantes en los especificados Puntos de Cruce Este proceso puede ocurrir a lo largo del ciclo de vida del Objeto Destinatario Aspectos en Tiempo de Compilacion que necesita un compilador especial Aspectos en Tiempo de Carga los Aspectos se implementan cuando el Objeto Destinatario es cargado Requiere un ClassLoader especial Aspectos en Tiempo de Ejecucion Problemas de otros paradigmas EditarMuchas veces nos encontramos a la hora de programar con problemas que no podemos resolver de una manera adecuada con las tecnicas habituales usadas en la programacion imperativa o en la programacion orientada a objetos Con estas nos vemos forzados a tomar decisiones de diseno que repercuten de manera importante en el desarrollo de la aplicacion y que nos alejan con frecuencia de otras posibilidades A menudo hace falta escribir lineas de codigo que estan distribuidas por toda o gran parte de la aplicacion para definir la logica de cierta propiedad o comportamiento del sistema con las consecuentes dificultades de mantenimiento y desarrollo En ingles este problema se conoce como scattered code que podriamos traducir como codigo disperso Otro problema que puede aparecer es que un mismo modulo implemente multiples comportamientos o aspectos del sistema de forma simultanea En ingles este problema se conoce como tangled code que podriamos traducir como codigo enmaranado El hecho es que hay ciertas decisiones de diseno que son dificiles de capturar debido a que determinados problemas no se pueden encapsular claramente de igual forma que los que habitualmente se resuelven con funciones u objetos Desarrollo en POA EditarAspectC es un compilador que permite desarrollar aspectos en C AspectJ es una extension Java del proyecto Eclipse para ayudar en el desarrollo orientado a aspectos Aspect un modulo Perl disponible en CPAN para la Programacion Orientada a Aspectos en ingles PHP AOP AOP io es una lib que proporciona todo el paradigma de la POA en PHP phpAspect es una extension PHP para implementar el paradigma de la POA que mediante arboles de decision XML realiza el weaving del software para ser ejecutado como PHP estandar FLOW3 es un framework MVC de PHP incluye un modulo para poder realizar Programacion orientada a Aspectos en nuevos desarrollos AOP con SpringFramework 2 5 es un Framework de Java que permite programar en el paradigma de Aspectos utilizando Anotacion Java Aspyct AOP es un modulo de Python que permite incluir Programacion orientada a Aspectos a programas ya existentes escritos en Python o a nuevos desarrollos Enlaces externos EditarPagina oficial de AspectJ Grupo de investigacion Demeter aosd net Desarrollo de Software Orientado a Aspectos LOOM NET SPRING NET Addressing aspect interactions in an industrial setting experiences problems and solutions Zambrano Polo y La Borda Arturo Federico 5 de junio de 2013 Paginas de personas involucradas en la investigacion de la POA Gregor Kiczales Mira Mezini Cristina Videira Lopes Karl Lieberherr Stefan Hanenberg Antonia Mª Reina Quintero Datos Q30267 Obtenido de https es wikipedia org w index php title Programacion orientada a aspectos amp oldid 122729854, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos