SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Ejercicios UML
     Juan de Lara
         Grupo 46
         G
    Curso 2008/09


                    1
Indice

 Diagramas de clases y
 OCL.
 OCL
 Diagramas de Transición de Estados
 Diagramas de Interacción.




                                      2
Ejercicio
 Representa mediante un diagrama de clases la siguiente
 especificación:
    Una aplicación necesita almacenar información sobre
   empresas, sus empleados y sus clientes.
    Ambos se caracterizan por su nombre y edad.
    Los
    L empleados ti
             l d tienen un sueldo b t l empleados que
                                  ld bruto, los     l d
   son directivos tienen una categoría, así como un conjunto de
   empleados subordinados.
       p
    De los clientes además se necesita conocer su teléfono de
   contacto.
    La
    L aplicación necesita mostrar l
          li   ió        it     t    los d t
                                         datos d empleados y
                                               de     l d
   clientes.

                                                              3
Ejercicio
                                     Persona
                                - nombre
                                - edad
                                + mostrar()




                     Empleado                         Cliente
subordinados
               - sueldo_bruto                  - telefono_de_contacto
                                                 nombre_empresa
        0..*
               + mostrar ()
                     t
               + calcular_salario_neto()
                                               +mostrar()
                                       1..*
                                   empleados          0..* clientes
                                                            1..*
                     Directivo
           0..*                                               Empresa
                  - categoria                        1
                                                         - nombre
                                                              b
                  + mostrar ()                                          4
Ejercicio: Biblioteca
 Una biblioteca tiene copias de libros Estos últimos se
                                  libros.
 caracterizan por su nombre, tipo (novela, teatro, poesía,
 ensayo), editorial, año y autor.
 Los autores se caracterizan por su nombre, nacionalidad
 y fecha de nacimiento.
 Cada copia tiene un identificador y puede estar en la
                       identificador,
 biblioteca, prestada, con retraso o en reparación.
 Los lectores pueden tener un máximo de 3 libros en
 préstamo.
 préstamo
 Cada libro se presta un máximo de 30 días, por cada día
 de retraso, se impone una “multa” de dos días sin
                   p
 posibilidad de coger un nuevo libro.
 Realiza un diagrama de clases y añade los métodos
 necesarios para realizar el prestamo y devolución de
 libros.
Libro
                  Copia
                                                     - titulo : string
          - id : Identifier       ejemplar     libro - tipo: tipoLibro
          - estado: estadoCopia 1..*               1 - editorial: string
                   0..3 prestamos                    - anyo: i t
                                                               int
                                                             1..* obras
                              Prestamo
                           - inicio: Date
                           - fin: Date                           1 autor

                 0..1 lector                                     Autor
                                                    - nombre: string
                                                          b     ti
                  Lector                            - nacionalidad: string
- nSocio : Identifier                               - fechaNacimiento: Date
- nombre: string
- telefono: string                                                       <<enumeration>>
- direccion: string                                                          tipoLibro

+ devolver(id: Identifier, fechaAct: Date) 1                             novela
                                                                         teatro
{precondition: prestamos.notEmpty()}                                     poesia
                                                                              i
+ prestar(id: Identifier, fechaAct: Date)                                ensayo
{precondition: multa==0}                        multa 0..1
- multar(dias : int)                                                       <<enumeration>>
                                                    Multa                    estadoCopia
                                                                         prestado
                                               - fInicio: Date           retraso
                                               - fFin: Date              biblioteca
                                                                         reparacion
Ejercicio
 Especificar un diagrama de clases que describa redes
 de ordenadores.
 Los elementos que se pueden incluir en la red son:
   Servidor, PC, Impresora.
   S id PC I
   Hub, Cable de red.
 Los PCs pueden conectarse con un único Hub los Hub,
 servidores con uno o varios.
 Los Servidores y PCs pueden generar mensajes, con
 una cierta longitud.
 Los Hubs tienen un número de puertos, algunos de los
 cuales puede usarse para conectar con otros Hubs Hubs.
 Tienen cierta probabilidad de “perder” mensajes.
 Las impresoras pueden averiarse, con cierta
 probabilidad, durante cierto tiempo.                 7
Ejercicio.
 Ejercicio Posible Solución.
                   Solución




“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios”
                                                                             8
Podemos modelarlo como una restricción OCL, o bien añadir asociaciones desde
Servidor y PC
OCL
“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios”
Context PC
Inv: cable equipo >size() = 1
     cable_equipo->size()

Context Servidor
Inv: cable_equipo->size() >= 1
            q p

“Un Hub no puede conectarse consigo mismo a través de un puerto”
 Context Cable_Hubs
 Conte t C bl H b
 Inv: Puerto_Hub.hub->asSet()->size() = 2




                                                                                9
Ejercicio
  Examen Junio 2008.
