ARQUITECTURA DE SOFTWARE BASADA EN EL SISTEMA DE MODULOS

Página creada Hugo Torrez
 
SEGUIR LEYENDO
ARQUITECTURA DE SOFTWARE BASADA EN EL SISTEMA DE MODULOS
Número Especial de la Revista Aristas: Investigación Básica y Aplicada. *** ISSN 2007-9478. *** Vol.7, Núm. 14.   *** Año 2019

ARQUITECTURA DE SOFTWARE BASADA EN EL SISTEMA DE MODULOS
                         JAVA
                            Beverido Castellanos-Julio Andrés, † Juárez Martínez-Ulises, †
              Reyes Hernández-Luis Ángel,† Abud Figueroa-María Antonieta, † Sánchez Cervantes-José Luis
                                       ISC. Beverido Castellanos Julio Andrés
                                 juabeca@hotmail.com, jsanchezc@ito-depi.edu.mx

___________________________________________________________________________________________________
___________________________________________________________________________________________________

Abstract

La complejidad de los sistemas de software se relaciona estrechamente con la falta de modularidad. Si bien
existen alternativas de solución por parte de los lenguajes de programación para resolver esta problemática,
resultan insuficientes dado que se limitan al nivel de código y únicamente cubren algunos puntos relacionados al
tema. Java en versiones previas al JDK 9 dependía de una estructura monolítica para ejecutar sus aplicaciones,
considerando dicha problemática Oracle implementó un sistema de módulos que permite a las aplicaciones
contener únicamente lo que requieren para su ejecución. Con la finalidad de ofrecer un diseño más apegado al
desarrollo modular siguiendo la organización del patrón arquitectónico MVC (Modelo-Vista-Controlador),
resolver los problemas de diseño que presenten los sistemas migrados a Java 9 , y dado que no se reporta en la
literatura una arquitectura basada en el sistema de módulos de Java 9, se propone una arquitectura considerando:
un enfoque de componentes, interfaces requeridas, exportación de interfaces, utilización de servicios y
protección de módulos.

Keywords

Java, Módulo, Arquitectura

Introducción                                                       contribuir al desarrollo modular y mejorar las
                                                                   decisiones de diseño que presenten los sistemas
La modularidad es un tema importante en la                         migrados a Java 9. Cabe destacar que Java 9 fue
comunidad de software dado que permite el                          migrado rápidamente a Java 10 y posteriormente a
desarrollo de software de calidad y fácil de                       Java 11, pero las pruebas en su momento se
mantener. Sin embargo, la complejidad del mismo                    realizaron bajo Java 10.
radica en que no se suscita únicamente a nivel de
código, sino también a nivel de entorno de                         I. Trabajos relacionados
ejecución. Si bien existe el principio de separación
de asuntos, el cual permite la separación de un                       Erdweg, S., & Ostermann, K. (2017)
sistema en secciones que atienden diferentes                       establecieron como objetivo demostrar cómo las
responsabilidades y ayuda a llevar a cabo una                      características de un modelo son integradas en un
descomposición modular adecuada, las tecnologías
                                                                   lenguaje de programación sin romper el
per se soportan parcialmente el desarrollo de
módulos ofreciendo soluciones basadas en                           modularidad. Para lograr dicho objetivo propusieron
interfaces, agrupamiento (ej. paquetes), por                       un sistema de módulos basado en SugarJ para el
consiguiente, no ofrecen un soporte modular                        desarrollo dirigido por modelos que integre
adecuado. Considerando esta problemática, se                       modelos, código convencional, metamodelos y
propone el desarrollo de una arquitectura que                      transformaciones como módulos en un marco de
aproveche el potencial modular que brinda el                       trabajo para manejar dependencias. El sistema de
sistema de módulos de Java 9 siguiendo la
                                                                   módulos garantiza la ausencia de dependencias
organización del patrón MVC, considerando un
enfoque basado en componentes, con la finalidad de                 ocultas, es decir, todo lo requerido por un módulo

                                                                                                                           90
ARQUITECTURA DE SOFTWARE BASADA EN EL SISTEMA DE MODULOS
Número Especial de la Revista Aristas: Investigación Básica y Aplicada. *** ISSN 2007-9478. *** Vol.7, Núm. 14.    *** Año 2019

para su ejecución debe ser declarado de manera                     composición avanzada para introspección y
explícita permitiendo así la compilación por                       composición de módulos. CORE (Concern-Oriented
separado de los módulos.                                           Reuse, Reutilización Orientada a Asuntos) es un
                                                                   nuevo paradigma de desarrollo de software
