Está en la página 1de 8

Diseo de Software

Gustavo A. Donoso M.

Diseo de Software
Gustavo A. Donoso M.
Capitulo 4: Orientacin a Objetos, UML y Java1 (Work In
Progress)
Objetivos

Conocer la expresividad de UML en la representacin del diseo


Orientado a Objetos.
Conocer la relacin entre la expresividad de UML y la
implementacin de aquello en Java.

Introduccin
En la medida que la complejidad de los sistemas aumenta, es
necesario realizar reducciones de la misma para hacerla controlable.
La forma usual de realizar aquello es a travs del proceso de
abstraccin, de modo que se pueda abarcar ms elementos pero en
un nivel de detalle menor.
La orientacin a objetos permite realizar abstracciones que permiten
la modelacin y el diseo de objetos y sus relaciones.
Por ejemplo, revisemos de manera abstracta las clases Hora y
HoraConSegundos consideradas en la sesin anterior. Un diagrama de
clases del Lenguaje Unificado de Modelado (UML por sus siglas en
ingls) es una forma de tener acceso a la funcionalidad pero con
abstraccin de los detalles:

Parte de este captulo es extractado de Ingeniera de Software, Alfredo Weitzenfeld, Ed. Thomson,
2005.
Captulo 4. Orientacin a Objetos, UML y Java

Pgina 1 de 8

Diseo de Software

Gustavo A. Donoso M.

El diagrama anterior ha sido generado por ingeniera reversa a partir


del cdigo java. Con ello, es factible adems que hagamos algunas
reflexiones.
UML es un lenguaje que permite modelar una situacin tanto como
especificar un diseo. Un modelo es algo que semnticamente es
coherente, un diseo es algo que funcionalmente es adecuado y
operacionalmente es eficiente.
Por ejemplo, desde la perspectiva del modelado, la clase Hora, al
remitirse a las horas y minutos no debera considerar referencias a los
segundos. Pero desde la perspectiva del diseo, puede ser
operacionalmente eficiente considerar en la clase Hora un mtodo
toSegundos que permita convertir horas en su expresin en
segundos.
Puede ser que el ejemplo de diseo anterior no sea del todo
adecuado ya que su aporte funcional y en eficiencia no es del todo
claro, pero es un ejemplo adecuado en cuanto a distinguir conceptos
de modelado como anlisis del problema (preferentemente
semntico) y de diseo como especificacin de la solucin que
adems de semntico tiene que considerar aspectos funcionales y
operacionales.
Lenguaje de Modelado Unificado (UML)
El principal referente del diseo orientado a objetos es el lenguaje
UML (Unified Modeling Language) desarrollado por Booch, Rumbaug y
Jacobson.
UML es un lenguaje grfico para visualizar, especificar y documentar
cada una de las partes que comprende el desarrollo de software. Es
Captulo 4. Orientacin a Objetos, UML y Java

Pgina 2 de 8

Diseo de Software

Gustavo A. Donoso M.

un lenguaje de amplio espectro que entrega elementos para modelar


aspectos conceptuales como lo son procesos de negocio y funciones
de sistema, adems de elementos concretos como lo son el apoyo
para el diseo e implementacin de clases en un lenguaje
determinado (como java), esquemas de base de datos y componentes
de software reusables.
En ese sentido es tanto un lenguaje de modelado como de
especificacin de diseo.
Dispone para el desarrollador de una serie de diagramas que juntos
conforman las distintas vistas arquitectnicas del sistema, tanto
desde la perspectiva dinmica como esttica.
Uno de los diagramas ms relevantes para el proceso de Anlisis y
Diseo desde la perspectiva de UML es el Diagrama de Clases ya que
a travs de l se obtiene importante informacin de la arquitectura
esttica del sistema, especficamente la composicin de clases y
relaciones entre clases que se presentan tanto desde la vista del
modelo como desde el diseo.
En la introduccin se pudo ver cmo la clase Hora y la clase
HoraConSegundo se relacionaban a travs de la herencia, del mismo
modo, en la primera evaluacin se pudo revisar cmo tanto las clases
y la relacin de herencia se implementaban en java.
Existen, del mismo modo, otros vnculos entre clases que se pueden
representar mediante relaciones de UML. Una de las ms simples es
la asociacin que permite describir la relacin que ocurre entre dos o
ms clases dentro del modelo.
Diagrama de Clases
Un diagrama de clases sirve para visualizar las relaciones entre las
clases que involucran el sistema, las cuales pueden ser asociativas,
de herencia, de uso y de agregacin.
Un diagrama de clases esta compuesto por los siguientes elementos:
Clase: atributos, mtodos y visibilidad.
Relaciones: Herencia, Composicin, Agregacin, Asociacin y Uso.
Clase
Es la unidad bsica que encapsula toda la informacin de un Objeto
(un objeto es una instancia de una clase). A travs de ella podemos
modelar el entorno en estudio (una Casa, un Auto, una Cuenta
Corriente, etc.).

Captulo 4. Orientacin a Objetos, UML y Java

Pgina 3 de 8

Diseo de Software

Gustavo A. Donoso M.

En UML, una clase es representada por un rectngulo que posee tres


divisiones en donde:

Superior: Contiene el nombre de la Clase


Intermedio: Contiene los atributos (o variables de instancia)
que caracterizan a la Clase (pueden ser private, protected o
public).
Inferior: Contiene los mtodos u operaciones, los cuales son la
forma como interacta el objeto con su entorno (dependiendo
de la visibilidad: private, protected o public).

Por ejemplo una clase que permite representar un polinomio sera:

La representacin que se ha realizado en este esquema de la clase