Realiza el diseño de una aplicación para la gestión de pedidos. La aplicación deberá
   manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden
   realizar pedidos de productos, de los cuales se anota la cantidad en stock. Un
            p            p        ,
   cliente puede tener una o varias cuentas para el pago de los pedidos. Cada
   cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad
   disponible de dinero, que el cliente debe aumentar periódicamente para poder
   realizar nuevos pedidos.
Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero
   disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples
   o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y
   (por restricciones en la distribución) contienen un máximo de 20 unidades del
   mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o
   más pedidos, que pueden ser simples o compuestos. Como es de esperar, el
   sistema debe garantizar que todos los pedidos simples que componen un pedido
   compuesto se paguen con cuentas del mismo cliente Además sólo es posible
                                                     cliente. Además,
   realizar peticiones de productos en stock.
Existe una clase (de la cual debe haber una única instancia en la aplicación)
   responsable del cobro, orden de distribución y confirmación de los pedidos. El
       p                                                                  p
   cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar
   todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago
   correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si
   es parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el
       p            p           p     ,                p            )          q
   pedido está listo para servirse, se ordena su distribución, y una vez entregado,
   pasa a estar confirmado.                                                      10

Se pide un diagrama de clases de diseño. Añade las restricciones OCL necesarias.
Solución




           11
Restricciones OCL:


 Context Cliente::realizar pedido:
         Cliente::realizar_pedido:
 pre: self.cuentas->exists(c | c.disponible > 0)

 Context Pedido Compuesto:
 inv: self pedidos simples >c enta >cliente >asSet() >si e() = 1
 in   self.pedidos_simples->cuenta->cliente->asSet()->size()

 Context Pedido:
 inv: self.t_productos.num->sum() <= 20

 Context Pedido::añadirProducto(p: Producto, num: int):
 pre: p.stock>=num

 Context Cliente::rechazar_pedido (p:Pedido):
 pre: self.cuentas.disponible->sum()<p.total



                                                              12
Indice

 Diagramas de clases
 Diagramas de Transición de
 Estados
 Diagramas de Interacción.




                              13
Ejercicio: Biblioteca
 Una biblioteca tiene copias de libros Estos últimos se
                                  libros.
 caracterizan por su nombre, tipo (novela, teatro, poesía,
 ensayo), editorial, año y autor.
 Los autores se caracterizan por su nombre, nacionalidad
 y fecha de nacimiento.
 Cada copia tiene un identificador y puede estar en la
                       identificador,
 biblioteca, prestada, reservada, con retraso o en
 reparación.
 Los lectores pueden tener un máximo de 3 libros en
 préstamo.
 Cada libro se presta un máximo de 30 días, p cada día
                p                             por
 de retraso, se impone una “multa” de dos días sin
 posibilidad de coger un libro.
 Realiza el diagrama de estados de la clase “copia”.
                                              copia
Solucion

                                                                       Con         devolver()
                                       Con         reservar(id) /
                                                                    Retraso y
           en                         Retraso      usrRes = id
                                                                    reservado
                                                                    reser ado
       reparacion
reparado()                devolver() [getDate()>fp+30]         [getDate()>fp+30]
             reparar()


           en      prestar(id,fecha)/              reservar(id) /
                                      prestado                      reservado
       biblioteca fp=fecha                         usrRes = id
                     devolver()
                                              prestar(id, fecha)         devolver()
                                              [usrRes==id]/
                                              fp=fecha
                tm(2 d
                t (2 days)
                         )                                             en
                                                                     reserva
Solucion: Estados Jerárquicos

                                                                          Con
                                       Con            reservar(id) /   Retraso y
           en                         Retraso         usrRes = id      reservado
                                                                       reser ado
       reparacion
reparado()                        [getDate()>fp+30]               [getDate()>fp+30]
             reparar()


           en     prestar(id,fecha)/                  reservar(id) /
                                     prestado                          reservado
       biblioteca fp=fecha                            usrRes = id

                     devolver()                 prestar(id, fecha)          devolver()
                                                [usrRes==id]/
                tm(2 d
                t (2 days)
                         )                      fp=fecha                  en
                                                                        reserva



                                                                                         16
Máquinas de Estados
  q
Estado Histórico. Ejercicio.

  Modelar el comportamiento de una
  cadena de música. Esta puede estar
                          p
  encendida (ON) o apagada (Standby). La
  cadena tiene reproductor de CD Radio y
                               CD,
  Cinta. Se cambia de uno a otro con el
  botón “mode”. Cuando se enciende la
         mode
  cadena se recuerda el último estado en el
  que estuvo.

                                              17
Máquinas de Estados
  q
Estado Histórico. Ejercicio. Solución



                                    On

     Standby    power       mode           mode
                                    CD

                power   H

                            Radio          Tape
                                    mode



Modelar l i
M d l el mismo sistema sin usar estado hi tó i
                i t     i         t d histórico.


                                                   18
Máquinas de Estados
  q
Estado Histórico. Ejercicio. Solución (ii)


     Standby                      On
                power
     lastCD                       CD     mode
                power
                           mode
                power
    lastRadio
                power
                        Radio            Tape
                                  mode
     lastTape   power

                power




                                                19
Ejercicio
  Examen Junio 2008.
