Вы находитесь на странице: 1из 7

Una herramienta para la enseñanza de patrones en Ingeniería

del Software
Macario Polo, Juan Ángel Gómez, Mario Piattini y Francisco Ruiz
Escuela Superior de Informática – Universidad de Castilla-La Mancha
Paseo de la Universidad, 4
13071-Ciudad Real
macario.polo@uclm.es
Resumen. nes de diseño que se presentan durante la asigna-
Se presenta una herramienta que genera una tura. Así, por ejemplo:
aplicación totalmente ejecutable a partir de un 1. La propia utilización de una arquitec-
diagrama de clases dibujado con Rational Rose. tura multicapa es ya un buen patrón,
La herramienta considera el diagrama como la que dota a las aplicaciones de gran
estructura de la capa de Dominio de un sistema escalabilidad, que permite la reutili-
de tres capas. A partir de esta idea, la herramien- zación, etc. Además, las clases y pa-
ta genera las capas adyacentes (Presentación y quetes de las aplicaciones de tres ca-
Almacenamiento), dándole ciertas funcionalida- pas bien construidas poseen valores
des suministradas por un conjunto de patrones de adecuados de cohesión y acoplamien-
diseño. to, cuyos equilibrados valores son
probablemente dos de los más básicos
1. Introducción. principios de un diseñador de softwa-
re.
Los patrones de diseño son parte de los contenidos 2. El hecho de que los objetos de la capa
de la asignatura “Ingeniería del Software II”, del de Presentación necesiten “refrescar-
5º curso de la Ingeniería en Informática de la
se” para mostrar los cambios de esta-
Universidad de Castilla-La Mancha. La asignatura
do experimentados por los objetos de
consta de 9 créditos, 6 de los cuales corresponden
la capa de Dominio, permite la incor-
a teoría y 3 a clases de laboratorio. Entre las
poración a la aplicación de clases que
herramientas que los alumnos utilizan en los
constituyen implementaciones del pa-
laboratorios se encuentra Rational Rose, que es
trón Observer.
utilizada como base para la construcción de una
3. La utilización de una base de datos
aplicación ejecutable que, independientemente de
que almacena (en forma de registros)
que funcione correctamente o no, debe poseer un
las instancias persistentes procedentes
buen diseño, arquitectura robusta, etc., aspectos
de clases de la capa de Dominio,
éstos que son los más valorados a la hora de de-
permite:
terminar la calificación. La idea de este trabajo
3.1 La utilización de alguno de los
práctico es que los alumnos apliquen a un caso
muchos patrones existentes para
concreto los contenidos teóricos de la asignatura,
hacer corresponder clases y ta-
de los que los patrones de diseño son una buena
blas.
parte.
3.2 La utilización de patrones para
Durante las clases teóricas, se pone
decidir a qué clases deben asig-
especial énfasis en la necesidad de dotar a las
narse las responsabilidades rela-
aplicaciones de una arquitectura robusta, y suelen cionadas con la persistencia de
utilizarse como ejemplos aplicaciones con tres
los objetos.
capas (normalmente Presentación, Dominio y
3.3 La utilización de patrones para
Almacenamiento). Una aplicación de tres capas
transformar el diagrama de cla-
bien elegida posee la versatilidad suficiente como
ses de la capa de Dominio (o
para incluirle los elementos necesarios para pre- parte de él) al esquema físico de
sentar ejemplos de prácticamente todos los patro-
la base de datos.
3.4 La utilización de algún patrón genera de acuerdo a un conjunto de patrones, que
que centralice el acceso de los el alumno ha podido elegir de un conjunto de
objetos de la capa de Dominio a patrones disponibles. La generación de código
la base de datos (un Broker o tarda sólo unos pocos segundos, lo que permite al
Agente). alumno generar en muy poco tiempo lo que habi-
Desde luego, resulta imposible construir tualmente tardaría horas o días, y sin ningún error.
en el laboratorio todas las posibles variantes de la Esto permite aprovechar más aún las horas de
aplicación utilizando todos los posibles patrones laboratorio, ya que se libera tiempo que puede
de diseño, incluso aunque ésta sea sencilla. Tam- dedicarse a la aplicación práctica de otros conte-
bién es difícil conseguir que los estudiantes im- nidos presentados en las horas de teoría.
plementen, aunque sea fuera del laboratorio, todas En este artículo presentamos algunos
las posibles variantes. Pero el caso es que, obser- detalles del diseño e implementación de esta
vando las reglas de transformación y diseño que, herramienta, así como su forma de uso y sus
más o menos, rigen el mecanismo de utilización posibilidades.
de los patrones comentados en los puntos anterio-
res, se observa que el proceso de aplicación de 2. Aspecto de la herramienta.
dichos patrones es –para una persona- un proceso
La Figura 1 muestra el aspecto de la ventana
muy automático que puede, además, ser automati-
principal de nuestra herramienta. En ella, el alum-
zado por una herramienta.
no selecciona un fichero que contenga un modelo
En la Escuela Superior de Informática
de Rational Rose. El conjunto de clases contenido
de Ciudad Real hemos construido una herramienta
en dicho modelo se muestra en la lista de la iz-
que, a partir de un diagrama de clases dibujado
con Rational Rose, permite al usuario generar quierda, debiendo el usuario seleccionar las clases
para las que se desea generar código.
código directamente ejecutable. El código se