Kübler, F. et al. (2017) propusieron como objetivo                 inspirado     por    las   ideas    de    separación
modularizar los análisis estáticos de programa con                 multidimensional de asuntos, las cuales permiten la
la finalidad de obtener reutilización. Para lograr                 correcta separación de conceptos de importancia
dicho objetivo se propuso el desarrollo de un marco                dentro de un dominio. CORE construye de manera
de trabajo llamado SootKeeper, el cual utiliza                     utilizable representaciones de soluciones basadas en
modularidad de OSGi (Open Services Gateway                         las disciplinas de MDE (Model-Driven Engineering,
initiative, Iniciativa de Puerta de Enlace de                      Ingeniería Dirigida por Modelos), líneas de
Servicios Abiertos) el cual es un consorcio dedicado               productos de software, modelado de objetivos, y
a la modularidad, con la finalidad de separar análisis             técnicas de modularización avanzadas ofrecidas por
en pequeños compartimientos, los cuales se ejecutan                la orientación a aspectos para definir módulos
de forma individual y en paralelo.                                 flexibles de software que permiten la reutilización
Rentschler, A. et al. (2014) definieron el objetivo de             de software basada en modelos de gran escala.
controlar las dependencias entre módulos, haciendo                 En la Tabla 1 se muestra un análisis comparativo
hincapié en que estas deben ser explícitas. Mucho                  entre las diferentes propuestas relacionadas a
del esfuerzo en entender las transformaciones de                   modularidad con respecto a la arquitectura
modelos se produce por la complejidad inducida por                 propuesta basada en el sistema de módulos de Java
el alto nivel de datos y control de dependencias. Se               (ArqJ).
propuso un sistema de módulos basado en cQVTom
(Core       QVT-Operational-Modular,           Núcleo              Tabla 1. Análisis comparativo entre propuestas de
Operacional Modular QVT) que incluya no solo el                    modularidad
control de dependencias como parte de sus contratos
                                                                             Artículo                 A           B      C
de interfaz, sino también las dependencias de
información a nivel de clase de los modelos
                                                                    Erdweg,     S.,      &                        Sí
involucrados.
                                                                    Ostermann, K. (2017).
Stiévenart, Q. et al. (2016) marcaron como objetivo                 Kübler, F., Müller, P.,                       Sí
separar la definición de semánticas de lenguaje de la               & Hermann, B. (2017).
abstracción de la máquina, con la finalidad de
                                                                    Rentschler, A., Werle,                        Sí
obtener una modularidad alta. Se presentó SCALA-
                                                                    D., Noorshams, Q.,
AM, un marco de trabajo para implementar análisis                   Happe, L., & Reussner,
estáticos       como        máquinas       abstractas               R. (2014)
sistemáticamente       abstraídas.   Los     análisis
implementados en SCALA-AM separan la                                Stiévenart, Q., Nicolay,                      Sí
semántica operacional de los asuntos de abstracción
                                                                    J., De Meuter, W., &
                                                                    De Roover, C. (2016)
de la máquina abstracta. Este modularidad facilita
variar el lenguaje analizado y el método de                         Schöttle, M., Alam, O.,                              Sí
abstracción aplicado en un análisis.                                Kienzle,      J.,    &
                                                                    Mussbacher, G. (2016).
Schöttle et al. (2016) establecieron como objetivo
                                                                         Arquitectura de              Sí          Sí     Sí
desarrollar un concepto de modularidad que permita
                                                                      software basada en el
separar y empaquetar asuntos en una forma
reutilizable, y que permita el uso de mecanismos de                  Sistema de módulos de

                                                                                                                              91
ARQUITECTURA DE SOFTWARE BASADA EN EL SISTEMA DE MODULOS
Número Especial de la Revista Aristas: Investigación Básica y Aplicada. *** ISSN 2007-9478. *** Vol.7, Núm. 14.   *** Año 2019

            Java                                                   A pesar de la problemática que se suscita al
                                                                   momento de la transformación modular del patrón
                                                                   MVC. En el desarrollo de la arquitectura ArqJ no se
A) Investigación de propiedades modulares                          busca reemplazar ni presentar diferencias respecto
                                                                   al patrón arquitectónico MVC, más bien, se busca
B) Desarrollo de un lenguaje y/o paradigma                         presentar en la arquitectura las distintas
con soporte de código                                              características modulares que provee Java 9
                                                                   utilizando el patrón arquitectónico MVC como base