Realiza el diseño de una aplicación para la gestión de pedidos. La aplicación deberá
   manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden
   realizar pedidos de productos, de los cuales se anota la cantidad en stock. Un
            p            p        ,
   cliente puede tener una o varias cuentas para el pago de los pedidos. Cada
   cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad
   disponible de dinero, que el cliente debe aumentar periódicamente para poder
   realizar nuevos pedidos.
Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero
   disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples
   o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y
   (por restricciones en la distribución) contienen un máximo de 20 unidades del
   mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o
   más pedidos, que pueden ser simples o compuestos. Como es de esperar, el
   sistema debe garantizar que todos los pedidos simples que componen un pedido
   compuesto se paguen con cuentas del mismo cliente Además sólo es posible
                                                     cliente. Además,
   realizar peticiones de productos en stock.
Existe una clase (de la cual debe haber una única instancia en la aplicación)
   responsable del cobro, orden de distribución y confirmación de los pedidos. El
       p                                                                  p
   cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar
   todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago
   correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si
   es parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el
       p            p           p     ,                p            )          q
   pedido está listo para servirse, se ordena su distribución, y una vez entregado,
   pasa a estar confirmado.                                                      20

Se pide un diagrama de transición de estados para la clase Pedido
Solución




           21
Ejercicio
 Modelar l
 M d l el comportamiento reactivo d un reloj d pulsera.
                    t i t          ti de     l j de l
 El valor del tiempo se debe actualizar cada segundo, incluso cuando no se
 muestra (p.ej. crono encendido).
 El botón de la parte superior derecha enciende la luz que se mantiene
                                                        luz,
 encendida tanto como el botón está apretado, una vez que se suelta, la luz
 está encendida durante 2 segundos más y se apaga.
 El botón superior izquierdo alterna entre el modo de crono y de reloj. El
 sistema empieza en el modo reloj en el que se muestra la hora en formato
                                reloj,
 HH:MM:SS.
 En el modo crono, el tiempo discurrido se muestra en formato MM:SS:CC
 (
 (CC son centésimas de segundo). Inicialmente el crono empieza en
                                 g     )                            p
 00:00:00. El botón inferior derecho se usa para activar el crono. É  Éste se
 actualiza en incrementos de 1/100 segundos. Presionando el botón inferior
 derecho pausa o continua el crono (si el reloj está en modo crono).
 Pulsando el botón inferior izquierdo resetea el crono a 00:00:00 si el reloj
                               q                                             j
 está en modo crono y el crono ha sido pausado antes. El crono continua
 corriendo (si está corriendo) o mantiene su valor (si está en pausa) incluso
 cuando el reloj está en un modo de display distinto (por ejemplo, cuando se
 muestra la hora).
                                                                            22
Ejercicio
 Interface provisto por el controlador:
     getTime() : Devuelve la hora actual.
     refreshTimeDisplay() : Repinta la hora en el visor con la hora interna actual. El
     visor no necesita limpiarse antes de llamar a esta función. Por ejemplo, si se está
     visualizando el crono, se borrará antes de pintar la hora.
     refreshChronoDisplay() : ver refreshTimeDisplay().
     resetChrono() : Resetea el crono interno a 00:00:00.
     increaseTime() : Incrementa la hora en un segundo. Los minutos y horas se
     modificarán adecuademente, (por ejemplo, si se llama a increaseTime () a las
     11:59:59, la nueva hora será 12:00:00).
     increaseChrono () : Incrementa el crono en 1/100 segundos.
     setLight() : Enciende la luz del visor.
     unsetLight() : Apaga la luz del visor
                                      visor.
 Eventos de botones recibidos:
     topRightPressed.
     topRightReleased.
       p g
     topLeftPressed.
     topLeftReleased.
     bottomRightPressed.
     bottomRightReleased.
     bottomRightReleased
     bottomLeftPressed.                                                             23
     bottomRightReleased.
Posible Solución.
        Solución




                    24
Indice

 Diagramas de clases
 Diagramas de Transición de Estados
 Diagramas de Interacción.
    g




                                      25
Ejercicio
Especificar el diagrama de secuencia de la operación
      f
  “crearLaberinto”

public class JuegoLaberinto {
   public Laberinto crearLaberinto () {
      Laberinto lab = new Laberinto();
      Habitacion h1 = new Habitacion();
      Habitacion h2 = new Habitacion();
      Puerta puerta = new Puerta(h1, h2);
      lab.añadeHabitacion(h1);
      lab.añadeHabitacion(h2);
      h1.añadePuerta(puerta);
      return lab;
   }
}
Solución

         :JuegoLaberinto
crearLaberinto()
                                lab:Laberinto
                                l bL b i t

                                                h1:Habitacion

                                                                h2:Habitacion
                    create(h1,h2)
                                                                                puerta:Puerta
                   añadeHabitacion(h1)

                   añadeHabitacion(h2)

                   añadePuerta(puerta)
Ejercicio
Especificar el diagrama de secuencia de la operación
  “crearLaberinto”
public class JuegoLaberinto {
   private Laberinto lab;
   private boolean conVentana;

    public JuegoLaberinto() {
       lab = new Laberinto();
       conVentana = true;
    }

