2. ANÁLISIS, DISEÑO E IMPLEMENTACIÓN DEL SOFTWARE “EFUZZY 0”
2.2 Modificaciones en el análisis, diseño e implementación del software efuzzy 1.0
2.2.2 Diagramas de clases
Los diagramas de clase UML (Ambler, 2005) muestran las clases de un sistema, sus interrelaciones, y las operaciones y los atributos de las clases. Son capaces de:
Explorar conceptos de dominio en forma de un modelo de dominio.
Analizar los requisitos de un modelo conceptual de análisis.
Esbozar el diseño detallado de un software orientado a objetos.
Un modelo de clase comprende uno o más diagramas de clase y las especificaciones de respaldo que describe los elementos del modelo, incluyendo clases, las relaciones entre las clases, y las interfaces.
El software se compone de la interfaz de usuario con nombre efuzzyV2.0.jar y la biblioteca fuzzy.jar que provee los métodos que realizan las funcionalidades propias del sistema.
Además se hace uso de la biblioteca jfreechart-1.0.10.jar para generar gráficos y la biblioteca commons-math3-3.2.jar para resolver los problemas de optimización lineal obtenidos a partir de los métodos de regresión lineal borrosa posibilística. Con la utilización de esta biblioteca se pudo eliminar la conexión que desarrollaba el efuzzy en su versión anterior con el software Mathematica mediante el JLink.jar.
JFreeChart es distribuido con el código fuente completo sujeto a las condiciones de la licencia GNU Lesser General Public Licence lo que le permite ser usado en aplicaciones de
softwares libres.
CommonsMath es un paquete de optimización que provee algoritmos para optimizar la función objetivo o de costo (minimizar o maximizar), además posee componentes matemáticos y estadísticos escritos en Java. No posee ninguna dependencia externa más allá de los componentes de Commons y la plataforma de Java y todos los algoritmos se encuentran documentados.
34 El patrón de diseño utilizado en el paquete fuzzy fue el Patrón Visitor, este ofrece una ventaja muy importante y es que permite definir nuevas operaciones sin cambiar las clases de los elementos en los que opera, con sólo agregar nuevas clases a la jerarquía Visitor. Este diseño favoreció la extensibilidad del efuzzy 1.0 pudiéndose añadir nuevas clases con gran facilidad.
Se tienen dos jerarquías de clases, la primera representa las clases que conforman la estructura de los objetos y la segunda jerarquía representa las operaciones que se realizan sobre esa estructura de objetos.
En la Figura 2.2 se muestra la primera jerarquía de clases, con sus atributos y métodos más relevantes mediante un diagrama de clases en UML.
Figura 2.2 Diagrama de clases que especifica la estructura de los objetos
En la figura anterior se puede observar la clase DatoBorrosoTriangularSimetrico (que hereda de la clase abstracta Dato) y fue añadida en la versión 2.0 del e-fuzzy. Posee como atributos los valores a1 y c1 que representan el centro y la extensión respectivamente; entre los métodos más importantes se destaca: getCentro(), getExtension(), setCentro() y
35
setExtensiones() y el método toString(). También se añadió la clase
BorrosoTriangularSimetrico que representa ese tipo de variable y hereda de la clase abstracta Variable. Esta clase consta de un método aceptar (accept()) que recibe al objeto visitador (Visitor) como argumento y llama al método visit de su clase.
La segunda jerarquía de clases representa las operaciones que se realizan sobre la estructura de objetos de la figura 2.2. Las clases de esta jerarquía se ilustran en la figura 2.3 mediante un diagrama de clases en UML, destacando los principales atributos y métodos.
Fig. 2.3 Diagrama de clases de la jerarquía Visitor
Como se puede apreciar en la figura 2.3 la clase abstracta Visitor tiene un método visit
diferente para cada clase que representa un tipo de variable, por tanto se tienen seis
métodos visit los cuales son visitNumerico, visitBDiscreto, visitBContinuo,
visitBTriangular, visitBTriangularSimetrico y visitBTrapezoidal; cada uno de estos métodos recibe como parámetro un objeto de tipo Variable. Cada método visit de un
36 visitador concreto puede ser pensado como un método que no es de una sola clase, sino de un par de clases: el visitador concreto y la clase elemento particular.
Cada clase de la jerarquía Visitor representa una operación que se realiza sobre los tipos de variables definidos en la figura 2.2.
De la jerarquía anterior se modificó la clase VisitorRegresion, esta clase permite resolver los modelos de regresión borrosa de Tanaka para datos triangulares y triangulares simétricos. El modelo de Tanaka que se tenía programado en el método visitBTriangular fue modificado para que utilizara la biblioteca commons- Math. Además se añade un nuevo método visitBTriangularSimetrico() para incluir la programacióndel modelo de TanakaSimétrico.Para el trabajo con estos datos se incorporan los atributos: varEstimadaH (valores de la variable estimada), varObservadaH (valores de la variable observada) y coefEcuacionH (coeficientes de la ecuación de regresión), así como los métodos: getVarEstimadaRR(), getVarObservadaRR() y getCoefEcuacionRR().
Una clase añadida en la jerarquía Visitor es VisitorRegresionS_P, esta permite resolver modelos de regresión borrosa posibilística mediante el método de Savic y Pedrycs. Este modelo como se explica anteriormente utiliza dos etapas, para la realización de la primera
etapa se utiliza el método enterMethod(); el cual calcula el vector de valores modales a*j
que son utilizados en la segunda fase, o sea son utilizados por el método Savic_Pedrycs(), que dentro de sus principales atributos se encuentran la variable dependiente y la lista de variables independientes, la variable dependiente de tipo borroso triangular y las variables independientes de tipo numérico. Los resultados de la regresión borrosa se almacenan en los atributos varEstimada (valores de la variable estimada) y coefEcuación (coeficientes de la ecuación de regresión).
Otra de las clases agregadas en e-fuzzy2.0 pero fuera de la jerarquía Visitor es la clase Modelo_Nadimi. El método Exportar_Lingo() utiliza un atributo de tipo PrintWriter para escribir en un fichero con extensión .lg4 la función objetivo y las restricciones correspondientes al modelo de Shakouri y Nadimi para que el Lingo lo resuelva.
37 También se incluyó la clase Medidas_Bondad que permite obtener los índices de bondad de ajusteSIM2, SIM3, SIM4, R2Borroso, para números borrosos triangulares y triangulares simétricos.