C) Desarrollo de un lenguaje y/o paradigma                         central distribuida en módulos. Se consideró el
con soporte de entorno de ejecución                                patrón arquitectónico MVC como un patrón en el
                                                                   cual las capas están conformadas de varios módulos
                                                                   y no solo de macromódulos. Los módulos que, al
                                                                   ser migrados generan muchas dependencias
                                                                   modulares, deben ser subdivididos en módulos
Como se observa en la Tabla 1, las propuestas
                                                                   siguiendo el principio de separación de asuntos sin
abordan conceptos particulares de modularidad en
                                                                   romper con el patrón arquitectónico. De esta forma
diferentes áreas. ArqJ aprovecha las capacidades
                                                                   se     obtienen    varias     ventajas   al   aislar
modulares a nivel de código y entorno que brinda el
                                                                   responsabilidades     y     resolver   dependencias
sistema de módulos de Java 9. El contar con
                                                                   modulares, entre ellas se encuentra la prevención
modularidad a nivel de entorno y código coadyuva a
                                                                   del error de dependencia cíclica.
un mejor análisis y diseño arquitectónico.
                                                                   El error de dependencia cíclica se suscita cuando
II. Metodología                                                    existe un módulo org.mod.a que tiene una
                                                                   dependencia modular con org.mod.b, org.mod.b con
1) Revisión de lo reportado en la literatura respecto              org.mod.c y su vez con org.mod.a, en el cual Java
a conceptos modulares y arquitecturas basadas en el                no conoce el orden para resolver dichas
sistema de módulos de Java.                                        dependencias.
2) Desarrollo de la arquitectura aprovechando las
características que brinda el sistema de módulos de                Si bien existen soluciones a nivel de código como el
Java.                                                              patrón de diseño Observer, el cual permite notificar
3) Migración al sistema de módulos de Java del                     el estado de los objetos y de esta forma prevenir el
caso de estudio académico “Tabla periódica de                      error de dependencia cíclica, está solución
elementos químicos” utilizando ArqJ.                               implicaría una gran reestructuración a nivel de
                                                                   código para todas las clases de los sistemas
III. Desarrollo de la arquitectura                                 migrados a Java 9 involucradas en errores de
                                                                   dependencia cíclica, generando un mal diseño a
Muchos de los sistemas migrados de Java 8 o                        futuro, además no alcanza a cubrir todos los
anteriores presentan problemas en materia de                       escenarios y problemas que presenta un sistema a
modularidad debido a que existe cierto grado de                    nivel modular. Por lo que la arquitectura ArqJ
acoplamiento que genera muchas dependencias                        presenta una solución a nivel arquitectónico
modulares innecesarias. A pesar de que existen                     siguiendo el patrón MVC, aplicando el principio de
patrones arquitectónicos como el MVC que permite                   separación de asuntos para solventar dichos
una     organización    adecuada     del   sistema                 problemas y no requiere la reestructuración de todas
arquitectónicamente hablando, brinda un diseño                     las clases.
modular limitado, por consecuencia, los módulos
del Modelo, la Vista y el Controlador se tornan                    En la Figura 1 se presenta la arquitectura ArqJ
robustos y con gran cantidad de dependencias                       planteada en este artículo:
modulares al ser migrados al sistema de módulos de
Java.

                                                                                                                           92
Número Especial de la Revista Aristas: Investigación Básica y Aplicada. *** ISSN 2007-9478. *** Vol.7, Núm. 14.   *** Año 2019

                                                                   del módulo, por lo que, al ser una característica de
                                                                   gran importancia, se manejó en ArqJ como el
                                                                   estereotipo  lo cual indica en la relación si
                                                                   se trata de un acceso reflectivo o tradicional.

                                                                   Otra característica que fue incorporada en los
                                                                   descriptores de módulo fue el manejo de servicios y
                                                                   proveedores. Dicha característica permite que un
                                                                   módulo provea servicios a un módulo consumidor y
                                                                   que uno o varios módulos proveedores ofrezcan
                                                                   implementaciones del módulo de servicios. Al igual
                                                                   que con la protección modular se optó por el manejo
                                                                   de estereotipos en ArqJ indicando el perfil de los
                                                                   módulos: de servicios, proveedores y consumidores.
                                                                   Los proveedores deben indicar en su relación la
                                                                   implementación que ofrecen de qué módulo de
                                                                   servicios a que consumidor, así como los
                                                                   consumidores deben indicar con una dependencia
                                                                   qué módulo de servicios van a utilizar.