    public void crearLaberinto () {
       Habitacion h;
       for (int i=0; i<10; i++) {
          h = new Habitacion();
          if (conVentana == true)
             h.añadeVentana(new Ventana());
          lab.añadeHabitacion(h);
       }
}
Solución

         :JuegoLaberinto                  lab:Laberinto
crearLaberinto()

        loop       [for i = 1 to 10]
                                                          h:Habitacion

          opt         [conVentana==true]

                                                                         v:Ventana
                     añadeVentana(v)




                     añadeHabitacion(h)
Ejercicio

Especificar el diagrama de secuencia de la operación
  “realizarJugada” definida en la clase Jugador, para el juego del
  parchís
                                 *   2
             Jugador                        Dado
      - casillaActual: i t
           ill A t l int
      + realizarJugada(): void           + tirar(): int
      + casillaActual(): int
                  *
                                     1
                                                 Tablero

                                         + mover(int actual,
                                                 int unidades):
                                                 boolean
Solución

                 :Jugador                  d1:Dado   d2:Dado       :Tablero
realizarJugada()

           par                 tirar()

                               n1


                                tirar()

                                n2


                            ca:=casillaActual()


                       mover(ca,n1+n2)

                                                         movRealizado
Ejercicio
Identificar las clases relevantes y realizar el diagrama de
   secuencia para el siguiente caso de uso, que corresponde a
   la realización de una llamada desde un teléfono móvil.

  El usuario pulsa los dígitos del número de teléfono
  Para cada dígito
               g
     la pantalla se actualiza para añadir el dígito marcado
     se emite un tono por el receptor
  El usuario pulsa el botón “Enviar”
                              Enviar
  El indicador “en uso” se ilumina en pantalla
  El móvil establece conexión con la red
  Los dígitos
  L dí it acumulados se mandan a l red
                     l d           d    la d
  Se establece la conexión con el número marcado
Solución

       :Button              :Dialer       :Display    :Speaker    send:Button      :CellularRadio


loop     [for i = 1 to 9]
             digit(code)
                                 displayDigit
                                 (code)          emitTone
                                                 (code)

                                      send()

                                 connect(pno)

                                                                                inUse()




                                                            ¿Diagrama de colaboración
                                                            equivalente?
Solución
Ejercicio: Biblioteca
 Una biblioteca tiene copias de libros Estos últimos se
                                  libros.
 caracterizan por su nombre, tipo (novela, teatro, poesía,
 ensayo), editorial, año y autor.
 Los autores se caracterizan por su nombre, nacionalidad
 y fecha de nacimiento.
 Cada copia tiene un identificador y puede estar en la
                       identificador,
 biblioteca, prestada, reservada, con retraso o en
 reparación.
 Los lectores pueden tener un máximo de 3 libros en
 préstamo.
 Cada libro se presta un máximo de 30 días, p cada día
                p                             por
 de retraso, se impone una “multa” de dos días sin
 posibilidad de coger un libro.
 Realiza el diagrama de colaboración para el método
 devolver()
Solucion
                        1.3 [retraso>0]: multar(retraso)


   1: devolver(id, fecha)
              ( ,       )
                                                      prestamos
                            :Lector    1.1: dev:=remove(id)
                                                                   :Copia
1.3.1a [multa=0]: multa:=
create(fecha,retraso)


     multa:Multa
       lt M lt
       {new}                 1.2: retraso:=getRetraso(fecha)
                                                                  dev:Copia


