Aplicación de Patrones de Software en el Dominio

Anuncio
Aplicación de Patrones de Software en el Dominio de
los Simuladores de Procesos Dinámicos
Edith Cuéllar-Vázquez 1, Gustavo Rodríguez-Gómez 1 y Jaime Muñoz-Arteaga 2.
1
Ciencias Computacionales del Instituto Nacional de Astrofísica Óptica y Electrónica
Luís Enrique Erro #1. Tonantzintla. Puebla, México, CP 72840
[email protected], [email protected]
2
Dpto. de Sistemas de Información de la Universidad Autónoma de Aguascalientes
Av. Universidad # 940, Fracc. Bosques del prado Aguascalientes, México, C.P. 20100
[email protected]
Resumen. La construcción de Simuladores de Procesos Continuos es una tarea
difícil, ya que implica el manejo de diversos aspectos complejos tales como el
progreso del tiempo, los modelos matemáticos, y los métodos numéricos.
Presentamos la identificación de algunos patrones de análisis en el dominio de
Simulación y su influencia en las diferentes etapas del desarrollo, tales patrones
son una solución para el manejo de la complejidad. Hacemos uso de las técnicas
Orientadas a Objetos y herramientas de alto nivel como UML y los patrones de
diseño de software. El objetivo final es proveer una infraestructura que permita
desarrollar Sistemas de Procesos Continuos con los atributos de flexibilidad,
extensibilidad, mantenibilidad y reusabilidad.
Palabras Clave: Patrones de Análisis en Simulación, Diseño de Simuladores
de Procesos Dinámicos, Simulación e Ingeniería de Software.
1. Introducción
Actualmente, el desarrollo de Simuladores de Procesos Continuos, DSS por sus siglas
en ingles, se caracteriza por tener un bajo nivel de flexibilidad, reusabilidad y
mantenibilidad. La construcción de DSSs requiere el manejo de la complejidad en
diferentes aspectos como son el progreso del tiempo, los modelos matemáticos y los
métodos numéricos. Para dar solución a los problemas mencionados podemos hacer
uso de paquetes de simulación de alto nivel como SIMULINK, sin embargo cuando el
tamaño del problema crece puede no ser adecuado o necesitamos representar
fielmente la complejidad del sistema real, es necesario programar el DSS en un
lenguaje de propósito general como C, C++ ó FORTRAN.
La mayoría de las veces las características inherentes de un simulador son
reprogramadas cada vez que se construye un nuevo simulador para otro dominio. Por
esta razón es una buena idea reusar tales funcionalidades similares, pero haciéndolo a
través de métodos probados.
Los Simuladores de Procesos Continuos están compuestos intrínsicamente por
módulos interconectados, que pueden ser fácilmente representados usando las
técnicas orientadas a objetos y las herramientas que lo soportan. Los Patrones de
Software son una herramienta que permite el reuso, mantenibilidad, la reducción de
costos, de una manera flexible durante todas las etapas del desarrollo.
Nuestra propuesta para desarrollar la Infraestructura es llevar a cabo todo el
proceso del ciclo de software, específicamente la identificación de patrones de
análisis se llevo a cabo con la recopilación de la información necesaria que se
requiere para construir un DSS, a partir del análisis de diferentes DSSs. Con esta
información, identificamos los requerimientos del sistema, los cuales son el punto de
inicio del desarrollo. El siguiente paso es obtener las funciones semejantes y
determinar la mejor forma de agruparlas, y finalmente la obtención de los diagramas
conceptuales que derivan en los patrones de análisis.
El siguiente paso en el ciclo de vida es el diseño del sistema, que debe ser
construido tomando como base la etapa de análisis.
Presentamos la identificación de algunos patrones de análisis en el dominio de los
DSSs, y su efecto en las etapas subsecuentes del desarrollo. Además, presentamos los
diagramas de diseño derivados y basados en los patrones de diseño [3]. El resultado es
un diseño con bajo acoplamiento y alta coherencia, extendible y mantenible.
Finalmente presentamos un caso de estudio, aplicando el diseño propuesto.
El esquema del artículo es el siguiente. En la Sección dos, explicamos la
problemática de diseño en el desarrollo de DSSs. En la Sección tres listamos algunas
definiciones necesarias en el contexto de patrones de software. En la Sección cuatro,
describimos el uso de los patrones de software en los sistemas simuladores, y
proponemos un conjunto de Patrones de Análisis. En la Sección cinco mostramos el
uso de los patrones de análisis en la construcción del diseño. En la Sección seis
incluimos un caso de estudio que muestra el uso de la infraestructura propuesta, para
implementar un DSS. Finalmente, en la Sección siete concluimos con una breve
discusión de nuestra investigación y el trabajo futuro.
2. Problemática de Diseño en Simuladores de Procesos Dinámicos
Un simulador es un sistema de software que imita tanto el comportamiento de un
sistema del mundo real, como los procesos de entrada que manejan o controlan el
sistema simulado. Las simulaciones pueden usarse para obtener conocimiento acerca
de sistemas existentes, para predecir su comportamiento y para propósitos de
enseñanza.
Además su uso se ha extendido en la industria debido a que la simulación permite
analizar el sistema real en situaciones difíciles, peligrosas o cuando resulta muy
costoso recrear un estado del proceso.
Una de las características claves de la simulación es la habilidad de modelar el
comportamiento del sistema considerando el progreso del tiempo. Las características
inherentes a las aplicaciones que simulan algún sistema deben ser consideradas desde
la etapa de análisis para reflejar los requerimientos asociados durante la etapa de
diseño del sistema.
Construir un modelo de simulación puede tomar mucho tiempo y en múltiples
ocasiones se realizan modelos muy parecidos a los ya creados. Para llevar a cabo esta
construcción existen sistemas llamados ambientes de simulación los cuales son
herramientas interactivas de aprendizaje e investigación que brindan al usuario un
acceso flexible a lo recursos computacionales. Estas herramientas permiten el
desarrollo de modelos matemáticos que se comportan como el sistema físico. Los
modelos son verificados y validados por medio de pruebas, las cuales permiten
optimizar los resultados desde la perspectiva de aproximación, estabilidad y eficiencia
computacional.
Los ambientes de simulación usualmente cuentan con los elementos necesarios
para la construcción de simulaciones, pero tal construcción se encuentra limitada por
el número y tipo de elementos que el ambiente proporcione.
Si se requiere representar fielmente la complejidad de un sistema en una
simulación ó si el tamaño del sistema no es soportado por los elementos de un
ambiente de simulación, necesitamos codificar el sistema en un lenguaje de propósito
general para lo cual debemos dar una solución a los problemas de flexibilidad,
mantenibilidad, reducción de costos y principalmente la falta de reuso. El ultimo
problema puede ser fácilmente atacado debido a los modelos similares que los
desarrolles encuentran en la construcción de DSSs.
Algunos autores han propuesto algunas soluciones basadas en componentes para
algún dominio en particular, como por ejemplo turbinas de gas [1]. Otro precedente es
el trabajo hecho por Ulf Ekström [2], quien propone un diseño basado en patrones de
diseño, donde usa los propuestos por Gamma [3] y también propone algunos nuevos,
pero este trabajo se refiere únicamente al ambiente de desarrollo Erlang/OTP.
3. El Paradigma de Patrones
Los patrones en el contexto del desarrollo del software son un medio de registrar la
experiencia durante las diferentes etapas de este. La experiencia registrada puede ser
aplicada en la construcción de sistemas nuevos de la misma clase, lo que trae como
consecuencia un conjunto de beneficios como son el reuso exitoso de los modelos
conceptuales, diseños y arquitecturas. Los patrones de software son un medio para
compartir el conocimiento y nos proporcionan un lenguaje común entre diseñadores.
[4].
3.1 Patrones de Análisis
La frontera entre análisis y diseño no es muy clara, Fowler [5] define tal frontera
estableciendo la tarea principal del análisis como el tratar de entender el problema, lo
que nos lleva a decir que en el diseño se busca resolverlo. El análisis del sistema por
lo tanto busca observar debajo de la superficie y revelar los principios básicos. Para
cumplir este objetivo es necesario crear los modelos conceptuales que muestren los
detalles identificados.
Debido a que nuestro trabajo busca utilizar las herramientas del paradigma
orientado a objetos, el análisis debe ser realizado bajo las mismas reglas. Uno de los
principios del modelado orientado a objetos es que estos modelos conceptuales se
representan a través de interfaces (tipos) y no a través de implementaciones (clases).
[5]
Podemos identificar necesidades del usuario comunes y si encontramos una buena
solución para tal necesidad en un contexto práctico, entonces es posible usar la misma
idea en otros contextos. Esto nos lleva a identificar nuevos patrones de análisis.
Fowler define los patrones de análisis como, “una idea que ha sido útil en un
contexto practico y lo será probablemente en otros.”
3.2 Patrones de Diseño
“Un patrón de diseño es una abstracción de una forma concreta que ocurre repetidas
veces en un contexto arbitrario” [6].
Los patrones de diseño nos permiten resolver varios problemas que enfrentan
comúnmente los diseñadores de software orientado a objetos, a través de diferentes
principios que debe cumplir un buen diseño orientado a objetos, como son
“Programar a la interfaz”, “Favorecer a la composición sobre la herencia” y
“Diseñar para el cambio” [3].
Es importante mencionar que un patrón de diseño es una notación gráfica que
denota relaciones entre clases y objetos, pero además cuenta con documentación
acerca del problema que resuelven, su intención, su solución, bajo que contexto,
ejemplos concretos, sugerencias para su implementación. Además registra las
alternativas, decisiones e intercambios necesarios para su aplicación [3].
Con respecto a la aplicación de los patrones de diseño debemos tomar en cuenta
que estos se agrupan en catálogos dependiendo de su tipo de aplicación, por ejemplo
existen patrones de diseño específicos para crear interfaces de usuario, para
aplicaciones basadas en Web, etc. La aplicación de los patrones de diseño puede
complicarse por la inexperiencia del diseñador en su aplicación y por la gran cantidad
de patrones existentes, por lo que se recomienda hacer uso de los pasos propuestos
por Gamma et al. [3] para seleccionar y usar los patrones de diseño adecuados.
3.3 Efecto Delta
La delgada línea entre el análisis y el diseño de un sistema no es fácil de distinguir
e incluso muchas veces el resultado del análisis es ignorado al construir el diseño, lo
cual es un desperdicio de recursos y tiempo al tener que rehacer todo de nuevo.
Por lo anterior es importante asegurarnos de que cada etapa del ciclo de vida del
software sea la base de la siguiente, teniendo en mente el objetivo de cada una de ellas
y considerando que las decisiones tomadas no pertenezcan a otra etapa. Las
decisiones tomadas durante la etapa de análisis tendrán un efecto en el diseño, al
darnos la guía y base para su construcción y acotando los patrones de diseño a
utilizar, tal implicación es llamada efecto delta [4].
En este trabajo la aplicación de los patrones de análisis es realizada manualmente,
pero podría automatizarse en trabajos posteriores.
4. Sistemas de Simulación y el paradigma de Patrones
Los sistemas construidos sobre la base del paradigma orientado a objetos facilitan la
flexibilidad y el reuso. Técnicas como el uso de patrones de diseño además de
reforzar estos dos puntos, aplican de manera directa los diferentes principios antes
mencionados, que debe cumplir un buen diseño orientado a objetos. Esto reduce el
tiempo de diseño y construcción del sistema y facilita la mantenibilidad, favoreciendo
a la extensión sobre el cambio.
Finalmente, con respecto a la problemática del alcance de los ambientes de
simulación, los patrones nos dan una herramienta que permite la inclusión de nuevos
elementos y nuevas funcionalidades desde la etapa de diseño, permitiendo realizar
simulaciones en diferentes dominios de aplicación, de manera rápida y sencilla.
4.1 Requerimientos de un Sistema Simulador de Procesos Continuos
El primer paso en el desarrollo de un sistema de software en la recopilación de
información, y la segunda etapa es el análisis la información recopilada. Se analizaron
cuatro sistemas para obtener los requerimientos comunes y el resultado de este
análisis son los modelos conceptuales y la clara definición y especificación de los
requerimientos del sistema.
A continuación listamos los requerimientos identificados, los cuales son
independientes de un dominio de aplicación específico.
1.
2.
3.
4.
5.
6.
7.
8.
Definición del sistema.
Definición de las condiciones iniciales.
Definición de parámetros por parte del usuario.
Definición de parámetros internos al sistema.
Definición y selección del modelo.
Definición y selección del método numérico.
Ejecución de la simulación.
Visualización de resultados.
5. Diseño e Implementación de un Simulador haciendo uso de los
Patrones de Análisis
Tomando en cuenta el análisis realizado en la sección previa identificamos varios
patrones de análisis. Algunos de ellos se refieren al proceso de construcción del
sistema, otros a la arquitectura y algunos procesos internos. A continuación
mostramos algunos patrones identificados y su aplicación y efecto en las etapas de
diseño e implementación.
5.1 Patrón “Modularización General del Sistema de Simulación”
El primer problema al que nos enfrentamos en la construcción de un sistema
simulador es el tener una visión general de sus componentes y su interacción con
elementos externos de entrada o salida. Después de analizar diferentes sistemas de
simulación identificamos algunos módulos comunes. Con base en estos módulos
definimos el patrón de análisis “Modularización General del Sistema de Simulación”,
el cual representa la arquitectura básica para un sistema simulador de procesos
continuos. Este patrón se muestra en la figura 1. Para la representación de los patrones
de análisis propuestos usamos una notación similar a la propuesta por Sanz [7].
Figura 1. Patrón “Modularización General del Sistema de Simulación”
5.1.1 Desarrollo del Diseño e Implementación
A partir del patrón de análisis “Modularización General del Sistema de Simulación”
de la figura 1, proponemos el diagrama de diseño, derivado y acotado por el efecto
delta. Para su construcción también hacemos uso de los patrones de diseño existentes,
propuestos por Gamma et al. [3].
El diagrama muestra los módulos que satisfacen los requerimientos generales del
sistema, pero en términos de clases y sus relaciones.
a. Patrón de Diseño Fachada
Los módulos que podemos asociar son, el sistema central, el modelo y su
correspondiente método resolvedor y las clases necesarias para la interacción con el
exterior. Con respecto a este último punto aplicamos el patrón de diseño Fachada,
para definir la interfaz de entrada de los datos referentes a las condiciones iniciales, el
modelo, los parámetros externos proporcionados por el usuario y la selección del
método revolvedor. La característica principal del uso de este patrón es que permite la
entrada de datos y oculta el funcionamiento interno del simulador hacia la clase
cliente, que puede ser la interfaz gráfica, la línea de comando o el usuario
directamente.
Dicho funcionamiento que no necesita ser conocido por el cliente, de tal manera
que si se requiere un cambio en el funcionamiento interno, la interfaz no se ve
afectada.
Figura 2. Diagrama de Diseño derivado del Patrón de Análisis “Modularización
General del Sistema de Simulación”
El lenguaje de propósito general seleccionado para la implementación del presente
caso de estudio es C++. Primero declaramos la clase de tipo Fachada en un archivo de
cabecera:
class FachadaSim {
public:
FachadaSim();
void FachadaGate(CString _m_csArchivo, int _RBactive);
};
El método FachadaGate, tiene como parámetros una variable entera que define el
método resolvedor y el nombre del archivo que contiene los datos de entrada.
El siguiente fragmento de código muestra como la ventana cliente al recibir el
evento del botón ejecutar solo necesita instanciar la clase fachada y llamar al método
FachadaGate, lo que disparará inmediatamente la lectura de los datos de entrada, la
creación del sistema de simulación en base a la modularización definida, la ejecución
de la simulación y finalmente el despliegue de resultados.
void CventanasDlg::OnBnClickedButton1(){
FachadaSim *FS = new FachadaSim();
FS->Fachada_Gate ( m_csArchivo, Rbactive );
}
Todas las funcionalidades mencionadas son transparentes a la interfaz gráfica, razón
por las que no las detallamos en esta sección.
b. Patrón de Diseño Comando
Para la creación de cada clase en el diagrama anterior hacemos uso del patrón de
diseño Comando, el cual encapsula una solicitud como un objeto, por lo tanto permite
parametrizar los clientes con diferentes solicitudes a objetos sin preocuparse de la
operación a realizar. El diagrama de diseño obtenido es el presentado en la figura 3.
Figura 3. Creación de las clases usando el Patrón Comando
Este diagrama de diseño toma como base los requerimientos del usuario definidos en
la sección 4.
Es en el contenido de la función FachadaGate, presentada en la subsección anterior,
donde se instancian las clases que definen el sistema de simulación modularizado.
void Facade_Simula::Facade_Gate(CString _m_csArchivo,
int _RBactive){
//Creación de la clase que almacenará el Sistema
SistConc *SDS = new SistConc(_RBactive);
//Comando que crea el Sistema
CreaCommand *CreaSim = new
CreaCommand(_m_csArchivo,SpringDashpotSystem);
//Ejecución de la Creación
CreaSim->Execute();
//Comando que ejecutará la simulación
ExecuteCommand *ExeSim = new
ExecuteCommand(SpringDashpotSystem);
//Ejecución de la Simulación
ExeSim->Execute();
}
5.2 Patrones de Análisis Identificados
Se han identificado siete patrones de análisis, Validación–Verificación, Verificación
de los resultados, Manejo de los datos, Funciones Básicas, Sistema de Simulación,
Fotografiado y Modelo-Resolvedor [8]. Además obtuvimos diez diagramas de diseño
a partir de los patrones de análisis identificados y usando los patrones de diseño
existentes. Todos estos diagramas tanto conceptuales como de diseño fueron usados
para la construcción del Caso de Estudio pero no se incluye su descripción de tallada
debido al espacio.
6. Caso de Estudio - Sistema de Control
Proponemos el siguiente caso de uso para dar un ejemplo de aplicación El caso
propuesto es un problema de optimización, que consiste en un sistema de control de
posición, formado por un motor de corriente continua controlado por campo [9]. El
motor esta representado por el siguiente sistema de ecuaciones diferenciales, y debe
ser simulado para obtener el comportamiento global del control:
•
x1 = x 2
•
x2 =
1
x 2 + 5 x3
3
•
x 3 = − x3 + 0.1e 2f
El programa principal hace uso de un algoritmo de optimización, que a su vez llama a
la función de índice de costo.
∫ [(r (t ) − x (t ))
tf
J=
2
1
]
+ Re 2f (t ) dt + w1 (x1 (t f ) − rss ) + w2 (x2 (t f )) + w3 x32 (t f )
2
2
t0
•
donde : x1 = θ , x2 = θ , x3 = i f
e f = K1 (r − x1 ) − K 2 x2 − K 3 x3
Donde r representa los grados de referencia, θ es el ángulo de posición del eje de
salida, R es una constante positiva, ef es el voltaje del campo, rss es una constante de
estado estable, θ e i son variables de estado y wn son vectores de peso.
La función J requiere la simulación del modelo para obtener uT = [K1, K2, K3] de
tal manera que u sea un mínimo, ya que representa las constantes que definen el error
deseado ef. El diagrama de simulación que representa el problema se muestra en la
figura 4.
Figura 4. Diagrama de simulación del Controlador
6.1 Implementación
La implementación de la parte de control se realizo haciendo uso de la rutina
propuesta en [6] respetando su interfaz y adaptándola para poder usarla por medio del
patrón Adaptador, propuesto por Gamma [3]. El control se comunica con la parte de
simulación por medio del patrón Fachada propuesto en la sección 5, proporcionando
los parámetros de entrada y las condiciones iniciales. Internamente la simulación se
desarrollo haciendo uso de los patrones de análisis propuestos.
6.2 Resultados
La salida obtenida al ejecutar el caso de estudio, para obtener un ángulo en radianes
r = r ss = θ = 10, es:
K1 = 35.08,
K2 = 27.51,
K3 =43.07
Para corroborar el resultado obtenido simulamos el modelo sustituyendo estos valores
como entradas y el resultado se muestra en la gráfica de la figura 5, donde mostramos
la relación tiempo/posición del eje y la curva que describe se estabiliza en 1.7
segundos aproximadamente. Usamos el método numérico RungeKutta4 con paso de
integración de 0.01 seg., Tiempo de inicio = 0 y Tiempo final = 3.3.
Figura 5. Gráfica obtenida al simular el modelo
7 Conclusiones
El éxito de un simulador depende de la precisión con la que se reproduce el
funcionamiento del sistema simulado, es por esto que en su construcción deben
emplearse técnicas que nos permitan obtener un sistema confiable, robusto, que
permita ser mantenido de una manera sencilla y rápida, También necesitamos que sea
flexible permitiendo la extensión de su funcionalidad.
Los patrones de diseño son una herramienta que nos dan todos estos beneficios si
son aplicados adecuadamente, y si se realiza un análisis detallado y no se aplican de
manera arbitraria.
Los requerimientos nos dan una guía para identificar los modelos conceptuales y
por lo tanto los patrones de análisis, estos a su vez nos dan una guía para construir los
diagramas de diseño del sistema, debido al efecto delta.
La infraestructura formada por el conjunto de modelos y diagramas es la base para
la construcción de sistemas simuladores de procesos continuos en diferentes dominios
de aplicación. Las características inherentes de las metodologías orientadas a objetos
permiten el reuso extensivo, es decir en todas las etapas del desarrollo. Así un nuevo
simulador no tiene que ser desarrollado desde cero.
Hacemos notar que es posible el uso de la infraestructura por otros sistemas como
en el caso de estudio propuesto, ya que el encapsulamiento de la misma permite su
inclusión sin afectar al sistema general.
Finalmente como trabajo futuro, aplicaremos la infraestructura para construir
nuevos sistemas simuladores en diferentes dominios para estudiar el beneficio
obtenido. Además puede ser base para automatizar la generación de sistemas de este
tipo a partir de los requerimientos del sistema.
8 Agradecimientos
Agradecemos al Consejo Nacional de Ciencia y Tecnología de México (CONACYT),
ya que parte de este trabajo es apoyado por el proyecto CONACYT-2002-C01-40022.
Los autores también agradecen el apoyo dado por el Instituto Nacional de Astrofísica
Óptica y Electrónica (INAOE) y la Universidad Autónoma de Aguascalientes (UAA)
en el desarrollo de este proyecto.
9. Referencias
1. Reed J. A., Afjeh, A.: Computational Simulation of Gas Turbines: PART I- Foundations of
Component-Based Models. In: ASME Transactions (1999)
2. Ekström, U.: Design Patterns for Simulations in Erlang/OTP. Uppsala Master's Thesis in
Computing Science 178 (2001)
3. Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns, Elements of Reusable
Object-Oriented Software. Addison-Wesley Publishing Co. (1995)
4. Molina, P. J., Melia, S. Pastor, O.: User Interface Conceptual Patterns. Proceedings del 4to
Workshop Internacional de Diseño, Especificación & Verificación de Sistemas de
Información DSVIS’2002, Rostock, Alemania. (2002) 201-214
5. Fowler, M.: Analysis Patterns: Reusable Object Models. Object Technology Series.
Addison-Wesley Publishing Company (1997)
6. Gilbert, J.C., Nocedal, J.: Global Convergence Properties of Conjugate Gradient Methods,
SIAM Journal on Optimization, Vol. 2. (1992) 21-42
7. Sanz, R., Zalewski J. Pattern-Based Control Systems Engineering. IEEE Control Systems,
Vol. 23, No. 3 (2003) 43-60
8 Cuellar-Vazquez, E. Rodríguez-Gomez, G., Muñoz-Arteaga, J.: Software Patterns
Identification to Implement Dynamic Simulation Systems. Proceedings of 2004 Summer
Computer Simulation Conference (SCSC'04). San Jose, California, USA. (2004)
9. Hasdorff, L.: Gradient Optimization and Nonlinear Control. A Wiley-Interscience
publication (1976)
Descargar