Fig. 1. Arquitectura ArqJ basada en el sistema de                  La Capa de Dependencias simboliza la arquitectura
módulos de Java.                                                   necesaria para que un módulo sea capaz de resolver
                                                                   sus dependencias. En dicha capa se ubica el
Como se aprecia en la Figura 1, se consideran tres
                                                                   descriptor de módulo, el cual, funge como
capas. En la Capa de Módulos se encuentran cuatro
                                                                   manifiesto de un módulo de todos los
tipos de módulo: módulos de vista, módulos de
                                                                   requerimientos que necesita para funcionar
controlador, módulos de modelo y módulos de
                                                                   (módulos de Java y/o módulos creados) así como las
terceros.                                                          exportaciones en caso de ser necesario.
                                                                   Como se mencionó anteriormente, el sistema de
Todo módulo en Java puede exponer y/o requerir
                                                                   módulos de Java brinda modularidad no solo a nivel
interfaces hacia otros módulos, en el esquema
                                                                   de código sino también a entorno de ejecución. Una
tradicional orientado a objetos se manejan
                                                                   vez realizado el sistema es posible generar una
referencias hacia otras clases para consumir los
                                                                   máquina virtual que contenga únicamente los
métodos que provee dicha clase (ej. Clase de vista a               módulos necesarios para su funcionamiento por
clase de controlador). Considerando lo ya
                                                                   medio de la herramienta JLINK, mejorando la
mencionado, las referencias bajo el paradigma OO
                                                                   modularidad y escalabilidad del sistema. Tomando
generan dependencias modulares en el sistema de
                                                                   en cuenta esa característica, la Capa de Entorno
módulos de Java
                                                                   considera el módulo JLINK como el generador de la
 que requieren ser especificadas explícitamente en                 máquina virtual personalizada utilizando las
los descriptores de módulo pertinentes. Por lo que
                                                                   dependencias de la Capa de Dependencias, sobre la
ArqJ establece en la capa de módulo el manejo de
                                                                   cual los módulos de la Capa de Módulos trabajarán.
interfaces expuestas y requeridas que permitan
clarificar las dependencias entre módulos. Las
                                                                   IV. Experimentación
dependencias son indicadas mediante relaciones de
contrato especificando los módulos involucrados.
                                                                   En esta sección se explica una transformación
                                                                   modular al caso de estudio académico “Tabla
En versiones previas al sistema de módulos de Java
                                                                   periódica de elementos químicos”, dicho caso de
no existía una encapsulación fuerte de los campos
                                                                   estudio es un sistema que presenta problemas de
debido a que, utilizando mecanismos de reflexión
                                                                   modularidad entre las clases que conforman el
era posible acceder los valores de los campos. En el
                                                                   sistema. A continuación, se presenta en la Figura 2
sistema de módulos los módulos son capaces de
                                                                   un análisis preliminar de dependencias modulares
especificar si permiten el manejo de mecanismos de
                                                                   del caso de estudio:
reflexión en su totalidad o solo en algunos paquetes

                                                                                                                           93
Número Especial de la Revista Aristas: Investigación Básica y Aplicada. *** ISSN 2007-9478. *** Vol.7, Núm. 14.   *** Año 2019

                                                                   Fig. 3. Solución al caso de estudio académico
                                                                   “Tabla periódica de elementos químicos”
                                                                   aplicando los lineamientos de ArqJ.

                                                                   V. Resultados

                                                                   La arquitectura presenta grandes ventajas en
                                                                   términos de utilidad dado que permite al
                                                                   desarrollador trabajar de manera natural con el
                                                                   sistema de módulos de Java explotando las ventajas
Fig. 2. Análisis de dependencias modulares del                     que este ofrece.
caso de estudio académico “Tabla periódica de
elementos químicos”.                                               Como se aprecia en la Figura 3, al realizar un
                                                                   correcto análisis de dependencias modulares