      multa:Multa
                     1.3.1b [multa<>0]: anyade(fecha,retraso)

Más contenido relacionado

La actualidad más candente

Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenKarlytoz_36
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresAlvaro Enrique Ruano
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UMLramirezjaime
 
Diccionario de datos en los sistemas de información
Diccionario de datos en los sistemas de informaciónDiccionario de datos en los sistemas de información
Diccionario de datos en los sistemas de informaciónYaskelly Yedra
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalizacióncintiap25
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisJulio Pari
 
Diccionario De Datos
Diccionario De DatosDiccionario De Datos
Diccionario De Datosnahun1385
 
Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.Universidad de Guadalajara
 
Analisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de usoAnalisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de usoYovana Connie Roca Avila
 
casos de uso
casos de usocasos de uso
casos de usostill01
 
Tipos de Modelos de Datos : Ventajas y Desventajas
Tipos de Modelos de Datos : Ventajas y DesventajasTipos de Modelos de Datos : Ventajas y Desventajas
Tipos de Modelos de Datos : Ventajas y DesventajasJuanMiguelCustodioMo
 
Diagramas de clases y actividades
Diagramas de clases y actividadesDiagramas de clases y actividades
Diagramas de clases y actividadesTerryJoss
 
Diagramas De Secuencia
Diagramas De SecuenciaDiagramas De Secuencia
Diagramas De SecuenciaFabian Garcia
 
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uniPrototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uniRAUL CHIPANA LARICO
 
Diagramas de colaboracion
Diagramas de colaboracionDiagramas de colaboracion
Diagramas de colaboraciond-draem
 

La actualidad más candente (20)

Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - Resumen
 
Ejercicios uml
Ejercicios umlEjercicios uml
Ejercicios uml
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Diagrama de Actividades
Diagrama de ActividadesDiagrama de Actividades
Diagrama de Actividades
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UML
 
Diccionario de datos en los sistemas de información
Diccionario de datos en los sistemas de informaciónDiccionario de datos en los sistemas de información
Diccionario de datos en los sistemas de información
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalización
 
Arquitectura de sistemas distribuidos
Arquitectura de sistemas distribuidosArquitectura de sistemas distribuidos
Arquitectura de sistemas distribuidos
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisis
 
Casos de uso
Casos de usoCasos de uso
Casos de uso
 
Diccionario De Datos
Diccionario De DatosDiccionario De Datos
Diccionario De Datos
 
Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.Sistemas arquitectónicos centralizados, descentralizados e híbridos.
Sistemas arquitectónicos centralizados, descentralizados e híbridos.
 
Analisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de usoAnalisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de uso
 
casos de uso
casos de usocasos de uso
casos de uso
 
Tipos de Modelos de Datos : Ventajas y Desventajas
Tipos de Modelos de Datos : Ventajas y DesventajasTipos de Modelos de Datos : Ventajas y Desventajas
Tipos de Modelos de Datos : Ventajas y Desventajas
 
Diagrama de clases - Ejemplo monográfico 02
Diagrama de clases - Ejemplo monográfico 02Diagrama de clases - Ejemplo monográfico 02
Diagrama de clases - Ejemplo monográfico 02
 
Diagramas de clases y actividades
Diagramas de clases y actividadesDiagramas de clases y actividades
Diagramas de clases y actividades
 
Diagramas De Secuencia
Diagramas De SecuenciaDiagramas De Secuencia
Diagramas De Secuencia
 
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uniPrototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
Prototipo de-sistema-para-matricula-e-inscripcion-de-asignaturas---uni
 
Diagramas de colaboracion
Diagramas de colaboracionDiagramas de colaboracion
Diagramas de colaboracion
 

Destacado

11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()Clara Patricia Avella Ibañez
 
Actividad ap3 aa1-ev1-construcción de diagramas uml
Actividad ap3 aa1-ev1-construcción de diagramas umlActividad ap3 aa1-ev1-construcción de diagramas uml
Actividad ap3 aa1-ev1-construcción de diagramas umlkorfan
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1Clara Patricia Avella Ibañez
 
Operaciones unitarias y procesos unitarios
Operaciones unitarias y procesos unitariosOperaciones unitarias y procesos unitarios
Operaciones unitarias y procesos unitariosalvaro Llanos
 

Destacado (10)

D clase
D claseD clase
D clase
 
Diagramas uml
Diagramas umlDiagramas uml
Diagramas uml
 
Solucion laboratorio uml
Solucion laboratorio umlSolucion laboratorio uml
Solucion laboratorio uml
 
Ejercicios de uml
Ejercicios de umlEjercicios de uml
Ejercicios de uml
 
Fabricacion de azucar
Fabricacion de azucarFabricacion de azucar
Fabricacion de azucar
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
Actividad ap3 aa1-ev1-construcción de diagramas uml
Actividad ap3 aa1-ev1-construcción de diagramas umlActividad ap3 aa1-ev1-construcción de diagramas uml
Actividad ap3 aa1-ev1-construcción de diagramas uml
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1
 
Operaciones unitarias y procesos unitarios
Operaciones unitarias y procesos unitariosOperaciones unitarias y procesos unitarios
Operaciones unitarias y procesos unitarios
 
Trabajo final elaboración de azucar
Trabajo final elaboración de azucarTrabajo final elaboración de azucar
Trabajo final elaboración de azucar
 

Similar a Ejercicios uml

Similar a Ejercicios uml (11)

BD - Entidad Relación
BD - Entidad RelaciónBD - Entidad Relación
BD - Entidad Relación
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
 
Clase 01
Clase 01Clase 01
Clase 01
 
Colabora2
Colabora2Colabora2
Colabora2
 
Diapo fundamentos bases de datos
Diapo fundamentos bases de datosDiapo fundamentos bases de datos
Diapo fundamentos bases de datos
 
P:\Lenguajes Formales
P:\Lenguajes FormalesP:\Lenguajes Formales
P:\Lenguajes Formales
 
Dotnetmania 9 pag_21_29
Dotnetmania 9 pag_21_29Dotnetmania 9 pag_21_29
Dotnetmania 9 pag_21_29
 
Practica Dos Delphi
Practica Dos DelphiPractica Dos Delphi
Practica Dos Delphi
 
Investigacion 1
Investigacion 1Investigacion 1
Investigacion 1
 
Apuntes php mysql
Apuntes php mysqlApuntes php mysql
Apuntes php mysql
 

Ejercicios uml