Polinomio est muy determinada por la sintaxis de java por lo que se
puede ver que hay palabras claves tpicas de java en su descripcin
(como class, public o los tipos de datos). Pero, independiente de
aquello en este esquema se puede ver claramente las tres secciones
de descripcin de una clase:

La seccin superior lleva el nombre de la clase: Polinomio


La seccin intermedia lleva el o los atributos de datos propios
de la clase, en este caso el polinomio es representado como un
arreglo de trminos.
La seccin inferior contiene los mtodos de la clase, en ella se
puede ver los constructores, la evaluacin del polinomio y el
agregar un trmino.

Si observamos un polinomio como el siguiente:


p(x) = -4,5X3+5,0X2+X-3
Vemos que ste corresponde a una suma de trminos, donde cada
trmino est compuesto por un coeficiente (un nmero real), la
variable (x) y un exponente (que se ha determinado como un entero).
As, se puede considerar una nueva clase que represente el conjunto
de los trminos para polinomios, que se disea como sigue:

Captulo 4. Orientacin a Objetos, UML y Java

Pgina 4 de 8

Diseo de Software

Gustavo A. Donoso M.

En el diseo de esta clase se puede ver que se han considerado los


dos atributos que la describen: coeficiente y exponente. As como
tambin el mtodo constructor y un mtodo que permite hacer la
evaluacin del trmino para un valor determinado de la variable x.
Se ha agregado (en la etapa de diseo) el mtodo realPower (no
presente en el modelado original) puesto que haba dificultades para
implementar la elevacin a potencia entre una variable tipo float y un
entero a travs de mtodos disponibles en java.
Para lo anterior, se ha utilizado la ingeniera inversa el cual es un
mtodo comn de actualizacin de diseos a partir de las dificultades
tcnicas de los lenguajes de programacin en los que se implementen
los diseos originales (productos de la ingeniera o diseo directo, en
la direccin a la solucin y a partir del modelado). La ingeniera
inversa o diseo inverso es aquel, entonces, que va de la solucin al
problema y aporta, principalmente, a la documentacin del desarrollo.
Relaciones
Entre las clases de un Diagrama de Clases se puede establecer
relaciones de muchos tipos.
Por ejemplo, la relacin de herencia es una relacin estructural que
permite la reutilizacin de definiciones de clases previas. Todas las
clases de java derivan de la clase Object, heredando los mtodos de
aquella clase. En la introduccin se vi cmo la clase
HoraConSegundos heredaba los atributos y funcionalidades de la
clase Hora, del mismo.
Una relacin de uso est destinada a indicar que una clase est
utilizando a otra. Por ejemplo, en el caso de la clase Polinomio, sta
utiliza a la clase Termino en el sentido de que un Polinomio es un
conjunto de trminos. El siguiente diagrama describe dicha relacin:

Captulo 4. Orientacin a Objetos, UML y Java

Pgina 5 de 8

Diseo de Software

Gustavo A. Donoso M.

El diagrama anterior ha sido realizado en power point, pero existen


programas especializados para apoyar el modelamiento y la
especificacin de diseo de UML, del mismo modo son tiles por que
permiten la generacin de cdigo y la ingeniera inversa (a partir del
cdigo generar diagramas).
El mismo diagrama de clases anterior pero ahora generado usando
ingeniera inversa con Visual-Paradigm:

Note que la relacin entre la clase Polinomio y la clase Trmino se


especifica como 1 en el extremo del polinomio y * en el extremo del
trmino, lo que indica que un polinomio est formado por muchos
trminos.
En java la implementacin de la clase Termino anterior es la
siguiente:
public class Termino
{
private float coeficiente;
private int
exponente;
public Termino(float coeficiente, int exponente)
{
this.exponente
= exponente;
this.coeficiente = coeficiente;
}
public Termino()
Captulo 4. Orientacin a Objetos, UML y Java

Pgina 6 de 8

Diseo de Software

Gustavo A. Donoso M.

{
this(0.0f, 0);
}
public float evalua(float valorX)
{
return this.coeficiente*realPower(valorX,this.exponente);
}
private float realPower(float base, int expo)
{
float potencia = 1.0f;
for(int i=1; i<=expo; i++)
potencia *= base;
if ((expo < 0)&&(base != 0)) potencia = 1.0f/potencia;
return potencia;
}
}

En la implementacin anterior se puede ver unos tips de java que son


tiles, especficamente el constructor:
public Termino()
{
this(0.0f, 0);
}

Este constructor bsico que construye un trmino nulo, usa el primer


constructor (que est definido antes y al cual referencia a travs de
this) y le pasa los valores cero para ambos parmetros. Lo importante
aqu es cmo se usa el operador this para hacer referencia a
constructores con una firma distinta.
Pero lo importante es cmo se expresa la multiplicidad * en la clase
polinomios. Para ello se usar el generador de cdigo automtico de
Visual-Paradigm, el que entrega el siguiente atributo en la clase
polinomio:
public class Polinomio {
private ArrayList _terminos;

Con lo que se puede ver que la multiplicidad se expresa a travs del


uso de una variable tipo ArrayList llamada _terminos.
Es decir, la principal alternativa de expresar relaciones de
multiplicidad del tipo 1 polinomio y muchos trminos es a trevs de la
creacin en la clase polinomio de un atributo de tipo arreglo que
permita almacenar los trminos del polinomio.

Captulo 4. Orientacin a Objetos, UML y Java

Pgina 7 de 8

Diseo de Software

Captulo 4. Orientacin a Objetos, UML y Java

Gustavo A. Donoso M.

Pgina 8 de 8

También podría gustarte