Como se puede apreciar en la Figura 2, las                         legadas, es posible diseñar una solución que permita
dependencias legadas entre módulos del caso de                     migrar un sistema desarrollado previamente al
estudio presentan varios problemas de dependencia                  sistema de módulos y que se subdivida en módulos
cíclica aun considerando un patrón arquitectónico                  a modo que, los problemas de dependencia cíclica
como el MVC, para este caso existen muchas                         se solucionen.
dependencias entre el módulo del modelo debido a
las instancias de clases. Para este caso de estudio se             Hay que considerar un correcto análisis de
suscita la problemática de muchas dependencias                     dependencias modulares del sistema que se busca
hacia dos clases que permiten anotar clases y anotar               transformar al sistema de módulos de Java, así
métodos, dichas dependencias se presentan en las                   como identificar correctamente los módulos que
tres capas y son las causantes de los problemas de                 conforman el patrón arquitectónico MVC, con la
dependencia cíclica.                                               finalidad de que las dependencias entre módulos
                                                                   sean las adecuadas. La arquitectura presenta con
Siguiendo la subdivisión modular y los lineamientos                claridad las interfaces que exponen y requieren los
que se proponen en la arquitectura ArqJ, en la                     módulos uno de otro, así como los mecanismos que
Figura 3 se muestra la arquitectura del caso de                    se ocupan para acceder a los mismos (ej. Modelo →
estudio:                                                           elementos), de manera que, es posible realizar la
                                                                   transformación modular de un sistema con mayor
                                                                   facilidad bajo la arquitectura ArqJ.

                                                                   Conclusiones

                                                                   El sistema de módulos es una característica sólida
                                                                   que se mantendrá transparente a lo largo de las
                                                                   versiones 9, 10 y 11 de Java, por lo que migrar los
                                                                   sistemas al nuevo sistema de módulo permitirá una
                                                                   mayor mantenibilidad a mediano y largo plazo. Las
                                                                   transformaciones modulares implican un análisis
                                                                   completo del sistema, lo cual se torna complejo si se
                                                                   trata de un sistema conformado por un gran número
                                                                   de paquetes y/o clases, sin embargo, una vez
                                                                   realizada la transformación pertinente, es posible
                                                                   extender la funcionalidad del sistema con mayor
                                                                   facilidad aprovechando las ventajas modulares que
                                                                   ofrece el sistema de módulos de Java.

                                                                                                                           94
Número Especial de la Revista Aristas: Investigación Básica y Aplicada. *** ISSN 2007-9478. *** Vol.7, Núm. 14.   *** Año 2019

Como trabajo a futuro, existe gran potencial para la               Ritschel, N., & Erdweg, S. (2015). Modular Capture
arquitectura en cuestiones de modularidad si se                    Avoidance for Program Transformations. In
combina en conjunto con AspectJ, cabe destacar que                 Proceedings of the 2015 ACM SIGPLAN
AspectJ permite el trabajo con el sistema de                       International Conference on Software Language
módulos de Java pero aun no brinda un “corte” al                   Engineering (pp. 59–70).
descriptor de módulo, por lo que el soporte modular
queda limitado. Sin embargo, no se descarta que a                  Cazzola, W., & Shaqiri, A. (2016). Modularity and
mediano      plazo    AspectJ    incorpore    dicha                Optimization in Synergy. In Proceedings of the 15th
característica, mejorando así la modularidad de la                 International Conference on Modularity (pp. 70–
arquitectura.                                                      81).

Referencias

Erdweg, S., & Ostermann, K. (2017). A Module-
System Discipline for Model-Driven Software
Development. CoRR, 1(2), 1–28.

Kübler, F., Müller, P., & Hermann, B. (2017).
SootKeeper: Runtime Reusability for Modular
Static Analysis. In Proceedings of the 6th ACM
SIGPLAN International Workshop on State Of the
Art in Program Analysis (pp. 19–24).

Rentschler, A., Werle, D., Noorshams, Q., Happe,
L., & Reussner, R. (2014). Designing Information
Hiding Modularity for Model Transformation
Languages. In Proceedings of the 13th International
Conference on Modularity (pp. 217–228).

Stiévenart, Q., Nicolay, J., De Meuter, W., & De
Roover, C. (2016). Building a Modular Static
Analysis Framework in Scala (Tool Paper). In
Proceedings of the 2016 7th ACM SIGPLAN
Symposium on Scala (pp. 105–109).

Schöttle, M., Alam, O., Kienzle, J., & Mussbacher,
G. (2016). On the Modularization Provided by
Concern-oriented     Reuse.      In    Companion
Proceedings of the 15th International Conference
on Modularity (pp. 184–189). New York, NY,
USA: ACM.

Figueroa, I., & Robbes, R. (2015). Is Functional
Programming      Better   for   Modularity?    In
Proceedings of the 6th Workshop on Evaluation and
Usability of Programming Languages and Tools
(pp. 49–52). New York, NY, USA: ACM.

                                                                                                                           95
También puede leer