Download Programación Orientada a Aspectos

Document related concepts

Programación funcional wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Common Lisp wikipedia , lookup

Ocaml wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Transcript
PROGRAMACIÓN ORIENTADA A
ASPECTOS
HANS A. HERNANDEZ S. C.I. V-17.313.096
Programación Orientada a Aspectos
●
Análisis evolutivo de la
programación.
● POO. ¿Que le
faltó? ¿como se
puede mejorar?
●
POA. ¿Que justifica su
existencia? ¿Que es?
Ventajas. ¿Qué se necesita
par aplicarlo?
● POA. ¿Que conceptos
maneja?. Con un
ejemplo se entiende
más rápido.
Programación Orientada a Aspectos
Al finalizar la exposición deberíamos
saber:
•¿Qué es POA y por qué surgió?
•¿Qué lo diferencia de POO?
•¿Que se necesita para desarrollarlo?
•¿Cómo es un programa desarrollado
con el paradigma de POA?.
Programación Orientada a Aspectos
Análisis evolutivo de la programación:
•Programación imperativa: Etapa código espagueti. Datos
y funcionalidades mezcladas, no había separación de
conceptos.
•Programación Funcional. División por funcionalidades,
basado en las funciones aritméticas. Desventaja: datos
compartidos y esparcidos por todo el código (scattering)
•POO: datos + comportamiento, modularidad, Desventaja:
funciones esparcidas por todo el código, a veces repetitivas.
•POA:…….
Programación Orientada a Aspectos
Resolvamos problemas partiendo desde otro
principio:
Basado en los principios de Separación de incumbencias que
establece que para resolver un problema hay que separarlo en
diferentes temas o asuntos. 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.
Se generan incumbencias transversales, que cruzan diferentes
partes del sistema.
Lo que genera 2 problemas:
•Código disperso: un mismo servicio invocado múltiples veces
•Código enmarañado: una misma operación realiza otras
funciones adicionales que no son su fundamento.
Programación Orientada a Aspectos
Programación Orientada a Aspectos (POA) es un paradigma cuya intención
es permitir una adecuada modularización de las aplicaciones, posibilitando
mejor separación de incumbencias. Separa componentes de aspectos
creando un mecanismo para abstraerlos y componerlos para formar todo el
sistema.
Presentación
Loggin
Concurrencia
¿Aspecto?
Es la unidad que encapsula uno o más conceptos transversales, y que con la
programación orientada a objetos no es posible diferenciarlo de forma clara.
POA permite tratar la funcionalidad pura por un lado, y los aspectos por otro, de
forma separada. Luego ambos se combinan con un tipo de programa llamado
'Weaver') para dar por resultado el sistema final.
Otros conceptos:
Joint point (punto de enlace) es el punto de ejecución dentro del
sistema donde un aspecto puede ser conectado. Puede ser una
llamada a un método, el lanzamiento de una excepción o la
modificación de un campo.
Pointcut (punto de corte) define los Advice (consejos) que se
aplicarán a cada punto de enlace.
Advice (consejo) es la implementación del aspecto.
Introducciones (introduction) permiten cambiar la estructura de
clases de un programa agregando o extendiendo interfaces y clases
con nuevos atributos, constructores o métodos.
Programación Orientada a Aspectos
Estructura Tradicional
Estructura POA
POO
Comparación
y
•POO agrupa clases en
función
de
conceptos
comunes .
•El sistema toma forma de
un conjunto de objetos que
colaboran entre sí.
•Falla al modelar conceptos
que se entrecruzan.
•Crea
implementaciones
modularizadas
enfocado
en los conceptos comunes
y los ubica en el árbol de
herencia.
POA
•POA trata a los conceptos
entrecruzados y los coloca como
elementos de primera clase,
extrañándolos horizontalmente de
la estructura vertical del árbol de
herencia.
•Crea
implementaciones
modularizadas pero se enfoca en
los conceptos que se entrecruzan.
•POA puede utilizar como base
cualquier
paradigma
de
programación.
POO y POA no son lo mismo, ni tampoco una deriva de la otra.
Programación Orientada a Aspectos
¿Qué se necesita par aplicarlo?
1. Un lenguaje para definir la funcionalidad básica, conocido como
lenguaje base. El mismo puede ser un lenguaje imperativo, o no.
Por ejemplo C++, Java, PHP, Python, Perl, Etc.
2. • Uno o varios lenguajes de aspectos, para especificar el
comportamiento de los distintos aspectos. Algunos ejemplos
son: AspectJ, AspectC, phpAspect, Aspyct, Aspect, Cool, RIDL,
etc.
3. • Un tejedor de aspectos, del inglés weaver, que se encarga de
combinar los lenguajes (componentes y aspectos) en tiempo de
ejecución o de compilación.
Ventajas y Desventajas
•Un código menos enmarañado,
más natural y más reducido.
•Una mayor facilidad para
razonar sobre las materias, ya
que están separadas y tienen una
dependencia mínima.
•Más facilidad para depurar y
hacer modificaciones en el
código.
•Se consigue que un conjunto
grande de modificaciones en la
definición de una materia tenga
un impacto mínimo en las otras.
•Se tiene un código más reusable
y que se puede acoplar y
desacoplar cuando sea necesario.
El diseño de los puntos de enlace entre los
aspectos es más complejo.
• Se debe tener en cuenta el análisis de
nuevas
características dentro del desarrollo de
sistemas.
• Surgen nuevos problemas de choque
entre el lenguaje base y el lenguaje
funcional.
• Pueden existir problemas de herencia de
un aspecto a otro.
Con un ejemplo se entiende más fácilmente.
Cuenta bancaria
Aplicando primera solución
Solución con Diseño POA.
Gracias