capitulo 3- especificación, uml y java

8
Diseño de Software Gustavo A. Donoso M. Diseño de Software Gustavo A. Donoso M. Capitulo 4: Orientación a Objetos, UML y Java 1 (Work In Progress) Objetivos Conocer la expresividad de UML en la representación del diseño Orientado a Objetos. Conocer la relación entre la expresividad de UML y la implementación de aquello en Java. Introducción 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 través del proceso de abstracción, de modo que se pueda abarcar más elementos pero en un nivel de detalle menor. La orientación a objetos permite realizar abstracciones que permiten la modelación y el diseño de objetos y sus relaciones. Por ejemplo, revisemos de manera abstracta las clases Hora y HoraConSegundos consideradas en la sesión anterior. Un diagrama de clases del Lenguaje Unificado de Modelado (UML por sus siglas en inglés) es una forma de tener acceso a la funcionalidad pero con abstracción de los detalles: 1 Parte de este capítulo es extractado de “Ingeniería de Software”, Alfredo Weitzenfeld, Ed. Thomson, 2005. Capítulo 4. Orientación a Objetos, UML y Java Página 1 de 8

Upload: carlos-toro

Post on 13-Sep-2015

225 views

Category:

Documents


5 download

DESCRIPTION

UML

TRANSCRIPT

  • Diseo de Software Gustavo A. Donoso M.

    Diseo de SoftwareGustavo 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:

    1 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

  • Diseo de Software Gustavo A. Donoso M.

    Captulo 4. Orientacin a Objetos, UML y Java Pgina 8 de 8