APP III Lecture2 - Introducción a UML.pdf

24
Ricardo Casanova Nébola-Kopak [email protected] Blog: www.ricardocasanova.net Twitter: @rcasanovan Skype: rcasanovan III Algoritmos y Programación Láminas elaboradas para la materia Algoritmos y Programación III de la Escuela de Ingeniería Informática de la Universidad Católica Andrés Bello

Transcript of APP III Lecture2 - Introducción a UML.pdf

  • Ricardo Casanova [email protected]

    Blog: www.ricardocasanova.netTwitter: @rcasanovan

    Skype: rcasanovan

    IIIAlgoritmosy Programacin

    Lminas elaboradas para la materia Algoritmos y Programacin III de la Escuela de Ingeniera Informtica de la Universidad Catlica Andrs Bello

  • NO es programacin

    No es una metodologa

    Es un lenguaje de modelado

    Unified Modeling Lenguage

    Qu NO es UML

    Qu es UML

    Lenguaje Unificado de Modelado

  • Clases

    Objetos

    Interaccin

    Procesos

    Roles

  • PHP

    JavaPython

    C#VB .Net

    C++Objective C

    Este modelado se hace a travs de un conjunto de diagramas que proporciona UML

    UML es indepentiente del lenguaje de programacin (usualmente un lenguaje orientado a objetos)

  • PHP

    JavaPython

    C#VB .Net

    C++Objective C

    Un buen diseo implica tener una app robusta y la reduccin del tiempo de desarrollo

  • Diagrama de clases. Conceptos

    Una clase es una descripcin de un conjunto de objetos que comparten los mi smo at r ibutos , op erac iones , relaciones y semntica

    Cada clase debe tener un nombre que la distinga de otras clases. Un nombre es una cade de texto simple

    Cliente'Pared'

    Persona'

    Negocio'

    Sensor'Cliente'

    Pared'

    Persona'

    Negocio'

    Sensor'

    Los nombres de las clases se definen SIEMPRE en singular (ya que se habla de la plantilla)

    La primera letra de la clase de define en maysculas (no es obligatorio, pero es un estndar)

  • Diagrama de clases. Conceptos

    Una clase est compuesta por tres elementos: Un nombre (nico para cada clase), un conjunto de atributos y un conjunto de mtodos

    NombreDeLaClase

    atributos

    mtodos

    public (+): Indica que el atributo ser visible tanto dentro como fuera de la clase, es decir, ser accesible desde todos lados

    private (-): Indica que el atributo slo ser accesible desde la propia clase (slo los mtodos de la clase podrn tener acceso directo a l)

    protected (#): Indica que el atributo no ser accesible desde fuera de la clase, pero si podr ser accedido por la propia clase y por las subclases que se generen (este concepto ms adelante)

  • Diagrama de clases. Conceptos

    Una clase est compuesta por tres elementos: Un nombre (nico para cada clase), un conjunto de atributos y un conjunto de mtodos

    NombreDeLaClase

    atributos

    mtodos

    public (+): Indica que el mtodo ser visible tanto dentro como fuera de la clase, es decir, ser accesible desde todos lados

    private (-): Indica que el mtodo slo ser accesible desde la propia clase (slo los otros mtodos de la clase podrn tener acceso directo a l)

    protected (#): Indica que el mtodo no ser accesible desde fuera de la clase, pero si podr ser accedido por la propia clase y por las subclases que se generen (este concepto ms adelante)

  • Ejemplo en Java

    public class Profesor{ public String nombre; private String apellido; private String CI;}

    Se utilizan las palabras reservadas public class para indicar que se definir una clase en este caso llamada Profesor

    Se definen 3 atributos de tipo String, dos de ellos de tipo private y uno de tipo public

    La regla para definir los atributos es exactamente igual a la de C para definir variables:TipoDeDato nombreDelAtributo;

  • Ejemplo en Java

    public class Materia{ private Profesor profesor; public void metodo() { ... profesor.nombre = "Ricardo"; profesor.apellido = "Prez"; } }

    public class Profesor{ public String nombre; private String apellido; private String CI;}

    Se define otra clase llamada Materia y dentro de ella un atributo de tipo profesor (quin dicta la materia)

    Dentro de un mtodo se trata de tener acceso al campo nombre del profesor. Correcto, el atributo es pblico en Profesor, por tanto es visible desde otra clase

    Dentro de un mtodo se trata de tener acceso al campo apellido del profesor. Error, el atributo es privado en Profesor, slo es visible en Profesor

    Entonces Cmo tener acceso a un atributo privado?

  • Ejemplo en Java

    public class Materia{ private Profesor profesor; public void metodo() { ... profesor.nombre = "Ricardo"; profesor.apellido = "Prez"; } }

    public class Profesor{ public String nombre; private String apellido; private String CI;

    public String getApellido() { return apellido; }

    public void setApellido(String apellido) { this.apellido = apellido; }}

    Se implementa un mtodo get en Profesor. Dicho mtodo es pblico (puede ser invocado desde otra clase). El mtodo devuelve el valor del atributo apellido

    Se implementa un mtodo set en Profesor. Dicho mtodo es pblico (puede ser invocado desde otra clase). El mtodo inicializa el valor del atributo apellido con el parmetro (obviamente deben ser del mismo tipo)

    El this se utiliza en este caso para diferenciar el atributo del parmetro (se llaman igual). Si no se usa this Java se confunde. El this SIEMPRE va asociado al atributo, NUNCA al parmetro

  • Ejemplo en Java

    public class Materia{ private Profesor profesor; public void metodo() { ... profesor.nombre = "Ricardo"; profesor.setApellido("Prez"); } }

    public class Profesor{ public String nombre; private String apellido; private String CI;

    public String getApellido() { return apellido; }

    public void setApellido(String apellido) { this.apellido = apellido; }}

    Ahora desde Materia y a travs del objeto de tipo Profesor, podemos invocar el mtodo setApellido que recibe como parmetro el String. Ahora nuestro profesor se apellida Prez

    RCNK 2013Ing. Ricardo Casanova

  • Todos los atributos de una clase son siempre, siempre, siempre, SIEMPRE privados (salvo algunos casos)

    Por qu?

    Se garantiza la seguridad del atributo

    Slo su clase se encarga de modificar su valor

    En resumen

    En el caso de los atributos, olviden lo explicado anteriormente

    Por cada atributo privado hay dos mtodos pblicos

    el getterel setter

    Un mtodo privado SLO podr ser llamado desde la propia clase (para las dems clases, no existe)

    En el caso de Java la sintaxis es muy similar a C al momento de definir variables y mtodos

    Los atributos y mtodos pueden ser accedidos slo a travs de un objeto (por ahora), tal como si se tratara de un record o un struct en C

  • Relaciones. Herencia

    ItemDeLibreria

    titulocodigo

    ...

    Libro

    autoreditorial

    ...

    Video

    productorestudio

    ...

    Nota: En UML, la punta de la flecha va sin relleno. Dado que Keynote no permite flechas sin relleno se ha utilizado esta nomenclatura en la lmina

    La relacin puede leerse fcilmente de forma jerrquica, de abajo hacia arriba. un Video es un ItemDeLibreria o un Libro es un ItemDeLibreria. La relacin no puede leerse al revs: un ItemDeLibreria es un Video ya que en este caso tenemos libros tambin

  • Relaciones. Herencia

    ItemDeLibreria

    titulocodigo

    ...

    Libro

    autoreditorial

    ...

    Video

    productorestudio

    ...

    ItemDeLibreria se conoce como la clase padre o la super clase

    Libro y Video se conocen como las clases hijas o sub clases

    Desde el punto de vista de las sub clases, se hereda de la super clase todo aquello que sea pblico (o protegido). No se heredan atributos ni mtodos privados

  • Relaciones. Herencia

    ItemDeLibreria

    titulocodigo

    ...

    Libro

    autoreditorial

    ...

    Video

    productorestudio

    ...

    La relacin de herencia puede darse en N cantidad de niveles. De esta manera D heredar todos los atributos y mtodos pblicos de C, B y A

    A

    B

    C

    D

  • Relaciones. Herencia

    ItemDeLibreria

    titulocodigo

    ...

    Libro

    autoreditorial

    ...

    Video

    productorestudio

    ...

    Esto puede ocurrir. Se conoce como herencia mltiple. Una clase puede heredar de mltiples clases

    A B

    C

    Java en particular NO permite la herencia mltiple. Slo trabaja con herencia simple (para evitar el problema de herencia en diamante) - ms adelante lo veremos

  • Relaciones. Agregacin

    Carro

    Chasis chasisMotor motor

    ...

    Chasis

    Carro carro

    ...

    Motor

    Carro carro

    ...

    Nota: En UML, el rombo va sin relleno. Dado que Keynote no permite flechas sin relleno se ha utilizado esta nomenclatura en la lmina. Si el rombo va con relleno implica otra cosa adicional (lo veremos ms adelante)

    La relacin de agregacin es bidireccional. En el ejemplo se utiliza ya que un Carro posee un Chasis y el Chasis est asociado a ese y slo ese Carro. Lo mismo ocurre con Carro-Motor

    Si es necesario definir atributos a uno y otro lado de la relacin, la relacin de agregacin es la que debe ser empleada

    La direccin del rombo vendr indicada por cul es la clase ms general (la que envuelve al resto). En este ejemplo, sera Carro

  • Relaciones. Asociacin

    Cliente

    ...

    OrdenDeCompra

    ...

    La relacin de asociacin permite relacionar clases que colaboran entre s.

    Un cliente tiene rdenes de compra

    Una orden de compra est asociada a un cliente

  • Cardinalidad

    1 (uno y slo uno)

    0..1 (cero o uno)

    N..M (desde N hasta M)

    * (cero o varios)

    0..* (cero o varios)

    1..* (uno o varios)

    Cliente

    ...

    OrdenDeCompra

    ...

    1..*

    1

    Un cliente posee una o ms rdenes de compra

    Una orden de compra est asociada a un cliente

  • Relaciones. Uso (Utilizacin)

    Computadora

    String direccionIP

    ...

    Cliente

    String nombreComputadora equipo

    ...

    La relacin de uso es unidireccional. En el ejemplo se utiliza ya que un Cliente posee una computadora (la que usa) pero desde el punto de vista de la Computadora no nos interesa saber quin la usa

    Se dice que Cliente est usando la clase Computadora para definir el atributo

    Aplica lo mismo para los parmetros de un mtodo

  • Primer ejemplo

    Los alumnos y los profesores son personas. Por cada persona se conoce su nombre, apellido, cdula de identidad, direccin y nmero de telfono. De un alumno se conoce adicionalmente su nmero de expediente y la carrera que est cursando. En el caso de los profesores, se conoce su cargo en la universidad y facultad a la que est adscrito.

    Un alumno asiste a cursos. Los cursos estn impartidos por un nico profesor. El alumno no puede repetir el mismo curso, pero puede asistir a ms de uno. El profesor puede impartir diferentes cursos y repetir un mismo curso en varias ocasiones. Para que un curso se imparta debe haber un mnimo de 10 alumnos y un mximo de 50. De cada curso se conoce el nombre, carrera a la que pertenece y nmero de UC.

    Como registro del curso se guarda la fecha de comienzo, la fecha de finalizacin y la nota del alumno.

    Trata de modelar el siguiente problema usando un diagrama de clases de UML: