viernes, 22 de julio de 2022







 








Desde sus comienzos, el desarrollo de software ha estado en constante evolución, y en las últimas décadas han surgido varios paradigmas de programación que han contribuido a hacerlo más eficiente. Cada etapa de la evolución se vio marcada por nuevos enfoques para ayudar a los desarrolladores a manejar programas cada vez más complejos. Los primeros programas se crearon mediante procesos a través de conmutadores ubicados en el panel frontal de la computadora. Este enfoque sólo era adecuado para programas pequeños. Seguidamente se inventó el lenguaje ensamblador que permitió escribir programas más largos, luego otro avance importante ocurrió en los años 50 cuando se inventó el primer lenguaje de alto nivel (FORTRAN) [9]. 

Con los lenguajes de alto nivel, un programador estaba capacitado para escribir programas con una longitud de varios de miles de líneas; sin embargo, este enfoque presentaba el inconveniente de tener un código ilegible y difícil de tratar que se convertía en “código espagueti”. La eliminación del “código espagueti” se consiguió con la creación de los lenguajes de programación estructurados en los años sesenta como Algol y Pascal. Con la programación estructurada se hicieron programas basados en estructuras de control bien definidas, bloques de código, la ausencia (o mínimo uso) de la instrucción GOTO, y subrutinas independientes que soportan recursividad y variables locales [9]. 

Aunque la programación estructurada ha obtenido excelentes resultados cuando se aplica a programas moderadamente complejos, nuevos enfoques que promueven la reutilización futura, reducción de posteriores errores y futuro mantenimiento han aperturado la evolución hacia nuevos paradigmas. A partir de este punto surge la Programación Orientada a Objetos (POO), con lenguajes como SmalTalk y recientemente con lenguajes como C++ y Java, que toma las mejores ideas incorporadas en la programación estructurada y las combina con nuevos y potentes conceptos que permiten organizar los programas de forma más efectiva. La POO permite descomponer un problema en subgrupos relacionados. Cada subgrupo pasa a ser un objeto que contiene sus propias instrucciones y datos, de esta manera la complejidad se reduce y el programador puede tratar programas más largos. Este enfoque cuyas principales características son el encapsulamiento, el polimorfismo y la herencia y cuyos objetivos son la abstracción, la modularidad y la reusabilidad, se consolidó hasta hoy como el último paradigma en el desarrollo de software [9] [10]. 

En este contexto y en la búsqueda de resolver múltiples dificultades presentadas durante el ciclo de vida de desarrollo de software, han surgido durante los últimos años nuevas propuestas entre las que se destaca, el enfoque de Desarrollo de Software Orientado a Aspectos (DSOA) [12]; el cual extiende las técnicas tradicionales de desarrollo y en particular las orientadas a objetos, permitiendo a los desarrolladores encapsular en módulos separados las propiedades comunes o áreas de interés que atraviesan el sistema.  Este nuevo paradigma orientado a aspecto surge a partir de la Programación Orientada a Aspectos (POA) [12]. 

La POA, es un enfoque de programación presentado a finales de 1996 por Gregor Kiczales en el Centro de Investigación de XEROX en Palo Alto [28]  (Palo Alto Research Center o PARC), tratando de solucionar el enmarañamiento del código y la dispersión de conceptos originados en la POO de los sistemas. En particular, la POA introduce un término denominado “Aspecto” para separar  o tratar los diferentes conceptos o puntos de interés que se distribuyen a lo largo del código. Se dice por tanto que la POA no rompe con las técnicas de POO, por el contrario las complementa y extiende [28]. 

En el desarrollo de sistemas de software, el modelado, el diseño y la implementación de la funcionalidad básica, recogen aspectos que en muchos casos no son propios al dominio de la aplicación, pero incrementan su complejidad. Estas funcionalidades apuntan hacia el cumplimiento de requisitos no funcionales e inciden sobre la calidad del producto final. Estas incumbencias generalmente delimitan las condiciones en que el sistema presta servicios a los usuarios y se especifican como seguridad, tolerancia a fallos, persistencia, eficiencia, entre otras. En muchos casos estas incumbencias se entrecruzan a la funcionalidad principal, este problema es referido en la bibliografía como incumbencias transversales (“crosscutting concerns”) [29], dificultando el mantenimiento y evolución del sistema de software. La POA plantea la solución al problema de las incumbencias transversales, sin embargo no está muy claro y definido las tecnologías asociadas a este nuevo paradigma. Ante una diversidad de posiciones y criterios de parte de la comunidad internacional y nacional resulta importante resaltar que para lograr el dominio y posterior adopción del paradigma, se hace necesario estimular estudios tendientes al análisis y desarrollo del conocimiento tecnológico necesario que gira alrededor de la POA. El objetivo de este trabajo es estudiar las tecnologías propias a la POA para el tratamiento de requisitos no funcionales, como un punto de partida que permita consolidar este enfoque como la nueva generación en la evolución de los sistemas de software.


Bibliografía: 

Córdova T., Carlos A. IMPLEMENTACIÓN DE REQUISITOS NO FUNCIONALES A TRAVÉS DE LA PROGRAMACIÓN ORIENTADA A ASPECTOS. Trabajo de Grado UNA. Cumaná, Venezuela. 2007.