Programacion Orientada A Aspectos Poa
Enviado por lioxd • 29 de Agosto de 2013 • 1.064 Palabras (5 Páginas) • 286 Visitas
La ingeniería del software ciertamente ha evolucionado desde sus comienzos.
Al principio, se tenía un código en el que no existía la separación de conceptos; datos
y funcionalidad se mezclaban sin una línea que los dividiera claramente. A esta
etapa se la conoce como código spaghetti, debido a que se tenía una maraña entre
datos y funcionalidad similar a la que se forma al comer un plato de esta comida
italiana.
A medida que la ingeniería de software fue creciendo, se fueron
introduciendo conceptos que llevaron a una programación de más alto nivel: la
noción de tipos, bloques estructurados, agrupamientos de instrucciones a través de
procedimientos y funciones como una forma primitiva de abstracción, unidades,
módulos, tipos de datos abstractos, genericidad, herencia. Como vemos, los
progresos más importantes se han obtenido aplicando tres principios, los cuales están
estrechamente relacionados entre sí: abstracción, encapsulamiento, y modularidad.
Esto último consiste en la noción de descomponer un sistema complejo en
subsistemas más fáciles de manejar, siguiendo la antigua técnica de “dividir y
conquistar”.
Un avance importante lo introdujo la Programación Orientada a Objetos
(POO), donde se fuerza el encapsulamiento y la abstracción, a través de una unidad
que captura tanto funcionalidad como comportamiento y estructura interna. A esta
entidad se la conoce como clase. La clase hace énfasis tanto en los algoritmos como
en los datos. La POO está basada en cuatro conceptos [17]:
- Definición de tipos de datos abstractos.
- Herencia
- Encapsulamiento.
- Polimorfismo por inclusión.
La herencia es un mecanismo lingüístico que permite definir un tipo de dato
abstracto derivándolo de un tipo de dato abstracto existente. El nuevo tipo definido
“hereda” las propiedades del tipo padre [17].
Ya sea a través de la POO o con otras técnicas de abstracción de alto nivel, se
logra un diseño y una implementación que satisface la funcionalidad básica, y con
una calidad aceptable. Sin embargo, existen conceptos que no pueden encapsularse
dentro de una unidad funcional, debido a que atraviesan todo el sistema, o varias
parte de él (crosscutting concerns). Algunos de estos conceptos son: sincronización,
manejo de memoria, distribución, chequeo de errores, profiling, seguridad o redes,
entre otros. Así lo muestran los siguientes ejemplos:
1) Consideremos una aplicación que incluya conceptos de seguridad y
sincronización, como por ejemplo, asegurarnos que dos usuarios no
intenten acceder al mismo dato al mismo tiempo. Ambos conceptos
requieren que los programadores escriban la misma funcionalidad en
varias partes de la aplicación. Los programadores se verán forzados a
recordar todas estas partes, para que a la hora de efectuar un cambio
y / o una actualización puedan hacerlo de manera uniforme a través
Programación Orientada a Aspectos: Análisis del Paradigma Tesis de Licenciatura
Fernando Asteasuain – Bernardo Ezequiel Contreras
Departamento de Ciencias e Ingeniería de la Computación – Universidad Nacional del Sur
Bahía Blanca. Buenos Aires. Argentina
7
de todo el sistema. Tan solo olvidarse de actualizar algunas de estas
repeticiones lleva al código a acumular errores [4].
2) Manejo de errores y de fallas: agregar a un sistema simple un buen
manejo de errores y de fallas requiere muchos y pequeños cambios y
adiciones por todo el sistema debido a los diferentes contextos
dinámicos que pueden llevar a una falla, y las diferentes políticas
relacionadas con el manejo de una falla [8].
3) En general, los aspectos en un sistema que tengan que ver con el
atributo performance, resultan diseminados por todo el sistema [8].
Las técnicas de implementación actuales tienden a implementar los
requerimientos usando metodologías de una sola dimensión, forzando los
requerimientos a ser expresados en esa única dimensión. Esta dimensión resulta
adecuada para la funcionalidad básica
...