  • 1. Ejercicios UML Juan de Lara Grupo 46 G Curso 2008/09 1
  • 2. Indice Diagramas de clases y OCL. OCL Diagramas de Transición de Estados Diagramas de Interacción. 2
  • 3. Ejercicio Representa mediante un diagrama de clases la siguiente especificación: Una aplicación necesita almacenar información sobre empresas, sus empleados y sus clientes. Ambos se caracterizan por su nombre y edad. Los L empleados ti l d tienen un sueldo b t l empleados que ld bruto, los l d son directivos tienen una categoría, así como un conjunto de empleados subordinados. p De los clientes además se necesita conocer su teléfono de contacto. La L aplicación necesita mostrar l li ió it t los d t datos d empleados y de l d clientes. 3
  • 4. Ejercicio Persona - nombre - edad + mostrar() Empleado Cliente subordinados - sueldo_bruto - telefono_de_contacto nombre_empresa 0..* + mostrar () t + calcular_salario_neto() +mostrar() 1..* empleados 0..* clientes 1..* Directivo 0..* Empresa - categoria 1 - nombre b + mostrar () 4
  • 5. Ejercicio: Biblioteca Una biblioteca tiene copias de libros Estos últimos se libros. caracterizan por su nombre, tipo (novela, teatro, poesía, ensayo), editorial, año y autor. Los autores se caracterizan por su nombre, nacionalidad y fecha de nacimiento. Cada copia tiene un identificador y puede estar en la identificador, biblioteca, prestada, con retraso o en reparación. Los lectores pueden tener un máximo de 3 libros en préstamo. préstamo Cada libro se presta un máximo de 30 días, por cada día de retraso, se impone una “multa” de dos días sin p posibilidad de coger un nuevo libro. Realiza un diagrama de clases y añade los métodos necesarios para realizar el prestamo y devolución de libros.
  • 6. Libro Copia - titulo : string - id : Identifier ejemplar libro - tipo: tipoLibro - estado: estadoCopia 1..* 1 - editorial: string 0..3 prestamos - anyo: i t int 1..* obras Prestamo - inicio: Date - fin: Date 1 autor 0..1 lector Autor - nombre: string b ti Lector - nacionalidad: string - nSocio : Identifier - fechaNacimiento: Date - nombre: string - telefono: string <<enumeration>> - direccion: string tipoLibro + devolver(id: Identifier, fechaAct: Date) 1 novela teatro {precondition: prestamos.notEmpty()} poesia i + prestar(id: Identifier, fechaAct: Date) ensayo {precondition: multa==0} multa 0..1 - multar(dias : int) <<enumeration>> Multa estadoCopia prestado - fInicio: Date retraso - fFin: Date biblioteca reparacion
  • 7. Ejercicio Especificar un diagrama de clases que describa redes de ordenadores. Los elementos que se pueden incluir en la red son: Servidor, PC, Impresora. S id PC I Hub, Cable de red. Los PCs pueden conectarse con un único Hub los Hub, servidores con uno o varios. Los Servidores y PCs pueden generar mensajes, con una cierta longitud. Los Hubs tienen un número de puertos, algunos de los cuales puede usarse para conectar con otros Hubs Hubs. Tienen cierta probabilidad de “perder” mensajes. Las impresoras pueden averiarse, con cierta probabilidad, durante cierto tiempo. 7
  • 8. Ejercicio. Ejercicio Posible Solución. Solución “Los PCs pueden conectarse con un único Hub, los servidores con uno o varios” 8 Podemos modelarlo como una restricción OCL, o bien añadir asociaciones desde Servidor y PC
  • 9. OCL “Los PCs pueden conectarse con un único Hub, los servidores con uno o varios” Context PC Inv: cable equipo >size() = 1 cable_equipo->size() Context Servidor Inv: cable_equipo->size() >= 1 q p “Un Hub no puede conectarse consigo mismo a través de un puerto” Context Cable_Hubs Conte t C bl H b Inv: Puerto_Hub.hub->asSet()->size() = 2 9
  • 10. Ejercicio Examen Junio 2008. Realiza el diseño de una aplicación para la gestión de pedidos. La aplicación deberá manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden realizar pedidos de productos, de los cuales se anota la cantidad en stock. Un p p , cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar nuevos pedidos. Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y (por restricciones en la distribución) contienen un máximo de 20 unidades del mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más pedidos, que pueden ser simples o compuestos. Como es de esperar, el sistema debe garantizar que todos los pedidos simples que componen un pedido compuesto se paguen con cuentas del mismo cliente Además sólo es posible cliente. Además, realizar peticiones de productos en stock. Existe una clase (de la cual debe haber una única instancia en la aplicación) responsable del cobro, orden de distribución y confirmación de los pedidos. El p p cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si es parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el p p p , p ) q pedido está listo para servirse, se ordena su distribución, y una vez entregado, pasa a estar confirmado. 10 Se pide un diagrama de clases de diseño. Añade las restricciones OCL necesarias.
  • 11. Solución 11
  • 12. Restricciones OCL: Context Cliente::realizar pedido: Cliente::realizar_pedido: pre: self.cuentas->exists(c | c.disponible > 0) Context Pedido Compuesto: inv: self pedidos simples >c enta >cliente >asSet() >si e() = 1 in self.pedidos_simples->cuenta->cliente->asSet()->size() Context Pedido: inv: self.t_productos.num->sum() <= 20 Context Pedido::añadirProducto(p: Producto, num: int): pre: p.stock>=num Context Cliente::rechazar_pedido (p:Pedido): pre: self.cuentas.disponible->sum()<p.total 12
  • 13. Indice Diagramas de clases Diagramas de Transición de Estados Diagramas de Interacción. 13
  • 14. Ejercicio: Biblioteca Una biblioteca tiene copias de libros Estos últimos se libros. caracterizan por su nombre, tipo (novela, teatro, poesía, ensayo), editorial, año y autor. Los autores se caracterizan por su nombre, nacionalidad y fecha de nacimiento. Cada copia tiene un identificador y puede estar en la identificador, biblioteca, prestada, reservada, con retraso o en reparación. Los lectores pueden tener un máximo de 3 libros en préstamo. Cada libro se presta un máximo de 30 días, p cada día p por de retraso, se impone una “multa” de dos días sin posibilidad de coger un libro. Realiza el diagrama de estados de la clase “copia”. copia
  • 15. Solucion Con devolver() Con reservar(id) / Retraso y en Retraso usrRes = id reservado reser ado reparacion reparado() devolver() [getDate()>fp+30] [getDate()>fp+30] reparar() en prestar(id,fecha)/ reservar(id) / prestado reservado biblioteca fp=fecha usrRes = id devolver() prestar(id, fecha) devolver() [usrRes==id]/ fp=fecha tm(2 d t (2 days) ) en reserva
  • 16. Solucion: Estados Jerárquicos Con Con reservar(id) / Retraso y en Retraso usrRes = id reservado reser ado reparacion reparado() [getDate()>fp+30] [getDate()>fp+30] reparar() en prestar(id,fecha)/ reservar(id) / prestado reservado biblioteca fp=fecha usrRes = id devolver() prestar(id, fecha) devolver() [usrRes==id]/ tm(2 d t (2 days) ) fp=fecha en reserva 16
  • 17. Máquinas de Estados q Estado Histórico. Ejercicio. Modelar el comportamiento de una cadena de música. Esta puede estar p encendida (ON) o apagada (Standby). La cadena tiene reproductor de CD Radio y CD, Cinta. Se cambia de uno a otro con el botón “mode”. Cuando se enciende la mode cadena se recuerda el último estado en el que estuvo. 17
  • 18. Máquinas de Estados q Estado Histórico. Ejercicio. Solución On Standby power mode mode CD power H Radio Tape mode Modelar l i M d l el mismo sistema sin usar estado hi tó i i t i t d histórico. 18
  • 19. Máquinas de Estados q Estado Histórico. Ejercicio. Solución (ii) Standby On power lastCD CD mode power mode power lastRadio power Radio Tape mode lastTape power power 19
  • 20. Ejercicio Examen Junio 2008. Realiza el diseño de una aplicación para la gestión de pedidos. La aplicación deberá manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden realizar pedidos de productos, de los cuales se anota la cantidad en stock. Un p p , cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar nuevos pedidos. Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y (por restricciones en la distribución) contienen un máximo de 20 unidades del mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más pedidos, que pueden ser simples o compuestos. Como es de esperar, el sistema debe garantizar que todos los pedidos simples que componen un pedido compuesto se paguen con cuentas del mismo cliente Además sólo es posible cliente. Además, realizar peticiones de productos en stock. Existe una clase (de la cual debe haber una única instancia en la aplicación) responsable del cobro, orden de distribución y confirmación de los pedidos. El p p cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si es parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el p p p , p ) q pedido está listo para servirse, se ordena su distribución, y una vez entregado, pasa a estar confirmado. 20 Se pide un diagrama de transición de estados para la clase Pedido
  • 21. Solución 21
  • 22. Ejercicio Modelar l M d l el comportamiento reactivo d un reloj d pulsera. t i t ti de l j de l El valor del tiempo se debe actualizar cada segundo, incluso cuando no se muestra (p.ej. crono encendido). El botón de la parte superior derecha enciende la luz que se mantiene luz, encendida tanto como el botón está apretado, una vez que se suelta, la luz está encendida durante 2 segundos más y se apaga. El botón superior izquierdo alterna entre el modo de crono y de reloj. El sistema empieza en el modo reloj en el que se muestra la hora en formato reloj, HH:MM:SS. En el modo crono, el tiempo discurrido se muestra en formato MM:SS:CC ( (CC son centésimas de segundo). Inicialmente el crono empieza en g ) p 00:00:00. El botón inferior derecho se usa para activar el crono. É Éste se actualiza en incrementos de 1/100 segundos. Presionando el botón inferior derecho pausa o continua el crono (si el reloj está en modo crono). Pulsando el botón inferior izquierdo resetea el crono a 00:00:00 si el reloj q j está en modo crono y el crono ha sido pausado antes. El crono continua corriendo (si está corriendo) o mantiene su valor (si está en pausa) incluso cuando el reloj está en un modo de display distinto (por ejemplo, cuando se muestra la hora). 22
  • 23. Ejercicio Interface provisto por el controlador: getTime() : Devuelve la hora actual. refreshTimeDisplay() : Repinta la hora en el visor con la hora interna actual. El visor no necesita limpiarse antes de llamar a esta función. Por ejemplo, si se está visualizando el crono, se borrará antes de pintar la hora. refreshChronoDisplay() : ver refreshTimeDisplay(). resetChrono() : Resetea el crono interno a 00:00:00. increaseTime() : Incrementa la hora en un segundo. Los minutos y horas se modificarán adecuademente, (por ejemplo, si se llama a increaseTime () a las 11:59:59, la nueva hora será 12:00:00). increaseChrono () : Incrementa el crono en 1/100 segundos. setLight() : Enciende la luz del visor. unsetLight() : Apaga la luz del visor visor. Eventos de botones recibidos: topRightPressed. topRightReleased. p g topLeftPressed. topLeftReleased. bottomRightPressed. bottomRightReleased. bottomRightReleased bottomLeftPressed. 23 bottomRightReleased.
  • 24. Posible Solución. Solución 24
  • 25. Indice Diagramas de clases Diagramas de Transición de Estados Diagramas de Interacción. g 25
  • 26. Ejercicio Especificar el diagrama de secuencia de la operación f “crearLaberinto” public class JuegoLaberinto { public Laberinto crearLaberinto () { Laberinto lab = new Laberinto(); Habitacion h1 = new Habitacion(); Habitacion h2 = new Habitacion(); Puerta puerta = new Puerta(h1, h2); lab.añadeHabitacion(h1); lab.añadeHabitacion(h2); h1.añadePuerta(puerta); return lab; } }
  • 27. Solución :JuegoLaberinto crearLaberinto() lab:Laberinto l bL b i t h1:Habitacion h2:Habitacion create(h1,h2) puerta:Puerta añadeHabitacion(h1) añadeHabitacion(h2) añadePuerta(puerta)
  • 28. Ejercicio Especificar el diagrama de secuencia de la operación “crearLaberinto” public class JuegoLaberinto { private Laberinto lab; private boolean conVentana; public JuegoLaberinto() { lab = new Laberinto(); conVentana = true; } public void crearLaberinto () { Habitacion h; for (int i=0; i<10; i++) { h = new Habitacion(); if (conVentana == true) h.añadeVentana(new Ventana()); lab.añadeHabitacion(h); } }
  • 29. Solución :JuegoLaberinto lab:Laberinto crearLaberinto() loop [for i = 1 to 10] h:Habitacion opt [conVentana==true] v:Ventana añadeVentana(v) añadeHabitacion(h)
  • 30. Ejercicio Especificar el diagrama de secuencia de la operación “realizarJugada” definida en la clase Jugador, para el juego del parchís * 2 Jugador Dado - casillaActual: i t ill A t l int + realizarJugada(): void + tirar(): int + casillaActual(): int * 1 Tablero + mover(int actual, int unidades): boolean
  • 31. Solución :Jugador d1:Dado d2:Dado :Tablero realizarJugada() par tirar() n1 tirar() n2 ca:=casillaActual() mover(ca,n1+n2) movRealizado
  • 32. Ejercicio Identificar las clases relevantes y realizar el diagrama de secuencia para el siguiente caso de uso, que corresponde a la realización de una llamada desde un teléfono móvil. El usuario pulsa los dígitos del número de teléfono Para cada dígito g la pantalla se actualiza para añadir el dígito marcado se emite un tono por el receptor El usuario pulsa el botón “Enviar” Enviar El indicador “en uso” se ilumina en pantalla El móvil establece conexión con la red Los dígitos L dí it acumulados se mandan a l red l d d la d Se establece la conexión con el número marcado
  • 33. Solución :Button :Dialer :Display :Speaker send:Button :CellularRadio loop [for i = 1 to 9] digit(code) displayDigit (code) emitTone (code) send() connect(pno) inUse() ¿Diagrama de colaboración equivalente?
  • 35. Ejercicio: Biblioteca Una biblioteca tiene copias de libros Estos últimos se libros. caracterizan por su nombre, tipo (novela, teatro, poesía, ensayo), editorial, año y autor. Los autores se caracterizan por su nombre, nacionalidad y fecha de nacimiento. Cada copia tiene un identificador y puede estar en la identificador, biblioteca, prestada, reservada, con retraso o en reparación. Los lectores pueden tener un máximo de 3 libros en préstamo. Cada libro se presta un máximo de 30 días, p cada día p por de retraso, se impone una “multa” de dos días sin posibilidad de coger un libro. Realiza el diagrama de colaboración para el método devolver()
  • 36. Solucion 1.3 [retraso>0]: multar(retraso) 1: devolver(id, fecha) ( , ) prestamos :Lector 1.1: dev:=remove(id) :Copia 1.3.1a [multa=0]: multa:= create(fecha,retraso) multa:Multa lt M lt {new} 1.2: retraso:=getRetraso(fecha) dev:Copia multa:Multa 1.3.1b [multa<>0]: anyade(fecha,retraso)