Figura 1. Pantalla principal de la herramienta.


El alumno debe saber que la herramienta 2.1 Un constructor sin parámetros, que da a
ubicará las clases seleccionadas en la capa de los campos de la clase valores por defecto
Dominio de la aplicación generada, por lo que no (por ejemplo, el valor cero a los long).
es conveniente seleccionar clases que representen 2.2 Un constructor con parámetros que per-
ventanas, etc. Para cada una de las tres capas para mite materializar objetos (esto es, cons-
las que se va a generar código pueden elegirse truir instancias de clases a partir de los re-
diversas opciones (situadas en la parte inferior de gistros almacenados en la base de datos).
la ventana): Los valores de los parámetros pasados a
1. Para la capa de Presentación puede elegirse el este constructor se corresponden con los
entorno de desarrollo para el que se generará valores de las columnas que forman la
código. clave principal del registro que queremos
1.1 Aunque se observan varios entornos de materializar.
lenguaje Java, ocurre que los Frames 2.3 Métodos insert, delete, update y delete,
construidos con, por ejemplo, Visual Café que permitirán actualizar el objeto en la
no son editables con Forte o JBuilder, ra- base de datos. Esto constituye una imple-
zón por la que los posibles entornos se co- mentación del patrón CRUD (operaciones
locan como opciones excluyentes. para hacer Create, Read, Update y Dele-
1.2 Se genera una pantalla “tipo ficha” por te), expuesto por Yoder [4].
cada clase seleccionada. Además, se hace 3. Para la capa de Persistencia se genera siempre
que cada clase de la capa de Presentación un Agente [1] cuya implementación es siempre
conozca a su instancia correspondiente de constante, y que ejecuta instrucciones SQL sobre
la capa de Dominio (por ejemplo: una la base de datos. Existen cuatro formas de asig-
pantalla que muestra los datos de un em- nar y generar las responsabilidades de persisten-
pleado conoce a su objeto Empleado co- cia:
rrespondiente). 3.1 Mediante el patrón Experto, cada clase
1.3 Se generan un conjunto de ventanas adi- persistente define e implementa sus ope-
cionales y “constantes”, cuya implemen- raciones de persistencia. Es decir, en ellas
tación no depende o depende muy poco de reside completamente el código de las
la aplicación que se está generando. operaciones insert, delete, etc. Esta alter-
Ejemplos de estas ventanas son un diálogo nativa tiene la desventaja de que hace a las
para mostrar mensajes de error, una ven- clases de la capa de Dominio completa-
tana que muestra listas de registros, una mente dependientes del gestor de base de
ventana que pide confirmación antes de datos utilizado.
borrar o modificar, etc. 3.2 Para desacoplar a las clases de la capa de
1.4 Todas las pantallas generadas poseen un Dominio del sistema gestor de base de da-
conjunto de operaciones que permiten in- tos, las operaciones de persistencia pueden
vocar operaciones de persistencia sobre delegarse a “fabricaciones puras” [2]. De
los objetos de la capa de Dominio (las este modo, si se cambia de gestor de base
pantallas “tipo ficha”, por ejemplo, tienen de datos, sólo se necesitará modificar las
un botón “Guardar”, que guarda el objeto clases asociadas (las fabricaciones puras,
actualmente mostrado en la base de datos, que residen en la capa de Almacenamien-
mediante una llamada al método insert o to), y no las de Dominio, que son mucho
update –depende del caso- del correspon- más complejas puesto que son las que
diente objeto de la capa de Dominio). verdaderamente implementan la solución
2. La capa de Dominio se genera mediante una del problema propuesto (que habitualmen-
“traducción directa” de las clases seleccionadas te será mucho más que gestionar persis-
al lenguaje de programación considerado. Ade- tencia). El sencillo ejemplo con que ilus-
más, para cada una de estas clases se genera el tramos en clase esta dependencia del ges-
siguiente conjunto de métodos: tor de base de datos es que, si se usa Ac-
cess, deben usarse las palabras true o false
para guardar valores en columnas boolea-
nas, mientras que se utilizan 1 y 0 con en la ventana de la Figura 1), o mediante
SQL Server. Existen, de todos modos, va- generación de sentencias preparadas (op-
rias formas de implementar las operacio- ción “FPProc” de la Figura 1).
nes de persistencia en las fabricaciones 3.3 Las operaciones de persistencia pueden
puras, como hacerlas estáticas o no (Figu- también ser asignadas mediante el patrón
ra 2). Nuestra herramienta siempre genera RCRUD [3]. RCRUD (Reflective Create,
como estáticas estas operaciones. En cual- Read, Update & Delete) es una clase, to-
quier caso, y aún habiendo decidido que talmente reutilizable, que genera mediante
las operaciones de persistencia en las fa- introspección (Reflection) las operaciones
bricaciones puras sean estáticas, nuestra de persistencia de cualquier clase. El úni-
herramienta ofrece dos posibilidades: que co requisito para utilizar RCRUD es que
la fabricación pura genere y directamente las clases persistentes sean especializacio-
ejecute la instrucción SQL (opción “FP” nes de RCRUD.

Person public class Person {


<<persistent>> PersistencePerson …
<<Pure Fabrication>> void insert() throws
mName:String
mLastName:String Exception {
mTelephone:String PersistencePer-
+$select(p:Person) DBBroker
+select() +$insert(p:Person) son.insert(this);
+insert() +$delete(p:Person) }
+delete() +$update(p:Person) ....
+update() IDatabase }

A. Delegación mediante métodos estáticos.


Person public class Person {
PersistencePerson
<<persistent>> <<Pure Fabrication>> …
mName:String p mFP PersistencePerson mFP;
mLastName:String
mTelephone:String +select(N, LN:String) DBBroker
+insert()
Person(...) {
+select() +delete() ...
+insert() +update() mFP=new
+delete()
+update()
IDatabase PersistencePerson(this);
}
...
void insert() throws
Exception {
mFP.insert();
}
....
}
B. Delegación a una instancia asociada.
Figura 2. Posibles formas de delegar las operaciones de persistencia.
4. Se genera, además, la base de datos resultante 4.3 Tenemos pendiente de implementación la
de transformar el diagrama de clases mediante generación de la base de datos mediante el
uno de los siguientes patrones: patrón “Un camino de herencia, una tabla.
4.1 Una clase, una tabla La siguiente figura muestra tres es-
4.2 Un árbol de herencia, una tabla quemas relacionales (B, C y D) obte-
nidos de la aplicación de estos tres
patrones de transformación al dia- grama de clases (A).

Person Persons Vehicles


<<persistent>> 0..* Vehicle Name:varchar(20)
DriverLicense:varchar(12)
mName:String <<persistent>> LastName :varchar(30)
Plate :varchar(8)
mLastName:String Telephone:String
mPlate:String
mTelephone:String

Drivers Trucks
Truck Readers Cars
Reader Driver Car Plate :varchar(8)
<<persistent>>
<<persistent>> <<persistent>> <<persistent>> Name:varchar(20) Name:varchar(20) Plate :varchar(8) Model:varchar(30)
LastName :varchar(30) LastName :varchar(30) Model:varchar(25) Length:Float
mModel:String
mFavouriteTitle:String mLicenseNumber:String mModel:String FavouriteTitle:varchar(50) LicenseNumber:varchar(12) Year:Integer
mLength:float Wheels:Integer
mDate:Date mYear:int Date:Date
mLicenseType:int mWheels:int LicenseType:Integer

B. Transformación del diagrama de clases A


A. Un diagrama de clases. mediante el patrón una clase, una tabla.

Persons Cars
Vehicles Readers
Drivers
Plate:varchar(8)
Name:varchar(20)
Name:varchar(20) DriverLicense:varchar(12)
LastName:varchar(30)
Name :varchar(20) Plate:varchar(8) LastName:varchar(30) Model:varchar(25)
Telephone:String
LicenseNumber:varchar(12) Year:Integer
LastName :varchar(30) DriverLicense:varchar(12) FavouriteTitle:varchar(50)
Telephone:String
LicenseNumber:varchar(12) Model:varchar(25) Date:Date
LicenseType:Integer Trucks
Telephone:String Year:Integer Plate:varchar(8)
DriverLicense:varchar(12)
FavouriteTitle:varchar(50) Model:varchar(30)
Model:varchar(30)
Date:Date Length:Float Length:Float

LicenseType:Integer Wheels:Integer D. Wheels:Integer

C. Transformación del diagrama de clases A me- Transformación del diagrama de clases A mediante
diante el patrón un árbol de herencia, una tabla. el patrón un camino de herencia, una tabla.

Figura 3. Tres posibles transformaciones a relacional de un mismo modelo de clases.

La base de datos puede generarse directa-


mente en un fichero Access, en una base de 3. Utilización de la herramienta en los
datos de un servidor SQL Server, o bien co-
laboratorios.
mo un programa de definición de datos en
SQL 92. La herramienta es capaz de generar en segundos
Con estas consideraciones, los objetos varias versiones diferentes de una aplicación que
que intervienen y se generan para gestionar en gestiona una base de datos. Además de ser ejecu-
cierto escenario los datos de una instancia de clase table, la aplicación generada puede ser importada
Persona son los mostrados en la Figura 4 (supo- desde Rational Rose o alguna otra herramienta
niendo que se han seleccionado fabricaciones (como Poseidon, de Gentleware), de manera que
puras para delegar las operaciones de persisten- puede cargarse su diagrama de clases para realizar
cia). comparaciones de los diferentes diseños, etc.
La Figura 5 muestra un fragmento de la
estructura de la aplicación obtenida al generar
código para las clases que hemos recuadrado, y
que fueron originalmente dibujadas con Rational
Rose:
1.1 l:=new ListPersons()
1:listPersons()

2. doubleClick(row:int) 1.1.1 r:=select(SQL):Recordset

3. buttonModify()
4. changes the person 2.1 f=new FPerson(N,LN:String)
5. buttonSave()

1.1.1 r:=select(SQL):Recordset
:ListManager
2.1.1 mP=new Person(N,LN:String)
5.1update()

:DBBroker
:Person

2.1.1.1 select(N,LN:String)
5.1.1 update(this)

:PureFabricationPerson
2.1.1.1.1 r:=select(SQL):Recordset
2.1.2 loadData() 5.1.1.1 execute(SQL)
2.12.1 showWindow()
3.1 enableTextBoxes()

Figura 4. Objetos que intervienen en una aplicación generada por la herramienta, en este ejemplo para gestionar cierto
escenario de una persona.

Figura 5. Fragmento de la estructura de una de las aplicaciones generadas.


Cuando el usuario ejecuta la aplicación existentes en la base de datos. Haciendo doble clic
generada, se encuentra con una pantalla principal en una de las filas de la lista, se abre la correspon-
que le da a acceso a los listados de todas las tablas diente pantalla de tipo ficha, que permite la ges-
tión del registro asociado a través de la capa de da por la herramienta es que genera en muy poco
Dominio. tiempo diferentes aplicaciones, cada una con un
diseño diferente (dependiendo de los patrones
4. Arquitectura de la herramienta elegidos), lo que libera a los estudiantes de tedio-
sas tareas de implementación de ejemplos, dejan-
generadora.
do más tiempo para la aplicación práctica de otros
La Figura 6 muestra un fragmento del diseño de la contenidos teóricos de la asignatura.
herramienta generadora: incorpora la definición de
un metamodelo que permite representar aplicacio-
nes de tres capas. La clase “Three-tier applica- Referencias.
tion” contiene tres referencias a objetos que se [1] Buschman F., Meunier R., Rohnert H.,
encargan de la generación del código para la capa Sommerlad P. and Stal M. (1996). A System of
de Presentación, Dominio y Almacenamiento Patterns: Pattern-Oriented Software Architecture.
mediante la implementación de los tres interfaces Addison Wesley.
representados en la figura. De este modo, la adi- [2] Larman C. (1998). Applying UML and Pat-
ción a la herramienta de un generador de código terns. Upper Saddle River, NJ: Prentice-Hall.
para otro lenguaje, base de datos u otro tipo de [3] Polo M, Piattini M and Ruiz F. (2001).
entorno precisa únicamente la construcción de una RCRUD: Reflective Create, Read, Update and
clase que implemente el interfaz deseado. En estos Delete. Proc. of the Sixth European Conference on
momentos estamos implementando dos nuevos Pattern Languages of Programs (EuroPlop’2001).
generadores que generarán Servlets y JSPs en la Irsee, Alemania. También disponible en (9 de
capa de Presentación. mayo de 2002): http://www.inf-
cr.uclm.es/www/mpolo
[4] Yoder, JW. (2001). Patterns for making
5. Conclusiones y trabajos futuros.
business objects persistent in a relational data-
En este artículo se ha presentado una herramienta base. Tutorial at the Conference on Object-
que resulta de gran ayuda para la enseñanza de Oriented Programming, Systems, Languages, and
patrones en asignaturas de Ingeniería del Softwa- Applications (OOPSLA), Tampa Bay, Florida,
re. La herramienta toma un diagrama de clases USA.
dibujado con Rational Rose y genera código
multicapa de alta calidad. La gran ventaja aporta-
Visual Basic
presentation generator

Visual Café
presentation generator
IPresentation

Three-tier Java business

application IBusiness generator

*
* * IPersistence Access generator

*
Interface Class

SQL generator
*
*
Field
*

Method

Figura 6. Arquitectura de la herramienta generadora.

Вам также может понравиться