ANÁLISIS Y DISEÑO

ORIENTADO A OBJETOS

     CON UML

                      1
Auditorio y Objetivos
n   Dirigido a
     n   Personas con la necesidad de aprender las características y
         métodos de la tecnología de objetos, principalmente aquellas
         que desarrollan sistemas complejos.


n   Objetivos
     n   Al finalizar el curso, los participantes podrán:
          • Explicar el proceso de desarrollo iterativo e incremental
          • Definir los requerimientos de un sistema desde el punto de vista
            del usuario
          • Crear un modelo orientado a objetos del comportamiento y de los
            aspectos estructurales de los requerimientos de un sistema
          • Crear una arquitectura lógica de un sistema
          • Diseñar un sistema aplicando los conceptos de abstracción,
            encapsulamiento, herencia, polimorfismo y patrones

                                                                               2
Contenido
n   Introducción
     • Antecedentes del análisis y diseño orientado a objetos y
         UML

n   Desarrollo Iterativo e Incremental
     • Ciclo de vida del desarrollo de sistemas por medio de una
         aproximación iterativa e incremental

n   Comportamiento del Sistema
     • Análisis de requerimientos a través de Casos de Uso (Use
         case)
     •   Desarrollo de escenarios

n   Objetos y Clases
     • Definición de objetos, clases, estereotipos y paquetes

                                                                   3
Contenido
n   Interacción de Objetos
     • Representación gráfica del escenario

n   Definición de Clases
     • La aplicación del análisis de Casos de Uso para definir clases
         en el sistema
     •   Definición de paquetes
     •   Creación de diagramas de clase

n   Relaciones
     • Definición de relaciones necesarias para la interacción de
         objetos

n   Operaciones y Atributos
     • Definición de la estructura y comportamiento de una clase
                                                                        4
Contenido
n   Herencia
     • Aplicación de los principios de generalización y especialización
       para definir relaciones de superclase/subclase

n   Comportamiento de Objetos
     • Desarrollo de diagramas de transición de estado para mostrar
       gráficamente el comportamiento de un objeto

n   Homogeneización
     • Mezclar clases descubiertas en diferentes Casos de Uso

n   Arquitectura
     • Discusión de la Arquitectura “4+1” Vistas


                                                                          5
Contenido
n   Mecanismos Clave
     •   Discusión de estrategias de mecanismos clave
     •   Designación de clases
     •   Diseño de la interfaz de usuario
     •   Incorporación de patrones

n   Diseño de relaciones
     • Soporte C++ para relaciones

n   Diseño de Atributos y Operaciones
     • Soporte C++ para atributos y operaciones

n   Diseño para Herencia
     • Soporte C++ para herencia

                                                        6
Contenido
n   Resumen
     • Resumen del curso de análisis y diseño

n   Lectura recomendadas
     • Lista de libros

n   Planteamiento del Problema de Nómina
     • Requerimientos para un sistema de nómina

n   Solución del Problema Nómina
     • Elaboración del análisis y diseño para el problema de
       nómina




                                                               7
Introducción




               8
Objetivos: Introducción

n   Usted será capaz de:
     • Explicar la crisis del software
     • Discutir el poder de la tecnología de objetos
     • Discutir dónde puede emplearse la tecnología OO
     • Definir análisis y diseño
     • Explicar el origen del UML




                                                         9
La Crisis del Software
n   El Departamento de Vehículos a Motor de California invirtió
    más de $43 mdd en un sistema que fusionaba los Sistemas de
    Licencias a Conductores del estado y el Registro de Vehículos
     • El sistema fue abandonado sin haberlo usado

n   American Airlines realizó sin éxito un esfuerzo de $165 mdd
    para ligar su software de reservación de vuelos con los
    sistemas de reservación de Marriott, Hilton y Budget

n   El sistema de control de equipaje del Aeropuerto de Denver
    costó millones de dólares, sobretodo debido al retraso en la
    abertura del aeropuerto
                                  Fallas de software reportadas por W. Wayt Gibbs en el
                                  numero de Septiembre de 1994 de la revista Scientific American


Algunos ejemplos extremos, PERO hay varios desastres similares en escala menor

                                                                                                   10
La Crisis del Software (cont.)
n   En Marzo de 1989, Arthur Andersen reportó
     • Más de $300 mil mdd por año invertidos en actividades de
         software comercial en los Estados Unidos
     •   Sólo el 8% del software entregado brinda resultados y
         funciona


n   ¿Cuáles son las razones de la crisis del
    software?
     • Constantes cambios en los requerimientos
     • Fallas en el manejo de riesgos
     • Complejidad del software



                                                                  11
Cambios en los requerimientos
n   Los requerimientos del negocio se definen en ciclos de
    desarrollo más pequeños
     • Los usuarios esperan más en términos de flexibilidad

n   Los requerimientos iniciales generalmente están
    pobremente definidos




                                                              12
Fallas en el Manejo de Riesgos
n   El ciclo de vida en cascada puede retrasar la identificación
    del problema
n   No hay prueba de que el sistema funcionará, sino hasta el
    final del ciclo de vida
n   El resultado, el máximo riesgo




                                                                   13
Complejidad del Software
n   Está creciendo la demanda de software de negocios

n   Nadie entiende el sistema en su totalidad

n   Deben mantenerse los sistemas anteriores, pero los
    desarrolladores de los mismos ya se han ido




                                                         14
Poder de la Tecnología de Objetos
n   Un paradigma único
     • Los usuarios, analistas, diseñadores e programadores
       utilizan el mismo lenguaje

n   Facilita la re-utilización de arquitectura y código

n   Los modelos reflejan de manera más cercana al mundo
    real
     • Describe con mayor precisión los procesos y datos
     • Descomposición basada en partición natural
     • Más fácil de entender y mantener

n   Estabilidad
     • Un cambio en los requerimientos no significa cambios
       masivos en el sistema en desarrollo
                                                              15
Ejemplo: Ventas

                   Orden




     Objeto




              Medio de entrega




                                 16
Diagrama de Clases de Ventas
                                     Ventas




 Vendedor                 Cliente                Producto             Vehiculo




            Corporativo             Individual              Trailer              Tren




                                                                                        17
Efecto en el Cambio de
Requerimientos
                                     Ventas




 Vendedor                 Cliente                Producto             Vehiculo




            Corporativo             Individual              Trailer              Tren




                                                                                        18
¿Dónde se está usando OO?
n   Sistemas basados en GUI
     • La metodología OO facilita el diseño e implementación de
       sistemas con interfaz gráfica de usuario (GUI)




                                                                  19
¿Dónde se está usando OO?
n   Sistemas Inmersos
     • Los métodos OO permiten desarrollar sistemas inmersos y de
       tiempo real con mayor calidad y flexibilidad




                                                                    20
¿Dónde se está usando OO?
n   Cómputo Cliente/Servidor
    • La metodología OO pude encapsular información de
      mainframe en objetos, permitiendo obtener aplicaciones
      pequeñas

             Plataformas PC

                                                 Estación de
                                                 Trabajo




                          BD con interfaz de objetos y
                          aplicaciones existentes



                                                               21
¿Dónde se está usando OO?
n   En la Re-ingeniería
     • Los métodos OO permiten hacer re-ingeniería a partes del
       sistema, protegiendo las inversiones hechas en aplicaciones
       de software existentes




         Software Existente           Software con Re-ingeniería



                                                                     22
Análisis y Diseño Orientado a
Objetos


     OOA                         OOD
  Desarrollo del modelo    Agregar decisiones de
  de requerimientos         diseño y de detalle



Perspectiva del Usuario   Perspectiva del Desarrollador




                                                    23
¿Qué es UML?
n   El Lenguaje de Modelado Unificado (Unified Modeling
    Language, UML) es descrito en “The Unified Modeling
    Language for Object-Oriented Development” escrito por
    Grady Booch, Jim Rumbaugh, e Ivar Jacobson
    • Disponible en http:www.rational.com

n   Basado en las experiencias personales de los autores

n   Incorpora contribuciones de otras metodologías

n   Sometido aprobación a la OMG por Rational Software,
    Microsoft, Hewlett-Packard, Oracle, Texas Instruments,
    MCI Systemhouse y otros


                                                             24
Entradas al UML
                                          Booch
                     Rumbaugh                            Jacobson
                                                                                 Fusion
       Meyer
                                                                         Descripción de operaciones,
  Antes y después de                                                     Numeración de mensajes
  las condicioones



    Harel
  Mapas de estado
                                    UML                                            Embley
                                                                              Clases únicas,
                                                                              Vista de alto-nivel


       Gamma, et.al
                                                                           Wirfs-Brock
Estructura del trabajo, patrones,
             notas                                                         Responsabilidades
                             Shlaer - Mellor                Odell
                               Ciclos de vida de objetos Clasificación


                                                                                                       25
Evolución del UML
                      Sometido a OMG, Julio´97      UML 1.1       Industrialización


                      Publicación del     UML 1.0
                    Estándar 1.0 Dic´96                           Estandardización

 Retro-   Junio´96 & Oct´96    UML 0.9 & 0.91
alimen-
 tación                                          Experto en UML
          OOPSLA ´95 Unified Method 0.8
                                                                    Unificación

                      Booch´93      OMT-2

                                                                  Fragmentación
Otros métodos Booch´91                    OMT-1        OOSE



                                                                                  26
Beneficios de UML
n   Ofrece un proceso de modelado sin fallas durante el
    análisis, para diseñar la implementación

n   Define una notación expresiva y consistente
     • Facilita la comunicación con otros
     • Ayuda a señalar omisiones e inconsistencias
     • Soporta tanto análisis como diseño de pequeños y grandes
       sistemas




                                                                  27
28
Desarrollo Iterativo e Incremental




                                 29
Objetivos: Desarrollo Iterativo e
    Incremental

n   Usted podrá:
     • Definir un proceso de desarrollo iterativo e incremental
     • Listar las fases, los productos y las actividades principales
       para cada fase de un proceso de desarrollo iterativo e
       incremental

     • Definir una iteración y listar sus actividades




                                                                       30
¿Qué es Desarrollo Iterativo e
    Incremental?
n   Desarrollo iterativo e incremental es el proceso de
    construir sistemas de software en pasos pequeños


n   Beneficios
     • Reducción del riesgo basándose en la retroalimentación
       temprana
     • Mayor flexibilidad para acomodar requerimientos nuevos o
       cambios en los mismos
     • Incremento de la calidad del software




                                                                  31
Ciclo de vida del Software
n   El ciclo de vida del software se divide en una serie de
    ciclos de desarrollo, donde la salida de un ciclo de
    desarrollo es la generación de un producto de software

n   Cada ciclo es una sucesión de fases
     •   Inicio
     •   Elaboración
     •   Construcción
     •   Transición


    Inicio     Elaboración            Construcción   Transición

                             tiempo



                                                                  32
Fase de Inicio
n   Propósito:
     • Establecer casos de uso de un sistema nuevo o para la
       actualización importante de un sistema existente

n   Productos requeridos:
     • Requerimientos esenciales para el proyecto
     • Valoración del riesgo inicial

n   Productos opcionales:
     • Un prototipo conceptual
     • Un modelo inicial del dominio (avance de un 10% - 20%)




                                                                33
Fase de Elaboración
n   Propósito
     • Analizar el dominio del problema

     • Establecer una base arquitectónica sólida

     • Manejar los elementos de mayor riesgo del proyecto

     • Desarrollar un plan comprensivo que muestre como se
       completará el proyecto




                                                             34
Fase de Elaboración (cont.)
n   Productos
     • Un modelo del comportamiento del sistema, que incluya el
         contexto del sistema, escenarios y un modelo del dominio
         (avance de un 80%)
     •   Una arquitectura de ejecutables
     •   Una visión del producto base de acuerdo al modelo de
         dominio
     •   Una valoración revisada del riesgo
     •   Un plan de desarrollo
     •   Criterios de evaluación
     •   Publicar descripciones
     •   Un manual de usuario preliminar (opcional)
     •   Estrategia de prueba
     •   Plan de pruebas

                                                                    35
Fase de Construcción
n   Propósito
     • Desarrollar un producto de software completo, de forma
         incremental, que esté en transición a la comunidad de
         usuarios


n   Productos
     •   Una serie de ejecutables liberados
     •   Prototipos de comportamiento
     •   Resultados que aseguren calidad
     •   Documentación del sistema y del usuario
     •   Plan de desarrollo
     •   Criterio de evaluación para al menos la siguiente iteración


                                                                       36
Fase de Transición
n   Propósito
     • Hacer la transición del producto de software a la
       comunidad de usuario



n   Productos
     • Una serie de ejecutables liberados
     • Resultados que aseguren calidad
     • Documentación del sistema y del usuario actualizados
     • Análisis “postmortem” del desempeño del proyecto

                                                              37
¿Qué es una Iteración?
n   Una iteración es un loop o ciclo de desarrollo que
    desemboca en la liberación de un subconjunto del
    producto final

n   Cada iteración pasa a través de todos los aspectos del
    desarrollo del software
     •   Análisis de requerimientos
     •   Diseño
     •   Implementación
     •   Pruebas
     •   Documentación

n   Cada liberación iterativa es una “pieza” totalmente
    documentada del sistema final
      Iteración   Iteración de   Iteración de   Iteración de   Iteración de   Iteración de   Iteración de   Iteración de
     Preliminar   Arquitectura   Arquitectura    Desarrollo     Desarrollo     Desarrollo     Transición     Transición
                                                                                                                           38
Reducción del Riesgo a través de
      Iteraciones
                            Define iteración para
Riesgos iniciales           direccionar los riesgos
Ámbito inicial del proyecto mayores
                                                            Planear y desarrollar la iteración




                                           Iteración N
                                                                  Evaluar la iteración

                  Revisar plan del
                  proyecto
                                                                                 Riesgos eliminados

                                               Revisar riesgos minimizados o nuevos




                                                                                                 39
Planeación de Iteraciones
n   Identificar y asignar prioridades a los riesgos del proyecto

n   Seleccionar un pequeño número de escenarios que
    ejemplifiquen los riesgos de mayor prioridad

n   Los escenarios seleccionados son utilizados por:
     • Los desarrolladores, para identificar lo que se va a
       implementar en la iteración
     • Los evaluadores, para desarrollar planes y procedimientos
       de prueba para la iteración

n   Al final de la iteración
     • Determinar los riesgos que han sido reducidos o eliminados
     • Determinar la posibilidad de nuevos riesgos descubiertos
     • Actualización del plan de iteraciones siguientes


                                                                    40
Reunión de todos los elementos
                                                                                                    Phases

P ro c e ss C o m p o n e n ts                I n c e p t io n        E la b o ra t i o n                    C o n s t r u c ti o n                      T r a n s it i o n

         R e q u ir e m e n ts
         A n a l ys is

                       A rc h it e c t u re
                       Level
         D e s ign
                       C la ss L e v e l


         I m p le m e n t a ti o n

         Te s t

S u p p o r ti n g A c t iv it i e s
      P ro je ct M a n a g e m e n t
      P ro ce s s C o n fig u r a tio n

                                               p re l im i n a r y   i te ra tio n it e ra ti o n    i te ra ti o n   i te ra t io n ite ra t io n   i te ra t io n   i te ra ti o n
                                               it e ra ti o n (s )        #1          # 2 . ..            #n             #n+1        # n + 2 ...         #m           # m + 1 . ..


                                                                                                    It e r a t io n s
                                                                                                                                                                                   41
42
Comportamiento del Sistema




                             43
Objetivos: Comportamiento del
    Sistema
n   Usted será capaz de:
     • Definir el comportamiento de un sistema
     • Definir los casos de uso y actores
     • Entender como documentar los casos de uso
     • Usar un diagrama de casos de uso para mostrar los
       actores, casos de uso y sus interacciones

     • Definir escenarios para los casos de uso




                                                           44
¿Qué es el Comportamiento del
    Sistema?
n   El comportamiento del sistema es como este actúa y
    reacciona a su entorno
     • La actividad aparentemente visible y comprobable de un
       sistema



n   El comportamiento del sistema se captura en casos de uso
     • Describen al sistema, su ambiente y las relaciones entre el
       sistema y su ambiente




                                                                     45
Conceptos Importantes en el
Modelado de Casos de Uso


                n   Un actor representa cualquier cosa
                    que interactúa con el sistema

   Actor


                n   Un caso de uso es una secuencia
                    de acciones que un sistema
                    desempeña y que produce un
  Caso de Uso       resultado observable por un actor



                                                         46
¿Qué es un Modelo de Casos de Uso?
n   Un modelo de casos de uso es una representación de las
    funciones intencionales del sistema (casos de uso) y sus
    alrededores (actores)



n   El mismo modelo de casos de uso se emplea en el análisis
    de requerimientos, diseño y pruebas


           El objetivo principal del modelo de casos de uso es
            El objetivo principal del modelo de casos de uso es
           comunicar la funcionalidad y el comportamiento del
            comunicar la funcionalidad y el comportamiento del
                  sistema hacia el cliente o usuario final
                   sistema hacia el cliente o usuario final

                                                                  47
Beneficios de un Modelo de Casos
    de Uso
n   El modelo de casos de uso
     n Se utiliza para comunicarse con los usuarios finales y
       expertos del dominio
          • Proporciona una etapa previa al desarrollo de sistemas
          • Asegura el entendimiento mutuo de los requerimientos

     n   Se utiliza para identificar
          • ¿Quién interactuará con el sistema y qué debe hacer el
            sistema?
          • ¿Qué interfaz debe tener el sistema?

     n   Se utiliza para verificar
          • Que se capturen todos los requerimientos
          • Que los desarrolladores hayan entendido los
            requerimientos
                                                                     48
Actores
           n   Los actores no son parte del sistema,
               representan roles que un usuario del
               sistema puede ejecutar

           n   Un actor puede intercambiar información
               activamente con el sistema

   Actor   n   Un actor puede ser un recipiente pasivo
               de información

           n   Un actor puede representar a una
               persona, a una máquina o a otro sistema




                                                         49
Identificación de Actores:
    Preguntas Útiles
n   ¿Quién está interesado en cierto requerimiento?
n   ¿En qué parte de la organización se usará el sistema?
n   ¿Quién proveerá al sistema con información, la usará
    y/o borrará?
n   ¿Quién usará esta función?
n   ¿Quién le dará soporte y mantenimiento al sistema?
n   ¿El sistema usa una fuente externa?
n   ¿Qué actores necesitan los casos de uso?
n   ¿Puede un actor desempeñar roles diferentes?
n   ¿Varios actores desempeñan el mismo rol?


                                                            50
Instancias de Actores

                   Insert card
                                  1   2   3
Ivan actúa                        4   5   6
como un                           7   8   9
                                  *   0   #
actor
                                                            Tom actúa
                                                            como un
                                                            actor



             Modelo de Casos de Uso



                        Actor                 caso de uso


                                                                  51
Un usuario puede actuar como
varios actores

                                                   Charlie como
          Insert card
                             1   2   3              operador
                             4   5   6
                             7   8   9
                             *   0   #




Charlie                                              Operador
                        Charlie como
                           cliente
                                         Cliente


                                                                  52
Límites de los actores y el sistema



                                       ¿Límite del sistema?
         Mantenimiento
         ATM


                         Sistema ATM


         Sistema del Banco
Cajero




                                                        53
Casos de Uso
              n   Un caso de uso modela un diálogo entre
                  actores y el sistema

              n   Un actor inicia un caso de uso para
                  invocar cierta funcionalidad del sistema

Caso de Uso   n   Un caso de uso es un flujo de eventos
                  completo y significativo

              n   El conjunto de todos los casos de uso,
                  representa todas las formas posibles de
                  uso del sistema




                                                             54
Identificación de Casos de Uso:
    Preguntas Útiles
n   ¿Cuáles son las tareas que realiza este actor?
n   ¿El actor creará, almacenará, cambiará, borrará o leerá
    información en el sistema?
n   ¿Qué caso de uso creará, almacenará, cambiará, borrará
    o leerá esta información?
n   ¿Necesitará el actor informar al sistema sobre cambios
    externos repentinos?
n   ¿Necesitará el actor recibir información en relación a
    ciertas ocurrencias en el sistema?
n   ¿El sistema proporciona al negocio el comportamiento
    correcto?
n   ¿Qué casos de uso van a darle soporte y mantenimiento
    al sistema?
n   ¿Pueden todos los requerimientos funcionales ser
    ejecutados por los casos de uso?
                                                              55
Fuentes de Información para los
    Casos de Uso
n   Declaración de especificaciones del sistema

n   Definición del problema a resolver

n   Literatura relevante al dominio

n   Entrevistas con expertos del dominio

n   Conocimiento personal del dominio o experiencia

n   Sistemas Anteriores o Legados




                                                      56
Diagrama Casos de Uso
n   Se dibuja un diagrama de casos de uso para ilustrar los
    casos de uso y los actores que interactúan enviándose
    estímulos el uno al otro


                        Transacciones del Banco

              Cliente                             Banco


                        Ejecución de Reportes



             Operador
             de ATM
                         Mantener Máquina ATM


                                                              57
Documentación de un Caso de Uso
n   Los casos de usos se documentan con:
     n   Una breve descripción
          • Se expone el propósito del caso de uso en unas cuantas
            líneas

     n   Flujo de eventos detallado
          • Descripción del flujo primario y los flujos alternos de
            eventos que ocurren desde el inicio el casos de uso

     n   La documentación debe leerse como un diálogo entre el
         actor y el caso de uso

n   Ambas partes de la documentación deben estar escritos
    en términos que el cliente entienda



                                                                      58
Flujo de Eventos en un Caso de Uso
n   Cada caso de uso
    • Tiene una secuencia de transacciones normal o básica
    • Debe tener varias secuencias alternativas de transacciones
    • Generalmente tiene secuencias de excepción a
      transacciones que manejan situaciones erróneas

    • También debe tener pre y post condiciones bien definidas




                                                                   59
Flujo de Eventos en un Caso de Uso
    (cont.)
n   Describe sólo los eventos que pertenecen al caso de
    uso, y no lo que ocurren en otros casos de uso

n   Evitar el uso de terminología vaga como: “por ejemplo”,
    “etc.” e “información”

n   El flujo de eventos deberá describir:
     • ¿Cómo y cuándo inicia y termina el caso de uso?
     • ¿Cuándo interactúa el caso de uso con los actores?
     • ¿Qué información se intercambia entre un actor y el caso
         de uso?
     •   No describe los detalles de la interfaz de usuario
     •   Describe el flujo básico de eventos
     •   Cualquier flujo de eventos alterno
                                                                  60
¿Quién lee la documentación
asociada a los Casos de Uso?
         n   Clientes: aprueban lo que el sistema debe
             hacer
         n   Usuarios: ganan entendimiento del sistema
         n   Desarrolladores: documento de
             comportamiento del sistema
         n   Examinadores: examinan el flujo de eventos
         n   Analistas o Diseñadores: proporciona las
             bases para el análisis y diseño
         n   Evaluador: se usa como base para la prueba
             de requerimientos
         n   Líder de Proyecto: proporciona elementos
             para la planeación de proyectos
         n   Escritor Técnico: base para la escritura de la
             guía de usuario


                                                          61
Ejemplo: Inscripción a Cursos
n   Al inicio de cada semestre, los alumnos solicitan un catálogo que
    contiene la lista de los cursos que se impartirán en el semestre,
    en el cual se incluyen también datos relacionados como:
    profesor, departamento y pre-requisitos.


n   El sistema nuevo deberá permitir que los alumnos seleccionen
    cuatro cursos para el semestre que inicia. Además, cada alumno
    indicará dos cursos alternativos en caso de que no pueda ser
    asignada la primera selección. Los nuevos cursos tendrán un
    máximo de diez alumnos y un mínimo de tres. Un curso con
    menos de tres alumnos será cancelado. Una vez que el proceso
    de inscripción se ha completado para un alumno, el sistema de
    registro envía la información al sistema de cobros, para que el
    alumno pueda pagar por el semestre.

                                                                        62
Ejemplo: Inscripción a Cursos
    (cont.)
n   Los profesores deben ser capaces de ingresar al sistema para
    indicar que cursos van a impartir. También podrán ver qué
    alumnos están inscritos en sus cursos.


n   Para cada semestre, hay un periodo en el que los alumnos
    pueden cambiar su horario. Los alumnos deben ser capaces de
    ingresar al sistema durante este tiempo para agregar o cancelar
    cursos.




                                                                      63
Diagrama de casos de uso


 Sistema
 de Cobro                                  Petición de Catálogo de
                    Inscripción a Cursos   Curso
                                                                      Profesor



   Alumno                                  Selección de Cursos a
                                           Impartir


               Mantener
               Información de
               Profesor                                   Mantener Información
                                                          de Cursos


            Mantener Información de
            Alumno                    Administrador
                                                            Generar Catálogo


                                                                                 64
1. Breve Descripción: Caso de Uso
    Inscripción a Cursos
1.1 Breve Descripción

n   Este caso de uso es iniciado por un alumno. Proporciona la
    capacidad para que un alumno cree, borre, modifique y/o
    revise un horario de curso para un semestre dado.




                                                             65
2. Flujo de Eventos: Casos de Uso
 Inscripción a Cursos
2.1 Pre-condiciones
   Ninguna

2.2 Flujo Principal
   Este casos de uso inicia cuando un alumno introduce el
   numero de id de alumno. El sistema verifica que el número de
   id de alumno sea valido (E-1) y permite que el alumno
   seleccione el semestre actual o uno futuro (E-2). El sistema
   permite que el alumno seleccione la actividad deseada:
   Crear, Revisar, Modificar, Imprimir, Borrar o Salir.

  Si la actividad seleccionada es:
  A-1 Crear: Subflujo Crear un Horario Nuevo.
  A-2 Revisar: Subflujo Revisar un Horario.
  A-3 Modificar: Subflujo Modificar un Horario.
  A-4 Imprimir: Subflujo Imprimir un Horario.
  A-5 Borrar: Subflujo Borrar un Horario.
  Salir: termina el caso de uso.
                                                                  66
2. Flujo de Eventos: Casos de Uso
 Inscripción a Cursos (cont.)
2.3 Flujos Alternos
   A-1 Crear: Subflujo Crear un Horario Nuevo:
  El sistema despliega una pantalla de horario en blanco. Los
  alumnos introducen los 4 cursos primarios y 2 cursos alternativos
  (E-3). El alumno envía su requerimiento de cursos. Por cada curso
  primario seleccionado el sistema revisa que se satisfagan los pre-
  requisitos (E-4) y agrega al alumno al curso si éste está abierto
  (E-5). El sistema imprime el horario del alumno (E-6) y envía esta
  información al sistema de cobros para procesarla (E-7). El Caso de
  Uso inicia de nuevo.

  A-2 Revisar: Subflujo Revisar un Horario:
  El sistema recupera (E-8) y despliega la información para todos
  los cursos a los cuales el alumno se registro: nombre del curso,
  número del curso, número de lugares del curso, días de la
  semana, hora, lugar y número de horas necesarias. Cuando el
  alumno indica que el o ella ha terminado su revisión, el Caso de
  Uso inicia de nuevo.
                                                                     67
2. Flujo de Eventos: Casos de Uso
Inscripción a Cursos (cont.)
A-3 Modificar: Subflujo Modificar un Horario:
El sistema revisa que la fecha límite para los cambios no haya
expirado (E-9). El sistema recupera (E-8) y despliega la
siguiente información para todos los cursos a los cuales el
alumno se inscribió: nombre del curso, numero del curso,
numero de lugares del curso, días de la semana, hora, lugar y
número de horas necesarias. El sistema permite que el alumno
seleccione la actividad que deseada: Borrar Curso, Agregar
Curso o Salir.

Si la actividad seleccionada es:
A-6 Borrar Curso: Subflujo Borrar un Curso.
A-7 Agregar Curso: Subflujo Agregar un Curso.
Salir, el sistema imprime el horario del alumno (E-6) y el Caso
de Uso inicia de nuevo.



                                                                  68
2. Flujo de Eventos: Casos de Uso
Inscripción a Cursos (cont.)
A-4 Imprimir: Subflujo Imprimir un Horario:
El sistema imprime el horario del alumno (E-6). El Caso de Uso
inicia de nuevo.

A-5 Borrar: Subflujo Borrar un Horario:
El sistema recupera (E-8) y despliega la información actual del
horario. El sistema pide al usuario que confirme la eliminación del
horario. Si se confirma, se borra el horario del sistema. Si la
eliminación no se confirma, la operación se cancela y el Caso de
Uso inicia de nuevo.

A-6 Borrar Curso: Subflujo Borrar un Curso:
El alumno introduce el número del curso para borrarlo. El sistema
pide al usuario que confirme la eliminación del curso. Si se
confirma, se borra el curso del horario del alumno. Si la
eliminación no se confirma, la operación se cancela y el caso de
uso inicia de nuevo.


                                                                  69
2. Flujo de Eventos: Casos de Uso
Inscripción a Cursos (cont.)
A-7 Agregar Curso: Subflujo Agregar un Curso:
El alumno introduce el número de curso para agregarlo. El
sistema revisa que se satisfagan los pre-requisitos (E-4) y
agrega el alumno al grupo si el curso esta abierto (E-5). El
caso de uso inicia de nuevo.

Flujos de Excepción
E-1: Se introdujo un número id de alumno inválido. El usuario
puede re-introducir el número id o finalizar el caso de uso.
E-2: Se introdujo un semestre inválido. El usuario puede re-
introducir el semestre o finalizar el casos de uso.
E-3: El número de curso no es válido. El usuario puede re-
introducir el número válido o finalizar el caso de uso.
E-4: Los pre-requisitos no fueron satisfechos por el usuario.
Se le informa al alumno que un curso no puede ponerse en el
horario y el motivo. De ser posible, se sustituye con un curso
alterno. El caso de uso continua.


                                                                 70
2. Flujo de Eventos: Casos de Uso
Inscripción a Cursos (cont.)
E-5: E curso seleccionado esta cerrado. De ser posible, se
substituye con un curso alterno. El caso de uso continua.

E-6: No es posible imprimir el horario. La información se
guarda y se le informa al usuario que la petición de impresión
del horario debe ser reintroducida. El caso de uso continua.

E-7: No es posible enviar la información al sistema de cobro.
El sistema guarda toda la información de cobro y la re-envía
después al sistema de cobros. El caso de uso continua.

E-8: El sistema no puede recuperar la información del horario.
El caso de uso inicia nuevamente.

E-9: El sistema informa al usuario que no se puede modificar
un horario. El caso de uso inicia nuevamente.



                                                                 71
¿Qué son los escenarios?
n   Un escenario es una instancia de un casos de uso
     n   Es un flujo determinado de eventos en un caso de uso


n   Cada caso de uso tiene múltiples escenarios
     n   Escenarios primarios (happy path scenarios)
          • Flujo normal: la forma en la que debe trabajar el
            sistema


     n   Escenarios secundarios
          • Excepciones del escenario primarios




                                                                72
Escenario para el Caso de Uso
    Inscripción a Cursos
n   John introduce el número id de alumno 369 52 3449 y el
    sistema lo valida. El sistema pregunta que a semestre desea
    inscribirse. John le indica al sistema el semestre actual y elige
    crear un horario nuevo.

n   De una lista de cursos disponibles, John selecciona los
    siguientes 4 cursos primarios: English 101, Geology 110, World
    History 200, y College Algebra 110. Después selecciona 2
    cursos alternos: Music Theory 110 y Introduction to Java
    Programming 180.

n   El sistema determina que John tiene todos los pre-requisitos
    necesarios y lo agrega a las listas de los cursos
    correspondientes.

n   El sistema indica que la actividad esta completa. El sistema
    imprime el horario del alumno y envía la información de cobro
    de cuatro cursos primarios al sistema de cobros para que sea
    procesado.

                                                                        73
Escenarios Secundarios
n   ¿Qué escenarios secundarios podrían considerarse
    para el caso de uso: “Inscripción a Cursos”?




                                                       74
Escenarios Secundarios (cont.)
n   Algunos escenarios secundarios a considerarse:
     • El alumno no seleccionó los 4 cursos primarios
     • Algún curso primario no esta disponible
     • Los cursos primarios y secundarios no están
       disponibles

     • No se puede agregar el alumno a la lista de un curso
     • No se puede crear el horario del alumno




                                                              75
¿Cuántos escenarios se necesitan?
n   Respuesta sencilla: tantos como se necesiten para
    entender el desarrollo del sistema

n   Sugerencia:
     n   Escenarios Primarios
          • Dedicar aproximadamente el 80% del tiempo a estos
            escenarios

     n   Escenarios Secundarios
          • Elaborar algunos de los escenarios secundarios
            interesantes y de alto riesgo




                                                                76
Ejercicio: Comportamiento del
    Sistema
n   Utilice el problema que proporciona el instructor
     n   Dibujar un diagrama de casos de uso

     n   Escribir una definición para cada actor

     n   Para un caso de uso
          • Escribir una breve descripción (dos sentencias máximo)

          • Escribir el flujo de eventos

          • Listar algunos escenarios posibles




                                                                     77
78
Objetos y Clases




                   79
Objetivos: Objetos y Clases
n   Usted podrá:
     • Definir y dar ejemplos de objetos
     • Definir y dar ejemplos de clases
     • Describir las relaciones entre clases y objetos
     • Definir estereotipos




                                                         80
¿Qué es un objeto?
n   Informalmente, un objeto representa una
    entidad, ya sea física, conceptual o software

     • Entidad física
                                  Trailer




     • Entidad conceptual
                             Proceso Químico




     • Entidad de software
                                    Lista Ligada



                                                    81
Una definición más formal
n   Un objeto es un concepto, abstracción, o cosa con
    límites bien definidos y significado para una
    aplicación



n   Un objeto es algo que tiene:
     n   Estado

     n   Comportamiento

     n   Identidad



                                                        82
Un Objeto tiene Estado
n   El estado de un objeto es una de las condiciones posibles en
    las que un objeto puede existir
n   El estado de un objeto normalmente cambia con el paso del
    tiempo
n   El estado de un objeto generalmente se implementa por una
    serie de propiedades (llamadas atributos), con los valores de
    las propiedades, más las relaciones que el objeto pueda tener
    con otros objetos

      a + b = 10
                                  Nombre:              Joyce Clark
                                  Empleado ID:         567138
                                  Fecha de contrato:   March 21, 1987
                                  Estado:              Tenured



      Profesora Clark


                                                                        83
Un Objeto tiene Comportamiento
n   El comportamiento determina como actúa y responde un objeto
n   El comportamiento define como responde un objeto a peticiones
    de otros objetos
n   El comportamiento visible de un objeto se modela por un
    conjunto de mensajes a los que puede responder (las
    operaciones que el objeto puede desempeñar)


                                                       a + b = 10


                         Asignar al Profesor Clark

                         (Regresa:confirmación)


Sistema de Inscripción
                                                     Curso de Algebra 101




                                                                            84
Un Objeto tiene Identidad
n   Cada objeto tiene identidad única, aún si el estado es
    idéntico al de otro objeto




    Profesor “J Clark”   Profesor “J Clark”   Profesor “J Clark”
     imparte Algebra      imparte Algebra      imparte Algebra




                                                                   85
¿Qué son las clases?
n   Hay varios objetos identificados en cualquier dominio

n   Una clase es una descripción de un grupo de objetos con
    propiedades comunes (atributos), comportamiento
    común (operaciones), relaciones comunes con otros
    objetos (asociaciones y agregaciones) y semánticas
    comunes.
     n   Un objeto es una instancia de una clase

n   Una clase es una abstracción en la que ella:
     n   Enfatiza características relevantes
     n   Suprime otras características

n   La abstracción nos ayuda a manejar la complejidad

                                                              86
Ejemplo de Clase
                            Clase
                            Curso
   Estructura                           Comportamiento
     Nombre                            Agregar un alumno
    Ubicación                           Borrar un alumno
                    a + b = 10
 Días ofrecidos                     Obtener catálogo de cursos
Horas de créditos                    Determinar si está lleno
   Hora inicio
  Hora término




                                                          87
Clases de Objetos
n   ¿Cuántas clases ve?




                          88
Relaciones entre Clases y Objetos
   n   Una clase es una definición abstracta de un objeto
        • Define la estructura y comportamiento de cada objeto en la
          clase
        • Sirve como una plantilla para crear objetos
   n   Los objetos pueden agruparse en clases
                    Objetos
                                                        Profesor

Profesor Smith                    Profesor Mellon

                                                           Clase

                 Profesor Jones

                                                                       89
Guía para identificar Clases
n   Una clase debe capturar una y solo una llave de abstracción
n   Mala abstracción: la clase Alumno sabe la información del
    alumno y su horario para el semestre actual
n   Buena abstracción: Separar las clases en una para alumno y otra
    para Horario del alumno


                                            Algebra 101
                                            Art History
                                            Chemistry
                                            Spanish 101




                                                                  90
¿Cómo nombrar a una Clase?
n   El nombre de una clase debe ser un nombre en singular
    que caracterice de la mejor forma a la abstracción



n   La dificultad al nombrar a una clase puede indicar que
    una abstracción está pobremente definida



n   Los nombres deben venir directamente del vocabulario
    del dominio




                                                             91
Guía de estilo para nombrar Clases
n   Una guía de estilo debe dictar convenciones de nombres
    para clases


n   Ejemplo de Guía de Estilo
    n   Las clases se nombran usando sustantivos en singular
    n   Los nombres de clases empiezan con una letra mayúscula
    n   No se usan palabras subrayadas
         • Los nombres compuestos de palabras múltiples se
           ponen juntas y la primera letra de cada palabra
           adicional se escribe en mayúscula


    n   Ejemplo: Alumno, Profesor, SistemaCobro

                                                                 92
Definición de Semántica de Clases
n   Después de nombrar una clase, se debe hacer una breve y
    concisa descripción de la clase
     • Enfocarse en el propósito de la clase y no en la
       implementación


n   El nombre de la clase y la descripción forman la base de
    un diccionario del modelo



               Busque el “QUÉ” y no el “CÓMO”
               Busque el “QUÉ” y no el “CÓMO”



                                                               93
Ejemplo de Entradas al Diccionario
    del Modelo
n   Nombre: StudentInformation
     • Definición: Información relacionada a una persona registrada
       para asistir a clases en la Universidad


n   Nombre: Course
     • Definición de Trabajo: Una clase ofrecida por la Universidad



    Al ir estudiando más el problema, se descubren clases y se
    Al ir estudiando más el problema, se descubren clases y se
    mejoran las definiciones de las anteriores, agregándolas al
     mejoran las definiciones de las anteriores, agregándolas al
                      diccionario del modelo
                       diccionario del modelo



                                                                      94
Representación de Clases
n   Una clase se representa usando un rectángulo con tres
    divisiones



                                  a + b = 10
         Professor


                                 Profesor Clark




                                                            95
Divisiones de Clase
n   Una clase comprende tres secciones
     n    La primera sección contiene el nombre de la clase
     n    La segunda sección muestra la estructura (atributos)
     n    La tercera sección muestra el comportamiento (operaciones)


n   La segunda y tercera sección pueden suprimirse si no es
    necesario que sean visibles en el diagrama

         Professor      Professor      Professor     Professor
         name           name
         empID          empID          create( )
         create( )                     save( )
         save( )                       delete( )     Professor
         delete( )                     change( )
         change( )

                                                                       96
Estereotipos
n   Un estereotipo es un nuevo tipo de elemento de modelado que
    extiende la semántica del metamodelo
     • Deben estar basados en tipos o clases existentes en el
       metamodelo

n   Cada clase puede tener como máximo un estereotipo
n   Estereotipos comunes
     • Clase Boundary
     • Clase Entity
     • Clase Control
     • Clase Exception
     • Metaclase
     • Clase Utility

n   Los Estereotipos se muestran en la parte donde se escribe el
    nombre de la clase entre << >>

                                                                   97
Clases Boundary
n   Una clase boundary modela la comunicación entre los
    alrededores del sistema y sus funciones internas

n   Clases boundary típicas
     • Windows (interfaz de usuario)
     • Protocolo de Comunicación (interfaz del sistema)
     • Interfaz de impresora
     • Sensores

n   En el escenario de “Inscripción a Cursos”, se crea una
    pantalla de horario (ScheduleForm) para aceptar información
    del usuario

                      <<boundary>>
                      ScheduleForm


                                                                  98
Interfaz con otros sistemas
n   Una clase boundary se usa también para modelar una interfaz
    con otro sistema
n   Las características importantes de este tipo de clases son:
     • La información que va a pasarse al otro sistema
     • El protocolo de comunicación que se use para “hablar” con
       el otro sistema

n   En el escenario “Inscripción a Cursos”, la información debe
    enviarse al sistema de cobros (BillingSystem)
     • Se crea una clase llamada BillingSystem para mantener la
       interfaz del sistema externo

                          <<boundary>>
                          BillingSystem



                                                                   99
Clases Entity
n   Una clase entity modela información y comportamiento
    asociado que es generalmente de larga vida (persistente)
     • Puede reflejar un fenómeno de la vida real
     • También puede necesitarse para las tareas internas del
       sistema
     • Los valores de sus atributos son proporcionados
       generalmente por un actor
     • Su comportamiento es independiente de los alrededores

n   Clases entity en el caso de uso “Inscripción a Cursos”
     • Course
     • Schedule                   <<entity>>       <<entity>>
                                 CourseRoster        Course
     • Catalogue
     • CourseRoster
                                   <<entity>>       <<entity>>
                                    Schedule        Catalogue



                                                                 100
Clases Control
n   Una clase control modela el comportamiento de control
    específico a uno o más casos de uso
n   Una clase control
     • Crea, inicia y borra objetos controlados
     • Controla la secuencia o coordinación de ejecución de
       objetos controlados
     • Controla elementos actuales para clases controladas
     • Es, la mayor parte de las veces, la implementación de un
       objeto intangible

n   En el escenario “Inscripción a Cursos”, la clase
    RegistrationManager controla el proceso de inscripción

                         <<control>>
                     RegistrationManager


                                                                  101
102
Interacción de Objeto




                        103
Objetivos: Interacción de Objeto
n   Usted podrá:
     • Usar diagramas de secuencia y colaboración para
      mostrar las interacciones de los objetos




                                                     104
¿Qué es un Diagrama de
    Interacción?
n   Un diagrama de interacción es una representación
    gráfica de las interacciones entre objetos


n   Hay dos tipos de diagramas de interacción
     • Diagramas de Secuencias
        • Un diagrama de secuencias están ordenado de acuerdo
          al tiempo
     • Diagramas de Colaboración
        • Un diagrama de colaboración incluyen el flujo de datos

     • Cada uno provee un punto de vista diferente de la misma
       interacción


                                                                   105
¿Qué es un Diagrama de
    Secuencias?
n   Un diagrama de secuencia muestra interacciones de
    objetos ordenados en el tiempo


n   El diagrama muestra
     • Los objetos que participan en la interacción
     • La secuencia de mensajes intercambiados

n   Un diagrama de secuencias contiene:
     • Objetos con sus “líneas de vida”
     • Mensajes intercambiados entre objetos en orden
       secuencial
     • Enfoque de control (Focus of Control) (opcional)

                                                          106
Un Diagrama de Secuencias

                          forma de             forma de         cursos
   John :                Inscripción            horario       disponibles
  Alumno
      1: introducir id

                               2: validar id


      3: introducir semestre actual

      4: crear horario nuevo
                               5: desplegar
                                                   6: obtener cursos




                                                                            107
¿Cómo nombrar a los Objetos en
    un Diagrama de Secuencias?
n   Los objetos se dibujan como rectángulos con los nombres
    subrayados
n   Las “líneas de vida” se representan con líneas de guiones
    descendentes

          cursos          Cursos : Catálogo      : Catálogo
       disponibles           disponibles




        Objetos          Objetos y Clases         Clases

                                                                108
Mostrar las interacciones entre
    objetos
n   La interacción de objetos se indica con flechas horizontales
    que se dirigen desde la línea vertical que representa al objeto
    cliente hasta la línea que representa al objeto proveedor
n   Las flechas horizontales se etiquetan con un mensaje
n   El orden en que ocurren los mensajes es indicado por la
    posición vertical, con el más cercano en la parte superior
n   La numeración es opcional, ya que la orden se basa en la
    posición vertical
                    forma de          cursos
                     horarios       disponibles


                          Obtener cursos




                                                                      109
¿Qué es el Enfoque de Control?
n   El Enfoque de Control representa el tiempo relativo en el
    que el flujo de control se enfoca sobre un objeto
     • Representa el tiempo en que un objeto dirige sus mensajes

n   El Enfoque de Control puede mostrarse en un diagrama
    de secuencia




                                                                   110
Enfoque de Control

                                  forma de               forma de          cursos
                                 inscripción              horario        disponibles
John : Student


        1: introducir id                 2: validar id



        3: introducir semestre actual


        4: crear nuevo horario
                                         5: desplegar
                                                             6: obtener cursos




                                                                                       111
Notas
n   Las notas pueden agregarse para agregar más
    información al diagrama

                                  cursos disponibles para
                                    el semestre elegido



         forma de            cursos
          horario          disponibles



                obtener cursos




                                                            112
Scripts en Diagramas de
    Secuencias
n   Para escenarios complejos, los diagramas de secuencias
    pueden ser mejorados mediante el uso de scripts


n   Un script se escribe a la izquierda de un diagrama de
    secuencia con la secuencia de pasos alineados a las
    interacciones del objeto


n   Los scripts se pueden escribir en lenguaje natural o en
    pseudo código




                                                              113
Ejemplo de Script

                                  forma de
                                                           un curso
                                   horario




   Procesa los cursos primarios
                                        obtener prerequisito
   y solo recurre a los cursos
   alternos si es necesario




                                                                      114
Diagramas de Colaboración
n   Un diagrama de colaboración es una forma alternativa
    de representar el intercambio de mensajes de un
    conjunto de objetos


n   El diagrama muestra las interacciones organizadas
    entorno a los objetos y a sus relaciones


n   Un diagrama de colaboración contiene:
     •   Objetos
     •   Ligas entre objetos (relaciones)
     •   Mensajes intercambiados entre objetos
     •   Flujo de datos entre objetos, si hay alguno

                                                           115
Ejemplo de un Diagrama de
Colaboración

                                                  2: validar id


          1: introducir id 3: introducir semestre actual

                                                 registration form
                 4: crear nuevo horario
 John : Alumno                                               5: desplegar




        clases disponibles                          forma horario
                             6: obtener cursos



                                                                            116
Representación de Objetos en un
    Diagrama de Colaboración
n   Los objetos se dibujan como rectángulos con nombres
    subrayados


       Ingles            Ingles 101:           :Curso
        101                 Curso




      Objetos         Objetos y Clases         Clases




                                                          117
Representación de Ligas en un
    Diagrama de Colaboración
n   Una liga de interacción en un diagrama de colaboración se
    representa como una línea que conecta iconos de objetos


n   Una liga indica que hay una ruta de comunicación entre
    objetos conectados




     formaHorario : Forma               un curso : Curso




                                                             118
Anotaciones de Liga
n   Una liga de interacción en un diagrama de
    colaboración se puede anotar con:
     • Una flecha apuntando del objeto cliente al objeto
       proveedor


     • El nombre del mensaje con una lista opcional de
       parámetros y/o valores de retorno


     • Un número opcional que muestre el orden relativo en
       el cual se envían los mensajes


                                                             119
Notación de Liga
                                     Mensaje
                                         Message

            Mensaje
         points from client to
               supplier
                                                      2: obtener cursos
     Objeto
    Client object


                           1: obtener prerequisitos

formaHorario : Forma                    lista curso    un curso : Curso



                                 Data return
                                 Liga
                                                           Objeto
                                                       Supplier object
                                                                          120
121
Identificación de Clases




                           122
Objetivos: Identificación de Clases
n   Usted podrá:
     • Discutir el análisis de casos de usos
     • Identificar objetos y clases llevando a cabo el análisis
       casos de usos
     • Usar tarjetas CRC para descubrir clases
     • Diagramar un escenario usando diagramas de
       interacción
     • Crear paquetes
     • Crear diagramas de clase iniciales


                                                                  123
¿Qué es un Análisis Casos de Uso?
n   El análisis casos de uso es el proceso de estudiar los
    casos de usos para descubrir objetos y clases para el
    desarrollo del sistema
     • Los escenarios se detallan y se representan gráficamente
       en diagramas de interacciones
        • Se crean clases entity, boundary y control


     • Las clases se agrupan en paquetes

     • Se crean diagramas de clases



                                                                  124
Identificación de Objetos Entity
n   Los objetos entity se identifican al examinar los
    sustantivos en los escenarios



n   Los sustantivos encontrados pueden ser:
     • Objetos
     • Descripción del estado de un objeto
     • Entidades externas y/o Actores
     • Otros



                                                        125
Filtrado de Sustantivos
n   Cuando se identifican sustantivos, debe estar consciente
    de que:
     • Varios términos se pueden referir al mismo objeto
     • Un término se puede referir a más de un objeto
     • El lenguaje natural es muy ambiguo

n   Este acercamiento puede identificar muchos objetos sin
    importancia
     • La lista de sustantivos debe filtrarse




                                                               126
Observar los Sustantivos
 n   El siguiente expresión fue escrita para un sistema de
     bancario
      • “Los requerimientos legales se tomarán en cuenta”

 n   Si SOLO se consideraran los sustantivos, ¿qué pasaría?




Línea principal: Cada sustantivo debe considerarse en el contexto
Línea principal: Cada sustantivo debe considerarse en el contexto
 del dominio del problema -- no puede considerarse por sí mismo
  del dominio del problema -- no puede considerarse por sí mismo



                                                               127
Escenario: “Crear horario”
n   John introduce el número id de alumno 369 52 3449 y el
    sistema valida el número. El sistema pregunta qué semestre.
    John indica el semestre actual y elige crear un horario.

n   De una lista de cursos disponibles, John selecciona los cuatro
    cursos primarios English 101, Geology 110, World History 200,
    y College Algebra 110. Después selecciona los cursos alternos
    Music Theory 110 y Introduction to Java Programming 180.

n   El sistema determina que John tiene todos los pre-requisitos
    necesarios al examinar el registro del alumno y lo agrega a la
    lista de los cursos.

n   El sistema indica que la actividad se ha completado. El
    sistema imprime el horario del alumno y envía información de
    cobro para cuatro cursos al sistema de cobro para procesarlo.

                                                                     128
Sustantivos del Escenario “Crear
    Horario”
n   John                        n   Número de ID 369523449
n   Sistema                     n   Número
n   Semestre                    n   Semestre actual
n   Horario                     n   Lista de cursos disponibles
n   Geology 110                 n   Cursos primarios
n   College Algebra 110         n   English 101
n   Cursos alternos             n   Introduction to Java
n   Music Theory 110                Programming 180
n   Prerequisitos necesarios    n   World History 200
n   Horario de estudiante       n   Registro de estudiante
n   Información de cobro        n   Lista del curso
n   Cuatro cursos               n   Actividad
n   Sistema de cobro


              ¿Qué sustantivos deben filtrarse?
              ¿Qué sustantivos deben filtrarse?
                                                              129
Decisiones de Filtrado
n   John -- filtrado (actor)
n   Número de ID 369523449 -- filtrado (propiedad del alumno)
n   Sistema -- filtrado (lo que se está construyendo)
n   Número -- filtrado (lo mismo que el numero id del alumno)
n   Semestre -- filtrado (estado -- cuando la selección aplica)
n   Semestre actual -- filtrado (igual que el semestre)
n   Horario -- candidato a objeto
n   Lista de cursos disponibles -- candidato a objeto
n   Cursos primarios -- filtrado (estado de un curso seleccionado)
n   English 101 -- candidato a objeto
n   Geology 110 -- candidato a objeto
n   World History 200 -- candidato a objeto
n   College Algebra 110 -- candidato a objeto

                                                                     130
Decisiones de Filtrado
n   Cursos alternos -- filtrado (estado de un curso seleccionado)
n   Music Theory 110 -- candidato a objeto
n   Introduction to Java Programming 180 -- candidato a objeto
n   Prerequisitos necesarios -- filtrado (curso como otros cursos
    identificados)
n   Registro de estudiante -- candidato a objeto
n   Lista del curso -- candidato a objeto
n   Actividad -- filtrado (Expresión en inglés)
n   Horario de estudiante -- filtrado (igual que el nuevo horario)
n   Información de cobro -- candidato a objeto
n   Cuatro cursos -- filtrado (información necesitada por la
    información de cobro)
n   Sistema de cobro -- filtrado (actor)


                                                                     131
Candidatos a Objetos en el
    Escenario
n   Horario -- lista de cursos por semestre para un alumno
n   Lista de cursos disponibles -- lista de todos los
    cursos que se imparten en un semestre
n   English 101 -- una oferta para un semestre
n   Geology 110 -- una oferta para un semestre
n   World History 200 -- una oferta para un semestre
n   College Algebra 110 -- una oferta para un semestre
n   Music Theory 110 -- una oferta para un semestre
n   Introduction to Java Programming 180 -- una
    oferta para un semestre

                                                             132
Candidatos a Objetos en el
    Escenario
n   Registro de estudiante -- una lista de cursos que el
    alumno tomo en semestres previos
n   Lista del curso -- lista de alumnos para una oferta de
    curso específica
n   Información de cobro -- información que necesita el
    actor sistema de cobro




                                                             133
Creación de Clases
n   Los objetos entity encontrados se agrupan en clases
     • Basado en estructura y/o comportamiento similar


n   Esto es sólo un intento inicial
     • Las clases pueden cambiar al examinar más escenarios




                                                              134
Clases Candidatas Entity --
    Escenario “Crear Horario”
n   Horario (Schedule) -- lista de cursos para un semestre para un
    alumno
n   Catálogo (Catalogue) -- lista de todos los cursos que se
    imparten en un semestre
n   Curso (Course) -- una oferta para un semestre
n   RegistroEstudiante (StudentRecord) -- lista de cursos
    previamente tomados
n   ListaCurso (CourseRoster) -- lista de alumnos para una oferta
    específica de curso
n   InformacionCobro (BillingInformation) -- información
    necesitada por el actor sistema de cobro
<<Entity>>             <<Entity>>                   <<Entity>>
                         Course                     CourseRoster
 Schedule


                                    <<Entity>>                         <<Entity>>
          <<Entity>>                                               BillingInformation
           Catalogue                StudentRecord



                                                                                   135
Identificación de Clases Boundary
n   Examinar cada par: actor/escenario y crear clases boundary
    obvias
     • Durante el diseño, la clase se refinará en base a los
       mecanismos de la interfaz de usuario elegida


n   Ejemplo:
     • Al alumno se le presentan diferentes opciones en el caso de
       uso “Inscripción a Cursos”
        • Se crea una clase boundary llamada RegistrationForm para
          permitir que el alumno seleccione la opción deseada


     • El alumno debe introducir información del curso al sistema
       en el escenario “Crear Horario”
        • Se crea una clase boundary llamada ScheduleForm para
          mantener la información que el alumno introduce


                                                                     136
Clases Candidatas Boundary --
Escenario “Crear Horario”


    <<Boundary>>
   RegistrationForm




                      <<Boundary>>
                       ScheduleForm




                                      137
Prototipo de Ventana
n   Los prototipos de ventanas pueden crearse para comunicar la
    apariencia y percepción de la clase boundary al usuario




                                                                  138
Identificación de Clases Boundary
n   Las clases boundary también se crean por la
    comunicación de sistema-a-sistema
     • Puede ser otro sistema de software o una pieza de
       hardware (impresoras, alarmas, etc.)



n   Las clases boundary se agregan para describir el
    protocolo de comunicación elegido




                                                           139
Clases Candidatas Boundary --
    Escenario “Crear Horario”
n   El horario del alumno se imprime en el escenario “Crear
    Horario”
     • Se crea una clase boundary Printer

n   La información de cobro se envía al Sistema de Cobro en
    el escenario “Crear Horario”
     • Se crea una clase boundary BillingSystem

             <<Boundary>>                   <<Boundary>>
                Printer                      BillingSystem




                                                              140
Identificación de Clase Control
n   Las clases control contienen típicamente información
    secuencial
     • Precaución: las clases control NO deben desempeñar las
       responsabilidades que pertenecen típicamente a las clases
       entity y/o boundary


n   En este nivel de análisis, una clase control se agrega
    típicamente para cada caso de uso
     • Responsable por el flujo de eventos en el caso de uso

n   Este es sólo un breve inicio
     • Cuanto más casos de uso y escenarios se desarrollen,
       pueden eliminarse, dividirse o combinarse las clases de
       control

                                                                   141
Reglas para el Caso de Uso
    “Inscripción a Cursos”
n   Se agrega una clase control llamada RegistrationManager
     • Recibe información de la clase boundary ScheduleForm
     • Para cada curso seleccionado
        • Pide los prerequisitos del curso
        • Revisa para asegurarse de que todos los prerequisitos de
          un curso se tomaron al preguntar a StudentRecord si un
          prerequisito de curso se había completado
        • Sabe que hacer si no se tiene un prerequisito
        • Pregunta si el curso está abierto
        • Pide a Course que agregue al alumno (si el curso está
          abierto)
        • Sabe que hacer si no están disponibles 4 cursos
        • Crea los objetos StudentSchedule y BillingInformation
        • Pide al BillingSystem que envíe la BillingInformation
                                                                     142
Clase Candidata Control -- Caso de
Uso “Inscripción a Cursos”



             <<Control>>
          RegistrationManager




                                143
Tarjetas Responsabilidad-
    Colaboración de Clases
n   Las clases también pueden descubrirse usando tarjetas
    responsabilidad-colaboración de clases (Class-Responsibility-
    Collaboration Cards, CRC)
     n   Introducidas por Ward Cunningham y Kent Beck at OOPSLA
         en 1989


n   Una tarjeta CRC es una tarjeta de 3” x 5” que muestra
     n   El nombre y descripción de la clase
     n   Las responsabilidades de la clase
          • Conocimiento interno de la clase
          • Servicios proporcionados por la clase
     n   Los colaboradores para las responsabilidades
          • Un colaborador es una clase cuyos servicios necesitan
            una responsabilidad

                                                                    144
Tarjeta CRC para la Clase Curso

                         Nombre de Clase               Curso

                            Responsabilidades                   Colaboraciones

Servicio proporcionado   Agregar un alumno                     Alumno

                         Conocer los pre-requisitos

Conocimineto interno     Saber cuando se lleva a cabo


                         Saber donde de lleva a cabo




                                                                                 145
Una sesión de tarjeta CRC
n   Un grupo de personas ejecutan un escenario

n   Se crea una tarjeta para cada objeto en el escenario

n   Se le asigna un grupo de tarjetas a cada participante
     • La persona se convierte en la “clase”
n   Los participantes actúan a los escenarios definidos

n   Se anotan responsabilidades y colaboraciones en las
    tarjetas

n   Se crean tarjetas para los objetos descubiertos

                                                            146
Beneficios de las Tarjetas CRC
n   Al completar más y más escenarios, emergen los
    patrones de colaboración
n   Las tarjetas pueden arreglarse físicamente para
    representar estas colaboraciones cerradas
n   Esto puede ayudar a identificar jerarquías de
    generalización/especialización o jerarquías de
    agregación entre las clases
n   Las tarjetas CRC son más efectivas para grupos que
    desconocen las técnicas OO, ya que ellos:
     • Evitan enfocarse a elementos OOP
     • Evitan generalización prematura
     • Fortalecen “object think”
                                                         147
¿Cómo lo estoy haciendo?
n   Las cosas van bien si...
     • Todas las clases tienen nombre significativos, específicos
         del dominio
     •   Cada clase tiene un pequeño grupo de colaboradores
     •   No hay clases “indispensables” (una clase que colabora con
         todos necesita ser redefinida)
     •   La información para cada clase se ajusta bien en una
         tarjeta de 3X5
     •   Las clases pueden manejar un cambio en requerimientos


n   Las cosas van mal si...
     • Varias clases no tienen responsabilidades
     • Una sola responsabilidad se le asigna a varias clases
     • Todas las clases colaboran con todas las clases
                                                                      148
Diagramación de Escenarios
n   Al descubrir objetos y clases, se documentan en
    diagramas de interacción
     • Estos diagramas puede ser, un diagrama de secuencias o
       un diagrama de colaboración


n   Los diagramas de interacción contienen el flujo de
    eventos para un escenario dado
     • Los nombres de objetos son generales
        • e.g., un alumno en lugar de John
     • Los nombres de objetos pueden omitirse si no se necesitan
       para la comunicación
     • Se agregan notas y/o scripts de ser necesario

                                                                   149
Diagrama de Secuencias para el
Escenario “Crear Horario”

                       :Forma             :Forma                             :Administrador
                                                            :Catalogo
:Student              Inscripcion         Horario                           Inscripcion
      1: introducir id
                           2: validar

       3: introducir semestre
       4: crear
                           5: desplegar
                                             6: obtener cursos

                                             7:mostrar cursos

       8: seleccionar cursos

       9: enviar
                                             10: crear horario (alumno, semestre, cursos)




                                                                                            150
Diagrama de Secuencias para el
 Escenario “Crear Horario”(cont.)
       :Administrador                  :Registro                            :Información :Sistema
                         :Cursos                    :Horario   :Impresora
      Inscripcion                      Alumno                               Cobro        Cobro



LOOP en todas 11: obtener los pre-requisitos (curso)
las ofertas de
curso               12: pre-requisitos tomados (curso)

                  13: disponible ?

                14: agregar alumno

                                15: crear


                                     16: imprimir (horario)


                                               17: crear


                                             18: enviar (información de cobre)




                                                                                              151
Diagrama de Colaboración para el
     Escenario “Crear Horario”
                                                       7: mostrar ofertas de curso
                           8: seleccionar ofertas de cursos
                                   9: enviar                                   6: obtener ofertas de curso : Catalogue
                                                                                                                                 : StudentRecord


     : Alumno                                                 : ScheduleForm

                           2: validar id
                                                                               10: crear horario                         12: tomar pre-requisios (curso)
     1: introducir id
                                                                               (alumno, semestre,
3: introducir semestre
                                                      5: desplegar                   ofertas)
4: crear horario
                                                                                                             15: crear                       : Schedule
                         : RegistrationForm

                                                                                                 18: enviar (información de pago)
                                                                 : RegistrationManager


                                                                                                17: crear                              : BillingSystem


        : CourseOffering         14: agregar alumno (alumno)
                                       13: disponible ?                        16: imprimir (horario)
                                11: obtener pre-requisitos de cursos

                                                                                                                : BillingInformation


                                                                        : Printer


                                                                                                                                                   152
¿Qué es un Paquete?
n   Un paquete es un mecanismo de propósito general para
    organizar elementos en grupos

n   El número de clases crecen al analizar los casos de uso
    y los escenarios
     • Las clases pueden agruparse en paquetes
        • Proporcionan la habilidad para organizar el modelo en
          desarrollo


n   Un paquete se representa como una carpeta etiquetada


                         Nombre del
                         paquete



                                                                  153
Paquetes en el Sistema de
    Inscripción
n   Las clases en el Sistema de Inscripción se pueden
    agrupar en tres paquetes:
     • University Artifacts, Business Rules, e Interfaces

n   UniversityArtifacts
     • Schedule, Catalogue, CourseOffering, StudentRecord,
       CourseRoster, y Billing Information


n   BusinessRules
     • RegistrationManager

n   Interfaces
     • RegistrationForm, ScheduleForm, BillingSystem, and
       Printer
                                                             154
¿Qué es un Diagrama de Clases?
n   La vista lógica se hace de varios paquetes y clases
n   Un diagrama de clases es la vista lógica de algunos (o todos)
    los paquetes y clases
     • Generalmente hay varios diagramas de clase
• El diagrama de clases principal es típicamente una vista lógica
    de los paquetes a alto nivel
n   Cada paquete posee su propio diagrama de clases principal
n   Los diagramas de clases adicionales se agregan como sea
    necesario
     • Vista de las clases participando en un escenario
     • Vista de las clases “privadas” en el paquete
     • Vista de una clase, sus atributos y operaciones
     • Vista de una jerarquía de herencia
                                                                    155
Diagrama de Clases Principal para
el Sistema de Inscripción

     Interfaces                Business
                                Rules




                  University
                  Artifacts




                                          156
Diagrama de Clases Principal de
University Artifacts

BillingInformation   Catalogue    CourseOffering




CourseRoster           Schedule    StudentRecord




                                                   157
Diagrama de Clases Principal de
Interfaces

BillingSystem
                                   Printer




                RegistrationForm             ScheduleForm




                                                            158
Diagrama de Clases Principal de
Business Rules



         RegistrationManager




                                  159
Ejercicio: Identificación de Clases
n   Tome un caso de uso desarrollado en la lección previa
     • Diagrame al menos un escenario en un diagrama de
       interacción
         • Cree clases entity, boundary y/o control que sean
          necesarias
        • Escriba una definición para cada clase

n   Cree paquetes para el modelo


n   Coloque las clases descubiertas en paquetes


n   Cree diagramas de clase iniciales

                                                               160
161
Relaciones




             162
Objetivos: Relaciones
n   Usted podrá:
     • Nombrar los dos importantes tipos de relaciones entre
       clases: asociación y agregación
     • Definir asociación y representarla en diagramas de clases
     • Usar nombres de asociación y nombres de rol para clarificar
       las asociaciones
     • Definir y especificar la multiplicidad de una asociación
     • Definir agregación y representarla en diagramas de clases
     • Definir y representar una asociación reflexiva o agregada
     • Usar clases de asociación
     • Definir calificadores y representarlos en diagramas de clases
     • Descubrir relaciones a partir de los diagramas de escenario

                                                                       163
La Necesidad de Relaciones
n   Todos los sistemas abarcan varias clases y objetos


n   Los objetos contribuyen al comportamiento del sistema
    colaborando unos con otros
     • La colaboración se realiza a través de las relaciones


n   Hay dos importantes tipos de relaciones durante el
    análisis
     • Asociación
     • Agregación

                                                               164
Asociaciones
n   Una asociación es una conexión semántica bi-direccional
    entre clases
     • Esto implica que hay una liga entre objetos entre las clases
       asociadas

n   Las asociaciones se representan en diagramas de clase
    por una línea que conecta las clases asociadas

n   La información puede fluir en cualquier dirección o en
    ambas direcciones a través de la liga

            <<control>>                        <<entity>>
          RegistrationManager                   Course



                                                                      165
Navegación
n   Una asociación es una relación bi-direccional
    • Dada una instancia de RegistrationManager hay un objeto
       asociado Course

    • Dada una instancia de Course hay un objeto asociado
       RegistrationManager


           <<control>>                      <<entity>>
         RegistrationManager                 Course




                                                                166
Nombrando Asociaciones
n   Una asociación se debe nombrar para esclarecer su
    significado

n   El nombre se representa con una etiqueta que se pone a lo
    largo de la línea de asociación, entre los iconos de clases

n   Un nombre de asociación es generalmente un verbo o una
    frase con verbo


        <<control>>         maneja            <<entity>>
      RegistrationManager                      Course



                                                             167
Definición de Roles
n   Un rol denota el propósito o capacidad en la que una
    clase se asocia con otra

n   Los nombres de roles son típicamente sustantivos o
    frases con sustantivo

n   Un nombre de rol se pone a lo largo de la línea de
    asociación cerca de la clase que modifica
     • En uno o en ambos extremos de una asociación se pueden
       tener roles


       Person        Teacher
                                              Course



                                                                168
Asociaciones Múltiples
n   Puede existir más de una asociación entre dos clases

n   Si hay más de una asociación entre dos clases se les
    DEBE de nombrar


         Person             enseña             Course
                          esta inscrita en


n   Las asociaciones múltiples deben cuestionarse




                                                           169
Asociaciones Múltiples (cont.)


 CourseSelection         adds student to      Course
                       deletes student from




                   ¿Modelo bueno o malo?
                   ¿Modelo bueno o malo?




                                                       170
Multiplicidad para Asociaciones
n   Multiplicidad es el número de instancias de una clase
    relacionada a UNA instancia de otra clase

n   Para cada asociación, hay dos decisiones de
    multiplicidad que tomar: una por cada extremo de la
    asociación

n   Por ejemplo, en la conexión entre Person jugando el rol
    maestro y Course
     n   Para cada instancia de Person, varios (i.e., cero o más)
         Courses deben impartirse
     n   Para cada instancia de Course, exactamente una instancia
         de Person es maestro


                                                                    171
Indicadores de Multiplicidad
n   Cada extremo de una asociación tiene indicadores de
    multiplicidad
     n   Indica el numero de objetos que participan en la relación

              Muchos
                                    *
              Exactamente uno
                                    1
              Cero o más
                                    0..*
              Uno o más
                                    1..*
              Cero o uno
                                    0..1
              Rango específico
                                    2..4

                                                                     172
Ejemplo: Multiplicidad
n   La multiplicidad expone varias hipótesis ocultas sobre el
    problema que se está modelando
     n   ¿Puede estar un maestro en sabático?

     n   ¿Puede tener un curso dos maestros?



                 Teacher
     Person                                        Course
                 1                          1..*




                                                                173
¿Qué significa Multiplicidad?
n   La multiplicidad debe responder a dos preguntas
     n   ¿La asociación es obligatoria u opcional?
     n   ¿Cuál es el número mínimo y máximo de instancias que
         pueden ligarse a una instancia?


          Course                                     Teacher
                    0..*                         1




                     ¿Qué le dice este diagrama?
                     ¿Qué le dice este diagrama?



                                                                174
Agregación
n   La agregación es una forma especializada de asociación
    en la que un todo se relaciona con sus partes
    • La agregación es conocida como la relación “parte de” o
       “contiene a”
n   Una agregación se representa como una asociación con
    un diamante en el extremo de la liga, del lado de la
    clase que denota el agregado (todo)
n   La multiplicidad se representa de la misma manera que
    otras asociaciones

          <<boundary>>                       <<boundary>>
         RegistrationForm                    ScheduleForm
                            1            1


                                                                175
Pruebas de Agregación
n   ¿Se usa la frase “parte de” para describir relaciones?
     • Una Puerta es “parte de” un Carro

n   ¿Se aplican algunas operaciones en el todo y automáticamente
    a sus partes?
     • Al mover el Carro, se mueve la Puerta

n   ¿Se propagan algunos valores de atributos del todo a todas o
    algunas de sus partes?
     • El Carro es azul, la Puerta es azul

n   ¿Hay una asimetría intrínseca a la relación donde una clase se
    subordina a la otra?
     • Una Puerta es parte de un Carro, un Carro NO es parte de
       una Puerta



                                                                     176
¿Asociación o Agregación?
n   Si dos objetos están estrictamente limitados por una
    relación complementaria
    • La relación es un agregación

n   Si dos objetos se consideran usualmente como
    independientes, y aún así están ligados
    • La relación es una asociación

Curriculum                         Course                          Student
                1           1..*            0..*           3..10


        Curriculum y Course están muy
        ligados -- Curriculum está             Objetos independientes
        compuesto de 1 a muchos Courses
                                                                             177
Asociaciones Reflexivas
n   En una asociación reflexiva, se relacionan los objetos de la
    misma clase
     • Indica que múltiples objetos en la misma clase colaboran
       juntas en otra forma


                           Course
                                       0..*

                  Pre-requisite 0..*



           Un curso puede tener muchos pre-requisitos
           Un curso puede ser pre-requisito de otros cursos

                                                                  178
Agregaciones Reflexivas
n   Las agregaciones pueden también ser reflexivas
     • El tipo de problema clásico de productos y sus partes

n   Esto indica una relación recursiva

                   1
    ProductPart

                           Un objeto ProductPart está “compuesto de”
          0..*
                           cero o más objetos ProductPart




                                                                 179
Clase de Asociación
n   Si quisiéramos rastrear los grados para todos los cursos
    que un alumno ha tomado, entonces…

n   La relación entre Student y Course es una relación de
    muchos-a-muchos

n   ¿Dónde ponemos el atributo de grado?


           Student                       0..*   Course
                     3-10




                                                               180
Clase de Asociación (cont.)
n   El atributo grado no puede ponerse en la clase Course
    porque existen (potencialmente) varias ligas a objetos
    Student

n   El atributo grado no puede ponerse en la clase Student
    porque existen (potencialmente) varias ligas a objetos
    Course

n   Por lo tanto, el atributo en realidad pertenece a la liga
    Student-Course

n   Una clase de asociación se usa para mantener dicha
    información


                                                                181
Dibujo de Clase de Asociación
n   Se crea una clase de asociación usando el icono clase

n   Se conecta el icono de la clase a la línea de asociación
    con una línea punteada

n   La clase de asociación puede incluir múltiples
    propiedades de la asociación

n   Sólo se permite una clase de asociación por asociación
          Student                        1..*   Course
                    3-10


                             grade

                                                               182
Clase de Asociación y Multiplicidad
n   Las clases de asociación se emplean en asociaciones de
    muchos-a-muchos

n   Si la multiplicidad en cualquiera de los extremos de una
    asociación es “a-una”
     n    El atributo puede ponerse en la clase donde la relación es “a
          muchos”, o
     n    Puede aún usarse una clase asociación

Student                     1   Course
grade      3-10

                                         Student                  1   Course
                                                   3-10


                                                          grade

                                                                          183
Calificadores
    n   Un calificador es un atributo o grupo de atributos cuyos
        valores dividen el conjunto de objetos relacionado a un
        objeto a través de una asociación


Department                           Professor   Dado un objeto Department y un
             EmployeeID                          valor para un Employee ID hay
                          1   1                  exactamente un objeto Professor



Department                           Professor   Dado un objeto Department y un
             Title
                                                 valor para Title hay un conjunto de
                     1        1..*               objetos Professor



                                                                                184
Restricciones
n   Una restricción es la expresión de alguna condición que se
    debe preservar
     • Una restricción se muestra como una línea punteada


                   {Ordered by
         Professor employee id}   is a member of         Department

                   1..*                              1
            1                                                   1
                                        {Subset}


                                        is head of




                                                                      185
Identificación de Asociaciones y
    Agregaciones
n   Deben examinarse los escenarios para determinar si una
    relación debe existir entre dos clases
     n   Dos objetos pueden comunicarse solo si se “conocen” entre
         ellos
n   Las asociaciones y/o agregaciones proporcionan una ruta
    de comunicación
aform:Registration    aform:Schedule     theMgr:Registration
     Form                 Form             Manager


                                                               RegistrationForm
               despliega
                                                               “habla” con
                                                               ScheduleForm
                                  crea
                                                               ScheduleForm
                                                               “habla” con
                                                               RegistrationManager


                                                                                  186
¿Asociación o Agregación?

RegistrationForm y ScheduleForm están muy ligadas
-- una ScheduleForm es “parte de” la RegistrationForm

   <<boundary>>                 <<boundary>>
  RegistrationForm              ScheduleForm
                     1      1
                                       1

          ScheduleForm y
          RegistrationManager
          son independientes
                                        1
                            RegistrationManager




                                                        187
Relaciones de Paquetes
n   Los paquetes se relacionan unos
    con otros a través de una relación
    de dependencia

                                         Interfaces
n   Si una clase en un paquete
    “habla” con una clase en otro                              Business Rules


    paquete entonces se agrega una
    relación de dependencia al nivel
    del paquete                                   University
                                                   Artifacts



n   Los diagramas de escenario y de
    clases se evalúan para determinar
    las relaciones entre paquete

                                                                            188
Relaciones en el Análisis y Diseño
n   Durante el análisis, se establecen conexiones
    (asociaciones y agregaciones) entre clases
     • Estas conexiones existen debido a la naturaleza de las
         clases y no debido a una implementación específica
     •   Hacer una estimación inicial de multiplicidad para exponer
         hipótesis ocultas

n   Los diagramas de clases se actualizan para mostrar las
    relaciones agregadas

n   Durante el diseño:
     •   Se   refinan y actualizan las estimaciones de multiplicidad
     •   Se   avalúan y refinan las asociaciones y agregaciones
     •   Se   evalúan y refinan las relaciones de paquetes
     •   Se   maduran los diagramas de clases

                                                                       189
Actualización del Diagrama de
Clases Principal para el Sistema de
Inscripción


     Interfaces    Business
                     Rules




                    University
                    Artifacts




                                 190
Actualización del Diagrama de
Clases de Interfaces
   <<boundary>>                                 <<boundary>>
  RegistrationForm                              ScheduleForm
                      1                     1
                                                         1
                                                  1

                                        1
                 <<control>>
               RegistrationManager                             1
                  (de Business Rules)                     <<entity>>
                                                           Catalogue
                          1                           (de UniversityArtifacts)




              1
  <<boundary>>
    BillingSystem


                                                                                 191
Actualización del Diagrama de
Clases de University Artifacts
  <<boundary>>                                                     <<entity>>
 ScheduleForm                                                      Course
(de Interfaces)                           agrega alumno a
                  1
                                                                0..4
    1
                          1
                                                     1
                                   <<control>>
                               RegistrationManager
    1
   <<entity>>                 (de Business Rules)
   Catalogue
                                  1      1       1   accesa

                       Agrega alumno a
                                          crea              1     <<entity>>
                      1
      <<entity>>                                                StudentRecord
     CourseRoster                         1
                                      <<entity>>
                                      Schedule


                                                                                192
Actualización del Diagrama de
Clases de Business Rules
                                                         <<entity>>
      <<boundary>>                                      CourseRoster
      ScheduleForm                                  (de UniversityArtifacts)
       (de Interfaces)
                              1                                 1

                                                            agrega alumno a
                                            1
                                                         1
 <<boundary>> 1                      1     <<controller>>
 BillingSystem                           RegistrationManager
 (de Interfaces)                           1                            agrega alumno a
                                                   1                  1            <<entity>>
                                  accesa             crea                  0..4      Course
                                                                                 (de UniversityArtifacts)

                         1
                                                         1
           <<entity>>                                    <<entity>>
         StudentRecord                                    Schedule
   (de UniversityArtifacts)                     (de UniversityArtifacts)




                                                                                                            193
Ejercicio: Relaciones
n   Usando los escenarios y diagramas de secuencias
    generados en lecciones anteriores
     n   Actualizar los diagramas de clases mostrando relaciones
         entre clases
          • Asegurarse de que se tomen las decisiones de
            multiplicidad inicial


     n   Agregar relaciones a los paquetes para el sistema




                                                                   194
195
Operaciones y Atributos




                          196
Objetivos: Operaciones y Atributos
n   Usted podrá:

     • Definir operaciones para clases

     • Definir atributos para clases

     • Definir encapsulación y establecer sus beneficios

     • Representar atributos y operaciones en diagramas de clase




                                                                   197
¿Qué es una operación?
n   Una clase engloba un conjunto de responsabilidades que definen
    el comportamiento de los objetos de esa clase
n   Las responsabilidades de una clase se llevan a cabo por sus
    operaciones
     n   Esto no es necesariamente un mapeo de uno-a-uno
          • Responsabilidad de la clase Producto -- precio de venta
          • Operaciones para esta responsabilidad
             • Buscar información de una base de datos
             • Calcular el precio
n   Una operación es un servicio que puede ser solicitado desde un
    objeto al comportamiento de efecto

Una operación debe desempeñar una función simple y cohesiva
Una operación debe desempeñar una función simple y cohesiva
                                                                      198
Las operaciones dependen del
    dominio
n   Listar las operaciones relevantes al dominio del problema
     • Las operaciones de la clase Persona serán diferentes
       dependiendo de “quién esté preguntando”


       Perspectiva del Banquero          Perspectiva del Doctor

       recibir renta                     examinar
       manejar cuenta                    tomarMedicina
       recibir líneaDeCrédito            irAlHospital
                                         recibirFactura




                                                                  199
Nombrando Operaciones
n   Las operaciones deben nombrarse para indicar su resultado,
    no los pasos detrás de la operación.


n   Ejemplos:
    n   calculateBalance()
         • Pobremente nombrado
             • Indica que se debe calcular el balance -- esta es una
               decisión de implementación/optimización


    n   getBalance()
         • Bien nombrado
             • Indica solamente el resultado


                                                                       200
Nombrando Operaciones (cont.)
n   Las operaciones deben nombrarse desde la perspectiva del
    proveedor no del cliente


n   En una gasolinera, la gasolina se recibe de la bomba
     n   La bomba tiene su responsabilidad a través de una
         operación -- ¿cómo se le debe llamar?
          • Nombres adecuados -- dispense(), giveGas()


          • Nombre malo -- receiveGas()
              • La bomba da la gasolina -- no recibe la gasolina




                                                                   201
¿Qué es una operación primitiva?
n   Una operación primitiva es una operación que no puede ser
    implementada usando solamente las operaciones internas de
    la clase
     • Todas las operaciones de una clase son típicamente
       primitivas


n   Ejemplo:
     • Agregar un objeto a un conjunto -- operación primitiva
     • Agregar cuatro objetos a un conjunto -- no primitiva
         • Se puede implementar con llamadas múltiples a la
           operación de agregar un objeto a un conjunto



                                                                202
Firma de una Operación
n   La firma de una operación consiste en:
     • Lista de argumentos opcional
     • Clases o valores de retorno


n   Durante el análisis NO ES OBLOGATORIO llenar la firma
    de una operación
     • Esta información debe completarse en el diseño




                                                            203
Despliegue de Operaciones
n   Las operaciones se muestran en el tercer compartimiento
    de la clase


                          Course

               getPrerequisite () : CourseList




                                                         204
Obteniendo Operaciones a partir
    de los Diagramas de Interacción
n   Los mensajes desplegados en los diagramas de secuencias
    y/o colaboración son generalmente operaciones de la clase
    receptora
     n   Los mensajes se traducen en operaciones y se agregan al
         diagrama de clase


registration           a course      registration                       a course
  manager                              manager


         obtener prerequisito                 getPrerequisite():CourseList




                                                                                   205
Descubriendo Clases Adicionales
n   Si se especifica una firma de operación, es posible
    descubrir clases adicionales
     • Argumento en la operación
     • Clase de retorno

n   Ejemplo:
     • getPrerequisite() : CourseList
     • addStudent(John : StudentInfo)

n   Las clases adicionales se agregan al modelo
     • Se despliegan en diagramas de clases cuando sea necesario

                                                                   206
Descubriendo Relaciones
Adicionales
n   Los argumentos de una operación y/o la clase de retorno
    denotan una relación entre la clase que posee la operación y la
    clase del argumento y/o la clase de retorno


n   Ejemplo:
    • La clase CourseRoster tiene una operación
       addStudent(John: StudentInfo)
    • Esto implica que hay una relación entre CourseRoster y
       StudentInfo


n   Las relaciones adicionales se agregan al modelo
    • Se despliegan en diagramas de clases cuando sea necesario


                                                                  207
¿Qué es un atributo?
n   Un atributo es una definición de dato contenido en instancias de
    la clase

n   Los atributos no tienen comportamiento -- no son objetos

n   Los nombres de atributo son sustantivos simples
     • Los nombres deben ser únicos en la clase

n   Cada atributo debe tener una definición clara y concisa

n   Atributos buenos para la clase Alumno
     • Name -- nombre y apellido
     • Major -- campo superior de estudios

n   Atributo malo para la clase Alumno -- selectedCourses
     • Esta es una relación no un atributo

                                                                       208
Valores de Atributo
  n   El valor de atributo está dado por el estado de un objeto
      particular
  n   Cada objeto tiene un valor para cada atributo definido por su
      clase
  n   Por ejemplo, para un objeto de la clase Profesor:


                                  Sue Smith
                                   567892
                                 Matemáticas
       Atrinutos
        Nombre
Número de Identificación                                  George Jones
  Materia que imparte                                        578391
                                                            Biología

                                                                         209
Los Atributos dependen del
    dominio
n   Listar todos los atributos relevantes para el dominio del
    problema
     • Los atributos de una clase Persona serán diferentes
       dependiendo de “quién esté preguntando”




       Perspectiva de Banquero           Perspectiva de Doctor

       nombre                            nombre
       dirección                         dirección
       fechaDeNacimiento                 fechaDeNacimiento
       NumeroCuenta                      altura
                                         peso

                                                                 210
Despliegue de Atributos
n   Los atributos se muestran en el segundo compartimiento
    de la clase

                       <<entity>>
                         Course
                name
                description
                location
                timeOfDay
                creditHours

                getPrerequisite () : Course




                                                             211
Atributos Derivados
n   Un atributo derivado es un atributo cuyo valor puede
    calcularse en base al valor de otro(s) atributo(s)
     • Se usa cuando no hay tiempo suficiente para re-calcular el
       valor cada vez que sea necesario
     • Tráfico del desempeño del tiempo de corrida vs. memoria
       requerida

                         Rectangle
                       length
                       width
                       /area




                                                                    212
Tipo de Dato, Atributo y Valor
    Inicial
n   Cada atributo tiene:
     • Tipo de Dato
     • Valor Inicial (Opcional)

n   Durante el análisis NO ES OBLIGATORIO completar la
    definición del atributo
     • Esta información debe completarse en el diseño




                                                         213
¿Cómo se descubren los atributos?
n   Se descubren atributos en el flujo de eventos de los
    casos de uso
    • Buscar sustantivos que no se consideraron buenos
       candidatos para clases


n   Otros se descubren cuando la definición de la clase se
    crea

n   Con la ayuda de expertos en el dominio, el cual nos
    puede proporcionar buenos atributos


Sólo modele los atributos que sean relevantes al dominio del problema
 Sólo modele los atributos que sean relevantes al dominio del problema


                                                                    214
Ejemplo: Atributos en el Problema
    de Inscripción a Cursos
n   “Cada curso tendrá una descripción”
     • Un atributo llamado descripción se agrega a la clase Curso




                           Course
                          description




                                                                    215
Guía de Estilo para Nombrar
    Atributos y Operaciones
n   Una guía de estilo debe dictar convenciones de nombres
    para atributos y operaciones
     • Proporciona consistencia a través del proyecto
     • Conduce a más modelos y código que se puede mantener

n   Ejemplo
     • Los atributos y operaciones inician con una letra minúscula
     • No se usan subrayados
        • Los nombres compuestos de múltiples palabras se
          juntan y la primer letra de cada palabra adicional se
          escribe con mayúsculas


                                                                     216
Despliegue de Atributos y
    Operaciones
n   Los atributos y/u operaciones deben mostrarse en una
    clase


n   Pueden crearse diagramas de clases adicionales para
    desplegar atributos y operaciones
     • Las relaciones típicamente no se despliegan en estos
       diagramas de clase




                                                              217
Encapsulado
n   Un modo de ver una clase es la que consiste de dos
    partes: la interfaz y la implementación
    • La interfaz puede verse y usarse por otros objetos
    • La implementación es oculta para los clientes

n   Ocultar detalles de implementación de un objeto se
    llama encapsulado u ocultamiento de información


n   El encapsulado ofrece dos tipos de protección:
    • Protege el estado interno de un objeto al ser capturado por
       sus clientes
    • Protege el código del cliente de los cambios en la
       implementación del objeto
                                                                    218
Ejemplo: Encapsulado


           changeOwnerName
                                            Sólo las operaciones proporcionadas
                                            por el objeto pueden cambiar los
                                            valores de un atributo
                                 withdraw
               accountNumber
deposit          nameOfBank                 Las operaciones están provistas para
                nameOfOwner                 desplegar valores de atributos que los
                   balance                  clientes necesitan
                               getBalance
                                            Los clientes no pueden modificar
          generateStatement                 el estado del objeto directamente




                                                                                  219
Beneficios del Encapsulado
n   El código de la operación de un cliente puede utilizar la intefaz
    de otra clase

n   El código del cliente no puede tomar ventaja de la
    implementación de una operación de otra clase

n   La implementación puede cambiar por los siguientes motivos:
     • Corregir un defecto
     • Mejorar el desempeño
     • Reflejar un cambio de política

n   El código del cliente no será afectado por los cambios en la
    implementación, de este modo se reduce el “efecto de rizo
    (ripple)” en el cual la corrección de una operación fuerza la
    corrección correspondiente en una operación del cliente

n   El mantenimiento es más fácil y menos costoso


                                                                        220
Ejercicio: Operaciones y Atributos
n   Actualizar los diagramas de secuencias en lecciones previas y
    transformar los mensajes en nombres de operaciones
    concisas, tanto como sea necesario



n   Crear diagramas de clases mostrando sólo atributos y
    operaciones



n   Agregar relaciones adicionales basadas en argumentos de
    operaciones y/o clases de retorno



                                                                    221
222
Herencia




           223
Objetivos: Herencia
n   Usted podrá:
     • Definir y discutir herencia, generalización y
       especialización

     • Representar jerarquías de herencia en diagramas de
       clases

     • Entender las técnicas para encontrar herencias
     • Definir herencia múltiple


                                                            224
Herencia
n   La herencia define una relación entre clases donde una
    clase comparte la estructura y/o comportamiento de
    una o más clases


n   La herencia define una jerarquía de abstracciones en las
    que una subclase hereda de una o más superclases
     • Con la herencia simple, la subclase hereda sólo de una
       superclase
     • Con la herencia múltiple, la subclase hereda de más de
       una superclase


n   La herencia es una relación del tipo: “es una” o “tipo de”

                                                                 225
Dibujo de una Jerarquía de
  Herencia

               RegistrationUserInfo
Superclase



                                      Relación de Herencia




                       StudentInfo
        Subclase




                                                             226
Consideraciones de Herencia
n   Debido a que una relación de herencia no relaciona
    objetos individuales
     • La relación no se nombra
     • La multiplicidad no tiene sentido

n   Teóricamente, no hay límite en el número de niveles en
    una herencia
     • En la práctica, los niveles están limitados
        • Las jerarquías típicas de C++ son de 3 o 5 niveles
        • Las jerarquías de Smalltalk pueden ser un poco más
          profundas


                                                               227
¿Qué es lo que tiene herencia?
n   Una subclase hereda de sus padres:
     • Atributos
     • Operaciones
     • Relaciones

n   Una subclase puede:
     • Agregar atributos, operaciones y relaciones
     • Redefine operaciones heredadas (¡sea cuidadoso!)

     La herencia controla las similitudes entre clases
     La herencia controla las similitudes entre clases


                                                          228
Atributos de Herencia
n   Los atributos de definen en el más alto nivel de la jerarquía de
    herencia
n   Las subclases de una superclase heredan todos sus atributos
n   Cada subclase puede agregar atributos adicionales


                    GroundVehicle
                  weight                      Truck tiene tres atributos:
                  licenseNumber                Truck tiene tres atributos:
                                                  licenseNumber
                                                   licenseNumber
                                                  weight
                                                   weight
                                                  tonnage
                                                   tonnage

            Car                       Truck
                                    tonnage

                                                                             229
Operaciones de Herencia
n   Las operaciones se definen en el más alto nivel de la jerarquía
    de herencia
n   Las subclases de una superclase heredan todas las operaciones
n   Cada subclase puede aumentar o redefinir operaciones
    heredadas

             GroundVehicle
                                         Truck tiene tres atributos:
                                          Truck tiene tres atributos:
           weight
           licenseNumber
                                             licenseNumber
                                              licenseNumber
           register( )                       weight
                                              weight
                                             tonnage
                                              tonnage
                                         y dos operaciones:
                                          y dos operaciones:
                                             register()
                                              register()
     Car                       Truck         getTax()
                                              getTax()
                             tonnage
                             getTax( )
                                                                        230
Relaciones de Herencia
n    Las relaciones también se heredan y deben definirse en el más
     alto nivel en la jerarquía de herencia
n    Las subclases de una superclase heredan todas sus relaciones
n    Cada subclase puede participar en relaciones adicionales

            GroundVehicle
                                        dueño   Person
          weight                                           Car está relacionado con
                                                            Car está relacionado con
          licenseNumber      0..*          1               un dueño
                                                            un dueño
          register( )                                      Truck está relacionado
                                                            Truck está relacionado
                                                           con un dueño
                                                            con un dueño
                                                           Truck también tiene un
                                                            Truck también tiene un
                                                           Trailer
                                                            Trailer
    Car                       Truck              Trailer
                            tonnage
                            getTax( )
                                                                                  231
Generalización de Clases
n   La generalización proporciona la capacidad de crear
    superclases que encapsulan la estructura y/o el
    comportamiento comunes a varias subclases

n   Procedimiento de generalización
     • Identificar similitudes de estructura/comportamiento entre
         varias clases
     •   Crear una superclase que encapsule el
         comportamiento/estructura comunes
     •   Las clases originales se hacen subclases de la superclase
         nueva


n   Las superclases son más abstractas que sus subclases

                                                                     232
Ejemplo de Generalización
                       Asset




     BankAccount      Security          RealEstate




Savings    Checking    Stock     Bond
                                                     Incremento de
                                                       abstracción


                                                                233
Especialización de Clases
n   La especialización proporciona la capacidad de crear
    subclases que representen refinamientos en los que la
    estructura y/o comportamiento de la superclase se
    agregan o modifican


n   Procedimiento de Especialización
     • Advertir que algunas instancias exhiben estructura o
       comportamiento especializado
     • Creación de subclases para agrupar instancias de acuerdo
       a su especialización


n   Las subclases son menos abstractas que sus superclases

                                                                  234
Ejemplo de Especialización
                       Asset




     BankAccount      Security          RealEstate




Savings    Checking    Stock     Bond
                                                     Decremento
                                                         de
                                                     abstracción

                                                              235
Jerarquías de Herencia
n   Ambas técnicas, generalización y especialización, se
    usan en el desarrollo de jerarquías de herencia


n   Durante el análisis, se establecen jerarquías de herencia
    entre abstracciones, de ser necesario


n   Durante el diseño, las jerarquías de herencia se definen
    para:
     n   Incrementar la reutilización
     n   Incorporar clases de implementación
     n   Incorporar librerías de clase disponibles



                                                                236
Niveles de Abstracción
                   Vehicle




                                                        Clases al mismo al
                                                         Clases al mismo al
                                                          mismo nivel de
                                                           mismo nivel de
   GroundVehicle                 AirVehicle            herencia deben estar
                                                        herencia deben estar
                                                         al mismo nivel de
                                                          al mismo nivel de
                                                             abstracción
                                                              abstracción




Ford       Truck             FixedWing    Helicopter



                                                                          237
Herencia Múltiple

       FlyingThing                             Animal


                          Herencia
                          múltiple



Airplane   Helicopter      Bird         Wolf            Horse



       Bird hereda de ambos FlyingThing yyAnimal
       Bird hereda de ambos FlyingThing Animal

                                                                238
Conceptos de Herencia Múltiple
n   Conceptualmente directo y necesario para modelar el
    mundo real correctamente

n   En la práctica, puede conducir a dificultades en la
    implementación
     • No todos los lenguajes orientados a objetos soportan herencia
       múltiple directamente



       ¡Use herencia múltiple sólo cuando sea necesario,
        ¡Use herencia múltiple sólo cuando sea necesario,
                                yy
                   siempre con precaución !!
                    siempre con precaución


                                                                  239
Problemas con Herencia Múltiple
        Confusión con                       Herencia repetida
   atributos y operaciones
 FlyingThing            Animal                   AnimateObject
color                 color
                                                color
getColor              getColor




                                  FlyingThing                    Animal

               Bird




Cada lenguaje/ambiente de programación                  Bird
 Cada lenguaje/ambiente de programación
elige modos para resolver este tipo de
 elige modos para resolver este tipo de
dificultades
 dificultades
                                                                          240
Identificación de Herencia
n   Es importante evaluar todas las clases para encontrar
    posibles relaciones de herencia
     • Busque comportamiento común (operaciones) y estado
       (atributos) en las clases


n   Técnica de Adición
     • Agregar operaciones/atributos nuevos a la(s) subclase(s)

n   Técnica de Modificación
     • Redefinir operaciones
        • Debe tener precaución de no cambiar las semánticas

                                                                  241
Herencia vs. Agregación

n   Con frecuencia se confunde a la herencia y a la agregación
    n    La herencia representa una relación “es un” o “tipo de”

    n    La agregación representa una relación “tiene un”




        Las palabras claves “es un” y “tiene un” ayudarán a
        Las palabras claves “es un” y “tiene un” ayudarán a
                   determinar la relación correcta
                   determinar la relación correcta




                                                                   242
Window y Scrollbar

Window               Scrollbar




    WindowWithScrollbar
                           Un WindowWithScrollbar “es un” Window
                            Un WindowWithScrollbar “es un” Window
                          Un WindowWithScrollbar “tiene un” Scrollbar
                          Un WindowWithScrollbar “tiene un” Scrollbar

                                 ¿Qué relaciones deben usarse?
                                 ¿Qué relaciones deben usarse?



                                                                 243
Window y Scrollbar (cont.)
Window                     Scrollbar




                                             Window
         WindowWithScrollbar



                                       WindowWithScrollbar           Scrollbar
                                                             1   1



                               Un WindowWithScrollbar “es un” Window
                               Un WindowWithScrollbar “es un” Window
                               Un WindowWithScrollbar “tiene un” Scrollbar
                               Un WindowWithScrollbar “tiene un” Scrollbar

                                                                                 244
Herencia vs. Agregación

      Herencia                      Agregación

Palabras clave “es un”   Palabras clave “tiene un”


Un objeto                Relaciona objetos en clases diferentes


Se representa con        Se representa con un diamante
una flecha




                                                                  245
¿Qué es Metamorfosis?
n   Metamorfosis
     1. Un cambio en forma, estructura o función; especialmente
        el cambio físico que sufren algunos animales, como el
        renacuajo a rana

     2. Cualquier cambio notorio, como en el carácter, apariencia
        o condición

     • Webster’s New World Dictionary
     • Simon & Schuster, Inc., 1979


                 La Metamorfosis existe en el mundo
                  La Metamorfosis existe en el mundo
                      ¿Cómo debe modelarse?
                      ¿Cómo debe modelarse?

                                                                    246
Ejemplo de Metamorfosis
n   En una universidad, hay alumnos de tiempo completo y de
    medio tiempo
     • Los alumnos de tiempo completo tienen un numero id y una
       fecha de graduación, pero los alumnos de medio tiempo no

     • Los alumnos de medio tiempo pueden tomar hasta de tres
       cursos. Los alumnos de tiempo completo no tienen ese límite



           Part-timeStudent             Full-timeStudent
           name                         name
           address                      address
           numberCourses                studentID
                                        gradDate



                                                                  247
Una Aproximación
   n    Se puede crear una relación de herencia

                   Student
                   name
                   address                      ¿Qué sucede si un alumno
                                                 ¿Qué sucede si un alumno
                                                  de medio tiempo desea
                                                   de medio tiempo desea
                                                convertirse en un alumno
                                                 convertirse en un alumno
                                                   de tiempo completo?
                                                    de tiempo completo?
 FulltimeStudent              ParttimeStudent

studentID                    numberCourses
gradDate




                                                                        248
Metamorfosis
n   Es muy difícil cambiar la clase de un objeto

n   Técnica de modelado mejorado
    • Poner la estructura y comportamiento que “cambia” en su
       propia clase


                                     ParttimeClassification
                             0..1   numberCourses

               Student   1
              name
              address
                         1             FulltimeClassification
                               0..1 studentID
                                    gradDate




                                                                249
Metamorfosis (cont.)
             Mary Smith                    Joe Jones
             Estudiante de tiempo completo Estudiante de medio tiempo




MarySmith : Student                                    JoeJones : Student
           1                                                       1



           1                                                        1

: Full-timeClassification                              : Part-timeClassification




                                                                                   250
Metamorfosis (cont.)
n    La metamorfosis se lleva a cabo por el objeto que “habla”
     con las partes cambiantes


    : Student                        : Student             : Parttime       : Fulltime
    Manager                                              Classification   Classification

                Cambia a tiempo completo

                                                 borra

                                                           crea




                                                                                           251
Metamorfosis y Herencia
n   La herencia puede usarse para modelar estructura,
    comportamiento y/o relaciones comunes a las partes
    “cambiantes”
         Student
        name       1            1   Classification
        address




                         Fulltime                  Parttime
                        studentID               numberCourses
                        gradDate



                                                                252
Metamorfosis y Flexibilidad
n   Esta técnica también agrega flexibilidad al modelo


n   Ejemplo: un alumno puede también vivir en el campus. En
    este caso, hay un identificador de dormitorio, un número de
    habitación y un número de llave de la habitación
  ResidentInformation               Student
dorm                                          1                1   Classification
                                   name
room
roomKeyID                      1   address
                        0..1




                                                    Fulltime                       Parttime
                                                  studentID                     numberCourses
                                                  gradDate



                                                                                            253
Ejercicio: Herencia
n   Examinar las clases definidas en el problema hasta el
    momento y agregar herencia donde sea necesario
     • Asegurarse de considerar cualquier metamorfosis


n   Actualizar diagramas de clases como sea necesario




                                                            254
255
Comportamiento de Objetos




                            256
Objetivos: Comportamiento de
    Objetos
n   Usted podrá:
     n   Explicar la necesidad de los Diagramas de Transición de
         Estado
     n   Entender cómo encontrar estados
     n   Desarrollar un DTE simple que muestre
          • Estados y Transiciones
          • Eventos
          • Condiciones de protección
          • Acciones y Actividades
     n   Entender el concepto de estados anidados
     n   Explicar las relaciones entre diagramas de transición de
         estados, diagramas de objeto/interacción y diagramas de
         clase
                                                                    257
¿Qué es un Diagrama de
    Transición de Estado?
n   Un diagrama de transición de estado se usa para mostrar la historia
    de la vida de una clase dada, los eventos que causan una transición
    de un estado a otro, y las acciones que resultan de un cambio de
    estado


n   El espacio de estados de una clase dada es la numeración de todos los
    estados posibles de un objeto


n   El estado de un objeto es una de las condiciones posibles en las que
    puede existir un objeto
     • Contiene todas las propiedades del objeto
        • Generalmente estático

     • Más los valores actuales de cada una de estas propiedades
        • Generalmente dinámico
                                                                            258
Dibujo de Estados
n   Un estado se representa como un rectángulo con esquinas
    redondeadas en un diagrama de transición de estado



                        State Name




                                                          259
Estado y Atributos
n   Los estados pueden distinguirse por los valores de ciertos
    atributos
          Course
                                     English101 : Course
        numStudents
                                         numStudents = 7




          El número máximo de alumnos por curso es 10
        numStudents < 10                numStudents >= 10

                Open                          Closed




                                                                 260
Estados y Ligas
n   Los estados también pueden distinguirse por la existencia de
    ciertas ligas


n   Las instancias de la clase Profesor puede tener dos estados:
     • Impartir cuando existe una liga a un curso
     • En sabático cuando no existe liga



       Professor                                  Course
                          1                0..*




                                                                   261
Estados Especiales
n   El estado inicial es el estado introducido cuando se crea
    un objeto
     • Un estado inicial es obligatorio
     • Sólo un estado inicial es permitido
     • El estado inicial se representa como un círculo sólido

n   Un estado final indica el final de vida de un objeto
     • Un estado final es opcional
     • Puede existir más de un estado final
     • Un estado final se representa con un “ojo de buey”
    Estado                                                      Estado
    inicial                                                     final

                                                                         262
Eventos
n   Un eventos es una ocurrencia que sucede en algún
    punto en el tiempo
    • El estado del objeto determina la respuesta a diferentes
      eventos


n   Ejemplo:
    • Agregación un alumno a un curso
    • Creación de un curso nuevo




                                                                 263
Transiciones
n   Una transición es un cambio de un estado original a un
    estado sucesor como resultado de algunos estímulos
     n   El estado sucesor también podría ser el estado original


n   Una transición puede tomar lugar en respuesta a un
    evento

n   Las transiciones pueden clasificarse con los eventos

                 Open        Cancel course      Canceled




               Add student

                                                                   264
Condiciones de Seguridad
n   Una condición de seguridad es una expresión booleana de
    valores de atributos que permiten una transición sólo si la
    condición es verdadera




     Open      Registration closed[ numStudents >= 3 ]   Registration Complete




                                                                          265
Acciones
n   Una acción es una operación que se asocia a una transición
     • Toma una cantidad insignificante de tiempo para completarse
     • Se considera no-interrumpible

n   Los nombres de acción se muestran en la flecha de
    transición precedida por una diagonal

                        Registration open / Initialize
             Creation        numStudents to 0
                                                         Open




                                                    Add student
                                                                  266
Envío de Eventos
n   Un evento puede disparar el envío a otro evento
     • Se muestra como:                ^Class.event

                                                Add student

                    Registration open / Initialize
                         numStudents to 0
         Creation                                    Open


                                                          [ numStudents = 10 ]
                                                         ^CourseReport.Create
                                                               report


                                                     Closed



                                                                                 267
Actividades
n   Una actividad es una operación que toma tiempo para
    completarse


n   Las actividades se asocian con un estado


n   Una actividad
     • Inicia cuando se introduce el estado
     • Puede ejecutarse hasta el fin o puede ser interrumpida por
       una transición que sale

                                  Closed

                        do: Report course is full


                                                                    268
Envío de Eventos en un Estado
n   Una actividad también puede enviar un evento a otro
    objeto


                            Dropping
             do: ^CourseRoster.Drop student(Student)




                                                          269
Transiciones Automáticas
n   A veces, el único propósito de un estado es ejecutar una
    actividad

n   Una transición automática ocurre cuando se completa la
    actividad

n   Si hay múltiples transiciones automáticas
     • Se necesita una condición de seguridad en cada transición
     • Las condiciones deben ser mutuamente excluyentes

               Closed
                                              Offered
              do: finalize course


                                                                   270
Acciones de Entrada y Salida
  n   Cuando una acción debe ocurrir sin importar como entra o
      sale del estado, se debe asociar la acción con el estado
       • En realidad, la acción se asocia con cada transición que entre
          o salga del estado


  n   La acción se muestra dentro del icono del estado
      precedida de la palabra entry o exit
                                                                    Add student



      Unassigned                 Add student / numStudents = 0           Open
do: Assign professor to course                                   entry: Register a student



                                                                                       271
Estado Anidado
n   Los diagramas de transición de estado pueden volverse
    complejos e inmanejables
n   Los estado anidados pueden usarse para simplificar diagramas
    complejos
n   Un superestado es un estado que incluye estados anidados
    llamados subestados
n   Las transiciones comunes de los subestados se representan en
    el nivel del superestado
n   Es permitido cualquier número de niveles de anidación
n   Los estados anidados pueden conducir a una reducción
    sustancial de complejidad gráfica, permitiéndonos modelar
    problemas más grandes y complejos
                                                                   272
Diagrama de Transición de Estado
para la Clase Curso sin Estados
Anidados
                                                                               addStudent



                                                              addStudent/
        Initialize                                            numStudents = 0            Open
                                      Unassigned
  do: Initialize course        do: Assign professor                                  entry: Register a
   object                      to course                                              student
                                                               cancelCourse


                     cancelCourse

                                                                 registration closed[
                                                                                                         registration closed[
                                                                 numStudents < 3 ]
                                Canceled                                                                 numStudents > = 3 ]
                          do: Send cancellation
                          notices




                                                                            [ numStudents = 10 ]
                                  cancelCourse             Closed
                                                      do: Report                                   RegistrationComplete
                                                      course is full                             do: Generate class
                                                                                                  roster


                                                                                                                                273
Diagrama de Transición de Estado
para la Clase Curso con Estados
Anidados
                               Initialize                                       Register




 RegistrationComplete            registration closed[
do: Generate class roster        numStudents > = 3 ]               Unassigned
                                                           do: Assign professor to course

                                                                    Add student / numStudents = 0

                                                                      Open
                              registration closed[                                             addStudent
                                                            entry: Register a student
                              numStudents < 3 ]


                                                                      [ numStudents = 10 ]


                   Canceled                                                    Closed
                                                                      do: Report course is closed
                                            cancelCourse




                                                                                                            274
Estados Anidados con Memoria
n   El uso de la característica de memoria indica que tras el
    regreso a un superestado, se introducirá el subestado más
    recientemente visitado


n   Use la letra H en un círculo para denotar que la
    característica de memoria (history) se aplica al superestado


n   Si no se usa la característica de memoria, siempre se
    tomará el subestado inicial cuando se introduzca el
    superestado

                                                                275
Ejemplo: Estado Anidados con
    Memoria
n   En el sistema de Inscripción a Cursos, la clase CourseSelection
    hace lo siguiente
     • Acepta cursos primarios
     • Acepta cursos alternos

n   El usuario puede salir en cualquier momento

n   El usuario puede suspender una sesión por un máximo de 30
    minutos mientras selecciona sus cursos

n   La forma se guarda después de que se han seleccionado todos
    los cursos

n   La forma se envía para procesarla después de que ha sido
    guardada

                                                                      276
Estado Anidado con Memoria
(Clase RegistrationForm)
                                   Course Selection                    Suspend              Suspend

                                                                        Resume         do: Wait for 30 minutes
  Creation                      [ Course count < 4 ]
 entry: Create form
 do: Initialize form


                               Primary Course Selection
                                 do: Accept course number
                                 exit: Increment course count


                                      [ Course count = 4 ] /
                                      Set course count to 0



                             Alternate Course Selection
                                                                [ Course count = 2 ]           Save
                              do: Accept course number
                                                                                            do: Save form
                              exit: Increment course count




                                                                   Quit                          Submit
                       H                                                               do: Submit form for processing
                           [ Course count < 2 ]



                                                                                                                        277
Donde iniciar...
n   Durante el análisis, primero hay que centrarse en las clases
    con comportamiento dinámico significativo

n   Para una clase dada, busque estados posibles al:
     •   Evaluar valores de atributos
     •   Evaluar operaciones
     •   Definir las reglas para cada estado, e
     •   Identificar las transacciones validas entre estados


n   Rastrear los mensajes en los diagramas de interacciones
    correspondientes a un objeto que tengan que ver con el
    modelado de la clase
     • El intervalo entre dos operaciones puede ser un estado

                                                                278
Ejercicio: Comportamiento de
    Objetos
n   Crear un diagrama de transición de estados para modelar el
    comportamiento dinámico de la clase Empleado con los
    siguientes estados
     • Apply, Employed, Leave of Absence, Terminated, Retired

n   Información del estado Apply
     • Se conduce una entrevista durante este estado
     • Se sale de este estado con el evento empleo

n   Información del estado Employed
     • El estado Employed tiene tres subestados basados en su
       clasificación de pago
         • Hourly, Salaried, and Commissioned
     • La clasificación de pago puede cambiar en cualquier momento
     • Las clasificaciones de pago se crean/borran después de
       entrar/salir del subestado


                                                                     279
Ejercicio: Comportamiento de
    Objetos (cont.)
n   Información del estado Leave of Absence
     • Un empleado pude tomar un permiso de ausencia de hasta 1 año
       mientras esté en cualquier subestado de empleado
     • Al regresar de su permiso ingresa al mismo subestado de pago del
       estado Employed


n   Información del estado Terminated
     • Un empleado pude ser despedido mientras este en cualquier
       subestado de empleado
     • Un empleado puede renunciar mientras este en cualquier
       subestado de empleado
     • El registro de empleado se marca como terminado en este estado

n   Información del estado Retired
     • Un empleado se retira cuando tiene 65 años
     • La información de pensión se calcula en este estado
                                                                          280
281
Homogeneización




                  282
Objetivos: Homogeneización
n   Usted podrá:

     • Discutir el por qué de la homogeneización

     • Determinar cuando deben combinarse dos clases, cuando
       debe dividirse una clase, cuando debe eliminarse una clase

     • Evaluar diagramas de clases y diagramas de interacción
       para mantener la consistencia del modelo

     • Discutir las necesidades de reestructuración de paquete


                                                                    283
¿Qué es Homogenización?
n   Homogeneizar
    “mezclar en un conjunto de elementos de manera uniforma,
    para homogeneizar”
    Webster’s New Collegiate Dictionary


n   Entre más casos de uso y escenarios se desarrollen es
    necesario homogeneizar el modelo
    n   Esto es especialmente cierto si existen múltiples equipos
        que están trabajando en diferentes casos de uso




                                                                    284
¿Qué buscar?
n   Las clases se examinan para determinar si
     • Se pueden combinar dos o más clases
     • Se debe dividir una clase
     • Se debe eliminar una clase completamente

n   Se reestructuran los paquetes para resolver problemas de
     • Acoplamiento
     • Reutilización
     • Visibilidad




                                                           285
Combinación de Clases
n   Cuando se realiza el análisis de casos de uso con varios
    equipos, cada uno puede asignar un nombre diferente a
    una misma clase
     • Esto es especialmente cierto ya que el lenguaje natural se
         usa para el análisis de casos de uso


n   Debe conducirse el desarrollo del modelo
     •   Evaluar definiciones de clase
     •   Evaluar la estructura y comportamiento de las clases
     •   Buscar sinónimos
     •   Tomar el nombre más cercano al dominio


                                                                    286
Ejemplo: Combinación de Clases
n   Se eligió a Teacher, ya que no todos los instructores de la
    Universidad han alcanzado el estatus de Professor


                           Department                  Department


                             1          1
                                                              1


                                            0..*
      Professor     0..*                                       0..*
                                             Teacher
     name                                                Teacher
                                            name
     address
     tenureStatus                           address    name
                                                       address
                                                       tenureStatus




                                                                      287
Ejemplo: Combinación de Clases
n   Al colocar una clase de control por cada caso de uso, es
    necesario re-evaluar dichas clases
     • Las clases de control con comportamiento similar pueden
       combinarse


n   Ejemplo: El Administator interactúa con los casos de uso
    Maintain Student Information y Maintain Professor
    Information
     • Se crearon dos clases de control
     • La secuencia de acciones en cada una de estas dos clases de
       control es muy similar (revisar, crear, borrar información del
       actor)
     • Las clases de control pueden combinarse en una clase de
       control que se llame RegistrationUserManager
                                                                        288
División de Clases
n   Las clases con estructura y/o comportamiento que no sean
    cohesivos deben dividirse en clases diferentes


n   Ejemplo:

                                   Student
          Student               name
                                address
    name                        phoneNumber
    address                     changeMajor( )
    phoneNumber
                                                 0..*
    major
    numStudentsinMajor
                                                        1       Major
    changeMajor()                                           name
                                                            numberStudents




                                                                             289
Eliminación de Clases
n   Debe eliminarse por completo una clase del modelo
     n   Que no tenga ninguna estructura o comportamiento
     n   Que no participe en ningún caso de uso


n   En particular, examine las clases de control
     n   La falta de responsabilidad en la secuencia puede conducir a la
         eliminación de la clase de control


n   Ejemplo:
     n   Un caso de uso para el actor Professor es “Seleccionar cursos para
         impartir”
          • Esto quiere decir que Professor introduce el nombre y número del
             curso y se crea una liga a la clase ProfessorInformation
          • Ya que no hay mucho comportamiento relacionado a la secuencia, se
             elimina esta clase de control
                                                                               290
Diagrama de Secuencias Actualizado
                         : Professor           : ProfCourse             : Course
                        CourseForm               Manager

: Professor
              1: open

         2: set prof id


        3: set course                                                                                       : Professor           : Course
                                                                                                           CourseForm
          4: process
                                                                                   : Professor
                                5: addProfessor ( )                                              1: open
                                                       6: addProfessor ( )
                                                                                            2: set prof id

              7: quit
                                                                                            3: set course


                                                                                             4: process
                                                                                                                  5: addProfessor ( )


                                                                                                 6: quit




                                                                                                                                             291
Revisión de Consistencia
n   Se debe revisar la consistencia de los Diagramas de Clases y los
    Diagramas de Interacción
     n   ¿Se necesita al menos una operación para cada clase?
     n   ¿Existe una clase para cada objeto en el Diagrama de
         interacción?
     n   Si un diagrama de objeto o diagrama de interacción muestra
         un mensaje que va de un objeto de la clase A a un objeto de
         la clase B, verifique:
          • Exista una operación en la clase B espera un evento y lo
            manipula
          • Exista una asociación correspondiente entre la clase A y la
            clase B en el diagrama de clases
          • El diagrama de transición de estado para la clase B (si se
            ha desarrollado uno) incluye ese evento

                                                                         292
Reestructuración de Paquetes
n   Al desarrollar más casos de uso puede ser necesario reestructurar
    los paquetes del modelo
     n   El fuerte acoplamiento entre paquetes puede significar que los
         paquetes deben combinarse
     n   La dependencia reciproca entre paquetes puede significar que
         el paquete debe dividirse
     n   Evalue consideraciones de reuso
          • Un paquete reusable debe tener algunas dependencias
     n   Evalue las partes publicas y privadas de un paquete
          • No todas las clases en un paquete deben ser parte de la
            interfaz publica del paquete
              • Agregar clases boundary si es necesario encapsular la
                interfaz del paquete

                                                                      293
Ejercicio: Homogeneización
n   Discutir las decisiones de homogeneización que se
    necesitan en este punto del análisis




                                                        294
295
Diseño Arquitectónico




                        296
Objetivos: Diseño Arquitectónico
n   Usted podrá:
     • Listar los atributos de una buena arquitectura
     • Explicar la arquitectura de “4+1” vistas
     • Explicar el propósito de los diagramas de componentes
     • Explicar el propósito de los diagramas de distribución




                                                                297
Visión Arquitectónica
n   Dos cualidades comunes para virtualmente todos los
    proyectos OO son:
     • La existencia de una visión arquitectónica
     • La aplicación de un ciclo de vida incremental bien-manejado
       e iteractivo



n   La arquitectura debe ser simple
     • El logro del comportamiento común a través de
       abstracciones y mecanismos comunes



                                                                     298
Una Definición de Arquitectura del
 Software
“La arquitectura del software tiene que ver con la
organización de sistemas de software, la selección de sus
componentes, las interacciones entre estos componentes, la
composición de componentes interactuando en subsistemas
más grandes progresivamente y el total de los patrones que
guían estas composiciones. Tiene que ver no sólo con la
estructura de sistemas, sino también con su funcionalidad,
desempeño, diseño, selección entre alternativas y
comprensión”
                                       Mary Shaw


                                                             299
Atributos de las Arquitecturas
    Buenas
n   Las buenas arquitecturas se construyen en capas de
    abstracción bien definidas:
     n   Cada capa representa una abstracción coherente
     n   Cada capa tiene una interfaz bien definida y controlada
     n   Cada capa se construye sobre facilidades bien definidas y
         controladas en niveles de abstracción bajos


n   Hay una clara separación entre la interfaz y la
    implementación de cada capa
     n   Los cambios en la implementación de una capa no viola la
         hipótesis hecha por sus clientes


                                                                     300
Desarrollo de la Arquitectura del
    Sistema
n   El diseño de la arquitectura tiene que ver con el manejo de
    riesgo

n   Las buenas arquitecturas se determinan mejor a través de
    desarrollo iterativo e incremental

n   A un experimentado equipo pequeño, guiado por un
    Arquitecto en Jefe, se le debe asignar la responsabilidad
    para:
     n   Definir y mantener la integridad arquitectónica del sistema
     n   Aprobar todos los cambios a las interfaz de paquetes
     n   Valorar riesgos del proyecto
     n   Proponer el orden y contenido de cada iteración

                                                                       301
Dimensiones de la Arquitectura
    del Software
n   Perspectivas diferentes para inversionistas diferentes
     • Usuario final, cliente, administrador de proyecto
     • Ingeniero de sistema, desarrollador, arquitecto, evaluador


n   Las perspectivas múltiples requieren múltiples vistas
     • Los diagramas de clases no muestran el mapeo del sistema al
       hardware

     • Los diagramas de bloques de hardware no describen que partes del
       sistema son obtenidas de software comercial




                                                                          302
Una Arquitectura requiere
    Múltiples Vistas
n   Para describir completamente una arquitectura, se necesitan
    cuatro vistas:
     n   Una Vista Lógica que proporciona una imagen estática de las
         principales clases y sus relaciones
     n   Una Vista de Componentes que muestra como está el código
         organizado en paquetes y librerías, así como el software comercial
         (COTS, commercial off-the-shelf)
     n   Una Vista de Procesos que muestra procesos y tareas
     n   Una Vista de Distribución que muestra los procesadores,
         dispositivos y ligas en el ambiente operacional


n   Finalmente, una Vista de Casos de Uso que explica como
    trabajan juntas las otras cuatro vistas

                                                                              303
El Modelo “4+1 Vistas”
         Vista Logica                       Vista de Componentes

                                                  Administración, reuso y
           Funcionalidad
                                                  portabilidad del Software



  Usuarios finales       Vista de Casos de Uso          Ingenieros de software
                               Entendimiento de
                                   Utilidad

      Vista de Procesos                      Vista de Distribución
           Desempeño,                        Desempeño, Disponibilidad
          Disponibilidad,                  Tolerancia a fallas, Escalabilidad
        Tolerancia de fallas                     Entrega e Instalación



  Integradores de Sistema                               Ingenieros de Sistema

                                                                                 304
Vista Lógica
n   La vista lógica de una arquitectura controla los
    requerimientos funcionales del sistema
     • Lo que el sistema proporciona en términos de servicios a
       sus usuarios


n   Proporciona una imagen estática de las principales
    clases y sus relaciones


n   La vista lógica se encuentra reflejada en diagramas de
    clases; paquetes que contienen clases y relaciones, lo
    cual representa la abstracción del sistema en desarrollo

                                                                  305
Paquetes Lógicos Globales
n   Ciertos paquetes son usados por todos los demás
    paquetes
     • Foundation Classes
        • Conjuntos, listas, colas, etc.

     • Clases de manejo de errores

n   Estos paquetes se marcan como globales


                              Foundation
                               Classes

                           global

                                                      306
Implicaciones de Dependencia
n   Algunas implicaciones de la dependencia entre paquetes son:
     • Cada vez que se hace un cambio al paquete Proveedor, el
       paquete Cliente debe ser re-compilado y reevaluado


     • El paquete Cliente no puede ser reusado independientemente,
       ya que depende del paquete Proveedor




            ClientPackage                SupplierPackage




                                                                  307
Evitar Dependencias Circulares
n   Es deseable que la jerarquía del paquete sea a-cíclica

n   Esto quiere decir que la situación siguiente debe evitarse (de
    ser posible)
     • El paquete A usa el paquete B el cual usa el paquete A

n   Una dependencia circular como esta, significa que los
    paquetes A y B tendrán que ser tratados como un solo
    paquete

n   También deben evitarse los círculos con más de dos paquetes
     • El paquete A usa el paquete B que usa al paquete C que usa al
       paquete A

n   Las dependencias circulares pueden romperse, dividiendo uno
    de los paquetes en dos paquetes más pequeños

                                                                       308
Dependencia Circular en el Sistema
de Inscripción

Interfaces                Business
                           Rules




             Cambiado a               Incoming
                                     Interfaces   Business
                                                   Rules




                                                  Outgoing
                                                  Interfaced


                                                             309
Interfaz Pública de un Paquete
n   Una interfaz de paquete debe encapsular su
    implementación detrás de una interfaz publica justo
    como lo hace una clase


n   Cada clase en un paquete tiene un parámetro de control
    de exportación que puede establecerse a publico o
    implementación (privado)
     • Solo las clases publicas pueden ser usadas por clases en
       otros paquetes
     • Las clases de implementación (privadas) sólo pueden ser
       usadas por su paquete

                                                                  310
Vista de Componentes
n   La vista de componentes tiene que ver con la organización del
    software en módulos para su desarrollo


n   Los diagramas de componentes se crean para mostrar los
    paquetes y los componentes que conforman el sistema en
    desarrollo
     • Muestra la distribución de clases a componentes
     • Muestra la distribución de componentes en paquetes


n   Los paquetes se organizan en capas, donde cada capa tiene
    una interfaz bien definida


                                                                    311
¿Qué es un componente?
n   Un componente es una unidad de código fuente que sirve como
    bloque constructor para la estructura física de un sistema
n   Los estereotipos (con iconos alternos) pueden usarse para definir
    tipos de componentes específicos.
     • Ejemplos: exe, dll, main programs, headers, modules, forms
n   Agrupar clases en un componente, ya sea que tenga una función
    cooperativa o que necesite estar en proximidad para la eficiencia
    en la implementación
n   Notación de componente:
                         Component name




                                                                   312
Diagramas de Componentes
n   Un diagrama de componentes muestra la distribución de clases y
    objetos en componentes durante la implementación, así como sus
    dependencias de compilación
                   Name 1
                                          Name 2




                            Name 1


                                                   Name 2
          Name 3




                                                                 313
Diagramas de Componentes
    (cont.)
n   Se requiere un nombre para cada componente, este nombre
    denota típicamente el nombre simple del archivo físico
    correspondiente en el espacio de trabajo actual

n   La única relación es la dependencia de compilación,
    representada por una línea punteada dirigida que apunta hacia
    donde existe la dependencia

n   En C++, la dependencia de compilación se indica por las
    directivas #include

n   No debe haber ciclos en un conjunto de dependencias de
    compilación
                                                                    314
Ejemplo: Diagrama de
Componentes
       Curriculum   Curriculum




       Course        Course




                                 315
Paquetes en la Vista de
    Componentes
n   Un paquete en la vista de componentes es una colección de componentes,
    algunos de los cuales son visibles a otros paquetes y otros están ocultos

n   Un paquete agrupa componentes que están lógicamente relacionados

n   Un paquete en la vista de componentes agrupa componentes de manera
    similar a la que un paquete en en la vista lógica agrupa clases

n   Cada componente en el sistema debe existir en un solo paquete en el nivel
    más alto del sistema

n   Notación:

                          PackageName



                                                                          316
Diagrama de Componentes Principal
n   Un diagrama de componentes principales es una familia de
    paquetes conectados por ligas dirigidas que representan
    dependencias


n   Ejemplo.        MFC                 RegistrationUser
                                           Interface




                                          Registration
                                           System



                                                               317
Relación entre Paquetes de la
    Vista Lógica y de Componentes
n   En general, un paquete en la vista lógica puede corresponder
    directamente a un paquete de componentes en la vista de
    componentes



n   La estructura lógica y física puede variar por las siguientes
    razones:
     • Se fusionan paquetes en la vista lógica, para mantener juntos a objetos
       que se comunican frecuentemente

     • Los paquetes en la vista de componentes se agregan para implementar
       funcionalidad de bajo nivel

                                                                          318
Ejemplo: Correspondencia entre
   Paquetes en la Vista Lógica y de
   Componentes

GuiWidgets          RegistrationUser    MFC                RegistrationUser
                       Interface                              Interface




                      Registration                           Registration
                       System                                 System



Logical View Top-Level Diagram         Component View Top-Level Diagram



                                                                       319
Vista de Procesos
n   La vista de procesos de la arquitectura se enfoca en la
    descomposición de procesos
     • La vista muestra la distribución de componentes a procesos


n   El diagrama de componentes se actualiza para mostrar la
    distribución de componentes a procesos


n   La vista de procesos está dirigida a: la disponibilidad, la
    confiabilidad, el desempeño, la administración y la
    sincronización del sistema

                                                                    320
Componentes de Proceso
n   Las librerías ejecutables y ligadas se representan como
    componentes UML
    • Especificación de Paquete (DLL)
    • Especificación de Tarea (EXE)


     Especificación del paquete (DLL)   Especificación de tarea (EXE)




                                                                        321
Diagrama de Componentes para
    un Proceso
n   Cada componente puede depender de otros componentes



    MyProcess.exe     Name1
                                    Name2




              Name1                              Name2




                                                          322
Procesos para el Sistema de
Inscripción a Cursos

     Curriculum.exe               Registration.exe




 Proceso para la creación   Proceso para que los alumnos
 y mantenimiento de         y profesores elijan curso
 curriculum



                                                           323
Vista de Distribución
n   La vista de distribución de la arquitectura mapea
    componentes a nodos de procesamiento


n   Los requerimientos de desempeño y tolerancia a fallas
    se toman en cuenta


n   Los diagramas de distribución se crean para mostrar los
    diferentes nodos (procesos y dispositivos) en el sistema




                                                               324
Diagrama de Distribución
n   Un diagrama de distribución muestra la ubicación de los
    componentes en nodos, de tal forma que se obtenga
    una vista de distribución del sistema
     • Los procesadores y dispositivos son estereotipos comunes
       de Nodo.


n   Los nodos se conectan en el diagrama a través de una
    línea, que refleje la ruta de comunicación entre ellos


n   Los elementos esenciales de un diagrama de
    distribución son los nodos y las conexiones



                                                                  325
Notación para Diagramas de
    Distribución
n   Un nodo es un objeto físico en tiempo de ejecución que
    representa recursos computacionales


n   Una conexión indica comunicación, generalmente a través de
    medios de acoplamiento directo al hardware



                      nombre            etiqueta



                      nodo           conexión




                                                                 326
Ejemplo: Diagrama de Distribución
    para el Sistema de Inscripción
n   Este diagrama muestra dos nodos y los dispositivos con los que
    se comunica el Sistema de Inscripción




                          Sistema de                 Base de
                          Inscripción                Datos




    Dormitorios
                                        Biblioteca
    <<device>>
                      Edificio          <<device>>
                     Principal
                    <<device>>


                                                                     327
Procesos
n   Un proceso es un hilo de control de la ejecución de un
    programa o sistema (OO)
     • Un sistema grande puede dividirse en procesos múltiples o hilos
       de control
n   Los objetos se asignan a procesos (sus asignaciones pueden
    ser dinámicas)
n   Los procesos se asignan a procesadores (un conjunto de
    procesos puede ser dinámico)
n   Notación:
                              Nombre de
                              Procesador




                       proceso 1, proceso 2, ... proceso n

                                                                         328
Mapeo de Paquetes de Desarrollo
    a Procesos Ejecutables
n   El mapeo de paquetes de desarrollo a procesos
    ejecutables envuelve el entendimiento de la topología
    del sistema y las prioridades del sistema, que incluyen:
     • Arquitectura de procesador, velocidad y capacidad
     • Mantener las asociaciones de clases juntas para minimizar
       la comunicación de interprocesos (IPC interprocess
       communication)
     • Estrategia IPC -- cliente/proveedor u otro?
     • Técnicas de proceso distribuido

n   Debe resolver elementos que envuelvan múltiples
    procesadores de hardware o sistemas distribuidos
    durante el diseño del sistema
                                                                   329
Mapeo de Procesos Ejecutables a
    Hardware
n   Los procesos deben asignarse a un dispositivo de hardware para
    su ejecución


n   Entre las consideraciones están:
     n   Tiempo de respuesta y resultados del sistema
     n   Comunicación: ancho de banda/capacidad
     n   Localización física del hardware requerido

     n   Necesidades de procesamiento distribuido
     n   Balanceo de carga de procesos en sistemas distribuidos
     n   Tolerancia de fallas
     n   ...

                                                                  330
Vista de Casos de Usos
n   Los casos de usos son los conductores del diseño de una
    arquitectura
     • Abstracciones de requerimientos largos y complejos
     • Identificación de interfaz crítica
     • Forzar a los diseñadores a concretar elementos


n   Demuestran y validan las vistas; lógica, de componentes,
    de procesos y de distribución de la arquitectura



                                                               331
Las “4+1 Vistas” del Modelo UML

      Vista Lógica                   Vista de Componente
     Diagramas de Clases,
                                     Diagramas de Componentes
   Diagramas de Secuencias



                    Vista de Caso de Uso
                    Diagramas de Casos de Uso,
                     Diagramas de Secuencias

    Vista de proceso                  Vista de Despliegue

   Diagramas de Procesos              Diagramas de Distribución




                                                                  332
¿Cómo se documenta una Arquitectura?
n   La arquitectura se documenta a través de un texto escrito
    • Aproximadamente 100 páginas para un sistema grande

n   El documento incluye:
    • Una descripción de la filosofía de la arquitectura (las vistas) y
       la visión que dirige los requerimientos
    • Ver las ventajas y desventajas para considerar alternativas
    • Una vista de alto nivel de la vista lógica (paquetes y clases
       principales)
    • Escenarios específicos de la arquitectura
    • Vistas de alto nivel de las vistas de procesos y de distribución
    • Los mecanismos clave

                                                                      333
¿Quién desarrolla la Arquitectura
    del Software?
n   El equipo de arquitectura está compuesto por los mejores y más
    experimentados desarrolladores


n   Establecido tempranamente en el proyecto (no después de la fase
    de elaboración)


n   La mayoría de los proyectos de complejidad razonable requieren
    de un equipo de arquitectura, NO un sólo arquitecto
     • Encabezado por el arquitecto en jefe, quién dedica 100% de su tiempo
     • Incluye los líderes diseñadores para funciones más importnates o
       críticas del sistema

                                                                          334
Evolución del Equipo de
Arquitectura
                                                    Fase de Construcción
                                                    Equipo de Arquitectura
                                                         •Arquitecto
                                                         •Grupo de soporte
 Fase de Elaboración
Equipo de arquitectura                              Equipo 1 de Aplicación
     •Arquitecto                                         •Diseñador líder
     •Líderes Diseñadores                                •Ingenieros de
     •Desarrolladores de                                 aplicación
     infraestructura
                                                     Equipo 2 de Aplicación
                                                          •Diseñador líder
En la fase de elaboración, los miembros se                •Ingenieros de
dedican 100% al equipo de arquitectura.                   aplicación

                                                                .
Durante la fase de construcción, los miembros se
convierten en diseñadores líderes para equipos de
                                                                .
aplicación y soporte de medio tiempo al equipo de               .
arquitectura


                                                                              335
Beneficios de un Equipo de
    Arquitectura
n   Documentos a entregar
     •   Documento de arquitectura
     •   Partes del documento de diseño de bajo nivel
     •   Guías de diseño y programación
     •   Elementos de los planes de liberación
     •   Auditorias de diseño al sistema a liberar


n   La habilidad y efectividad del equipo de arquitectura es
    crítico para el éxito de un proyecto

         Con una buena arquitectura, un equipo de desarrollo normal
            puede triunfar. Con una arquitectura débil, hasta los
               desarrolladores más expertos no tendrán éxito
                                                                      336
Ejercicio: Diseño de Aruitectura
n   Discutir consideraciones de arquitectura para el problema


n   Agregar paquetes al modelo como sea necesario
     • Reubicar clases en diferentes paquetes como sea necesario




                                                                   337
338
Mecanismos Clave




                   339
Objetivos: Mecanismos Clave
n   Usted podrá:
     • Describir algunos mecanismos claves específicos a OO
     • Explicar los elementos asociados con la interfaz a bases
       de datos
     • Listar algunas consideraciones para evaluar sistemas
       de administración de bases de datos
     • Describir el manejo de excepciones y sus elementos
       asociados
     • Explicar los elementos asociados con comunicación
       inter-proceso


                                                              340
¿Qué son los Mecanismos Clave?
n   Un mecanismo clave es una decisión estratégica de acuerdo a
    estándares, políticas y prácticas comunes, por ejemplo
     n   Un acercamiento común a un manejo de error, o
     n   Un modo común de comunicación entre procesos


n   La mayoría del software tradicional se diseña con principios que
    aún se aplican en el diseño OO
     n   Los problemas para resolver son similares, e.g., manejo de recursos,
         control de riesgos, etc.


n   Algunas diferencias se deben a:
     n   Soluciones estructuradas usando métodos OO
     n   Los elementos de lenguajes de programación OO

                                                                            341
Mecanismos Claves Comunes
n   Administración de recursos

n   Manejo especial requerido para el inicio y salida del sistema

n   Integración con sistemas de almacenamiento de datos
    persistentes

n   Detección/manejo/reporte de errores

n   Comunicación interproceso

n   Envió de mensajes

n   Apariencia y vista (look & feel) de la interfaz de usuario

n   Reutilización de software


                                                                    342
Administración de Recursos
n   Una clase administradora de recursos puede emplearse para controlar el
    acceso a los recursos


n   La clase administradora de recursos utiliza métodos de software
    tradicional, tales como semáforos para controlar el acceso a dichos
    recursos


n   Esta clase proporciona operaciones que permiten a los clientes del
    recurso, obtenerlo, descargarlo, obtener su estado, etc.


n   Una superclase que contenga la interfaz a los recursos administrados
    puede ser provista con los recursos del administrador para posibilitar su
    reuso

                                                                                343
Administración de Recursos (cont.)

 ResourceManager
                               ManagedResource
acquire ()
                   1    1..*
release ()




                       File              SharedMemory




                                                        344
Inicio y Salida del Sistema
n   Si aún no se ha cubierto durante el análisis, deben definirse los
    casos de uso para el inicio y salida del sistema


n   Los escenarios deben desarrollarse para cada caso de uso --
    tantos como sean necesarios para controlar a la mayoría de las
    situaciones normales y anormales


n   Durante este proceso deben descubrirse nuevos estados y
    comportamientos para clases existentes y la necesidad debe
    surgir para las clases enteramente nuevas y así controlar el inicio
    y/o salida del sistema

                                                                        345
Objetos Persistentes
n   Un objeto persistente es aquel que lógicamente existe bajo el
    ámbito del programa que lo creó
n   Los lenguajes de programación OO manejan objetos residentes
    en memoria, los cuales son esencialmente transitorios
n   Un objeto persistente tiene la habilidad de guardar el valor de
    sus atributos en algún tipo de almacenamiento persistente
n   Un objeto persistente puede también crearse en memoria e
    inicia con sus valores de atributo desde el almacenamiento
    persistente
n   La estrategia total para proveer persistencia a los objetos en el
    sistema, es un mecanismo de control

                                                                        346
Almacenamiento Persistente
n   El almacenamiento persistente puede hacerse empleando
    un sistema de archivos simple o algún tipo de sistema de
    administración de base de datos


n   Hay varios modelos para DBMSs:
     •   Jerárquicos
     •   Red
     •   Relacional (RDBMS)
     •   Orientado a Objetos (ODBMS)


n   El Relacional y el ODBMS son los más comunes

                                                               347
Selección de una Aproximación a
    Persistencia
n   La estrategia de diseño para retener objetos persistentes
    deberá considerar
     •   Tiempos de acceso
     •   Capacidad de almacenamiento
     •   Confiabilidad del sistema de almacenamiento
     •   Acceso a datos existentes


n   El modelo elegido influirá al sistema y al diseño de objetos,
    de tal forma que los diseñadores deberán considerar:
     • Operaciones adicionales para almacenar y recuperar objetos
         persistentes
     •   Adición de atributos para manejar detalles de almacenamiento
         del sistema
     •   Clases adicionales para hacer interfaz con el DBMS
                                                                    348
Criterios de Evaluación de un DBMS
n   Se debe decidir el criterio de evaluación para elegir un
    DBMS


n   Las siguientes laminas contienen cierto criterio encontrado
    en “Considerations For Evaluating Object Database
    Management Systems” escrito por Robert Gancarz y Grant
    Colley, Object Magazine, Marzo/Abril 1992
     • Este criterio también se aplica para elegir el sistema de
       administración de la base de datos



                                                                   349
Criterios de Evaluación de un DBMS
    (cont.)
n   Presencia del Vendedor
     • Mirar el poder financiero, estructura de la organización,
       procedimientos de soporte al cliente, soporte de entrenamiento y
       consultoría, alianzas con otras compañías


n   Desempeño de la Base de Datos
     • Ninguna marca puede probar que un DBMS es más rápido para todas
       las aplicaciones
     • El desempeño depende de la aplicación
         • Los prototipos específicos de aplicación son muy importantes

n   Capacidades de la Base de Datos
     • Se debe evaluar administración de transacciones, control de
       concurrencia, respaldo y recuperación, seguridad y soporte de un
       lenguaje de consulta (SQL)


                                                                          350
Criterios de Evaluación de un DBMS
    (cont.)
n   Arquitectura de la Base de Datos
     • Evaluar esquemas de control de concurrencia, mecanismos de
       seguridad y administradores de almacenamiento


n   Herramientas de Desarrollo
     • Ver las herramientas para el diseño de la base de datos, modificación
       del esquema de las base de datos y navegación, así como también
       las herramientas de depuración y afinación de la base de datos


n   Soporte al lenguaje de elección
     • Asegurarse de que hay soporte para el lenguaje de su elección para
       el desarrollo del sistema


n   Facilidad de Migración
     • ¿Qué tan fácil/difícil es migrar al sistema de la base de datos?

                                                                            351
Criterios de Evaluación de un DBMS
    (cont.)
n    Integración con Sistemas Legados
      • ¿Qué tan fácil/difícil es integrarse al sistema de administración
        de base de datos existente?


n    Soporte Multi-usuario
      • Evaluación del soporte para desarrollo multiusuario,
        administración de configuración, control de versiones y
        estrategias de seguridad

    Nota: Invierta tiempo y esfuerzo para seleccionar el sistema de
     Nota: Invierta tiempo y esfuerzo para seleccionar el sistema de
    administración de base de datos apropiado para el proyecto
     administración de base de datos apropiado para el proyecto

    SIEMPRE es más caro corregir que hacerlo bien desde el principio!!!
     SIEMPRE es más caro corregir que hacerlo bien desde el principio!!!
                                                                       352
Productos de la Base de Datos
    Relacional
n   Hay dos factores principales que deben tomarse en cuenta
    cuando se diseña un sistema OO usando bases de datos
    relacionales

n   Primero, existe una diferencia semántica natural entre el
    modelo basado en clases un diseño orientado a objetos y
    el modelo basado en tablas de una base de datos
    relacional
     • Se debe definir un mapeo o traducción entre los dos

n   Segundo, se debe definir el comportamiento que hace
    interfaz con el RDBMS y que implementa esta traducción
     • ¿Debe insertarse este comportamiento en objetos
       persistentes o de algún modo debe mantenerse separado?


                                                                353
Mapeo a Bases de Datos
    Relacionales
n   Típicamente, cada clase mapea a una tabla y cada
    instancia mapea a un renglón

    Customer
    name            Tabla Customer
    address
    discount        customerID     name   address      discount




                                                             354
Mapeo a Bases de Datos
    Relacionales (cont.)
n   Las relaciones de uno-a-muchos se implementan usando una
    llave foránea en la tabla que representa a la clase que tiene la
    multiplicidad mayor a uno en la relación
     Customer
    name             Tabla Customer
    address
    discount
                     customerID     name       address    discount

            1


                    Tabla Order
           0..*
                     orderID    delivery   urgency       customerID
       Order
    deliveryTime
    urgency


                                                                       355
Mapeo a Bases de Datos
    Relacionales (cont.)
n   Se crean tablas para resolver las relaciones de muchos-a-
    muchos


      Product

                             Tabla Product Ingredient
           0..*
                              productID   ingredientID


           1..*
     Ingredient


                                                            356
Mapeo a Bases de Datos
    Relacionales (cont.)
n   Las superclases / subclases también pueden mapearse a
    tablas
     • Cada clase y subcalse es una tabla
     • Se proporcionan vistas para la jerarquía
                    Order
                deliveryTime               Tabla Order
                urgency
                                           orderID   deliveryTime   urgency


 SpecialOrder                              Tabla SpecialOrder
                           StandingOrder
startDate
endDate                  frequency         orderID   endDate    startDate

                                                                            357
Mapeo a Bases de Datos
    Relacionales (cont.)
n   Existen estrategias alternas para superclases y subclases
     • Repetir todos los atributos en la tabla de superclase
         • Problema: espacio desperdiciado


     • Repetir todos los atributos en la tabla de subclase
         • Problema: redundancia


n   Se buscan la mejor relación con respecto al desempeño y
    espacio de almacenamiento para decidir que mapeo usar
    en cada situación de herencia



                                                                358
Interfaz con el RDBMS
n   El elemento principal asociado con la creación de una interfaz
    con un RDBMS, es si se separa o no el comportamiento
    específico de la aplicación del comportamiento específico de la
    base de datos

n   Suponga que nuestro sistema tiene una clase Cliente que se ha
    decidido que será persistente
     n   ¿Deberá la clase Cliente contener los detalles del mapeo OO-a-
         RDBMS?
     n   ¿Deberá la clase Cliente contener el comportamiento para hacer
         interfaz con el agente RDBMS (es decir, código que genera SQL para
         leer/escribir de/a la base de datos)?
     n   ¿Deberá la clase Cliente incluso saber que es persistente?


n   De cualquier forma se puede trabajar - cada uno tiene sus
    ventajas y desventajas
                                                                          359
Interfaz con RDBMS (cont.)
n   El comportamiento específico de la base de datos no está
    separado del comportamiento específico de la aplicación:
     • Cada clase persistente puede tener las funcionalidades de
       crear, leer, actualizar y borrar (CRUD) construidas en
       (operaciones que desempeñan mapeo OO-a-RDBMS y
       generan SQL para implementarlo)
     • Ventajas
        • No es técnicamente retador para implementar
     • Desventajas
        • Los modelos OO y RDBMS no son separables
        • La funcionalidad CRUD no siempre es limpiamente heredable
                                                                      360
Comportamiento de la Base de
Datos dentro de la Clase



   : CurriculumManager      : Course


              1: save ( )


                                        Course
                                       description
   Course debe tener conocimiento
    Course debe tener conocimiento
   de la base de datos                 save ()
    de la base de datos




                                                     361
Interfaz con RDBMS
n   El comportamiento específico de la base de datos se separa
    del comportamiento específico de la aplicación
     n   Se puede modelar al sistema en dos particiones: Aplicación e
         Interfaz de la Base de Datos
          • Para cada clase persistente, una interfaz de base de datos
            asociada se define, la cual entiende el mapeo OO-a-RDBMS y
            tiene el comportamiento para hacer interfaz con el RDBMS


     n   Ventajas
          • El modelo OO es separable del modelo RDBMS
          • Existen herramientas disponibles para generar las clases de
            interfaz básicas a la base de datos


     n   Desventajas
          • Más técnicamente retador de implementar

                                                                          362
Comportamiento de Base de Datos
Separado
: CurriculumManager     : Transaction           : DBCourse                   : Course
                        Manager
       1: saveCourse (Course)
                                  2: save (Course)
                                                       3: getDescription ( )

                                                     4: makePersistent ( )




                                                                       TransactionManager
   TransactionManager
    TransactionManager
   separa lo lógico (Course)
    separa lo lógico (Course)
   de lo físico (DBCourse)
    de lo físico (DBCourse)
                                                         Course                             DBCourse



                                                                                                   363
DBMS Orientado a Objetos
n   Los ODBMS permiten el almacenamiento y recuperación de los
    objetos (con datos complejos encapsulados en cada objeto)


n   Un ODBMS retiene típicamente
     • Objetos (valores de atributos)
     • Información de la clase sobre cada objeto


n   No hay diferencia semántica entre el modelo OO y el modelo
    ODBMS - son idénticos


n   No debe diseñarse comportamiento especial para hacer interfaz
    con el ODBMS

                                                                    364
DBMS Orientado a Objetos (cont.)
n   Ventajas:
     • Interfaz sin parches entre la aplicación y la base de datos
     • Se necesita relativamente poco código para hacer a los objetos
       persistentes
     • Muy efectivo con sistemas que deben atravesar estructuras de datos
       complicadas


n   Desventajas:
     • Riesgo más alto de desarrollo ya que la tecnología y producto de
       ODBMS no son tan maduros como sus contrapartes de RDBMS
     • El desempeño con estructuras simples de datos no proporcionan
       ventajas sobre RDBMS


n   Se debe evaluar la inversión de tecnología relacional existente
    cuando se evalúe la tecnología de bases de datos OO
                                                                          365
Detección de Errores
n   Debe establecerse un mecanismo consistente para la detección
    de errores

n   Los objetos deben detectar errores que podrían violar su
    integridad - esto incluye errores
     • Que surgen con la operación
     • Que resultan de parámetros recibidos de objetos clientes
     • Que resulten de valores de retorno proporcionados por objetos
       proveedores

n   Se puede establecer un plan para monitorear la salud del
    sistema
     • Se define operación de prueba para cada clase que verifique la
       integridad o estructura interna, y
     • Monitoreo de objetos definidos para revisar periódicamente cada
       función de prueba de objeto


                                                                         366
Manejo de Errores
n   Aún en los sistemas OO, el manejo de errores debe diseñarse
    cuidadosamente -- en más del 30% del código final existen
    condiciones de manejo de error


n   Los lenguajes OO (como 3.0 C++) proporcionan elementos de
    manejo de excepción para auxiliar en este diseño


n   El manejo de excepciones permite que un error se maneje por un
    objeto distinto que el objeto que detectó el error


n   Esto es con frecuencia apropiado, ya que el objeto detector no
    siempre conoce el impacto a un sistema por un error

                                                                     367
Ejemplo de Manejo de Excepción
class String {
public:
    class RangeError { int badIndex; }; // error type
    char getChar(int index) const;
    // ...
};
char String::getChar(int index) const {
    if (index < 0 || index > lastValid)
        throw RangeError(index); // throw point
    return contents[index];
};
void foo() {

    try {
        String s = “hello”;
        char c = s.getChar(0);
    }
    catch (const String::RangeError& why) { // catch point
        cout << “subscript out of range” << why.badIndex << endl;
    }
}

                                                                    368
Throwing y Catching Excepciones
n   Cuando hay un problema que no puede ser manejado en el
    contexto actual, se puede crear y “lanzar” una excepción
     • throw Problem(“things are bad”);

n   ¿Qué hace throw?
     • Se crea y “regresa” al objeto excepción

n   ¿A dónde va el objeto excepción?
     • Cuando se lanza una excepción se busca la llamada a la pila
         para el primer manejador (handler)
          • Habrá un manejador de excepción para cada tipo de
            excepción que pueda cargarse
     •   catch (Problem&) {// handle exceptions of type Problem}


                                                                     369
Elementos de Manejo de
    Excepción
n   En el proceso de búsqueda de llamada a la pila, se llaman a los
    destructores de objetos locales
     • Variables automáticas
     • Parámetros de valor
     • Temporales

n   No se llama a los destructores para
     • Variables dinámicas
     • Variables estáticas

n   Nunca se ejecuta el código después del punto de lanzamiento

n   Las excepciones se apoderan de la administración de recursos
    (ej. Cerrar archivos abiertos)


                                                                      370
¿Deben Usarse Siempre las
    Excepciones?
n   No deben usarse las excepciones en las siguientes
    situaciones:
     • Condiciones ordinarias de error
        • Si hay suficiente información disponible para manejar el error
          entonces NO hay una excepción


     • Para controlar el flujo del problema
        • Una excepción NO es un regreso alterno




                                                                           371
¿Cuándo Deben Usarse las
    Excepciones?
n   Las Excepciones se lanzan como resultado de un error
    serio
     • No hay regreso al punto donde se lanzó la excepción


n   Las Excepciones no deben usarse si el error puede
    manejarse (arreglarse) y el proceso continua
     • Puede llamarse una operación para “arreglar” el problema y
       el proceso puede continuar




                                                                    372
Uso Típico de Excepciones
n   Arreglar el problema y continuar el proceso sin procesar
    de nuevo la función que lanzó la excepción

n   Calcular un resultado alterno

n   Lanzar el error a un contexto más alto

n   Terminar el programa

n   Ocultar funciones que usan esquemas de error ordinario

n   Simplificar el código

n   Hacer al código más fácil de mantener


                                                               373
Reporte de Error
n   El almacenamiento del registro de errores de forma correcta y el
    reporte en línea son las claves de la mayoría de los sistemas

n   El comportamiento del control de errores consistente puede
    implementarse en base a la clase Error usada en el manejo de
    excepción

n   Este comportamiento puede incluir
     n   Agregar el error a un registro de errores que abarque al sistema
         (system-wide error log)
     n   Distribuir los errores del proceso los cuales facilitan el monitoreo en
         línea de errores


n   Este tipo de acercamiento asegura la consistencia al separar la
    responsabilidad detallada de las clases de aplicación

                                                                                   374
Comunicación Interprocesos
n   ClassA llama a la operación functionB() de la ClassB

n   ¿Qué sucede cuando las clases ClassA y ClassB están en proceso
    diferentes?

n   Esto se convierte en un resultado crítico en sistemas distribuidos

n   Se necesita un mecanismo estándar para la comunicación
    interprocesos

                                           : ClassA                : ClassB

      ClassA                  ClassB                  1: functionB ( )

                            functionB( )



                                                                              375
Comunicación Interprocesos
    (cont.)
n   Una solución común que soporta el paradigma OO se ha
    desarrollado
     n   Clases Proxy se insertan en cada proceso el cual proporciona
         las interfaz de las clases originales y encapsula la
         comunicación de nivel menor



n   La distribución es transparente a clases de aplicación




                                                                    376
Estándares Distribuidos de OO
n   La elección de un estándar de distribución es un elemento de
    diseño (si su sistema usa objetos distribuidos)


n   Hay dos estándares para la distribución OO
     n   Common Object Request Broker Architecture (CORBA)
     n   Component Object Model (COM+/DCOM/COM/OLE)


n   Object Request Brokers (ORB) proporciona acceso transparente a
    objetos en un ambiente distribuido
     n   ORB permite la conectividad de ubicación independiente
         cliente/servidor
     n   Las decisiones de distribución pueden tomarse al tiempo de corrida

                                                                              377
Clases Proxy



ClassA   ProxyClientB              ProxyServerB   ClassB




                 Object Request Broker




                                                       378
Planeación para Reuso
n   Los componentes reusables deben considerarse previamente en
    el proceso de diseño para incorporarlo al sistema


n   La evaluación de librerías de software comerciales e internas para
    aplicarlos al sistema por módulos


n   Las librerías de clases son grupos de clases que colaboran para
    proporcionar algún servicio, interfaz o función


n   Librerías de clases están comúnmente disponibles como:
     n   Container objects
     n   Interfaces to databases
     n   User interface widgets


                                                                      379
Actualización de Diagramas
n   Los diagramas de clases se actualizan para mostrar los
    mecanismos claves elegidos


n   Los diagramas de secuencias se actualizan para mostrar
    las interacciones entre clases descubiertas y clases que
    representan estrategias de mecanismos clave




                                                               380
Diagrama de Clases Actualizado

       Outgoing        GUI Widgets       Incoming
       Interfaces                       Interfaces




                             Business   University
                              Rules     Artifacts




     Foundations       Error              Database
                      Handling
      global        global




                                                     381
Diagrama de Secuencias
Actualizado
                      aForm :             theManager :           theCourse            anOffering               dbMgr :              dbCourse :        dbOffering :
: Registrar         CurriculumMgr         CurriculumMgr           : Course             : (Course           TransactionMgr           DBCourse           DBOffering
              1: open
          2: enter id

                         3: verify id
              4: enter

         5: create a

         6: set number, name, description,
                7: set number offerings, professor,
         8: process
                     9: create course(number, name, description, credit hours, offerings,

                                          10: create(number, name, description,

                                           11: create offering(number, pofessor,

                                                                    12: create(professor, time,

                                                                               13: save
                                                                                                                     14: save(course)
                                                                                                   15: get info

                                                                                                                                        16: commit

                                                                                                                                           17: save(offering)
                                                                                                                     18: get info

                                                                                                                                                           19: commit




                                                                                                                                                                        382
Ejercicio: Mecanismos Clave
n   Discuta las estrategias de mecanismos clave para el
    problema


n   Actualice el diagrama de clases para mostrar la
    incorporación de mecanismos clave


n   Actualice los diagramas que sean necesarios




                                                          383
384
Diseño de Clases




                   385
Objetivos: Diseñar Clases

n   Usted podrá:

     • Discutir decisiones de diseño de interfaz de usuario

     • Agregar clases de nivel de diseño para solucionar
       problemas de diseño

     • Usar patrones de diseño para resolver problemas de
       diseño



                                                              386
Diseño de Interfaz de Usuario
n   Las clases boundary manejan las comunicaciones de
    lainterfaz entre el usuario y el sistema
     • Proporcionan capacidad para enviar y recibir información del
       exterior del sistema


n   Durante el análisis, se definen clases boundary de alto
    nivel


n   Durante el diseño, se completa el diseño de la interfaz de
    usuario
     • Windows layouts
     • Número de ventanas
     • Manejo de eventos iniciados por los usuarios
                                                                      387
Descubriendo de Requerimientos
    de Interfaz
n   Cualquier prototipo de la interfaz de usuario hecho con
    anterioridad es un buen punto de partida para esta fase de
    diseño


n   Los diagramas de secuencia y/o colaboración también
    proporcionan una buena fuente para los requerimientos de
    la interfaz
     • Algo en el sistema debe proporcionar la capacidad para
       recibir “mensajes” provenientes de un actor
     • Algo en el sistema debe proporcionar la capacidad de enviar
       todos los “mensajes” dirigidos a un actor

                                                                     388
Diagrama de Secuencias para el
Escenario de “Crear Cursos”

                    aForm :          theManager :         theCourse            anOffering              dbMgr :              dbCourse :       dbOffering :
: Registrar     CurriculumForm                             : Course             : (Course
                                     CurriculumMgr                                                  TransactionMgr           DBCourse        DBOffering
          1: open
         2: enter id
                      3: verify id
          4: enter

        5: create a
        6: set number, name, description,
              7: set number offerings, professor,
         8: process
                  9: create course(number, name, description, credit hours, offerings,)

                                     10: create(number, name, description,)

                                     11: create offering(number, professor,)
                                                            12: create(professor, time,)
                                                                      13: save
                                                                                                             14: save(course)
                                                                                            15: get info

                                                                                                                               16: commit

                                                                                                                                  17: save(offering)
                                                                                                             18: get info

                                                                                                                                                 19: commit




                                                                                                                                                              389
Requerimientos de la Interfaz de
    Usurio
n   Actor “Registrar”
     • Introduce la información necesaria para crear un Course y sus
        ofertas


n   Requerimientos de otros escenarios
     • El actor tiene la habilidad de crear, consultar, modificar y borrar
        Course, así como también ofertas de Course


n   Decisiones de diseño
     • Una ventana que contenga todas las opciones disponibles para el
        actor “Registrar”
     • Una ventana que contenga la información de Course
     • Una ventana que contenga información de ofertas de Course
     • Botones disponibles en las ventanas de Course y de ofertas de
        Course que permitan guardar, cancelar o borrar la información
                                                                             390
Ventana Principal del Actor
Registrar




                              391
Ventana de Course




                    392
Ventana de Ofertas de Course




                               393
Inscripción a Course

                           registration                schedule               available
   John :                     form                       form                 courses
   Student
             1: enter id

                              2: validate id


       3: enter current semester

       4: create new schedule
                                          5: display
                                                                   6: get courses
                                                                  7: select




                                                                                          394
Requerimientos para este
    Escenario
n   Actor “Student”
     • Debe proporcionar cursos seleccionados para el semestre
       actual
     • La lista de cursos disponibles se despliega al actor


n   Decisiones de diseño
     • Se crea una ventana que contenga listas de selección de
       cursos
         • Las listas contienen nombres de todos los cursos ofrecidos



                                                                   395
Ventana Course Registration




                              396
¿Qué sucede cuándo se presiona
    el botón OK?
n   Todos los constructores de la interfaz de usuario son
    diferentes
     • Algunos crean objetos que contienen información de la ventana
     • Otros crean estructuras de datos con información

n   Algunas técnicas comunes
     • 1. Las clases Control reciben los datos de una ventana y
       procesan los datos
        • Los datos de la ventana pasan de la ventana a la clase
          Control,
     • 2. El botón sabe que hacer con los datos en la ventana

                                                                   397
Clases Utility
n   El estereotipo <<utility>> se usa para una clase que
    contiene una colección de subprogramas libres
     • Los subprogramas libres son funciones no-miembro, por
       ejemplo, funciones que no pertenecen a una clase en
       particular


n   Las clases Utility se define generalmente;
     • Para proporcionar algunos servicios de algoritmos comunes,
       los servicios pueden reusarse en una variedad de contextos
     • Para librerías ocultas o aplicaciones no orientadas a objetos
                           <<utility>>
                          MathFunctions


                                                                       398
Ejemplo: Clase Utility
n   La clase utility SchedulingAlgorithms contiene funciones
    para resolver conflictos de horario

                 <<utility>>
            Scheduling Algorithms

                        1



                         0..*
                <<controller>>
                                                    Course
              RegistrationManager
                                    1        1..*


                                                               399
Ejemplo: Clase Utility (cont.)
n    Para evitar utilerías múltiples (funciones libres de C++) que
     conviertan las unidades de distancia, se puede crear una clase
     utility para empaquetar todas las funciones bajo una interfaz



    Usando Funciones Libres        Usando Clases Utility de C++ (preferible)

extern float                        #ifndef UNIT_UTILITIES
                                    #define UNIT_UTILITIES
  inchToCentimeter(float inch);
extern float                        class/*_utility*/ Unit_Utilities {
  centimeterToInch                  public:
             (float centimeter);       static float inchToCentimeter(float inch);
                                       static float centimeterToInch(float centimeter);
                                    };

                                    #endif // UNIT_UTILITIES




                                                                                  400
Clases Help
n   Durante el diseño, una clase puede agregarse como “help”,
    ya que desempeña alguna funcionalidad necesaria


n   Ejemplo:
     • El CurriculumForm debe verificar que el id introducido sea válido
        • Si la verificación se identifica con el formato del id, entonces
           la ventana puede desempeñar esta funcionalidad


         • Si la verificación se identifica con seguridad, entonces se
           necesita información adicional
             • Lista de id válidos
             • Esta clase se agrega al sistema

                                                                         401
Aparición de Patrones
n   Un patrón de diseño es una solución a un problema de
    diseño común

n   Un Patrón
     • Describe un problema común de diseño
     • Describe la solución al problema
     • Discute los resultados y trade-offs de la aplicación del patrón

n   Los patrones se están colectando, catalogando y usando
    para construir sistemas
     • Proporciona la capacidad de reusar diseño y arquitecturas
         exitosas
     •   Da como resultado sistemas más fáciles de mantener
     •   Incrementa productividad
                                                                     402
Adaptación de Patrones
n   Los sistemas de inscripción a curso tienen tres tipos de
    usuarios: alumnos, profesores y el administrador
n   Se creó una jerarquía de RegistrationUser para los
    diferentes tipos de usuarios
n   El tipo de usuario que se va a acrear depende de los datos
    introducidos
n   Problema: quien crea el tipo específico de usuario
     n   El patron Factory Method puede usarse para crear el tipo
         correcto de usuario al momento de ejecución
          • Se le da el dato al factory y se le pide que cree el tipo correcto de
            objeto

                                                                               403
El Patrón Factory

  UserFactory            creates
                                          RegistrationUser
 create (what)     1                  1




                            Student           Professor        Registrar




                 La creación (what) de la operación UserFactory
                  La creación (what) de la operación UserFactory
                     crea el tipo correcto de RegistrationUser
                      crea el tipo correcto de RegistrationUser
                                                                           404
Otros Patrones
n   Prototype: crea un objeto copiando un objeto prototipo

n   Singleton: asegura que una clase tiene sólo una instancia y
    proporciona un punto global de acceso a la misma

n   Adapter: convierte la interfaz de una clase a otra interfaz

n   Iterator: proporciona una manera de accesar los elementos
    de un objeto agregación

n   Memento: captura y externaliza el estado interno de un
    objeto de modo que el objeto pueda restablecer este
    estado después (esto se hace sin romper la encapsulación)
                                                                  405
¿Cuántas Clases se necesitan?
n   Varias..., clases simples quiere decir que cada clase
     • Encapsula menos de la inteligencia de todo el sistema
     • Es más reusable
     • Es más fácil de implementar

n   Pocas..., clases complejas quiere decir que cada clase
     • Encapsula una gran porción de la inteligencia de todo el
       sistema
     • Es menos propensa al reuso
     • Es más difícil de implementar

    Regla: Una clase debe tener un único propósito y bien enfocado
    Regla: Una clase debe tener un único propósito y bien enfocado
             Una clase debe hacer una cosa y hacerla bien
              Una clase debe hacer una cosa y hacerla bien
                                                                     406
Ejercicio: Diseño de Clases
n   Discuta que clases adicionales pueden agregarse al modelo
    para facilitar las decisiones de diseño


n   Actualizar los diagramas, tanto como sea necesario




                                                           407
408
Diseño de Relaciones




                       409
Objetivos: Diseño de Relaciones

n   Usted podrá:
     n   Determinar la navegación de las relaciones

     n   Mejorar las relaciones de asociación y agregación

     n   Discutir opciones de visibilidad de objetos

     n   Discutir múltiples decisiones de diseño

     n   Diseñar clases de asociación




                                                             410
Navegación
n   En el análisis, las asociasiones son bi-direccionales


n   En el diseño, una asociación puede ser uni-direccional
    n   Una flecha se agrega a la asociación para mostrar que la
        navegación solo va en una dirección

                                               Customer puede
                                                Customer puede
    Customer                           Order
                                               “hablar” con Order
                                                “hablar” con Order

                                0..*           Order no puede
                                                Order no puede
                                               “hablar” con Customer
                                                “hablar” con Customer



                                                                        411
Decisiones de Navegación
n   Durante el diseño nos fijamos si en realidad es necesario
    navegar en ambas direcciones


n   La necesidad de navegación se revela en los casos de uso y
    en los escenarios
     • Dada una instancia de la clase A, ¿necesitamos encontrar
       todas las instancias asociadas de la clase B?
     • Dada una instancia de la clase B, ¿necesitamos encontrar
       todas las instancias asociadas de la clase A?



                                                                  412
Preguntas de Navegación
n   El sistema debe contestar preguntas como:
     • ¿De qué proveedor puedo comprar este producto? (producto -
       proveedor)

     • ¿Qué productos fueron ordenados para este proveedor en
       particular? (proveedor - producto)




          Supplier                                 Product
                      1..*                  1..*


                                                                413
La Navegación Two-Way vs. la
    Navegación One-Way
n   Las asociaciones two-way son más difíciles y costosas de
    implementar que las asociaciones one-way


n   Aunque se requiera la navegación two-way, una asociación
    one-way puede ser suficiente bajo ciertas circunstancias.
    Por ejemplo:
     • La navegación en una de las direcciones es poco frecuente y
       no tiene exigencias estrictas de desempeño, o
     • El número de instancias de una de las clases es muy pequeño


                                                                     414
Ejemplo: Simplificación de una
    Asociación One-Way
n   Situación1: Frecuentemente necesito preguntar que proveedor(es)
    proporcionan cierto producto, pero sólo necesito pedir una lista de
    todos los productos proporcionados por un proveedor
    trimestralmente para el proceso de facturación
     • Implementar la dirección de Producto-a-Proveedor y buscar todas las
       instancias de Producto cuando se compile una lista de Producto para
       cada Proveedor


n   Situación 2: Sólo existen dos proveedores
     • Implementar sólo la dirección Producto-a-Proveedor y buscar todos los
       registros de Producto cuando necesite recorrer la asociación en la
       dirección opuesta

               Supplier                            Product
                          1..*
                                                                            415
Navegación para Agregaciones
n   Una agregación también puede ser uni-direccional

n   Se agrega una flecha a la línea de agregación




          Order                             OrderItem

                                     1..*




                                                        416
Refinando Agregaciones
n   Una relación de agregación quiere decir que el objeto
    origen debe contener conocimiento semántico del objeto
    destino


n   Las relaciones pueden ser de dos tipos:
     • Por referencia
     • Por valor




                                                             417
Implicaciones Por-Valor y Por-
    Referencia
n   Por valor implica que los objetos se crean y destruyen
    como consecuencia de la creación y destrucción de otro
    objeto
     n   En otras palabras, los tiempos de vida de los objetos
         relacionados son iguales


n   Por referencia implica que los tiempos de vida de los
    objetos relacionados pueden ser independientes

n   Por lo tanto, la selección de por valor o por referencia
    determina como se diseña para que el lenguaje de
    programación elegido (como C++) cree y borre un objeto



                                                                 418
Relaciones Por-Referencia
n   Las relaciones por-referencia denotan tiempos de vida
    independientes
     • Se muestra como un diamante vacío



      Catalogue                              Course

                                      1..*




                                                            419
Relaciones Por-Valor
n   Las relaciones por-valor indican tiempos de vida
    dependientes
     • Al crear el objeto se crea también el objeto relacionado
     • Al borrar el objeto se borra también el objeto relacionado


n   Por ejemplo, cuando se crea CourseSelectionWindow
    también se crea OKButton

        CourseSelectionWindow       1           1   OKButton




                                                                    420
Relaciones de Dependencia
n   Una relación de dependencia quiere decir que una clase
    depende de algunos servicios de otra clase


n   Una relación de dependencia es como una flecha punteada

             Client                         Supplier




          Un objeto Client depende de un objeto Supplier
          Un objeto Client depende de un objeto Supplier



                                                             421
Relaciones de Dependencia (cont.)
n   Una relación de dependencia indica, ya sea que:

     n   Las operaciones de la clase cliente crean objetos de la clase

         proveedor

     n   Las operaciones de la clase cliente tienen firmas en donde

         aparecen clase de retorno o argumentos, por lo que son

         instancias o referencias a la clase proveedor




                                                                         422
Las Operaciones crean Objetos de
la Clase Proveedor

RegistrationManager

process ()
                      #include “BillingSystem.h”
                      void RegistrationManager::process(){
                         BillingSystem theInterface;
                         …
                      }
   BillingSystem




                                                        423
Los Objetos Proveedor como
Argumentos de una Operación

 TransactionManager
                        class Course;
 saveCourse (Course&)   class TransationManager {
                           public:
                           …
                           void saveCourse(Course&);
                           private:
                           …
       Course
                        };




                                                       424
Visibilidad de Objeto
n   Las relaciones proporcionan una ruta de comunicación
    entre objetos


n   Para que los objetos “hablen” deben ser visibles
     • La visibilidad de objeto determina el diseño de una relación

                     Puedo ver . . .




                                                                      425
Opciones de Visibilidad de Objetos
n   Hay cuatro opciones de visibilidad
     n   Global
          • El objeto proveedor es un objeto global


     n   Parámetro
          • El objeto proveedor es un parámetro de una operación del objeto
            cliente


     n   Local
          • El objeto proveedor es declarado localmente


     n   Campo
          • El objeto proveedor es un campo en el objeto cliente



                                                                         426
Modelo de Análisis
n   La operación createCourse() de CurriculumController le pide al
    TransactionManager que guarde el nuevo objeto Course



       Diagrama de Clases      Diagrama de Colaboración
       CurriculumController
                                  : CurriculumController
       createCourse ()

                         1

                                                1: saveCourse (Course)
                         1

       TransactionManager
                                  : TransactionManager
       saveCourse (Course)

                                                                         427
Modelo de Diseño -- Visibilidad
    Global
n   El objeto TransactionManager se declara globalmente

                               1: saveCourse (Course)

      : CurriculumController                      G
                                                   G

                                                         : TransactionManager




n   La visibilidad global se traduce en la relación de dependencia

     CurriculumController                              TransactionManager

     createCourse ()                                   saveCourse (Course&)




                                                                                428
Visibilidad Global
   static TransactionManager theManager;
   class CurriculumController {
      public:
      void createCourse();
      …
   };
   class Course;
   void CurriculumController::createCourse() {
      Course *aNewCourse;
      …
      theManager.saveCourse(aNewCourse);
      …
   };



                                                 429
Modelo de Diseño -- Visibilidad de
    Parámetro
n   El objeto TransactionManager es un parámetro de la operación
    createCourse() del CurriculumController
     • El objeto TransactionManager sólo es visible a la operación
        createCourse

                              1: saveCourse (Course)

     : CurriculumController                    PG
                                                    : TransactionManager


n   La visibilidad de parámetro se traduce en relación de dependencia


            CurriculumController                       TransactionManager

createCourse (TransactionManager&)                     saveCourse (Course&)



                                                                              430
Visibilidad de Parámetro
class TransactionManager;
class Course;
class CurriculumController {
   public:
   void createCourse(TransactionManager&);
   …
};
void CurriculumController::
        createCourse(TransactionManager& theManager) {

    Course *aNewCourse;
    …
    theManager.saveCourse(aNewCourse);
    …
}

                                                         431
Modelo de Diseño -- Visibilidad
    Local
n   El objeto TransactionManager se declara dentro de la operación
    createCourse() del CurriculumController
     • El objeto TransactionManager sólo es visible a la operación
       createCourse()


                          1: saveCourse (Course)

     : CurriculumController                 L
                                            G
                                                : TransactionManager

n   La visibilidad local se traduce a una relación de dependencia

         CurriculumController            TransactionManager

        createCourse ()                  saveCourse (Course&)




                                                                       432
Visibilidad Local
 #include “TransactionManager.h”;
 class Course;
 class CurriculumController {
    public:
    void createCourse();
    …
 };
 void CurriculumController::createCourse() {
    Course *aNewCourse;
    TransactionManager theManager;
    …
    theManager.saveCourse(aNewCourse);
    … }



                                               433
Modelo de Diseño -- Visibilidad de
    Campo
n   El objeto TransactionManager es un dato miembro de la clase
    CurriculumController
     n    El objeto TransactionManager es visible a todas las operaciones de la
          clase CurriculumController

                              1: saveCourse (Course)

         : CurriculumController                 FG
                                                     : TransactionManager

n   La visibilidad de campo se traduce a una relación de asociación (o
    agregación)

    CurriculumController                              TransactionManager

    createCourse ()                                  saveCourse (Course)



                                                                              434
Visibilidad de Campo
 #include “TransactionManager.h”;
 class Course;
 class CurriculumController {
    public:
    void createCourse();
    …
    private:
    TransactionManager theManager;
 };
 void CurriculumController::createCourse() {

     Course *aNewCourse;
 …
     theManager.saveCourse(aNewCourse);
     … }

                                               435
Ejemplo: Diseño de Relación
n   El CurriculumController es responsable por la administración de
    toda la información de Course. Course se crea y se guarda en la
    base   de     datos   Curriculum.   Un   TransactionManager    es
    responsable por las interfaz a la base de datos. Hay una clase
    DBCourse que sabe como guardar la información de Course
    pertinente.   Cada Course puede tener entre 3 y 10 alumnos
    inscritos y tiene sólo un Professor. Un alumno puede inscribirse a
    un máximo de 4 cursos. Cada profesor imparte tres cursos. Se
    ejecuta un reporte listando cursos, el profesor y los alumnos
    inscritos para las tres primeras semanas del semestre.


                                                                    436
Modelo Antes del Diseño de la
Relación

CurriculumController 1                              1
                                                          Course                  Student
createCourse ()                                    1..*
                                                                   0..4   3..10
        1                                           1        3




        1              1                  1

  TransactionManager               DBCourse                                   Professor
                           1   1
 saveCourse (Course)               save (Course)




                                                                                            437
Decisiones de Diseño
n   El CurriculumController usa al TransactionManager para
    cada Course que administra
     • La operación createCourse() no es la única operación que usa el
       TransactionManager
        • Se elige visibilidad de campo


     • El CurriculumController envía mensajes al TransactionManager,
       pero el TransactionManager no envía ningún mensaje al
       CurriculumController
        • La relación es uni-direccional (CurriculumController a
          TransactionManager)



                                                                   438
Decisiones de Diseño (cont.)
n   El CurriculumController crea un nuevo curso dentro de la
    operación createCourse()
     • Se elige la visibilidad local


n   La operación saveCourse() del TransactionManager se le
    pasa un objeto Course como parámetro
     • Se elige la visibilidad de parámetro
     • El TransactionManager usa al objeto DBCourse para guardar el
       objeto Course
     • Esta es la única operación que necesita al objeto Course
        • Se elige la visibilidad local
                                                                  439
Decisiones de Diseño (cont.)
n   Se le pasa un objeto Course a la operación salvar de DBCourse
     • Se elige visibilidad de parámetro

n   Un Course debe saber de sus alumnos para generar el reporte
     • Estos requerimientos no establecen que un alumno debe saber
       de sus cursos
        • La relación se hace uni-direccional

n   Un Course debe saber de su Professor para generar el reporte
     • Estos requerimientos no establecen que el Professor deba saber
       de sus cursos
        • La relación se hace uni-direccional
                                                                    440
Modelo Después del Diseño de
Relación

  CurriculumController

  createCourse ()
                          Course                  Student
                                          3..10




         1

   TransactionManager     DBCourse            Professor
    saveCourse (Course)   save (Course)   1




                                                            441
Multiplicidad para Relaciones
n   La multiplicidad es el número de instancias que participan
    en una asociación


n   Las estimaciones iniciales de multiplicidad hechas durante
    el análisis deben actualizarse y refinarse durante el diseño


n   Todas las relaciones de asociación y agregación deben
    tener multiplicidad especificada



                                                               442
Implementación de Asociaciones
    con Multiplicidad de 1 o 0 a 1
n   Si cada curso tiene como máximo un Professor, entonces
    cada objeto Course puede incluir un apuntador simple al
    objeto Professor correspondiente

                                          class Professor;
                                          class Course {
    Course   0..*       1     Professor      public:
                    Teacher                  // public info
                                             private:
                                             Professor *teacher;
                                             …
                                          };




                                                                   443
Opcionalidad
n   Si una liga es opcional, se debe incluir una operación para
    probar la existencia de la liga


n   Por ejemplo, si un Professor puede estar en sabático, debe
    incluirse una operación apropiada en la clase Professor
    para probar la liga

           Professor                       Course


          teaching( )   1           0..*




                                                              444
Diseño de Opciones para
    Multiplicidad de Más de Uno
n   La multiplicidad de más de uno se diseña generalmente
    empleando clases “contenedoras “
     • Una clase contenedora es la clase cuyas instancias son
       colecciones de otros objetos


n   Las clases contenedoras comunes incluyen:
     • Conjuntos, listas, diccionarios, pilas, colas, ...
     • Las clases contenedoras son con frecuencia clases con
       parámetros que se muestran como:

                                Item

                         List



                                                                445
Ejemplo de Clase con Parámetro

                       Item
                                        #include “List.h”
                List                    class Course {
                                           public:
                                           …
                                           private:
Course       StudentList      Student      List<Student>
                                              students;
         1
                                           …
                                        }




                                                            446
Notación de Clases Contenedoras
n   Para reducir el desorden en los diagramas de clases, las clases
    contenedoras no se muestran típicamente en los diagramas de
    clases


n   Si se necesita el tipo de contenedor para comunicación, se debe
    usar una nota

                            List

              Course
                                           Student
                                   3..10



                                                                      447
Clase Asociación
n   Una clase de asociación contiene información que pertenece a
    una liga entre objetos no a cada objeto implicado en la relación



           Course                                Student

                    4                    3..10



                             grade




                                                                       448
Diseño de Clases de Asociación
n   Durante el diseño, las clases de asociación evolucionan:
     n   Se transforma a la clase de asociación en una clase
         interpuesta entre las otras dos clases


     n   Se establecen asociaciones con la multiplicidad apropiada
         entre la clase de asociación y las otras dos clases
          • La multiplicidad siempre es UNA de la clase de asociación a las
            clases ligadas


     n   Diseño de asociaciones nuevas
          • La navegación debe ser bi-direccional o uni-direccional


                                                                              449
Diseño de Clases de Asociación
(cont.)



 Course               Report           Student
                      grade    4   1
          1   3..10




                                                 450
Ejercicio
n   Usando escenarios y diagramas de clases desarrollados
     n   Discutir consideraciones del diseño de relación



n   Actualice los diagramas de clases para mostrar las
    consideraciones del diseño de relación




                                                            451
452
Diseño de Atributos y Operaciones




                               453
Objetivos: Diseño de Atributos y
    Operaciones
n   Usted podrá:
     •   Discutir el control de acceso y encapsulación
     •   Usar la notación para control de acceso en diagramas de clases
     •   Diseñar representaciones de atributos
     •   Representación de tipos de atributos y valores por omisión
     •   Listar los cuatro tipos de operaciones comúnmente
         proporcionadas por una clase
     •   Representar las firmas de las operaciones
     •   Describir los niveles de control de acceso que soporta C++
     •   Discutir la relación de amistad y la encapsulación
     •   Discutir las opciones de diseño disponibles en C++ para
         atributos
     • Discutir el soporte en C++ para operaciones
                                                                      454
Control de Acceso y Encapsulación
n   La notación UML tiene la habilidad de especificar el acceso
    de otros atributos y operaciones
     • El acceso debe ser público, protegido o privado

n   El control de acceso se usa para reforzar la encapsulación



                                               Operaciones protegidas
Operaciones públicas
                              Atributos        y privadas




                                                                  455
Control de Acceso Especificado en
    Diagramas de Clases
n   Los símbolos de acceso pueden ser usados en un icono de clase
    para indicar la accesibilidad de atributos y operaciones


n   El control de acceso se especifica para atributos y operaciones
    precediendo el nombre del miembro con los símbolos siguientes:
     • +Acceso publico
     • #Acceso protegido
     • - Acceso privado


n   El acceso es otorgado explícitamente por la clase misma y el
    cliente no la toma por la fuerza

                                                                      456
Ejemplo: Control de Acceso
Especificado en Diagramas de
Clases


              Course
      -maxStudents
      -name

      +addStudent ()
      +isFull ()
      #determineCourseSize()




                               457
Representaciones de Atributo
n   Durante el análisis, fue suficiente especificar sólo el nombre
    del atributo
     • A menos que la representación sea un requerimiento que
       restrinja al diseñador

n   Las representaciones de atributos deben completarse en el
    diseño

n   Se debe asignar un valor por omisión para cada atributo
     • attributeName : Type = Default

n   Ejemplo: algunos atributos de la clase Document son:
     • Title : String
     • Author : String
     • LastRevised : Date = Today
                                                                458
Determinación de Tipos de Dato
    de Atributos
n   El diseñador debe seleccionar una representación de dato
    apropiada para cada atributo de entre los siguientes:
     • Tipo de dato preconstruido (Built-in data type)
     • Tipo de dato definido por el usuario (User-defined data type)
     • Clases definidas por el usuario (User-defined class)

n   Los detalles más finos del diseño de atributos dependen del
    lenguaje de implementación
             Análisis                            Diseño

           Course                             Course
          - name                         - name : String
          - description                  - description : DayType
          - maxStudents                  - maxStudents : short = 0



                                                                     459
Diseño de Operaciones
n   Durante el análisis
     • Las operaciones se crean para implementar el
       comportamiento expresado en los casos de uso


n   Durante el diseño
     • Los detalles a nivel de implementación se agregan a las
       operaciones
     • Se agregan operaciones para completar la clase




                                                                 460
Tipos de Operaciones
n   Una clase completa debe tener operaciones categorizadas
    en cuatro tipos*:
     •   Funciones de administración
     •   Funciones de implementación
     •   Funciones de acceso
     •   Funciones de ayuda




    *[Lippman, Stanley. C++ Primer,. Reading, Mass.:
    Addison-Wesley, 1991]


                                                          461
Operaciones de Administración
n   Se debe proporcionar un subconjunto de operaciones de
    cualquier clase para proporcionar las funciones de
    administración de la clase
     • Inicialización, creación, destrucción, administración de
       memoria, etc.
     • Las operaciones de administración proporcionan estos
       servicios


n   Las más comunes son los constructores y los destructores
     • Desempeñan la creación y destrucción de objetos de la clase

n   Todas las clases necesitan proporcionar al menos estas
    operaciones de administración
                                                                  462
Operaciones de Implementación
n   El subconjunto de operaciones de una clase que
    proporcionan las capacidades básicas de la clase se llaman
    operaciones de implementación


n   Estas operaciones son las que prevalecen desde el análisis


n   Si se requiere o necesita cualquier rastreo, estas son las
    operaciones que se rastrean en el diseño



                                                                 463
Operaciones de Acceso
n   El diseño orientado a objetos encapsula la representación
    interna de la clase
     n   Concepto de ocultamiento de información


n   Las operaciones que soportan el acceso a los atributos se
    les hace referencia como operaciones de acceso
     n   También conocidas como operaciones de obtener (get) y
         colocar (set)


n   Cualquier atributo puede tener estas operaciones de acceso


                                                                 464
Operaciones de Ayuda
n   El ultimo conjunto de operaciones son aquellas llamadas
    operaciones de ayuda, que se encargan de las funciones
    auxiliares de la clase que generalmente no es para el
    usuario
     • No son parte de la interfaz pública
        • Operaciones privadas son usadas solo por miembros de la clase


     • Generalmente se invocan por otras operaciones de la clase




                                                                          465
Firmas de las Operaciones
n   Durante el diseño, se determina la firma de cada operación
     • Argumentos o parámetros de la operación
     • Tipo de datos de retorno de la operación



        Análisis                                Diseño

         Course                                 Course

+addStudent (newStudent)        +addStudent (newStudent : Student*):void




                                                                           466
Atributos y Operaciones para la
Clase Course

                                                 Course
-description : char*
-name : char*
-daysOffered : DayType
-creditHours : short
-location : UniversityPlace
-maxStudents : short

+isFull ():bool
+addStudent (newStudent : Student*):void
+getDescription ():const char*
+save ():void
+getName ():const char*
+getDaysOffered ():dayType
+getCreditHours ():short
+getLocation ():const UniversityPlace
+Course (name : char&,location : UniversityPlace&,desc : char&,days : DayType,hours : short,maxStudents : short)
+~Course ()
+Course ( : const Course&)




                                                                                                              467
Control de Acceso en C++
n   El control de acceso de UML mapea directamente a C++. El
    control de acceso se indica por las siguientes palabras clave:
     n   Public: Accesible a todos los clientes
     n   Protected: Accesible solo a todas las subclases
     n   Private: Accesible solo a la clase misma


n   En C++, los atributos se llaman variables miembro mientras las
    operaciones se llaman funciones miembro.


n   El acceso para todos los atributos son usualmente privados o
    protegidos


n   El acceso para todas las operaciones que son parte de la interfaz
    externa es publica
                                                                     468
Ejemplo: Control de Acceso para
miembros de una Clase
class Course {
   public:
   void addStudent(Student*);
   bool isFull();                 Operación pública
   …

     protected:
     int determineCourseSize();   Operación protegida

     private:
     String name;
     short maxStudents;           Atributos privados
};


                                                   469
Friendship (Amistad)
n   Un amigo es una clase u operación cuya implementación
    puede hacer referencia a partes privadas o protegidas de
    otra clase


n   En C++ el mecanismo de amistad permite a una clase
    distinguir ciertas clases privilegiadas que tienen los
    derechos para ver las partes protegidas y privadas de la
    clase

          Precaución: Friendships (Amistades) rompen la
          Precaución: Friendships (Amistades) rompen la
           encapsulación de la clase, y por lo tanto debe
            encapsulación de la clase, y por lo tanto debe
             escogerse cuidadosamente y usarse sólo
              escogerse cuidadosamente y usarse sólo
               cuando sea absolutamente necesario
                cuando sea absolutamente necesario
                                                               470
Atributos de C++
n   Los atributos se llaman variables miembros en C++

n   C++ proporciona un rango de tipos de datos para cada
    variable miembro.
     n   Built-in types incluyen:
          • Integers, including short, int, long
          • Floating point numbers, including float, double, long double
          • Character, including char

     n   Derived types incluyen arrays, strings, structures, unions y
         pointers

     n   User-defined types como enum y typedef

     n   User-defined classes

                                                                           471
Tipos Built-in y Derived

                       class Course {
                            public:
       Course
-description : char*        …
-name : char*               private:
-creditHours : short
-maxStudents : short        char *description;
                            char *name;
                            short creditHours;
                            short maxStudents;
                       };


                                                 472
Tipos Definidos por el Usuario

                         enum dayType { MW, MWF, TT };
                         class Course {
                              public:
        Course                …
-description : char*          private:
-name : char*
-creditHours : short          char *description;
-maxStudents : short
                              char *name;
-daysOffered : dayType
                              short creditHours;
                              short maxStudents;
                              dayType daysOffered;
                         };
                                                         473
Clase Definida por el Usuario
class UniversityPlace {            #include “UniversityPlace.h”;
 public:                           enum dayType { MW, MWF, TT };
 …                                 class Course {
 private:                               public:
 char *building;                        …
 short room;                            private:
};                                      char *description;
              Course                    char *name;
     -description : char*
     -name : char*                      short creditHours;
     -creditHours : short
                                        short maxStudents;
     -maxStudents : short
     -daysOffered : DayType             dayType daysOffered;
     -location : UniversityPlace
                                        UniversityPlace location;
                                   };
                                                                    474
Soporte para Operaciones en C++
n   Las operaciones se llaman funciones miembro en C++


n   C++ normalmente distingue las operaciones de
    administración de otras operaciones


n   C++ soporta los conceptos de parámetros y valores de
    retorno en operaciones




                                                           475
Operaciones de Administración en
    C++
n   Cada clase en C++ define operaciones de administración
    llamadas constructores y destructores


n   Si los constructores y los destructores no están definidos, se
    proporcionan versiones por omisión


n   Un constructor define como se construyen los objetos de una
    clase


n   Un constructor de copia se usa para hacer una copia de un objeto
    existente


n   Un destructor define lo que sucede cuando se destruye un objeto

                                                                     476
Constructores
n   Los constructores son funciones miembro que tienen el mismo
    nombre de la clase misma
n   Los constructores se usan también para iniciar las variables
    miembro de una clase
             class Course {
               public:
                    Course();    // Constructor
                    ...
                private:
                    short maxStudents;
             };

             Course::Course() : maxStudents(0) // Constructor
             {
                    // Constructor code
             };
                                                                   477
Constructores de Copia
n   Los constructores de copia se usan para iniciar un objeto
    usando los valores de otro objeto


n   El compilador creará una copia por omisión si no se provee
    una
     n   Todos los datos miembros en la copia se inician copiando el
         valor del objeto original


n   Los constructores de copia son llamados cuando los
    objetos se pasan por valor



                                                                       478
Constructor de Copia
(Por Omisión) Correcto
class Circle
{
     public:
          Circle(float x, float y, float r):
              xPosition(x), yPosition(y), radius(r) {};
     private:
          float xPosition;
          float yPosition;
          float radius:
};




                                                          479
¿Qué sucede aquí?
   class Employee {
      public:
         Employee(const char *n= ““);
         ~Employee () {delete []name;};
      private:
         char *name;
   };
   Employee::Employee(const char *n):
      name(new char[strlen(n)+1]) {
         strcpy(name,n);
   }




                                          480
Clase Employee Correcta
    class Employee {
       public:
          Employee(const char *n= “ “);
          Employee(const Employee &);
          ~Employee () {delete []name;};
       private:
          char *name;
    };
    Employee::Employee(const char *n):
       name(new char[strlen(n)+1]) {
          strcpy(name,n);
    };
    Employee::Employee(const Employee& emp):
       name(new char[strlen(emp.name)+1]){
          strcpy(name,emp.name);
    }


                                               481
Constructor de Copia
n   El constructor de copia por omisión no puede ser usado si:

     n   La clase contiene apuntadores o referencias a otros objetos

     n   Se hace extra procesamiento cuando se crea y borra un

         objeto

          • Ejemplo: incrementar el número de objetos en el constructor y

            decrementar el número de objetos en el destructor




                                                                            482
Inicialización de Miembros
n   ¿Diseño bueno o malo?

      class Employee {
         public:
            Employee(const String&);
         private:
            String name;
      };
      Employee::Employee(const String& n) {
        name = n;
      }

                   Indicación: ¿Cómo se inicia name?
                    Indicación: ¿Cómo se inicia name?



                                                        483
Inicialización de Miembros
n   Se inicia el nombre de atributo usando el constructor
    string (cadena) por omisión


n   El valor del nombre se cambia en el cuerpo del constructor




                                                            484
Inicialización de Miembros - Diseño
n   El nombre del atributo inicia usando el constructor String(String &)



           class Employee {
              public:
                 Employee(const String&);
              private:
                 String name;
           };
           Employee::Employee(const String& n):
              name(n) {}




                                                                     485
Inicialización de Miembros
n   ¿Qué hay acerca de tipos built-in?
     n   Los tipos Built-in no tienen constructores entonces no importa




              Buen estándar
              Buen estándar

                      Siempre usar inicio de miembro
                       Siempre usar inicio de miembro
                              Código más fácil de leer
                              Código más fácil de leer
                              Código más fácil de mantener
                              Código más fácil de mantener




                                                                     486
Orden de Inicialización
n   ¿Qué sucede aquí?

         extern String LookupEmployee(long);
         class Employee {
            public:
               Employee(long);
            private:
               String name;
               long id;
         };
         Employee::Employee(long i):
            id(i), name(LookupEmployee(id)) {};




                                                  487
Orden de Inicialización
n   La inicialización ocurre en el orden especificado en la
    declaración de la clase NO en la orden en el constructor


n   En el ejemplo, LookupEmployee se llama usando una
    variable inicializada


n   Arreglar
     n   Cambiar el orden en la declaración de la clase

           Buen estándar
           Buen estándar

             La orden de declaración de la clase y el orden de
              La orden de declaración de la clase y el orden de
             inicialización deben ser las mismas
              inicialización deben ser las mismas

                                                                  488
Operaciones de C++
n   C++ soporta pasar parámetros a operaciones y regresar
    un solo elemento como tipo de regreso

n   Por ejemplo: bool addStudent (const Student & student);

n   C++ soporta diferentes modos de pasar parámetros
    n   Pasar por valor
    n   Pasar por referencia




                                                              489
Pasar por Valor
n   Mecanismo por omisión en C++
n   Se hace una copia del parámetro actual
n   Cambia al parámetro formal, no cambia el parámetro
    actual

void Course::addStudent(Student aStudent){
    …
    aStudent.setName(“noName”); // name of aStudent set to “noName”
};
main() {
    Student theStudent;
    theStudent.setName(“Terry”);
    aCourse.addStudent(theStudent);
    // name is still set to Terry
… }

                                                               490
Pasar por Referencia
n   Soportado por argumentos de referencia y apuntadores
n   No se hace copiado de objetos
n   Los cambios del parámetro formal cambian al parámetro
    actual
    void Course::addStudent(Student& aStudent){
       …
       aStudent->setName(“noName”); // name of aStudent set to “noname”
    };
    main() {
       Course aCourse;
       Student *theStudent;
       theStudent = new Student;
       theStudent->setName(“Terry”);
       aCourse.addStudent(theStudent);
       // name is “noName”
    … }

                                                                          491
Apuntadores y Referencias
n   Un apuntador no es lo mismo que una referencia


n   Una apuntador
     •   Es una dirección
     •   Puede cambiar para apuntar a otro objeto
     •   Puede no estar iniciado
     •   Puede ser nulo


n   Una referencia
     • Es un alias para un objeto
     • Debe estar iniciado
     • Una vez iniciado, la referencia no puede cambiar para
         referenciar a otro objeto
                                                               492
Apuntador y Referencia (cont.)
n   Un apuntador debe usarse si
     • Hay una posibilidad de que que no hay nada a que referenciar
       (nulo)
     • Hay necesidad de referenciar a cosas diferentes en tiempos
       diferentes


n   Se debe usar una referencia si
     • Hay siempre un objeto que referenciar
     • No hay necesidad de cambiar la referencia




                                                                    493
Modificador Const
n   Un objeto const no puede ser modificado


n   Al pasar una referencia a un objeto const se preserva lo
    que se pasó por medio de semánticas de valor sin tener
    que copiar

      void foo(const T& object)     // copy constructor
                                       not called
      {
          // cannot modify object
      }




                                                               494
Tipos de Retorno
n   C++ soporta regresar un objeto por valor o por referencia


n   El regreso por valor resulta en la copia del objeto que
    regresa que se esta haciendo
     • Puede ser costoso

n   El regreso por referencia no resulta en una copia
     • Requiere que el cliente asuma la carga de administración de
       memoria




                                                                     495
Ejercicio
n   Usando los escenarios desarrollados, discutir
    consideraciones de diseño de atributo y operación




                                                        496
497
Diseño de Herencia




                     498
Objetivos: Diseño de Herencia
n   Usted podrá:
     • Refinar la jerarquía de herencia del nivel de análisis para
       incrementar el reuso
     • Discutir como soporta C++ la herencia
     • Definir polimorfismo y describir como se soporta en C++
     • Diferenciar entre ligado estático y dinámico
     • Usar funciones virtuales para solicitar ligado dinámico
     • Determinar el nivel apropiado de acceso para datos y
       funciones miembros con herencia

                                                                 499
Jerarquías de Herencia
n   Durante el análisis, se establecen jerarquías de herencia

n   Durante el diseño, las jerarquías de herencia se refinen a:
     • Incrementar reuso
     • Incorporar clases de implementación
     • Incorporar clases de librería disponibles


                            Superclass




                             Subclass



                                                                  500
Refinar la Jerarquía de Herencia
n   Se revisan los diagramas de análisis para identificar cosas
    comúnes de
     • Atributos, y/o
     • Operaciones, y/o
     • Asociaciones

n   Se definen superclases nuevas que contengan elementos
    comunes

n   Esto reduce la cantidad de código que se va a escribir y
    refuerza la uniformidad, no se puede manejar un mismo
    elemento en dos clases diferentes si las dos clases lo
    heredan de una superclase común

                                                               501
Ejemplo: Refinar la Jerarquía
         Mortgage                              SavingAccount
      interestRate                         interestRate

      getPayment( )                        getBalance( )
                0..*                                  1..*
                granted to                            is owned by


                             Customer
                     1..*               1..*




          Diagrama de Clase a Nivel Análisis



                                                                    502
Ejemplo: Refinar la Jeraquía
(cont.)
                                                               La asociación con
                              InterestBearingItem
                                                               Customer se cambió a
Customer                    interestRate
                                                               superclase
           1..*      1..*   getRate()
                                                               interestRate se hereda a
                                                               ambas subclases y debe
                                                               manejarse de forma
                                                               idéntica
                    Mortgage                  SavingsAccount

                  getPayment()
                                                               Ambos getPayment() y
                                            getBalance()
                                                               getBalance() requieren
                                                               cálculo del interés que es
                                                               llevado a cabo por el
              Diagrama de Clases a Nivel de Diseño             método heredado
                                                               getRate()




                                                                                       503
Soporte de Herencia en C++
n   C++ proporciona soporte a nivel lenguaje, directo para
    herencia de atributos y operaciones

n   La terminología de herencia es
     • Clase “Base” en lugar de superclase      Base Class

     • Clase “Derivada” en lugar de subclase




                                               Derived Class




                                                               504
Las Operaciones se heredan de
 Clases Base en C++

class BankAcct {                   Las operaciones declaradas en
   public:                         una clase base no necesitan
    void deposit ();               repetirse en la clase derivada
};
class SavingsAcct : public BankAcct {
   public:
    void getBalance ();
};                               Un cliente de una clase derivada
                                 puede invocar miembros public
void client () {                 de clases derivadas y base
    SavingsAcct myAcct;
    myAcct.getBalance ();      // derived
    myAcct.deposit (); // base
};




                                                                505
Los Atributos se heredan de Clases Base
en C++
                                Los atributos declarados en un
                                clase base no necesitan
                                repetirse en la clase derivada
class base {
private:
    int x;
};
class derived : public base {              Objetos
private:
    int z;
                                   aBase        aDerived
};
                                     x               x
                                                     z




                                                                 506
Polimorfismo
n   El término griego Polymorphos quiere decir “tener muchas
    formas”
     • El polimorfismo es la habilidad de definir una sola interfaz con
       implementaciones múltiples

n   Los clientes pueden invocar operaciones de objetos sin saber su
    tipo
     • Los clientes pueden implementarse “genéricamente” para invocar una
       operación de objeto sin saber el tipo de objeto
     • Si los objetos se agregan eso soporta la misma operación, el cliente
       no necesita ser modificado para manejar al objeto nuevo

n   El polimorfismo permite que los clientes manipulen objetos en
    términos de su superclase común

                                                                              507
Ejemplo de Polimorfismo
                                    Animal

                                   talk ()




                            Lion               Tiger

                         talk ()             talk ()
 Sin Polimorfismo                                      Con Polimorfismo

if animal = “Lion” then                                do the Animal talk
      do the Lion talk
else if animal = “Tiger” then
      do the Tiger talk
end


                                                                            508
Polimorfismo y C++
n   El polimorfismo es una ventaja de herencia realizada durante la
    implementación


n   C++ porporciona soporte para el polimorfismo a través de
     • Ligado dinámico (o tardío)
     • Funciones virtuales


n   El diseñador debe permitir explícitamente el polimorfismo a
    través del uso apropiado de funciones miembro virtuales de C++


                             virtual void talk();


                                                                      509
Ligado Dinámico vs. Estático
n   Normalmente el método particular que se va a ejecutar como
    resultado de una llamada de función se conoce al momento de
    compilación. Esto se llama ligado estático (o temprano)
     • El compilador reemplaza la llamada de función con código diciendo el
       programa que direcciona para saltar y poder encontrar esa función


n   Con el polimorfismo, el tipo particular de objeto para el que un
    método se va a invocar no se conoce hasta el tiempo de
    ejecución
     • El compilador no puede proporcionar la dirección al tiempo de
       compilación
     • El programa selecciona al método mientras esta corriendo

n   Esto se conoce como ligado tardío o ligado dinámico

                                                                           510
Herencia y Destructores
n   Si un destructor no es virtual entonces el borrado a través del
    apuntador de la clase base llamará al destructor incorrecto, si el
    objeto al que apunta es de la clase derivada

                                Ball

                             Ball ()
                             ~Ball ()




                              Baseball

                            Baseball ()
                            ~Baseball


                                                                      511
Herencia y Destructores (cont.)
class Ball {             class Baseball : public Ball {
   public:                   public:
      Ball();                   Baseball();
      ~Ball();                  ~Baseball();
}                        }


 main()
 {
    Ball *myBall;

     myBall = new Baseball();    OK -- Baseball constructor called

     delete myBall;              not OK -- Ball destructor called
 }




                                                                     512
Virtual vs. Desempeño
n   Los logros en el desempeño se realizan al no tener que ejecutar
    declaraciones switch/case

n   Cada vez que se llama a una función virtual, la función correcta
    que se va a invocar se determina al examinar la tabla virtual
     n   Se establecen algunas instrucciones por llamada

n   Las funciones no pueden ponerse en línea (inline)
     n   El compilador no sabe que poner en línea

n   Mayor impacto en funciones pequeñas
     n   El tiempo para la llamada de función es un porcentaje significativo del
         tiempo de ejecución de función

          Sugerencia: Si el uso de funciones virtuales yyclases virtuales
           Sugerencia: Si el uso de funciones virtuales clases virtuales
            hace más claro el diseño, yyel código más fácil de entender
             hace más claro el diseño, el código más fácil de entender
                     entonces probablemente valga la pena
                      entonces probablemente valga la pena
                                                                              513
Diseño del Polimorfismo
n   En el diseño, el desarrollador debe:
     • Examinar las jerarquías de herencia y determinar cuales
       operaciones deben ser polimorfas


     • Actualizar los diagramas de clases para indicar que cada clase
       y/o subclase deben proporcionar un método para una
       operación dada


     • Declarar todas las operaciones polimorfas que van a ser
       virtuales en la clase base que los define



                                                                   514
Clases Abstractas
n   Una clase abstracta es aquella a la que no se le pueden crear
    instancias


n   Las clases abstractas deben tener al menos una subclase para
    ser útiles
                 Animal
                                     Abstract
                 talk ()

                                                Todos los objetos
                                                 Todos los objetos
                                                son ya sea leones o
                                                 son ya sea leones o
                                                tigres; no hay
                                                 tigres; no hay
       Lion                Tiger                instancias directas
                                                 instancias directas
                                                de Animal
                                                 de Animal
      talk ()              talk ()


                                                                       515
Diseño de Clases Abstractas
n   Las clases abstractas se diseñan de forma diferente de las
    demás clases


n   Con las clases abstractas el diseñador asume que las
    subclases agregaran su estructura y comportamiento
     n   La clase abstracta no necesita proporcionar métodos para
         cada operación que define
     n   La clase abstracta debe proporcionar el protocolo para todas
         las operaciones polimorfas



                                                                        516
Ejemplo: Clases Abstractas y
  Protocolos


           Animal
                                         El Animal no necesita
                                          El Animal no necesita
                              Abstract
          talk ()                        especificar el método talk()
                                          especificar el método talk()

                                         Los métodos deben ser
                                          Los métodos deben ser
                                         provistos por Lion yyTiger para
                                          provistos por Lion Tiger para
                                         talk() yyestos métodos deben
                                          talk() estos métodos deben
   Lion               Tiger
                                         conformar al protocolo definido
                                          conformar al protocolo definido
talk ()             talk ()              en Animal
                                          en Animal




                                                                         517
C++ y Clases Abstractas
n    C++ permite que un desarrollador afirme que un método de una
     clase abstracta no pueda ser invocado directamente, al iniciar su
     declaración a cero


n    Tal método es llamado una función virtual pura


n    C++ prohibe la creación de instancias de clases que contengan
     funciones virtuales puras

    class Animal {
       ...
       virtual void talk() = 0;          Asegura que no se pueden
    };                                   crear instancias de Animal


                                                                      518
Clases Abstractas y Herencia
n   Hay 3 consideraciones de diseño importantes de funciones
    involucradas aquí:
     n Proporcionar una interfaz de función solo a clases
       derivadas:
          • Usar una función virtual pura

     n   Proporcionar una interfaz de función y comportamiento
         por omisión a clases derivadas:
          • Usar una función virtual (no pura) por omisión (con código
            que puede prevalecer)

     n   Proporcionar una interfaz de función y comportamiento
         obligatorio a clases derivadas:
          • Usar una función no virtual (que NO está diseñada para
            permanecer en subclases)

                                                                     519
Derivación Pública vs. Derivación
    Privada
n   Las subclases se implementan en C++ usando derivación
    pública


n   Con derivación pública, la interfaz pública de la clase base
    permanece pública en la clase derivada
     n   Los objetos de la clase derivada pueden accesar todos los
         elementos públicos de la clase base
     n   Las funciones miembro de la clase derivada tienen acceso a
         todos los atributos y operaciones públicas y con herencia
         protegida




                                                                      520
Derivación Pública vs. Derivación
    Privada (cont.)
n   C++ también permite derivación privada en la que la
    interfaz pública de la clase base se convierte en privada en
    la clase derivada
     n   Los objetos de la clase derivada no pueden accesar elementos
         públicos de la clase base
     n   Las funciones miembro de la clase derivada aún tiene acceso
         a todos los atributos y operaciones protegidos y públicos


n   La derivación privada es de ayuda en implementaciones de
    reuso - no es herencia verdadera y no se usa para
    implementar subclases
     n   Significa “se implementa en términos de”

                                                                   521
Principio de Substitución de
    Liskov
n   Si para cada objeto O1 de tipo S hay un objeto O2 de tipo T tal
    que para todos los programas P definidos en términos de T, el
    comportamiento de P no se cambia cuando O1 se substituye por
    O2 entonces S es un subtipo de T


Menos formal:
n   Puede siempre pasar un apuntador o referencia a una clase
    derivada a una función que espera un apuntador o referencia a
    una clase base



     Estas reglas representan el estilo ISA de programación
     Estas reglas representan el estilo ISA de programación
                                                                      522
Estilo de Programación ISA
           List

  insertTop (Item)
  insertBottom (Item)
  removeTop ()
  removeBottom ()       ¿Siguen estas clases el estilo
                         ¿Siguen estas clases el estilo
  insert (Item,         de programación ISA?
                         de programación ISA?
  position)




          Stack




                                                          523
Estilo de Programación ISA (cont.)
n   Las clases NO siguen el estilo ISA de programación
     n   Un Stack necesita algo del comportamiento de una List pero
         no todo


n   Si un método espera una List, entonces la operación insert
    (position) debe ser exitosa
     n   Si a un método se le pasa un Stack, entonces el
         insert(position) fallará


         Una subclase (Clase derivada) de estilo ISA NO
          Una subclase (Clase derivada) de estilo ISA NO
         debe tener más restricciones que su superclase
         debe tener más restricciones que su superclase

                                                                      524
Factoring
n   A veces puede usarse Factoring para arreglar el problema
     • No puede usarse si la clase List no puede cambiarse


                                       SequentialContainer

                                   insertTop (Item)
                                   removeTop ()




                          List
                                                             Stack
                 insertBottom (Item)
                 removeBottom ()
                 insert (Item,
                 position)


                                                                     525
Delegación
n    También se puede usar delegación para arreglar el problema




                                List       void Stack::push(Item I) {
    Stack
                                              body.insertTop(I);
                       insertBottom
                       (Item)              };
push (Item)            removeBottom ()
pop ()               1 insert (Item,
                       position)           const Item Stack::pop() {
                       remove (position)
                                              return body.removeTop();
                                           };




                                                                   526
Herencia Privada
n   La herencia privada se usa a veces para circumvent
    problemas de estilo ISA
                                        void Stack::push(Item I) {
              List
                                           insertTop(I);
     insertBottom (Item)                };
     removeBottom ()
     insert (Item,
     position)                          const Item Stack::pop() {
     remove (position)
     insertTop (Item)                      return removeTop();
                                        };
                        Private
                        inheritance

                                      push() y pop() pueden accesar
                                       push() y pop() pueden accesar
             Stack                    métodos de List pero las instancias de
                                       métodos de List pero las instancias de
          push (Item)
                                      Stack no pueden
                                       Stack no pueden
          pop ()



                                                                            527
Herencia Múltiple
n   Con herencia múltiple, una subclase hereda de más de una
    superclase

                               Asset




               InsurableItem                 InterestBearing




                               BankAccount




                                                               528
Soporte de C++ para Herencia
    Múltiple
n   Mucha más complejidad asociada con el diseño de
    herencia múltiple


n   Con frecuencia sobre-utilizado


n   Deben resolverse dos problemas:
     • Colisión de nombres o
     • Herencia repetida




                                                      529
Colisiones de Nombres
n   Las colisiones de nombres resultan cuando dos o mas
    superclases definen el mismo atributo u operación


n   Ambos InsurableItem y InterestBearingItem tienen
    atributos que se llaman presentValue
                        Asset




                                        InterestBearing
                                                          Un objeto BankAccount quiere
                                                           Un objeto BankAccount quiere
        InsurableItem
      presentValue                    presentValue        imprimir el presentValue
                                                           imprimir el presentValue
                                                          ¿Cuál se imprime?
                                                           ¿Cuál se imprime?


                        BankAccount

                                                                                     530
Resolución de Colisiones de
    Nombres
n   Esta ambigüedad puede resolverse al calificar totalmente
    el nombre para indicar la fuente de la declaración


     n   InsurableItem::presentValue


                O


     n   InterestBearingItem::presentValue




                                                               531
Ejemplo: Herencia Múltiple
n   Entre más compleja sea la herencia, es más difícil detectar
    colisiones de nombres

                              Asset

                                                           InterestBearing




             InsurableItem
                                        RealEstate


                                                                         Security



                                       BankAccount

                                                              Stock                 Bond




                             Savings            Checking




                                                                                           532
Ejemplo: Declaraciones en C++

 class   Asset . . .
 class   InsurableItem : public Asset
 class   InterestBearing : public Asset
 class   BankAccount : public InsurableItem,
                        public InterestBearing . . .
 class   RealEstate : public Asset,
                        public InsurableItem . . .
 class   Security :     public InterestBearing . . .
 class   SavingsAccount : public BankAccount . . .
 class   CheckingAccount : public BankAccount . . .
 class   Stock : public Security . . .
 class   Bond : public Security . . .



                                                       533
Herencia Repetida
n   Otro problema asociado con la herencia múltiple es la
    herencia repetida. Considere el siguiente ejemplo:

                                          Window




            WindowWithDialogBox                            WindowWithScrollbar




                                  ScrollingWindowWithDialogBox




                                                                                 534
Herencia Repetida (cont.)
n   Note la figura de diamante distintiva de la jerarquía de herencia


n   Esto indica que la misma clase base esta siendo heredada por
    una clase derivada más de una vez. Por ejemplo,
    ScrollingWindowWithDialogBox esta heredando Window más de
    una vez
     n   Con la herencia repetida, dos o más superclases comparten una
         superclase común


n   ¿Cuántas copias de los atributos de Windows se incluyen en
    instancias de ScrollingWindowWithDialogBox?


                                                                         535
Clases Base Virtuales
n   En este caso, ScrollingWindowWithDialogBox solo necesita una
    copia de las variables de la instancia Window

n   Para asegurar que una copia es heredada, se declara la clase
    base común como virtual cuando está siendo derivada a clases
    base intermedias

n   Todas las clases intermedias derivan de la clase base común de
    forma virtual

n   La única copia que es heredada se considera que se comparte por
    las múltiples rutas de derivación

n   Uso del operador de resolución de ámbito para referir a
    elementos compartidos heredados de la clase base común no se
    requiere con la derivación virtual

                                                                     536
Ejemplo: Clase Base Virtual
n   Window es la clase base
n   Cada ventana tiene una “x” y una “y” que indican el punto
    de origen
n   La función miembro Window::paint pinta la ventana básica

            class Window {
            public:
                ...
                virtual void paint( ) {
                     // paint window stuff only
                }
            protected:
                Point x, y; // origin
                ...
            } ;


                                                            537
Ejemplo: Clases Derivadas
    Intermedias
n   Las clases derivadas intermedias derivan de Windows de manera
    virtual
n   Cada clase derivada hereda una “x” y una “y” de la clase base y
    la función miembro Window::paint


class WindowWithDialogBox :         class WindowWithScrollBar :
         public virtual Window {                 public virtual Window {
public:                             public:
    …                                   ...
    void dialogBoxPaint( );             void scrollBarPaint( );
         // paint only dialog box            // paint only scrollbar
    virtual void paint( );              virtual void paint( );
         // invoke Window::paint             // invoke Window::paint and
         // and                              // paint scrollbar
         // paint dialog box            ...
         };                         } ;

                                                                      538
Ejemplo: Herencia Repetida
n   La clase derivada ScrollableWindowWithDialogBox hereda una “x”
    y una “y”, porque ambas clases padre fueron virtualmente
    derivadas de Window


n   Note que esta clase no incluye la palabra reservada virtual de sus
    clases padres

              class ScrollableWindowWithDialogBox :
                      public WindowWithDialogBox ,
                      public WindowWithScrollBar {
              public:
                  ...
                  virtual void paint( );
                  ...
              } ;

                                                                    539
Herencia Repetida y Funciones
    Miembro
n   Un error común al diseñar una clase derivada del más bajo-nivel
    es invocar la función común de la clase base más de una vez

n   Por ejemplo, suponga que hace un código de la función pintar del
    más bajo-nivel como sigue:

     virtual void ScrollableWindowWithDialogBox::paint() {
                WindowWithDialogBox::paint( );
                WindowWithScrollBar::paint( ); }


n   Entonces la funcion Window::paint sera invocada dos veces, una
    de WindowWithDialogBox::paint y otra de
    WindowWithScrollBar::paint

n   Esto podría ser solo una perdida de tiempo o podría (en algunos
    sistemas) corromper la imagen en pantalla

                                                                  540
Herencia Repetida y Funciones
    Miembro (cont.)
n   En el código siguiente, se ha evitado el error


     virtual void ScrollableWindowWithDialogBox::paint( )
     {
         Window::paint( ) ;
                    // invoke base class paint only once !

         WindowWithDialogBox::dialogBoxPaint( );
                    // then paint the dialog box

         WindowWithScrollBar::scrollBarPaint( );
                    // then paint the scrollbar
     }




                                                             541
Herencia Múltiple
n   La herencia múltiple es conceptualmente directa y se necesita
    para modelar exactamente varios problemas del mundo-real


n   Los diseñadores novatos tienden al sobreuso de la herencia
    múltiple, por ejemplo, el usar herencia múltiple cuando se podría
    usar la agregación


n   En la práctica, la herencia múltiple es un problema de diseño
    complejo y puede guiar a dificultades de implementación,
    incluyendo colisiones de nombres y herencia repetida

       Use herencia múltiple solo cuando sea necesario,
       Use herencia múltiple solo cuando sea necesario,
                               yy
                  siempre con precaución!
                   siempre con precaución!
                                                                    542
Ejercicio
n   Discuta las decisiones de diseño de herencia para el
    problema que se esta desarrollando




                                                           543
544
Resumen General




                  545
Objetivos: Resumen

n   Usted podrá:
    • Resumir el curso listando las actividades que ocurren
      durante cada fase del proceso de desarrollo




                                                          546
Resumen -- El Proceso de
    Desarrollo
n   El proceso de desarrollo es una vista de alto nivel del
    proceso completo al desarrollar un producto de software
     • Comprende cuatro fases: inicio, elaboración, construcción y
       transición


n   Las fases del ciclo de desarrollo se descomponen en una
    serie de iteraciones a través de las cuales el software
    evoluciona incrementalmente
     • Cada iteración se planea para controlar los elementos de
       mayor riesgo del sistema


n   Las actividades del análisis y diseño ocurren durante las
    fases de inicio, elaboración y construcción
                                                                     547
Resumen -- Fase Inicio
n   El propósito de esta fase es establecer el caso de uso para
    un nuevo sistema o para la actualización de un sistema
    existente

n   Las salidas incluyen un conjunto de requerimientos
    esenciales para el proyecto, una valoración inicial del riesgo
    y, opcionalmente un prototipo conceptual y un modelo inicial
    del dominio

n   Un prototipo conceptual puede construirse para validar
    hipótesisy percepciones de riesgo (tales como funcionalidad,
    desempeño, tamaño, complejidad, base tecnológica)
     • Frecuentemente se intenta no tomar en cuanta al código

                                                                548
Resumen -- Fase de Elaboración
n   Esta fase envuelve el análisis del dominio del problema y el
    establecimiento de una base arquitectónica para el sistema

n   Las salidas de esta fase consisten en un modelo del
    comportamiento del sistema que incluye el modelo de casos de
    uso, escenarios, un modelo del dominio, una arquitectura de
    ejecutables y una estrategia de diseño que controle los
    mecanismos clave necesarios para el desarrollo del sistema

n   El modelo de casos de uso contiene actores y casos de uso
     • Un actor es alguien o algo que intercambia información activamente
       con el sistema, proporciona entradas al sistema o recibe pasivamente
       información del sistema
     • Un caso de uso demuestra funcionalidad desempeñada por el sistema
       en respuesta a estímulos de un actor


                                                                            549
Resumen -- Fase de Elaboración
    (cont.)
n   Un escenario es una secuencia de declaraciones expresadas en
    lenguaje natural
     • Es una instancia de un caso de uso

n   Los objetos se identifican al examinar los escenarios y los objetos
    relacionados se agrupan en clases

n   El modelo de dominio inicial se actualiza para contener las clases
    nuevas

n   Las arquitecturas buenas se construyen en capas bien definidas de
    abstracción donde cada capa
     • Representa una abstracción coherente
     • Tiene una interfaz bien definida y controlada
     • Se construye sobre facilidades bien definidas y controladas en niveles
       menores de abstracción
                                                                          550
Resumen -- Fase de Elaboración
    (cont.)
n   La arquitectura se valida al crear una versión ejecutable que:
     • Aplique alguno o todos los comportamientos de los escenarios claves
     • Su código de producción sea de calidad
     • Considere la mayoría, sino todas, las interfaces arquitectónicas claves


n   Un mecanismo clave es una decisión basada en estándares,
    políticas y prácticas comunes de la organización
     • Ejemplo: administración de recursos, persistencia, manejo de errores,
       distribución de objetos y migración




                                                                            551
Resumen -- Fase de Construcción
n   En esta fase, las iteraciones envuelven el ciclo de vida del
    desarrollo de la aplicación
     • El desarrollo se realiza a través de una secuencia de iteraciones

n   Cada iteración se compone de
     • Una valoración del análisis, diseño e implementación actual para
       identificar riesgos críticos sin resolver
     • Los escenarios ilustran los riesgos del modelo actual del análisis y
       diseño, por lo que se extiende a manejar estos riesgos
     • La implementación se extiende para retirar los riesgos identificados
     • Después de que se revisó y probó la implementación, se actualiza el
       modelo del análisis y diseño para reflejar los cambios hechos durante la
       implemetación


n   La siguiente iteración inicia con el modelo actualizado
                                                                              552
Resumen -- Fase de Construcción
    (cont.)
n   Las actividades de esta fase incluyen:
     • La adición de clases al modelo reflejando el “CÓMO” debe
       desarrollarse el sistema
         • Clases de Interface
         • Clases de Controller
         • Clases de Helping

     • Refinamiento de la navegación de relaciones

     • Especificación del tipo de contenido de relación
         • Por referencia
         • Por valor

     • La madurez de algunas relaciones con respecto a su
       dependencia
                                                                  553
Resumen -- Fase de Construcción
    (cont.)
n   Actividades de diseño (continuación)

     • Especificación de tipos de datos de los atributos
     • Especificación de las firmas de las operaciones
     • Adición de operaciones de administración, acceso y ayuda
     • Refinamiento de jerarquías de herencia para incrementar la
       reutilización

     • Adición de funciones virtuales para soportar el polimorfismo
     • Resolución de problemas de herencia múltiple


                                                                      554
555
Bibliografía




               556
Análisis y Diseño
n   G. Booch, Object-Oriented Analysis and Design with Applications,
    Benjamin/Cummings, Redwood City, CA, 1994

n   J. Rumbaugh, et al., Object-Oriented Modeling and Design, Prentice-
    Hall, Englewood Cliffs NJ, 1991

n   I. Jacobson, et al., Object-Oriented Software Engineering, Addison-
    Wesley, Reading, MA, 1992

n   R. Wirfs-Brock et al., Designing Object-Oriented Software, Prentice-
    Hall, Englewood Cliffs NJ, 1990

n   N. Wilkinson, Using CRC Cards, SIGS Books, New York, NY, 1995

n   M. Lorenz, Object-Oriented Software Development, Prentice-Hall,
    Englewood Cliffs NJ, 1993

                                                                          557
Análisis y Diseño
n   G. Booch (edited by ed Eykholt), Best of Booch: Designing
    Strategies, SIGS Books & Multimedia, New York, NY, 1996


n   J. Rumbaugh, OMT Insights: Perspectives on Modeling from the
    Journal of Object-Oriented Programming, SIGS Books & Multimedia,
    New York, NY, 1996




                                                                  558
Diseño de Interfaz de Usuario
n   D. Collins, Designing Object-Oriented User Interfaces,
    Benjamin/Cummings, Redwood City, CA, 1995


n   G. Lee, Object-Oriented GUI Application Development,
    Prentice Hall, Englewood Cliffs, NJ, 1993




                                                             559
Arquitectura
n   E. Rechtin, Systems Architecting: Creating and Building
    Complex Systems, Prentice-Hall, Englewood Cliffs NJ, 1991


n   E. Gamma, et al., Design Patterns: Elements of Reusable
    Object-Oriented Software, Addison-Wesley, 1995


n   D. E. Perry, and A. L. Wolf, Foundations for the Study of
    Software Architecture, ACM Soft. Eng. Notes, 17 (4), Oct.
    1992, pp. 40-52


n   P. Kruchten, The 4+1 View Model of Architecture, IEEE
    Software, November 1995

                                                                560
Software General
n   S. McConnell, Code Complete - A Practical Handbook of
    Software Construction, Microsoft Press, Redmond, WA, 1993


n   J. McCarthy, Dynamics of Software Development, Microsoft
    Press, Redmond, WA, 1995


n   F. P. Brooks, Jr., The Mythical Man-Month, Addison-Wesley,
    Reading, MA, 1995


n   D. Firesmith and E. Eykholt, Dictionary of Object Technology,
    SIGS Books, New York, NY, 1995



                                                                 561
Metrics
n   M. Lorenz and J. Kidd, Object-Oriented Software
    Metrics, Prentice Hall, Englewood Cliffs, NJ, 1994




                                                         562
Administración de Proyectos
n   G. Booch, Object Solutions, Addison-Wesley, Reading,
    MA, 1996




                                                           563
Mecanismos Clave
n   R. Orfali, D. Harkey, and J. Edwards, The Essential Distributed
    Objects Survival Guide, John Wiley & Sons, New York, NY,
    1996


n   D. Barry, The Object Database Handbook, John Wiley & Sons,
    New York, NY, 1996




                                                                 564
Libros Introductorios de C++
n   S. Lippman, C++ Primer, Addison-Wesley, Reading, MA , 1991


n   Stroustrup, C++ Programming Language, Addison-Wesley,
    Reading, MA, 1991


n   P. Winston, On to C++, Addison-Wesley, Reading, MA, 1994


n   S. Davis, C++ for Dummies, IDG Books, Foster City, CA, 1994


n   B. Eckel, Thinking C++, Prentice-Hall, Englewood Cliffs, NJ,
    1995


                                                                   565
Libros Intermedios de C++
n   S. Meyers, Effective C++, Addison-Wesley, Reading MA, 1992

n   R. Murray, C++ Strategy and Tactics, Addison-Wesley, Reading MA,
    1993

n   T. Cargill, C++ Programming Style, Addison-Wesley, Reading MA, 1992

n   R. Martin, Designing Object-Oriented C++ Applications Using the
    Booch Method, Prentice Hall, Englewood Cliffs, NJ, 1995

n   J. Soukup, Taming C++, Addison-Wesley, Reading MA, 1994

n   A. Riel, Object-Oriented Design Heuristics, Addison-Wesley, Reading
    MA, 1996

n   S. Meyers, More Effective C++, Addison-Wesley, Reading MA, 1996

                                                                       566
Libros Avanzados de C++
n   Flaymig, Practical Data Structures in C++


n   Vilot/Booch, C++ Programmer's Power Pack


n   Stroustrup, The Nature and Design of C++, Addison-Wesley,
    Reading, MA, 1994


n   J. Coplien, Advanced C++, Addison-Wesley, Reading, MA, 1992




                                                                567
Problema de Nómina




  Este ejemplo esta basado en la aplicación de nómina encontrado en el libro “Designing
  Object Oriented C++ Applications Using the Booch Method,” Robert C Martin, Prentice-
  Hall, 1995.


                                                                                          568
Declaración del Problema de
    Nómina
n   El sistema consiste de una base de datos de empleados de una compañía
    y sus datos asociados, así como tarjetas de chequeo. Todos los
    empleados se identifican por un número ID único de empleado. El sistema
    debe pagar a cada empleado la cantidad correcta, a tiempo, por el
    método que ellos especifican.


n   Algunos empleados trabajan pagándoseles una cuota por hora. Entregan
    tarjetas de chequeo diariamente que registran la fecha y número de horas
    trabajadas. Si alguno trabaja más de 8 horas, se les paga el 50%
    adicional de su cuota correspondientes por cada hora extra. Los
    empleados por hora reciben su pago cada semana.


n   Otros empleados reciben un salario y aún así entregan sus tarjetas de
    chequeo diariamente, ya que contienen las horas trabajadas. De esta
    manera, el sistema pueda guardar un registro de las horas trabajadas.
    Estos empleados reciben su pago el último día laborable del mes.

                                                                            569
Declaración del Problema de
    Nómina
n   Algunos de los empleados asalariados reciben también una comisión
    basada en sus ventas. De este modo, entregan sus ordenes de compra,
    en donde se reflejan la fecha y monto de la venta. La cuota de comisión
    se determina para cada empleado, siendo esta del 10%, 15%, 25% o
    35%. Los vendedores reciben su pago cada quince días.


n   Inicialmente, el cheque de pago del empleado debe recogerse con el
    Pagador. Los empleados pueden cambiar su método de pago. Pueden
    obtener sus cheques de pago por correo a la dirección postal que deseen
    o pueden solicitar depósito directo en una cuenta de banco de su elección.




                                                                              570
Declaración del Problema de
    Nómina
n   El Administrador de Nómina mantiene actualizada la información del
    empleado. El Administrador de Nómina es responsable de agregar,
    borrar y cambiar la información de los empleados; tal como su
    nombre, dirección, método de pago y clasificación de pago (por hora,
    asalariado, comisionado)


n   La aplicación de nómina se ejecutará cada viernes y el último día
    laborable del mes. Le pagará a los empleados correspondientes en ese
    día. El sistema sabrá en que fecha se les debe pagar a los empleados,
    entonces generará registros de pagos de la última vez que el
    empleado recibió su pago en la fecha especificada.




                                                                            571
572
Solución del Problema Nómina




  Este ejemplo esta basado en la aplicación de nómina encontrado en “Designing Object
  Oriented C++ Applications Using the Booch Method,” Robert C Martin, Prentice-Hall, 1995.




                                                                                             573
Ejercicio: Comportamiento del
    Sistema
n   Usando el problema provisto por el instructor
     n   Dibuje un diagrama de casos de uso


     n   Escriba una definición para cada actor


     n   Para un casos de uso
          • Escriba una breve descripción (dos sentencias máximo)
          • Escriba el flujo de eventos
          • Liste algunos escenarios posibles




                                                                    574
Diagrama de Casos de Uso

                  Hourly
                 Employee




                                                 Salaried
               Time Management
                                                 Employee
Commissioned
  Employee


               Purchase Order
                Management                                  Maintain Employee
                                                                Information


                                   Payroll
                                 Administrator
                                                                 Run Payroll
                                                                                Bank



                                                                                   575
Actores para el Sistema de
    Nómina
n   Empleado por hora
     • Persona que recibe un pago por hora. Pago de tiempo extra (1 1/2 más
       de la cuota por hora) se recibe por todas las horas trabajadas en exceso
       de 40 horas por semana


n   Empleado asalariado
     • Persona que se le paga un salario fijo

n   Empleado comisionado
     • Empleado asalariado que tambien recibe una comision por sus ventas

n   Administrador de nomina
     • Persona responsable del mantenimiento de la informacion de los
       empleados. El administrador genera la nómina


n   Banco
     • Entidad receptora de los pagos de nómina depositados en cuentas
       definidas por los empleados
                                                                            576
Breves Descripciones
n   Mantenimiento de Informacion de Empleado
     • Este caso de uso es iniciado por el Administrador de Nómina.
       Proporciona la capacidad de agregar, modificar, borrar y/o revisar
       la informacion del empleado necesaria para el sistema de nomina


n   Ejecucion de Nómina
     • Este caso de uso es iniciado por el Administardor de Nómina.
       Proporciona un mecanismo para generar los pagos a los
       empleados




                                                                            577
Breves Descripciones
n   Administración de Tiempo
     • Este caso de uso es iniciado por cualquier tipo de Empleado.
       Proporciona la capacidad de registrar, modificar, borrar y/o revisar
       horas trabajadas para una semana específica


n   Administración de Ordenes de Compra
     • Este caso de uso es iniciado por un Empleado Comisionado.
       Proporciona la capacidad de registrar, modificar, borrar y/o revisar
       ordenes de compra




                                                                              578
Flujo de Eventos para el Caso de
    Uso de Mantenimiento de
    Información de Empleado
n   2.1 Pre-condiciones
    Ninguna

n   2.2 Flujo Principal
    Este caso de uso inicia cuando el Administrador de Nómina introduce
    su número id de empleado. El sistema verifica que el número id de
    empleado introducido sea válido. El sistema despliega las actividades
    disponibles y le pide al usuario que seleccione una: ADD, DELETE,
    MODIFY, REVIEW, o QUIT.

    Si la actividad seleccionada es ADD, el A-1: Se desempeña un
    subflujo de New Employee.
    Si la actividad seleccionada es DELETE, el A-2: Se desempeña un
    subflujo de Delete an Employee.
    Si la actividad seleccionada es MODIFY, el A-3: Se desempeña un
    subflujo de Modify an Employee.

                                                                            579
Flujo de Eventos para el Caso de
    Uso de Mantenimiento de
    Información de Empleado
    Si la actividad seleccionada es REVIEW, el A-4: se desempeña un
    subflujo de Review an Employee.
    Si la actividad seleccionada es QUIT, el caso de uso termina.
    El usuario puede cancelar el caso de uso en cualquier punto en el flujo
    de eventos, en el que los cambios no toman lugar para el empleado
    que se está procesando y el caso de uso inicia de nuevo.


n   2.3 Flujos alternos
    A-1: Agregar un Empleado Nuevo
    El sistema generará un número id de empleado y desplegará la
    pantalla del empleado. El sistema llenará el número id del empleado.
    El usuario debe llenar la siguiente información: nombre y dirección del
    empleado. El usuario deberá escribir el tipo de empleado: por hora,
    asalariado o comisionado.

                                                                              580
Flujo de Eventos para el Caso de
Uso de Mantenimiento de
Información de Empleado
Si el tipo de empleado es por hora, el usuario deberá proporcionar el
rango de horas. Si el tipo de empleado es asalariado, el usuario deberá
proporcionar el salario. Si el tipo de empleado es comisionado el usuario
deberá proporcionar el salario y el porcentaje de comisión. El usuario
deberá proporcionar el método de pago: recogerlo con el Pagador,
depósito directo o correo. Si el metodo de pago es depósito directo, el
usuario deberá proporcionar el número de cuenta del banco y su dirección.
Si el método de pago es correo, el usuario deberá proporcionar la
direccion postal. Toda la información es validada por el sistema (E-1)
después de haberla introducido.


Cuando ya se introdujo toda la información, el usuario le pide al sistema
que procese al empleado. El sistema guarda la información para su uso
futuro (E-2) y el caso de uso inicia de nuevo.


                                                                        581
Flujo de Eventos para el Caso de
Uso de Mantenimiento de
Información de Empleado
A-2: Borrar un empleado
El usuario introduce un número de id. El sistema lo valida (E-3) y
despliega la información del empleado. El sistema pide al usuario que
confirme el borrado. Si se confirma, el empleado es borrado del
sistema. Si el borrado no es confirmado, la peticion se cancela. El
caso de uso inicia de nuevo.


A-3: Modificar un Empleado
El usuario introduce un número de id. El sistema lo valida (E-3) y
despliega la información del empleado. El usuario actualiza los campos
requeridos. El sistema verificará la información después de que se
introdujo (E-1). Después de que se han hecho todos los cambios, el
usuario le dice al sistema que procese al empleado. El sistema guarda
la información para uso futuro (E-2) y el caso de uso inicia de nuevo.


                                                                         582
Flujo de Eventos para el Caso de
    Uso de Mantenimiento de
    Información de Empleado
    A-4: Revisar un Empleado
    El usuario introduce un número de id. El sistema lo valida (E-2) y
    despliega la información del empleado. Cuando el usuario indica que
    ya terminó de revisar, el caso de uso inicia de nuevo.

n   2.4 Flujos de excepción
    E-1: Información de empleado invalida. El usuario sabe que se ha
    introducido información invalida. El usuario puede re-introducir la
    información para terminar el caso de uso.

    E-2: El sistema no puede guardar la información del empleado. El
    usuario sabe porque no se puede guardar la información. El caso de
    uso inicia de nuevo.

    E-3: La información del empleado no puede ser desplegada. El
    usuario sabe porque la información no puede ser desplegada. El caso
    de uso inicia de nuevo.
                                                                          583
Flujo de eventos para el Caso de
    Uso de Ejecución de Nómina
n   2.1 Pre-condiciones
    Ninguna


n   2.2 Flujo Principal
    El caso de uso empieza cuando el Administrador de Nómina introduce su
    número id de empleado. El sistema verifica que el número id de
    empleado introducido sea valido y capaz de generar la nómina (E-1). El
    usuario introduce la fecha de nómina y le pide al sistema que genere la
    nómina. El sistema obiente los datos de todos los empleados que deben
    recibir pago la fecha deseada (E-2). El sistema calcula el pago y las
    deducciones legales. Si el método de pago es recogerlo con el Pagador o
    Correo, el sistema imprime un cheque de pago. Si elmétodo de pago es
    depósito bancario, el sistema creará una transacción bancaria. El caso de
    uso termina cuando todos los empleados que deban recibir pago en la
    fecha deseada hayan sido procesados.


                                                                           584
Flujo de eventos para el Caso de
    Uso de Ejecución de Nómina
n   2.3 Flujos Alternos
    Ninguno


n   2.4 Flujos de Excepción
    E-1: Id invalido introducido. El usuario puede re-introducir un número
    id o terminar el caso de uso.
    E-2: La informacion del empleado no puede ser obtenida. El usuario
    sabe porque no se puede obtener la información. El caso de uso i nicia
    de nuevo desde el principio.




                                                                             585
Flujo de Eventos para el Caso de
    Uso de Administración de Tiempo
n   2.1 Pre-condiciones
    Ninguna


n   2.2 Flujo Principal
    El caso de uso inicia cuando el Empleado introduce su número id de
    empleado. El sistema verifica que el número id de empleado
    introducido sea valido (E-1). El sistema despliega las avtividades
    disponibles y le pide al usuario que seleccione una: ADD, DELETE,
    MODIFY, REVIEW, o QUIT.


    Si la actividad seleccionada es ADD, el A-1: Se desempeña un
    subflujo de Add a New Timecard.
    Si la actividad seleccionada es DELETE, el A-2: Se desempeña un
    subflujo Delete a Timecard.

                                                                         586
Flujo de Eventos para el Caso de
Uso de Administración de Tiempo
Si la actividad seleccionada es MODIFY, the A-3: Se desempeña un
subflujo de Modify a Timecard.
Si la actividad seleccionada es REVIEW, el A-4: Se ejecuta un
subflujo de Review a Timecard.
Si la actividad seleccionada es QUIT, el caso de uso termina.


El usuario puede cancelar el caso de uso en cualquier punto del flujo
de eventos y el caso de uso inicia de nuevo.




                                                                        587
Flujo de Eventos para el Caso de
    Uso de Administración de Tiempo
n   2.3 Flujos alternos

    A-1: Agregar una Tarjeta de tiempo nueva
    El sistema desplegara la pantalla de la tarjeta de tiempo. El usuario
    debera llenar la siguiente informacion: numero id de empleado, fecha
    y horas trabajadas.
    Cuando ya se introdujo toda la informacion, el usuario le pide al
    sistema que procese la tarjeta de tiempo. El sistema asocia la tarjeta
    de tiempo con el empleado correcto, guarda la informacion para uso
    futuro (E-2) y el casos de uso inicia de nuevo.

    A-2: Borrar una Tarjeta de tiempo
    El usuario introduce el numero id de empleado y la fecha. El sistema
    retrieves (E-3) y despliega la informacion de la tarjeta de tiempo. Se
    le pregunta al usuario si confirma el borrado. Si lo confirma, se borra
    la tarjeta de tiempo del sistema. Si no se confirma el borrado, se
    cancela la peticion. El casos de uso inicia de nuevo.
                                                                              588
Flujo de Eventos para el Caso de
Uso de Administración de Tiempo
A-3: Modificar Timecard
El usuario introduce el número de id del empleado y la fecha. El
sistema obtiene (E-3) y despliega la información de timecard. El
usuario actualiza el número de horas trabajadas y le pide al
sistema que procese el timecard. El sistema guarda la
información para uso futuro (E-2) y el caso de uso inicia de
nuevo.


A-4: Revisar Timecard
El usuario introduce un número de id del empleado y una fecha.
El sistema obtiene (E-3) y despliega la información de timecard.
El usuario indica que ya finalizó la revisión y el caso de uso inicia
de nuevo.
                                                                    589
Flujo de Eventos para el Caso de
    Uso de Administración de Tiempo
n   2.4 Flujos de Excepción
    E-1: Id introducido no válido. El usuario puede re-introducir un
    número de id o finaliza el caso de uso.


    E-2: El sistema es incapaz de guardar la información de
    timecard. El usuario sabe porque no se puede guardar la
    información. El caso de uso inicia de nuevo.


    E-3: No se puede obtener la información de timecard. El
    usuario sabe porque no se pudo obtener la información. El caso
    de uso inicia de nuevo.


                                                                       590
Flujo de Eventos para el Caso de
    Uso de Administración de la Orden
    de Compra
n   2.1 Pre-condiciones
    Ninguna


n   2.2 Flujo Principal
    Este caso de uso inicia cuando el empleado introduce su número
    de id. El sistema verifica que el número de id sea válido (E-1).
    El sistema despliega las actividades disponibles y pide que
    seleccione una: ADD, DELETE, MODIFY, REVIEW, o QUIT.


    Si la actividad seleccionada es ADD, el A-1: Se desempeña un
    subflujo de agregacion de New Purchase Order.
    Si la actividad seleccionada es DELETE, el A-2: Se desempeña
    un un subflujo de borrado de Delete a Purchase Order.

                                                                   591
Flujo de Eventos para el Caso de
Uso de Administración de la Orden
de Compra
Si la actividad seleccionada es MODIFY, el A-3: Se desempeña
un subflujo de modificación Modify a Purchase Order.

Si la actividad seleccionada es REVIEW, el A-4: Se desempeña
un subflujo de revisión de Purchase Order.

Si la actividad seleccionada es QUIT, el caso de uso termina.



El usuario puede cancelar el caso de uso en cualquier punto del
flujo de eventos, el caso de uso inicia de nuevo.




                                                                  592
Flujo de Eventos para el Caso de
    Uso de Administración de la Orden
    de Compra
n   2.3 Flujos alternos


    A-1: Agregar New Purchase Order
    El sistema despliega la pantalla de orden de compra. El usuario
    debe llenar la siguiente información: número de orden de
    compra, fecha, producto comprado, cantidad de la venta,
    nombre del cliente y dirección del cobro del cliente.


    Cuando se introdujo toda la información, el usuario le pide al
    sistema que procese la orde. El sistema guarda la información
    para uso futuro (E-2) y el caso de uso inicia de nuevo.
                                                                      593
Flujo de Eventos para el Caso de
Uso de Administración de la Orden
de Compra
A-2: Borrar una orden de compra
El usuario introduce un número de id de empleado y un número
de orden de compra. El sistema obtiene (E-3) y despliega la
información de la orden de compra. Se le pide al usuario que
confirme el borrado. Si lo confirma, se borra la orden de compra
del sistema. Si no se confirma, se cancela la petición. El caso de
uso inicia de nuevo.

A-3: Modificar orden de compra
El usuario introduce un número de id de empleado y un número
de orden de compra. El sistema obtiene (E-3) y despliega
información de la orden de compra. El usuario actualiza los
campos necesarios y le pide al sistema que procese la orden de
compra. El sistema guarda la información para uso futuro (E-2) y
el caso de uso inicia de nuevo.

                                                                 594
Flujo de Eventos para el Caso de
    Uso de Administración de la Orden
    de Compra
    A-4: Revisión de la orden de compra
    El usuario introduce el número de id de empleado y el número de
    la orden de compra. El sistema obtiene (E-3) y despliega la
    información de la orden de compra. Cuando el usuario indica que
    ya termino de revisar, el caso de uso inicia de nuevo.

n   Flujos de Excepción
    E-1: Id introducido no valido. El usuario puede re-introducir el
    número de id o finaliza el caso de uso.

    E-2: El sistema es incapaz de guardar la información de la orden
    de compra. El usuario sabe porque no se pudo guardar la
    información. El caso de uso inicia de nuevo desde el principio.

    E-3: La información de la orden de compra no puede ser
    obtenida. El usuario sabe porque no se pudo obtener la
    información. El caso de uso inicia desde el principio.
                                                                       595
Algunos Escenarios para el Caso
de Uso de Mantenimiento de la
Información de Empleado
 n   Crear un empleado por hora

 n   Crear un empleado comisionado

 n   Crear un empleado asalariado

 n   Cambiar una categoria de pago de empleado

 n   Cambiar un método de entrega de pago de empleado

 n   Cambiar otra informacion de empleado

 n   Revisar informacion de empleado

 n   Borrar un empleado

                                                        596

Diapositivas inge soft 2

  • 1.
    ANÁLISIS Y DISEÑO ORIENTADOA OBJETOS CON UML 1
  • 2.
    Auditorio y Objetivos n Dirigido a n Personas con la necesidad de aprender las características y métodos de la tecnología de objetos, principalmente aquellas que desarrollan sistemas complejos. n Objetivos n Al finalizar el curso, los participantes podrán: • Explicar el proceso de desarrollo iterativo e incremental • Definir los requerimientos de un sistema desde el punto de vista del usuario • Crear un modelo orientado a objetos del comportamiento y de los aspectos estructurales de los requerimientos de un sistema • Crear una arquitectura lógica de un sistema • Diseñar un sistema aplicando los conceptos de abstracción, encapsulamiento, herencia, polimorfismo y patrones 2
  • 3.
    Contenido n Introducción • Antecedentes del análisis y diseño orientado a objetos y UML n Desarrollo Iterativo e Incremental • Ciclo de vida del desarrollo de sistemas por medio de una aproximación iterativa e incremental n Comportamiento del Sistema • Análisis de requerimientos a través de Casos de Uso (Use case) • Desarrollo de escenarios n Objetos y Clases • Definición de objetos, clases, estereotipos y paquetes 3
  • 4.
    Contenido n Interacción de Objetos • Representación gráfica del escenario n Definición de Clases • La aplicación del análisis de Casos de Uso para definir clases en el sistema • Definición de paquetes • Creación de diagramas de clase n Relaciones • Definición de relaciones necesarias para la interacción de objetos n Operaciones y Atributos • Definición de la estructura y comportamiento de una clase 4
  • 5.
    Contenido n Herencia • Aplicación de los principios de generalización y especialización para definir relaciones de superclase/subclase n Comportamiento de Objetos • Desarrollo de diagramas de transición de estado para mostrar gráficamente el comportamiento de un objeto n Homogeneización • Mezclar clases descubiertas en diferentes Casos de Uso n Arquitectura • Discusión de la Arquitectura “4+1” Vistas 5
  • 6.
    Contenido n Mecanismos Clave • Discusión de estrategias de mecanismos clave • Designación de clases • Diseño de la interfaz de usuario • Incorporación de patrones n Diseño de relaciones • Soporte C++ para relaciones n Diseño de Atributos y Operaciones • Soporte C++ para atributos y operaciones n Diseño para Herencia • Soporte C++ para herencia 6
  • 7.
    Contenido n Resumen • Resumen del curso de análisis y diseño n Lectura recomendadas • Lista de libros n Planteamiento del Problema de Nómina • Requerimientos para un sistema de nómina n Solución del Problema Nómina • Elaboración del análisis y diseño para el problema de nómina 7
  • 8.
  • 9.
    Objetivos: Introducción n Usted será capaz de: • Explicar la crisis del software • Discutir el poder de la tecnología de objetos • Discutir dónde puede emplearse la tecnología OO • Definir análisis y diseño • Explicar el origen del UML 9
  • 10.
    La Crisis delSoftware n El Departamento de Vehículos a Motor de California invirtió más de $43 mdd en un sistema que fusionaba los Sistemas de Licencias a Conductores del estado y el Registro de Vehículos • El sistema fue abandonado sin haberlo usado n American Airlines realizó sin éxito un esfuerzo de $165 mdd para ligar su software de reservación de vuelos con los sistemas de reservación de Marriott, Hilton y Budget n El sistema de control de equipaje del Aeropuerto de Denver costó millones de dólares, sobretodo debido al retraso en la abertura del aeropuerto Fallas de software reportadas por W. Wayt Gibbs en el numero de Septiembre de 1994 de la revista Scientific American Algunos ejemplos extremos, PERO hay varios desastres similares en escala menor 10
  • 11.
    La Crisis delSoftware (cont.) n En Marzo de 1989, Arthur Andersen reportó • Más de $300 mil mdd por año invertidos en actividades de software comercial en los Estados Unidos • Sólo el 8% del software entregado brinda resultados y funciona n ¿Cuáles son las razones de la crisis del software? • Constantes cambios en los requerimientos • Fallas en el manejo de riesgos • Complejidad del software 11
  • 12.
    Cambios en losrequerimientos n Los requerimientos del negocio se definen en ciclos de desarrollo más pequeños • Los usuarios esperan más en términos de flexibilidad n Los requerimientos iniciales generalmente están pobremente definidos 12
  • 13.
    Fallas en elManejo de Riesgos n El ciclo de vida en cascada puede retrasar la identificación del problema n No hay prueba de que el sistema funcionará, sino hasta el final del ciclo de vida n El resultado, el máximo riesgo 13
  • 14.
    Complejidad del Software n Está creciendo la demanda de software de negocios n Nadie entiende el sistema en su totalidad n Deben mantenerse los sistemas anteriores, pero los desarrolladores de los mismos ya se han ido 14
  • 15.
    Poder de laTecnología de Objetos n Un paradigma único • Los usuarios, analistas, diseñadores e programadores utilizan el mismo lenguaje n Facilita la re-utilización de arquitectura y código n Los modelos reflejan de manera más cercana al mundo real • Describe con mayor precisión los procesos y datos • Descomposición basada en partición natural • Más fácil de entender y mantener n Estabilidad • Un cambio en los requerimientos no significa cambios masivos en el sistema en desarrollo 15
  • 16.
    Ejemplo: Ventas Orden Objeto Medio de entrega 16
  • 17.
    Diagrama de Clasesde Ventas Ventas Vendedor Cliente Producto Vehiculo Corporativo Individual Trailer Tren 17
  • 18.
    Efecto en elCambio de Requerimientos Ventas Vendedor Cliente Producto Vehiculo Corporativo Individual Trailer Tren 18
  • 19.
    ¿Dónde se estáusando OO? n Sistemas basados en GUI • La metodología OO facilita el diseño e implementación de sistemas con interfaz gráfica de usuario (GUI) 19
  • 20.
    ¿Dónde se estáusando OO? n Sistemas Inmersos • Los métodos OO permiten desarrollar sistemas inmersos y de tiempo real con mayor calidad y flexibilidad 20
  • 21.
    ¿Dónde se estáusando OO? n Cómputo Cliente/Servidor • La metodología OO pude encapsular información de mainframe en objetos, permitiendo obtener aplicaciones pequeñas Plataformas PC Estación de Trabajo BD con interfaz de objetos y aplicaciones existentes 21
  • 22.
    ¿Dónde se estáusando OO? n En la Re-ingeniería • Los métodos OO permiten hacer re-ingeniería a partes del sistema, protegiendo las inversiones hechas en aplicaciones de software existentes Software Existente Software con Re-ingeniería 22
  • 23.
    Análisis y DiseñoOrientado a Objetos OOA OOD Desarrollo del modelo Agregar decisiones de de requerimientos diseño y de detalle Perspectiva del Usuario Perspectiva del Desarrollador 23
  • 24.
    ¿Qué es UML? n El Lenguaje de Modelado Unificado (Unified Modeling Language, UML) es descrito en “The Unified Modeling Language for Object-Oriented Development” escrito por Grady Booch, Jim Rumbaugh, e Ivar Jacobson • Disponible en http:www.rational.com n Basado en las experiencias personales de los autores n Incorpora contribuciones de otras metodologías n Sometido aprobación a la OMG por Rational Software, Microsoft, Hewlett-Packard, Oracle, Texas Instruments, MCI Systemhouse y otros 24
  • 25.
    Entradas al UML Booch Rumbaugh Jacobson Fusion Meyer Descripción de operaciones, Antes y después de Numeración de mensajes las condicioones Harel Mapas de estado UML Embley Clases únicas, Vista de alto-nivel Gamma, et.al Wirfs-Brock Estructura del trabajo, patrones, notas Responsabilidades Shlaer - Mellor Odell Ciclos de vida de objetos Clasificación 25
  • 26.
    Evolución del UML Sometido a OMG, Julio´97 UML 1.1 Industrialización Publicación del UML 1.0 Estándar 1.0 Dic´96 Estandardización Retro- Junio´96 & Oct´96 UML 0.9 & 0.91 alimen- tación Experto en UML OOPSLA ´95 Unified Method 0.8 Unificación Booch´93 OMT-2 Fragmentación Otros métodos Booch´91 OMT-1 OOSE 26
  • 27.
    Beneficios de UML n Ofrece un proceso de modelado sin fallas durante el análisis, para diseñar la implementación n Define una notación expresiva y consistente • Facilita la comunicación con otros • Ayuda a señalar omisiones e inconsistencias • Soporta tanto análisis como diseño de pequeños y grandes sistemas 27
  • 28.
  • 29.
    Desarrollo Iterativo eIncremental 29
  • 30.
    Objetivos: Desarrollo Iterativoe Incremental n Usted podrá: • Definir un proceso de desarrollo iterativo e incremental • Listar las fases, los productos y las actividades principales para cada fase de un proceso de desarrollo iterativo e incremental • Definir una iteración y listar sus actividades 30
  • 31.
    ¿Qué es DesarrolloIterativo e Incremental? n Desarrollo iterativo e incremental es el proceso de construir sistemas de software en pasos pequeños n Beneficios • Reducción del riesgo basándose en la retroalimentación temprana • Mayor flexibilidad para acomodar requerimientos nuevos o cambios en los mismos • Incremento de la calidad del software 31
  • 32.
    Ciclo de vidadel Software n El ciclo de vida del software se divide en una serie de ciclos de desarrollo, donde la salida de un ciclo de desarrollo es la generación de un producto de software n Cada ciclo es una sucesión de fases • Inicio • Elaboración • Construcción • Transición Inicio Elaboración Construcción Transición tiempo 32
  • 33.
    Fase de Inicio n Propósito: • Establecer casos de uso de un sistema nuevo o para la actualización importante de un sistema existente n Productos requeridos: • Requerimientos esenciales para el proyecto • Valoración del riesgo inicial n Productos opcionales: • Un prototipo conceptual • Un modelo inicial del dominio (avance de un 10% - 20%) 33
  • 34.
    Fase de Elaboración n Propósito • Analizar el dominio del problema • Establecer una base arquitectónica sólida • Manejar los elementos de mayor riesgo del proyecto • Desarrollar un plan comprensivo que muestre como se completará el proyecto 34
  • 35.
    Fase de Elaboración(cont.) n Productos • Un modelo del comportamiento del sistema, que incluya el contexto del sistema, escenarios y un modelo del dominio (avance de un 80%) • Una arquitectura de ejecutables • Una visión del producto base de acuerdo al modelo de dominio • Una valoración revisada del riesgo • Un plan de desarrollo • Criterios de evaluación • Publicar descripciones • Un manual de usuario preliminar (opcional) • Estrategia de prueba • Plan de pruebas 35
  • 36.
    Fase de Construcción n Propósito • Desarrollar un producto de software completo, de forma incremental, que esté en transición a la comunidad de usuarios n Productos • Una serie de ejecutables liberados • Prototipos de comportamiento • Resultados que aseguren calidad • Documentación del sistema y del usuario • Plan de desarrollo • Criterio de evaluación para al menos la siguiente iteración 36
  • 37.
    Fase de Transición n Propósito • Hacer la transición del producto de software a la comunidad de usuario n Productos • Una serie de ejecutables liberados • Resultados que aseguren calidad • Documentación del sistema y del usuario actualizados • Análisis “postmortem” del desempeño del proyecto 37
  • 38.
    ¿Qué es unaIteración? n Una iteración es un loop o ciclo de desarrollo que desemboca en la liberación de un subconjunto del producto final n Cada iteración pasa a través de todos los aspectos del desarrollo del software • Análisis de requerimientos • Diseño • Implementación • Pruebas • Documentación n Cada liberación iterativa es una “pieza” totalmente documentada del sistema final Iteración Iteración de Iteración de Iteración de Iteración de Iteración de Iteración de Iteración de Preliminar Arquitectura Arquitectura Desarrollo Desarrollo Desarrollo Transición Transición 38
  • 39.
    Reducción del Riesgoa través de Iteraciones Define iteración para Riesgos iniciales direccionar los riesgos Ámbito inicial del proyecto mayores Planear y desarrollar la iteración Iteración N Evaluar la iteración Revisar plan del proyecto Riesgos eliminados Revisar riesgos minimizados o nuevos 39
  • 40.
    Planeación de Iteraciones n Identificar y asignar prioridades a los riesgos del proyecto n Seleccionar un pequeño número de escenarios que ejemplifiquen los riesgos de mayor prioridad n Los escenarios seleccionados son utilizados por: • Los desarrolladores, para identificar lo que se va a implementar en la iteración • Los evaluadores, para desarrollar planes y procedimientos de prueba para la iteración n Al final de la iteración • Determinar los riesgos que han sido reducidos o eliminados • Determinar la posibilidad de nuevos riesgos descubiertos • Actualización del plan de iteraciones siguientes 40
  • 41.
    Reunión de todoslos elementos Phases P ro c e ss C o m p o n e n ts I n c e p t io n E la b o ra t i o n C o n s t r u c ti o n T r a n s it i o n R e q u ir e m e n ts A n a l ys is A rc h it e c t u re Level D e s ign C la ss L e v e l I m p le m e n t a ti o n Te s t S u p p o r ti n g A c t iv it i e s P ro je ct M a n a g e m e n t P ro ce s s C o n fig u r a tio n p re l im i n a r y i te ra tio n it e ra ti o n i te ra ti o n i te ra t io n ite ra t io n i te ra t io n i te ra ti o n it e ra ti o n (s ) #1 # 2 . .. #n #n+1 # n + 2 ... #m # m + 1 . .. It e r a t io n s 41
  • 42.
  • 43.
  • 44.
    Objetivos: Comportamiento del Sistema n Usted será capaz de: • Definir el comportamiento de un sistema • Definir los casos de uso y actores • Entender como documentar los casos de uso • Usar un diagrama de casos de uso para mostrar los actores, casos de uso y sus interacciones • Definir escenarios para los casos de uso 44
  • 45.
    ¿Qué es elComportamiento del Sistema? n El comportamiento del sistema es como este actúa y reacciona a su entorno • La actividad aparentemente visible y comprobable de un sistema n El comportamiento del sistema se captura en casos de uso • Describen al sistema, su ambiente y las relaciones entre el sistema y su ambiente 45
  • 46.
    Conceptos Importantes enel Modelado de Casos de Uso n Un actor representa cualquier cosa que interactúa con el sistema Actor n Un caso de uso es una secuencia de acciones que un sistema desempeña y que produce un Caso de Uso resultado observable por un actor 46
  • 47.
    ¿Qué es unModelo de Casos de Uso? n Un modelo de casos de uso es una representación de las funciones intencionales del sistema (casos de uso) y sus alrededores (actores) n El mismo modelo de casos de uso se emplea en el análisis de requerimientos, diseño y pruebas El objetivo principal del modelo de casos de uso es El objetivo principal del modelo de casos de uso es comunicar la funcionalidad y el comportamiento del comunicar la funcionalidad y el comportamiento del sistema hacia el cliente o usuario final sistema hacia el cliente o usuario final 47
  • 48.
    Beneficios de unModelo de Casos de Uso n El modelo de casos de uso n Se utiliza para comunicarse con los usuarios finales y expertos del dominio • Proporciona una etapa previa al desarrollo de sistemas • Asegura el entendimiento mutuo de los requerimientos n Se utiliza para identificar • ¿Quién interactuará con el sistema y qué debe hacer el sistema? • ¿Qué interfaz debe tener el sistema? n Se utiliza para verificar • Que se capturen todos los requerimientos • Que los desarrolladores hayan entendido los requerimientos 48
  • 49.
    Actores n Los actores no son parte del sistema, representan roles que un usuario del sistema puede ejecutar n Un actor puede intercambiar información activamente con el sistema Actor n Un actor puede ser un recipiente pasivo de información n Un actor puede representar a una persona, a una máquina o a otro sistema 49
  • 50.
    Identificación de Actores: Preguntas Útiles n ¿Quién está interesado en cierto requerimiento? n ¿En qué parte de la organización se usará el sistema? n ¿Quién proveerá al sistema con información, la usará y/o borrará? n ¿Quién usará esta función? n ¿Quién le dará soporte y mantenimiento al sistema? n ¿El sistema usa una fuente externa? n ¿Qué actores necesitan los casos de uso? n ¿Puede un actor desempeñar roles diferentes? n ¿Varios actores desempeñan el mismo rol? 50
  • 51.
    Instancias de Actores Insert card 1 2 3 Ivan actúa 4 5 6 como un 7 8 9 * 0 # actor Tom actúa como un actor Modelo de Casos de Uso Actor caso de uso 51
  • 52.
    Un usuario puedeactuar como varios actores Charlie como Insert card 1 2 3 operador 4 5 6 7 8 9 * 0 # Charlie Operador Charlie como cliente Cliente 52
  • 53.
    Límites de losactores y el sistema ¿Límite del sistema? Mantenimiento ATM Sistema ATM Sistema del Banco Cajero 53
  • 54.
    Casos de Uso n Un caso de uso modela un diálogo entre actores y el sistema n Un actor inicia un caso de uso para invocar cierta funcionalidad del sistema Caso de Uso n Un caso de uso es un flujo de eventos completo y significativo n El conjunto de todos los casos de uso, representa todas las formas posibles de uso del sistema 54
  • 55.
    Identificación de Casosde Uso: Preguntas Útiles n ¿Cuáles son las tareas que realiza este actor? n ¿El actor creará, almacenará, cambiará, borrará o leerá información en el sistema? n ¿Qué caso de uso creará, almacenará, cambiará, borrará o leerá esta información? n ¿Necesitará el actor informar al sistema sobre cambios externos repentinos? n ¿Necesitará el actor recibir información en relación a ciertas ocurrencias en el sistema? n ¿El sistema proporciona al negocio el comportamiento correcto? n ¿Qué casos de uso van a darle soporte y mantenimiento al sistema? n ¿Pueden todos los requerimientos funcionales ser ejecutados por los casos de uso? 55
  • 56.
    Fuentes de Informaciónpara los Casos de Uso n Declaración de especificaciones del sistema n Definición del problema a resolver n Literatura relevante al dominio n Entrevistas con expertos del dominio n Conocimiento personal del dominio o experiencia n Sistemas Anteriores o Legados 56
  • 57.
    Diagrama Casos deUso n Se dibuja un diagrama de casos de uso para ilustrar los casos de uso y los actores que interactúan enviándose estímulos el uno al otro Transacciones del Banco Cliente Banco Ejecución de Reportes Operador de ATM Mantener Máquina ATM 57
  • 58.
    Documentación de unCaso de Uso n Los casos de usos se documentan con: n Una breve descripción • Se expone el propósito del caso de uso en unas cuantas líneas n Flujo de eventos detallado • Descripción del flujo primario y los flujos alternos de eventos que ocurren desde el inicio el casos de uso n La documentación debe leerse como un diálogo entre el actor y el caso de uso n Ambas partes de la documentación deben estar escritos en términos que el cliente entienda 58
  • 59.
    Flujo de Eventosen un Caso de Uso n Cada caso de uso • Tiene una secuencia de transacciones normal o básica • Debe tener varias secuencias alternativas de transacciones • Generalmente tiene secuencias de excepción a transacciones que manejan situaciones erróneas • También debe tener pre y post condiciones bien definidas 59
  • 60.
    Flujo de Eventosen un Caso de Uso (cont.) n Describe sólo los eventos que pertenecen al caso de uso, y no lo que ocurren en otros casos de uso n Evitar el uso de terminología vaga como: “por ejemplo”, “etc.” e “información” n El flujo de eventos deberá describir: • ¿Cómo y cuándo inicia y termina el caso de uso? • ¿Cuándo interactúa el caso de uso con los actores? • ¿Qué información se intercambia entre un actor y el caso de uso? • No describe los detalles de la interfaz de usuario • Describe el flujo básico de eventos • Cualquier flujo de eventos alterno 60
  • 61.
    ¿Quién lee ladocumentación asociada a los Casos de Uso? n Clientes: aprueban lo que el sistema debe hacer n Usuarios: ganan entendimiento del sistema n Desarrolladores: documento de comportamiento del sistema n Examinadores: examinan el flujo de eventos n Analistas o Diseñadores: proporciona las bases para el análisis y diseño n Evaluador: se usa como base para la prueba de requerimientos n Líder de Proyecto: proporciona elementos para la planeación de proyectos n Escritor Técnico: base para la escritura de la guía de usuario 61
  • 62.
    Ejemplo: Inscripción aCursos n Al inicio de cada semestre, los alumnos solicitan un catálogo que contiene la lista de los cursos que se impartirán en el semestre, en el cual se incluyen también datos relacionados como: profesor, departamento y pre-requisitos. n El sistema nuevo deberá permitir que los alumnos seleccionen cuatro cursos para el semestre que inicia. Además, cada alumno indicará dos cursos alternativos en caso de que no pueda ser asignada la primera selección. Los nuevos cursos tendrán un máximo de diez alumnos y un mínimo de tres. Un curso con menos de tres alumnos será cancelado. Una vez que el proceso de inscripción se ha completado para un alumno, el sistema de registro envía la información al sistema de cobros, para que el alumno pueda pagar por el semestre. 62
  • 63.
    Ejemplo: Inscripción aCursos (cont.) n Los profesores deben ser capaces de ingresar al sistema para indicar que cursos van a impartir. También podrán ver qué alumnos están inscritos en sus cursos. n Para cada semestre, hay un periodo en el que los alumnos pueden cambiar su horario. Los alumnos deben ser capaces de ingresar al sistema durante este tiempo para agregar o cancelar cursos. 63
  • 64.
    Diagrama de casosde uso Sistema de Cobro Petición de Catálogo de Inscripción a Cursos Curso Profesor Alumno Selección de Cursos a Impartir Mantener Información de Profesor Mantener Información de Cursos Mantener Información de Alumno Administrador Generar Catálogo 64
  • 65.
    1. Breve Descripción:Caso de Uso Inscripción a Cursos 1.1 Breve Descripción n Este caso de uso es iniciado por un alumno. Proporciona la capacidad para que un alumno cree, borre, modifique y/o revise un horario de curso para un semestre dado. 65
  • 66.
    2. Flujo deEventos: Casos de Uso Inscripción a Cursos 2.1 Pre-condiciones Ninguna 2.2 Flujo Principal Este casos de uso inicia cuando un alumno introduce el numero de id de alumno. El sistema verifica que el número de id de alumno sea valido (E-1) y permite que el alumno seleccione el semestre actual o uno futuro (E-2). El sistema permite que el alumno seleccione la actividad deseada: Crear, Revisar, Modificar, Imprimir, Borrar o Salir. Si la actividad seleccionada es: A-1 Crear: Subflujo Crear un Horario Nuevo. A-2 Revisar: Subflujo Revisar un Horario. A-3 Modificar: Subflujo Modificar un Horario. A-4 Imprimir: Subflujo Imprimir un Horario. A-5 Borrar: Subflujo Borrar un Horario. Salir: termina el caso de uso. 66
  • 67.
    2. Flujo deEventos: Casos de Uso Inscripción a Cursos (cont.) 2.3 Flujos Alternos A-1 Crear: Subflujo Crear un Horario Nuevo: El sistema despliega una pantalla de horario en blanco. Los alumnos introducen los 4 cursos primarios y 2 cursos alternativos (E-3). El alumno envía su requerimiento de cursos. Por cada curso primario seleccionado el sistema revisa que se satisfagan los pre- requisitos (E-4) y agrega al alumno al curso si éste está abierto (E-5). El sistema imprime el horario del alumno (E-6) y envía esta información al sistema de cobros para procesarla (E-7). El Caso de Uso inicia de nuevo. A-2 Revisar: Subflujo Revisar un Horario: El sistema recupera (E-8) y despliega la información para todos los cursos a los cuales el alumno se registro: nombre del curso, número del curso, número de lugares del curso, días de la semana, hora, lugar y número de horas necesarias. Cuando el alumno indica que el o ella ha terminado su revisión, el Caso de Uso inicia de nuevo. 67
  • 68.
    2. Flujo deEventos: Casos de Uso Inscripción a Cursos (cont.) A-3 Modificar: Subflujo Modificar un Horario: El sistema revisa que la fecha límite para los cambios no haya expirado (E-9). El sistema recupera (E-8) y despliega la siguiente información para todos los cursos a los cuales el alumno se inscribió: nombre del curso, numero del curso, numero de lugares del curso, días de la semana, hora, lugar y número de horas necesarias. El sistema permite que el alumno seleccione la actividad que deseada: Borrar Curso, Agregar Curso o Salir. Si la actividad seleccionada es: A-6 Borrar Curso: Subflujo Borrar un Curso. A-7 Agregar Curso: Subflujo Agregar un Curso. Salir, el sistema imprime el horario del alumno (E-6) y el Caso de Uso inicia de nuevo. 68
  • 69.
    2. Flujo deEventos: Casos de Uso Inscripción a Cursos (cont.) A-4 Imprimir: Subflujo Imprimir un Horario: El sistema imprime el horario del alumno (E-6). El Caso de Uso inicia de nuevo. A-5 Borrar: Subflujo Borrar un Horario: El sistema recupera (E-8) y despliega la información actual del horario. El sistema pide al usuario que confirme la eliminación del horario. Si se confirma, se borra el horario del sistema. Si la eliminación no se confirma, la operación se cancela y el Caso de Uso inicia de nuevo. A-6 Borrar Curso: Subflujo Borrar un Curso: El alumno introduce el número del curso para borrarlo. El sistema pide al usuario que confirme la eliminación del curso. Si se confirma, se borra el curso del horario del alumno. Si la eliminación no se confirma, la operación se cancela y el caso de uso inicia de nuevo. 69
  • 70.
    2. Flujo deEventos: Casos de Uso Inscripción a Cursos (cont.) A-7 Agregar Curso: Subflujo Agregar un Curso: El alumno introduce el número de curso para agregarlo. El sistema revisa que se satisfagan los pre-requisitos (E-4) y agrega el alumno al grupo si el curso esta abierto (E-5). El caso de uso inicia de nuevo. Flujos de Excepción E-1: Se introdujo un número id de alumno inválido. El usuario puede re-introducir el número id o finalizar el caso de uso. E-2: Se introdujo un semestre inválido. El usuario puede re- introducir el semestre o finalizar el casos de uso. E-3: El número de curso no es válido. El usuario puede re- introducir el número válido o finalizar el caso de uso. E-4: Los pre-requisitos no fueron satisfechos por el usuario. Se le informa al alumno que un curso no puede ponerse en el horario y el motivo. De ser posible, se sustituye con un curso alterno. El caso de uso continua. 70
  • 71.
    2. Flujo deEventos: Casos de Uso Inscripción a Cursos (cont.) E-5: E curso seleccionado esta cerrado. De ser posible, se substituye con un curso alterno. El caso de uso continua. E-6: No es posible imprimir el horario. La información se guarda y se le informa al usuario que la petición de impresión del horario debe ser reintroducida. El caso de uso continua. E-7: No es posible enviar la información al sistema de cobro. El sistema guarda toda la información de cobro y la re-envía después al sistema de cobros. El caso de uso continua. E-8: El sistema no puede recuperar la información del horario. El caso de uso inicia nuevamente. E-9: El sistema informa al usuario que no se puede modificar un horario. El caso de uso inicia nuevamente. 71
  • 72.
    ¿Qué son losescenarios? n Un escenario es una instancia de un casos de uso n Es un flujo determinado de eventos en un caso de uso n Cada caso de uso tiene múltiples escenarios n Escenarios primarios (happy path scenarios) • Flujo normal: la forma en la que debe trabajar el sistema n Escenarios secundarios • Excepciones del escenario primarios 72
  • 73.
    Escenario para elCaso de Uso Inscripción a Cursos n John introduce el número id de alumno 369 52 3449 y el sistema lo valida. El sistema pregunta que a semestre desea inscribirse. John le indica al sistema el semestre actual y elige crear un horario nuevo. n De una lista de cursos disponibles, John selecciona los siguientes 4 cursos primarios: English 101, Geology 110, World History 200, y College Algebra 110. Después selecciona 2 cursos alternos: Music Theory 110 y Introduction to Java Programming 180. n El sistema determina que John tiene todos los pre-requisitos necesarios y lo agrega a las listas de los cursos correspondientes. n El sistema indica que la actividad esta completa. El sistema imprime el horario del alumno y envía la información de cobro de cuatro cursos primarios al sistema de cobros para que sea procesado. 73
  • 74.
    Escenarios Secundarios n ¿Qué escenarios secundarios podrían considerarse para el caso de uso: “Inscripción a Cursos”? 74
  • 75.
    Escenarios Secundarios (cont.) n Algunos escenarios secundarios a considerarse: • El alumno no seleccionó los 4 cursos primarios • Algún curso primario no esta disponible • Los cursos primarios y secundarios no están disponibles • No se puede agregar el alumno a la lista de un curso • No se puede crear el horario del alumno 75
  • 76.
    ¿Cuántos escenarios senecesitan? n Respuesta sencilla: tantos como se necesiten para entender el desarrollo del sistema n Sugerencia: n Escenarios Primarios • Dedicar aproximadamente el 80% del tiempo a estos escenarios n Escenarios Secundarios • Elaborar algunos de los escenarios secundarios interesantes y de alto riesgo 76
  • 77.
    Ejercicio: Comportamiento del Sistema n Utilice el problema que proporciona el instructor n Dibujar un diagrama de casos de uso n Escribir una definición para cada actor n Para un caso de uso • Escribir una breve descripción (dos sentencias máximo) • Escribir el flujo de eventos • Listar algunos escenarios posibles 77
  • 78.
  • 79.
  • 80.
    Objetivos: Objetos yClases n Usted podrá: • Definir y dar ejemplos de objetos • Definir y dar ejemplos de clases • Describir las relaciones entre clases y objetos • Definir estereotipos 80
  • 81.
    ¿Qué es unobjeto? n Informalmente, un objeto representa una entidad, ya sea física, conceptual o software • Entidad física Trailer • Entidad conceptual Proceso Químico • Entidad de software Lista Ligada 81
  • 82.
    Una definición másformal n Un objeto es un concepto, abstracción, o cosa con límites bien definidos y significado para una aplicación n Un objeto es algo que tiene: n Estado n Comportamiento n Identidad 82
  • 83.
    Un Objeto tieneEstado n El estado de un objeto es una de las condiciones posibles en las que un objeto puede existir n El estado de un objeto normalmente cambia con el paso del tiempo n El estado de un objeto generalmente se implementa por una serie de propiedades (llamadas atributos), con los valores de las propiedades, más las relaciones que el objeto pueda tener con otros objetos a + b = 10 Nombre: Joyce Clark Empleado ID: 567138 Fecha de contrato: March 21, 1987 Estado: Tenured Profesora Clark 83
  • 84.
    Un Objeto tieneComportamiento n El comportamiento determina como actúa y responde un objeto n El comportamiento define como responde un objeto a peticiones de otros objetos n El comportamiento visible de un objeto se modela por un conjunto de mensajes a los que puede responder (las operaciones que el objeto puede desempeñar) a + b = 10 Asignar al Profesor Clark (Regresa:confirmación) Sistema de Inscripción Curso de Algebra 101 84
  • 85.
    Un Objeto tieneIdentidad n Cada objeto tiene identidad única, aún si el estado es idéntico al de otro objeto Profesor “J Clark” Profesor “J Clark” Profesor “J Clark” imparte Algebra imparte Algebra imparte Algebra 85
  • 86.
    ¿Qué son lasclases? n Hay varios objetos identificados en cualquier dominio n Una clase es una descripción de un grupo de objetos con propiedades comunes (atributos), comportamiento común (operaciones), relaciones comunes con otros objetos (asociaciones y agregaciones) y semánticas comunes. n Un objeto es una instancia de una clase n Una clase es una abstracción en la que ella: n Enfatiza características relevantes n Suprime otras características n La abstracción nos ayuda a manejar la complejidad 86
  • 87.
    Ejemplo de Clase Clase Curso Estructura Comportamiento Nombre Agregar un alumno Ubicación Borrar un alumno a + b = 10 Días ofrecidos Obtener catálogo de cursos Horas de créditos Determinar si está lleno Hora inicio Hora término 87
  • 88.
    Clases de Objetos n ¿Cuántas clases ve? 88
  • 89.
    Relaciones entre Clasesy Objetos n Una clase es una definición abstracta de un objeto • Define la estructura y comportamiento de cada objeto en la clase • Sirve como una plantilla para crear objetos n Los objetos pueden agruparse en clases Objetos Profesor Profesor Smith Profesor Mellon Clase Profesor Jones 89
  • 90.
    Guía para identificarClases n Una clase debe capturar una y solo una llave de abstracción n Mala abstracción: la clase Alumno sabe la información del alumno y su horario para el semestre actual n Buena abstracción: Separar las clases en una para alumno y otra para Horario del alumno Algebra 101 Art History Chemistry Spanish 101 90
  • 91.
    ¿Cómo nombrar auna Clase? n El nombre de una clase debe ser un nombre en singular que caracterice de la mejor forma a la abstracción n La dificultad al nombrar a una clase puede indicar que una abstracción está pobremente definida n Los nombres deben venir directamente del vocabulario del dominio 91
  • 92.
    Guía de estilopara nombrar Clases n Una guía de estilo debe dictar convenciones de nombres para clases n Ejemplo de Guía de Estilo n Las clases se nombran usando sustantivos en singular n Los nombres de clases empiezan con una letra mayúscula n No se usan palabras subrayadas • Los nombres compuestos de palabras múltiples se ponen juntas y la primera letra de cada palabra adicional se escribe en mayúscula n Ejemplo: Alumno, Profesor, SistemaCobro 92
  • 93.
    Definición de Semánticade Clases n Después de nombrar una clase, se debe hacer una breve y concisa descripción de la clase • Enfocarse en el propósito de la clase y no en la implementación n El nombre de la clase y la descripción forman la base de un diccionario del modelo Busque el “QUÉ” y no el “CÓMO” Busque el “QUÉ” y no el “CÓMO” 93
  • 94.
    Ejemplo de Entradasal Diccionario del Modelo n Nombre: StudentInformation • Definición: Información relacionada a una persona registrada para asistir a clases en la Universidad n Nombre: Course • Definición de Trabajo: Una clase ofrecida por la Universidad Al ir estudiando más el problema, se descubren clases y se Al ir estudiando más el problema, se descubren clases y se mejoran las definiciones de las anteriores, agregándolas al mejoran las definiciones de las anteriores, agregándolas al diccionario del modelo diccionario del modelo 94
  • 95.
    Representación de Clases n Una clase se representa usando un rectángulo con tres divisiones a + b = 10 Professor Profesor Clark 95
  • 96.
    Divisiones de Clase n Una clase comprende tres secciones n La primera sección contiene el nombre de la clase n La segunda sección muestra la estructura (atributos) n La tercera sección muestra el comportamiento (operaciones) n La segunda y tercera sección pueden suprimirse si no es necesario que sean visibles en el diagrama Professor Professor Professor Professor name name empID empID create( ) create( ) save( ) save( ) delete( ) Professor delete( ) change( ) change( ) 96
  • 97.
    Estereotipos n Un estereotipo es un nuevo tipo de elemento de modelado que extiende la semántica del metamodelo • Deben estar basados en tipos o clases existentes en el metamodelo n Cada clase puede tener como máximo un estereotipo n Estereotipos comunes • Clase Boundary • Clase Entity • Clase Control • Clase Exception • Metaclase • Clase Utility n Los Estereotipos se muestran en la parte donde se escribe el nombre de la clase entre << >> 97
  • 98.
    Clases Boundary n Una clase boundary modela la comunicación entre los alrededores del sistema y sus funciones internas n Clases boundary típicas • Windows (interfaz de usuario) • Protocolo de Comunicación (interfaz del sistema) • Interfaz de impresora • Sensores n En el escenario de “Inscripción a Cursos”, se crea una pantalla de horario (ScheduleForm) para aceptar información del usuario <<boundary>> ScheduleForm 98
  • 99.
    Interfaz con otrossistemas n Una clase boundary se usa también para modelar una interfaz con otro sistema n Las características importantes de este tipo de clases son: • La información que va a pasarse al otro sistema • El protocolo de comunicación que se use para “hablar” con el otro sistema n En el escenario “Inscripción a Cursos”, la información debe enviarse al sistema de cobros (BillingSystem) • Se crea una clase llamada BillingSystem para mantener la interfaz del sistema externo <<boundary>> BillingSystem 99
  • 100.
    Clases Entity n Una clase entity modela información y comportamiento asociado que es generalmente de larga vida (persistente) • Puede reflejar un fenómeno de la vida real • También puede necesitarse para las tareas internas del sistema • Los valores de sus atributos son proporcionados generalmente por un actor • Su comportamiento es independiente de los alrededores n Clases entity en el caso de uso “Inscripción a Cursos” • Course • Schedule <<entity>> <<entity>> CourseRoster Course • Catalogue • CourseRoster <<entity>> <<entity>> Schedule Catalogue 100
  • 101.
    Clases Control n Una clase control modela el comportamiento de control específico a uno o más casos de uso n Una clase control • Crea, inicia y borra objetos controlados • Controla la secuencia o coordinación de ejecución de objetos controlados • Controla elementos actuales para clases controladas • Es, la mayor parte de las veces, la implementación de un objeto intangible n En el escenario “Inscripción a Cursos”, la clase RegistrationManager controla el proceso de inscripción <<control>> RegistrationManager 101
  • 102.
  • 103.
  • 104.
    Objetivos: Interacción deObjeto n Usted podrá: • Usar diagramas de secuencia y colaboración para mostrar las interacciones de los objetos 104
  • 105.
    ¿Qué es unDiagrama de Interacción? n Un diagrama de interacción es una representación gráfica de las interacciones entre objetos n Hay dos tipos de diagramas de interacción • Diagramas de Secuencias • Un diagrama de secuencias están ordenado de acuerdo al tiempo • Diagramas de Colaboración • Un diagrama de colaboración incluyen el flujo de datos • Cada uno provee un punto de vista diferente de la misma interacción 105
  • 106.
    ¿Qué es unDiagrama de Secuencias? n Un diagrama de secuencia muestra interacciones de objetos ordenados en el tiempo n El diagrama muestra • Los objetos que participan en la interacción • La secuencia de mensajes intercambiados n Un diagrama de secuencias contiene: • Objetos con sus “líneas de vida” • Mensajes intercambiados entre objetos en orden secuencial • Enfoque de control (Focus of Control) (opcional) 106
  • 107.
    Un Diagrama deSecuencias forma de forma de cursos John : Inscripción horario disponibles Alumno 1: introducir id 2: validar id 3: introducir semestre actual 4: crear horario nuevo 5: desplegar 6: obtener cursos 107
  • 108.
    ¿Cómo nombrar alos Objetos en un Diagrama de Secuencias? n Los objetos se dibujan como rectángulos con los nombres subrayados n Las “líneas de vida” se representan con líneas de guiones descendentes cursos Cursos : Catálogo : Catálogo disponibles disponibles Objetos Objetos y Clases Clases 108
  • 109.
    Mostrar las interaccionesentre objetos n La interacción de objetos se indica con flechas horizontales que se dirigen desde la línea vertical que representa al objeto cliente hasta la línea que representa al objeto proveedor n Las flechas horizontales se etiquetan con un mensaje n El orden en que ocurren los mensajes es indicado por la posición vertical, con el más cercano en la parte superior n La numeración es opcional, ya que la orden se basa en la posición vertical forma de cursos horarios disponibles Obtener cursos 109
  • 110.
    ¿Qué es elEnfoque de Control? n El Enfoque de Control representa el tiempo relativo en el que el flujo de control se enfoca sobre un objeto • Representa el tiempo en que un objeto dirige sus mensajes n El Enfoque de Control puede mostrarse en un diagrama de secuencia 110
  • 111.
    Enfoque de Control forma de forma de cursos inscripción horario disponibles John : Student 1: introducir id 2: validar id 3: introducir semestre actual 4: crear nuevo horario 5: desplegar 6: obtener cursos 111
  • 112.
    Notas n Las notas pueden agregarse para agregar más información al diagrama cursos disponibles para el semestre elegido forma de cursos horario disponibles obtener cursos 112
  • 113.
    Scripts en Diagramasde Secuencias n Para escenarios complejos, los diagramas de secuencias pueden ser mejorados mediante el uso de scripts n Un script se escribe a la izquierda de un diagrama de secuencia con la secuencia de pasos alineados a las interacciones del objeto n Los scripts se pueden escribir en lenguaje natural o en pseudo código 113
  • 114.
    Ejemplo de Script forma de un curso horario Procesa los cursos primarios obtener prerequisito y solo recurre a los cursos alternos si es necesario 114
  • 115.
    Diagramas de Colaboración n Un diagrama de colaboración es una forma alternativa de representar el intercambio de mensajes de un conjunto de objetos n El diagrama muestra las interacciones organizadas entorno a los objetos y a sus relaciones n Un diagrama de colaboración contiene: • Objetos • Ligas entre objetos (relaciones) • Mensajes intercambiados entre objetos • Flujo de datos entre objetos, si hay alguno 115
  • 116.
    Ejemplo de unDiagrama de Colaboración 2: validar id 1: introducir id 3: introducir semestre actual registration form 4: crear nuevo horario John : Alumno 5: desplegar clases disponibles forma horario 6: obtener cursos 116
  • 117.
    Representación de Objetosen un Diagrama de Colaboración n Los objetos se dibujan como rectángulos con nombres subrayados Ingles Ingles 101: :Curso 101 Curso Objetos Objetos y Clases Clases 117
  • 118.
    Representación de Ligasen un Diagrama de Colaboración n Una liga de interacción en un diagrama de colaboración se representa como una línea que conecta iconos de objetos n Una liga indica que hay una ruta de comunicación entre objetos conectados formaHorario : Forma un curso : Curso 118
  • 119.
    Anotaciones de Liga n Una liga de interacción en un diagrama de colaboración se puede anotar con: • Una flecha apuntando del objeto cliente al objeto proveedor • El nombre del mensaje con una lista opcional de parámetros y/o valores de retorno • Un número opcional que muestre el orden relativo en el cual se envían los mensajes 119
  • 120.
    Notación de Liga Mensaje Message Mensaje points from client to supplier 2: obtener cursos Objeto Client object 1: obtener prerequisitos formaHorario : Forma lista curso un curso : Curso Data return Liga Objeto Supplier object 120
  • 121.
  • 122.
  • 123.
    Objetivos: Identificación deClases n Usted podrá: • Discutir el análisis de casos de usos • Identificar objetos y clases llevando a cabo el análisis casos de usos • Usar tarjetas CRC para descubrir clases • Diagramar un escenario usando diagramas de interacción • Crear paquetes • Crear diagramas de clase iniciales 123
  • 124.
    ¿Qué es unAnálisis Casos de Uso? n El análisis casos de uso es el proceso de estudiar los casos de usos para descubrir objetos y clases para el desarrollo del sistema • Los escenarios se detallan y se representan gráficamente en diagramas de interacciones • Se crean clases entity, boundary y control • Las clases se agrupan en paquetes • Se crean diagramas de clases 124
  • 125.
    Identificación de ObjetosEntity n Los objetos entity se identifican al examinar los sustantivos en los escenarios n Los sustantivos encontrados pueden ser: • Objetos • Descripción del estado de un objeto • Entidades externas y/o Actores • Otros 125
  • 126.
    Filtrado de Sustantivos n Cuando se identifican sustantivos, debe estar consciente de que: • Varios términos se pueden referir al mismo objeto • Un término se puede referir a más de un objeto • El lenguaje natural es muy ambiguo n Este acercamiento puede identificar muchos objetos sin importancia • La lista de sustantivos debe filtrarse 126
  • 127.
    Observar los Sustantivos n El siguiente expresión fue escrita para un sistema de bancario • “Los requerimientos legales se tomarán en cuenta” n Si SOLO se consideraran los sustantivos, ¿qué pasaría? Línea principal: Cada sustantivo debe considerarse en el contexto Línea principal: Cada sustantivo debe considerarse en el contexto del dominio del problema -- no puede considerarse por sí mismo del dominio del problema -- no puede considerarse por sí mismo 127
  • 128.
    Escenario: “Crear horario” n John introduce el número id de alumno 369 52 3449 y el sistema valida el número. El sistema pregunta qué semestre. John indica el semestre actual y elige crear un horario. n De una lista de cursos disponibles, John selecciona los cuatro cursos primarios English 101, Geology 110, World History 200, y College Algebra 110. Después selecciona los cursos alternos Music Theory 110 y Introduction to Java Programming 180. n El sistema determina que John tiene todos los pre-requisitos necesarios al examinar el registro del alumno y lo agrega a la lista de los cursos. n El sistema indica que la actividad se ha completado. El sistema imprime el horario del alumno y envía información de cobro para cuatro cursos al sistema de cobro para procesarlo. 128
  • 129.
    Sustantivos del Escenario“Crear Horario” n John n Número de ID 369523449 n Sistema n Número n Semestre n Semestre actual n Horario n Lista de cursos disponibles n Geology 110 n Cursos primarios n College Algebra 110 n English 101 n Cursos alternos n Introduction to Java n Music Theory 110 Programming 180 n Prerequisitos necesarios n World History 200 n Horario de estudiante n Registro de estudiante n Información de cobro n Lista del curso n Cuatro cursos n Actividad n Sistema de cobro ¿Qué sustantivos deben filtrarse? ¿Qué sustantivos deben filtrarse? 129
  • 130.
    Decisiones de Filtrado n John -- filtrado (actor) n Número de ID 369523449 -- filtrado (propiedad del alumno) n Sistema -- filtrado (lo que se está construyendo) n Número -- filtrado (lo mismo que el numero id del alumno) n Semestre -- filtrado (estado -- cuando la selección aplica) n Semestre actual -- filtrado (igual que el semestre) n Horario -- candidato a objeto n Lista de cursos disponibles -- candidato a objeto n Cursos primarios -- filtrado (estado de un curso seleccionado) n English 101 -- candidato a objeto n Geology 110 -- candidato a objeto n World History 200 -- candidato a objeto n College Algebra 110 -- candidato a objeto 130
  • 131.
    Decisiones de Filtrado n Cursos alternos -- filtrado (estado de un curso seleccionado) n Music Theory 110 -- candidato a objeto n Introduction to Java Programming 180 -- candidato a objeto n Prerequisitos necesarios -- filtrado (curso como otros cursos identificados) n Registro de estudiante -- candidato a objeto n Lista del curso -- candidato a objeto n Actividad -- filtrado (Expresión en inglés) n Horario de estudiante -- filtrado (igual que el nuevo horario) n Información de cobro -- candidato a objeto n Cuatro cursos -- filtrado (información necesitada por la información de cobro) n Sistema de cobro -- filtrado (actor) 131
  • 132.
    Candidatos a Objetosen el Escenario n Horario -- lista de cursos por semestre para un alumno n Lista de cursos disponibles -- lista de todos los cursos que se imparten en un semestre n English 101 -- una oferta para un semestre n Geology 110 -- una oferta para un semestre n World History 200 -- una oferta para un semestre n College Algebra 110 -- una oferta para un semestre n Music Theory 110 -- una oferta para un semestre n Introduction to Java Programming 180 -- una oferta para un semestre 132
  • 133.
    Candidatos a Objetosen el Escenario n Registro de estudiante -- una lista de cursos que el alumno tomo en semestres previos n Lista del curso -- lista de alumnos para una oferta de curso específica n Información de cobro -- información que necesita el actor sistema de cobro 133
  • 134.
    Creación de Clases n Los objetos entity encontrados se agrupan en clases • Basado en estructura y/o comportamiento similar n Esto es sólo un intento inicial • Las clases pueden cambiar al examinar más escenarios 134
  • 135.
    Clases Candidatas Entity-- Escenario “Crear Horario” n Horario (Schedule) -- lista de cursos para un semestre para un alumno n Catálogo (Catalogue) -- lista de todos los cursos que se imparten en un semestre n Curso (Course) -- una oferta para un semestre n RegistroEstudiante (StudentRecord) -- lista de cursos previamente tomados n ListaCurso (CourseRoster) -- lista de alumnos para una oferta específica de curso n InformacionCobro (BillingInformation) -- información necesitada por el actor sistema de cobro <<Entity>> <<Entity>> <<Entity>> Course CourseRoster Schedule <<Entity>> <<Entity>> <<Entity>> BillingInformation Catalogue StudentRecord 135
  • 136.
    Identificación de ClasesBoundary n Examinar cada par: actor/escenario y crear clases boundary obvias • Durante el diseño, la clase se refinará en base a los mecanismos de la interfaz de usuario elegida n Ejemplo: • Al alumno se le presentan diferentes opciones en el caso de uso “Inscripción a Cursos” • Se crea una clase boundary llamada RegistrationForm para permitir que el alumno seleccione la opción deseada • El alumno debe introducir información del curso al sistema en el escenario “Crear Horario” • Se crea una clase boundary llamada ScheduleForm para mantener la información que el alumno introduce 136
  • 137.
    Clases Candidatas Boundary-- Escenario “Crear Horario” <<Boundary>> RegistrationForm <<Boundary>> ScheduleForm 137
  • 138.
    Prototipo de Ventana n Los prototipos de ventanas pueden crearse para comunicar la apariencia y percepción de la clase boundary al usuario 138
  • 139.
    Identificación de ClasesBoundary n Las clases boundary también se crean por la comunicación de sistema-a-sistema • Puede ser otro sistema de software o una pieza de hardware (impresoras, alarmas, etc.) n Las clases boundary se agregan para describir el protocolo de comunicación elegido 139
  • 140.
    Clases Candidatas Boundary-- Escenario “Crear Horario” n El horario del alumno se imprime en el escenario “Crear Horario” • Se crea una clase boundary Printer n La información de cobro se envía al Sistema de Cobro en el escenario “Crear Horario” • Se crea una clase boundary BillingSystem <<Boundary>> <<Boundary>> Printer BillingSystem 140
  • 141.
    Identificación de ClaseControl n Las clases control contienen típicamente información secuencial • Precaución: las clases control NO deben desempeñar las responsabilidades que pertenecen típicamente a las clases entity y/o boundary n En este nivel de análisis, una clase control se agrega típicamente para cada caso de uso • Responsable por el flujo de eventos en el caso de uso n Este es sólo un breve inicio • Cuanto más casos de uso y escenarios se desarrollen, pueden eliminarse, dividirse o combinarse las clases de control 141
  • 142.
    Reglas para elCaso de Uso “Inscripción a Cursos” n Se agrega una clase control llamada RegistrationManager • Recibe información de la clase boundary ScheduleForm • Para cada curso seleccionado • Pide los prerequisitos del curso • Revisa para asegurarse de que todos los prerequisitos de un curso se tomaron al preguntar a StudentRecord si un prerequisito de curso se había completado • Sabe que hacer si no se tiene un prerequisito • Pregunta si el curso está abierto • Pide a Course que agregue al alumno (si el curso está abierto) • Sabe que hacer si no están disponibles 4 cursos • Crea los objetos StudentSchedule y BillingInformation • Pide al BillingSystem que envíe la BillingInformation 142
  • 143.
    Clase Candidata Control-- Caso de Uso “Inscripción a Cursos” <<Control>> RegistrationManager 143
  • 144.
    Tarjetas Responsabilidad- Colaboración de Clases n Las clases también pueden descubrirse usando tarjetas responsabilidad-colaboración de clases (Class-Responsibility- Collaboration Cards, CRC) n Introducidas por Ward Cunningham y Kent Beck at OOPSLA en 1989 n Una tarjeta CRC es una tarjeta de 3” x 5” que muestra n El nombre y descripción de la clase n Las responsabilidades de la clase • Conocimiento interno de la clase • Servicios proporcionados por la clase n Los colaboradores para las responsabilidades • Un colaborador es una clase cuyos servicios necesitan una responsabilidad 144
  • 145.
    Tarjeta CRC parala Clase Curso Nombre de Clase Curso Responsabilidades Colaboraciones Servicio proporcionado Agregar un alumno Alumno Conocer los pre-requisitos Conocimineto interno Saber cuando se lleva a cabo Saber donde de lleva a cabo 145
  • 146.
    Una sesión detarjeta CRC n Un grupo de personas ejecutan un escenario n Se crea una tarjeta para cada objeto en el escenario n Se le asigna un grupo de tarjetas a cada participante • La persona se convierte en la “clase” n Los participantes actúan a los escenarios definidos n Se anotan responsabilidades y colaboraciones en las tarjetas n Se crean tarjetas para los objetos descubiertos 146
  • 147.
    Beneficios de lasTarjetas CRC n Al completar más y más escenarios, emergen los patrones de colaboración n Las tarjetas pueden arreglarse físicamente para representar estas colaboraciones cerradas n Esto puede ayudar a identificar jerarquías de generalización/especialización o jerarquías de agregación entre las clases n Las tarjetas CRC son más efectivas para grupos que desconocen las técnicas OO, ya que ellos: • Evitan enfocarse a elementos OOP • Evitan generalización prematura • Fortalecen “object think” 147
  • 148.
    ¿Cómo lo estoyhaciendo? n Las cosas van bien si... • Todas las clases tienen nombre significativos, específicos del dominio • Cada clase tiene un pequeño grupo de colaboradores • No hay clases “indispensables” (una clase que colabora con todos necesita ser redefinida) • La información para cada clase se ajusta bien en una tarjeta de 3X5 • Las clases pueden manejar un cambio en requerimientos n Las cosas van mal si... • Varias clases no tienen responsabilidades • Una sola responsabilidad se le asigna a varias clases • Todas las clases colaboran con todas las clases 148
  • 149.
    Diagramación de Escenarios n Al descubrir objetos y clases, se documentan en diagramas de interacción • Estos diagramas puede ser, un diagrama de secuencias o un diagrama de colaboración n Los diagramas de interacción contienen el flujo de eventos para un escenario dado • Los nombres de objetos son generales • e.g., un alumno en lugar de John • Los nombres de objetos pueden omitirse si no se necesitan para la comunicación • Se agregan notas y/o scripts de ser necesario 149
  • 150.
    Diagrama de Secuenciaspara el Escenario “Crear Horario” :Forma :Forma :Administrador :Catalogo :Student Inscripcion Horario Inscripcion 1: introducir id 2: validar 3: introducir semestre 4: crear 5: desplegar 6: obtener cursos 7:mostrar cursos 8: seleccionar cursos 9: enviar 10: crear horario (alumno, semestre, cursos) 150
  • 151.
    Diagrama de Secuenciaspara el Escenario “Crear Horario”(cont.) :Administrador :Registro :Información :Sistema :Cursos :Horario :Impresora Inscripcion Alumno Cobro Cobro LOOP en todas 11: obtener los pre-requisitos (curso) las ofertas de curso 12: pre-requisitos tomados (curso) 13: disponible ? 14: agregar alumno 15: crear 16: imprimir (horario) 17: crear 18: enviar (información de cobre) 151
  • 152.
    Diagrama de Colaboraciónpara el Escenario “Crear Horario” 7: mostrar ofertas de curso 8: seleccionar ofertas de cursos 9: enviar 6: obtener ofertas de curso : Catalogue : StudentRecord : Alumno : ScheduleForm 2: validar id 10: crear horario 12: tomar pre-requisios (curso) 1: introducir id (alumno, semestre, 3: introducir semestre 5: desplegar ofertas) 4: crear horario 15: crear : Schedule : RegistrationForm 18: enviar (información de pago) : RegistrationManager 17: crear : BillingSystem : CourseOffering 14: agregar alumno (alumno) 13: disponible ? 16: imprimir (horario) 11: obtener pre-requisitos de cursos : BillingInformation : Printer 152
  • 153.
    ¿Qué es unPaquete? n Un paquete es un mecanismo de propósito general para organizar elementos en grupos n El número de clases crecen al analizar los casos de uso y los escenarios • Las clases pueden agruparse en paquetes • Proporcionan la habilidad para organizar el modelo en desarrollo n Un paquete se representa como una carpeta etiquetada Nombre del paquete 153
  • 154.
    Paquetes en elSistema de Inscripción n Las clases en el Sistema de Inscripción se pueden agrupar en tres paquetes: • University Artifacts, Business Rules, e Interfaces n UniversityArtifacts • Schedule, Catalogue, CourseOffering, StudentRecord, CourseRoster, y Billing Information n BusinessRules • RegistrationManager n Interfaces • RegistrationForm, ScheduleForm, BillingSystem, and Printer 154
  • 155.
    ¿Qué es unDiagrama de Clases? n La vista lógica se hace de varios paquetes y clases n Un diagrama de clases es la vista lógica de algunos (o todos) los paquetes y clases • Generalmente hay varios diagramas de clase • El diagrama de clases principal es típicamente una vista lógica de los paquetes a alto nivel n Cada paquete posee su propio diagrama de clases principal n Los diagramas de clases adicionales se agregan como sea necesario • Vista de las clases participando en un escenario • Vista de las clases “privadas” en el paquete • Vista de una clase, sus atributos y operaciones • Vista de una jerarquía de herencia 155
  • 156.
    Diagrama de ClasesPrincipal para el Sistema de Inscripción Interfaces Business Rules University Artifacts 156
  • 157.
    Diagrama de ClasesPrincipal de University Artifacts BillingInformation Catalogue CourseOffering CourseRoster Schedule StudentRecord 157
  • 158.
    Diagrama de ClasesPrincipal de Interfaces BillingSystem Printer RegistrationForm ScheduleForm 158
  • 159.
    Diagrama de ClasesPrincipal de Business Rules RegistrationManager 159
  • 160.
    Ejercicio: Identificación deClases n Tome un caso de uso desarrollado en la lección previa • Diagrame al menos un escenario en un diagrama de interacción • Cree clases entity, boundary y/o control que sean necesarias • Escriba una definición para cada clase n Cree paquetes para el modelo n Coloque las clases descubiertas en paquetes n Cree diagramas de clase iniciales 160
  • 161.
  • 162.
  • 163.
    Objetivos: Relaciones n Usted podrá: • Nombrar los dos importantes tipos de relaciones entre clases: asociación y agregación • Definir asociación y representarla en diagramas de clases • Usar nombres de asociación y nombres de rol para clarificar las asociaciones • Definir y especificar la multiplicidad de una asociación • Definir agregación y representarla en diagramas de clases • Definir y representar una asociación reflexiva o agregada • Usar clases de asociación • Definir calificadores y representarlos en diagramas de clases • Descubrir relaciones a partir de los diagramas de escenario 163
  • 164.
    La Necesidad deRelaciones n Todos los sistemas abarcan varias clases y objetos n Los objetos contribuyen al comportamiento del sistema colaborando unos con otros • La colaboración se realiza a través de las relaciones n Hay dos importantes tipos de relaciones durante el análisis • Asociación • Agregación 164
  • 165.
    Asociaciones n Una asociación es una conexión semántica bi-direccional entre clases • Esto implica que hay una liga entre objetos entre las clases asociadas n Las asociaciones se representan en diagramas de clase por una línea que conecta las clases asociadas n La información puede fluir en cualquier dirección o en ambas direcciones a través de la liga <<control>> <<entity>> RegistrationManager Course 165
  • 166.
    Navegación n Una asociación es una relación bi-direccional • Dada una instancia de RegistrationManager hay un objeto asociado Course • Dada una instancia de Course hay un objeto asociado RegistrationManager <<control>> <<entity>> RegistrationManager Course 166
  • 167.
    Nombrando Asociaciones n Una asociación se debe nombrar para esclarecer su significado n El nombre se representa con una etiqueta que se pone a lo largo de la línea de asociación, entre los iconos de clases n Un nombre de asociación es generalmente un verbo o una frase con verbo <<control>> maneja <<entity>> RegistrationManager Course 167
  • 168.
    Definición de Roles n Un rol denota el propósito o capacidad en la que una clase se asocia con otra n Los nombres de roles son típicamente sustantivos o frases con sustantivo n Un nombre de rol se pone a lo largo de la línea de asociación cerca de la clase que modifica • En uno o en ambos extremos de una asociación se pueden tener roles Person Teacher Course 168
  • 169.
    Asociaciones Múltiples n Puede existir más de una asociación entre dos clases n Si hay más de una asociación entre dos clases se les DEBE de nombrar Person enseña Course esta inscrita en n Las asociaciones múltiples deben cuestionarse 169
  • 170.
    Asociaciones Múltiples (cont.) CourseSelection adds student to Course deletes student from ¿Modelo bueno o malo? ¿Modelo bueno o malo? 170
  • 171.
    Multiplicidad para Asociaciones n Multiplicidad es el número de instancias de una clase relacionada a UNA instancia de otra clase n Para cada asociación, hay dos decisiones de multiplicidad que tomar: una por cada extremo de la asociación n Por ejemplo, en la conexión entre Person jugando el rol maestro y Course n Para cada instancia de Person, varios (i.e., cero o más) Courses deben impartirse n Para cada instancia de Course, exactamente una instancia de Person es maestro 171
  • 172.
    Indicadores de Multiplicidad n Cada extremo de una asociación tiene indicadores de multiplicidad n Indica el numero de objetos que participan en la relación Muchos * Exactamente uno 1 Cero o más 0..* Uno o más 1..* Cero o uno 0..1 Rango específico 2..4 172
  • 173.
    Ejemplo: Multiplicidad n La multiplicidad expone varias hipótesis ocultas sobre el problema que se está modelando n ¿Puede estar un maestro en sabático? n ¿Puede tener un curso dos maestros? Teacher Person Course 1 1..* 173
  • 174.
    ¿Qué significa Multiplicidad? n La multiplicidad debe responder a dos preguntas n ¿La asociación es obligatoria u opcional? n ¿Cuál es el número mínimo y máximo de instancias que pueden ligarse a una instancia? Course Teacher 0..* 1 ¿Qué le dice este diagrama? ¿Qué le dice este diagrama? 174
  • 175.
    Agregación n La agregación es una forma especializada de asociación en la que un todo se relaciona con sus partes • La agregación es conocida como la relación “parte de” o “contiene a” n Una agregación se representa como una asociación con un diamante en el extremo de la liga, del lado de la clase que denota el agregado (todo) n La multiplicidad se representa de la misma manera que otras asociaciones <<boundary>> <<boundary>> RegistrationForm ScheduleForm 1 1 175
  • 176.
    Pruebas de Agregación n ¿Se usa la frase “parte de” para describir relaciones? • Una Puerta es “parte de” un Carro n ¿Se aplican algunas operaciones en el todo y automáticamente a sus partes? • Al mover el Carro, se mueve la Puerta n ¿Se propagan algunos valores de atributos del todo a todas o algunas de sus partes? • El Carro es azul, la Puerta es azul n ¿Hay una asimetría intrínseca a la relación donde una clase se subordina a la otra? • Una Puerta es parte de un Carro, un Carro NO es parte de una Puerta 176
  • 177.
    ¿Asociación o Agregación? n Si dos objetos están estrictamente limitados por una relación complementaria • La relación es un agregación n Si dos objetos se consideran usualmente como independientes, y aún así están ligados • La relación es una asociación Curriculum Course Student 1 1..* 0..* 3..10 Curriculum y Course están muy ligados -- Curriculum está Objetos independientes compuesto de 1 a muchos Courses 177
  • 178.
    Asociaciones Reflexivas n En una asociación reflexiva, se relacionan los objetos de la misma clase • Indica que múltiples objetos en la misma clase colaboran juntas en otra forma Course 0..* Pre-requisite 0..* Un curso puede tener muchos pre-requisitos Un curso puede ser pre-requisito de otros cursos 178
  • 179.
    Agregaciones Reflexivas n Las agregaciones pueden también ser reflexivas • El tipo de problema clásico de productos y sus partes n Esto indica una relación recursiva 1 ProductPart Un objeto ProductPart está “compuesto de” 0..* cero o más objetos ProductPart 179
  • 180.
    Clase de Asociación n Si quisiéramos rastrear los grados para todos los cursos que un alumno ha tomado, entonces… n La relación entre Student y Course es una relación de muchos-a-muchos n ¿Dónde ponemos el atributo de grado? Student 0..* Course 3-10 180
  • 181.
    Clase de Asociación(cont.) n El atributo grado no puede ponerse en la clase Course porque existen (potencialmente) varias ligas a objetos Student n El atributo grado no puede ponerse en la clase Student porque existen (potencialmente) varias ligas a objetos Course n Por lo tanto, el atributo en realidad pertenece a la liga Student-Course n Una clase de asociación se usa para mantener dicha información 181
  • 182.
    Dibujo de Clasede Asociación n Se crea una clase de asociación usando el icono clase n Se conecta el icono de la clase a la línea de asociación con una línea punteada n La clase de asociación puede incluir múltiples propiedades de la asociación n Sólo se permite una clase de asociación por asociación Student 1..* Course 3-10 grade 182
  • 183.
    Clase de Asociacióny Multiplicidad n Las clases de asociación se emplean en asociaciones de muchos-a-muchos n Si la multiplicidad en cualquiera de los extremos de una asociación es “a-una” n El atributo puede ponerse en la clase donde la relación es “a muchos”, o n Puede aún usarse una clase asociación Student 1 Course grade 3-10 Student 1 Course 3-10 grade 183
  • 184.
    Calificadores n Un calificador es un atributo o grupo de atributos cuyos valores dividen el conjunto de objetos relacionado a un objeto a través de una asociación Department Professor Dado un objeto Department y un EmployeeID valor para un Employee ID hay 1 1 exactamente un objeto Professor Department Professor Dado un objeto Department y un Title valor para Title hay un conjunto de 1 1..* objetos Professor 184
  • 185.
    Restricciones n Una restricción es la expresión de alguna condición que se debe preservar • Una restricción se muestra como una línea punteada {Ordered by Professor employee id} is a member of Department 1..* 1 1 1 {Subset} is head of 185
  • 186.
    Identificación de Asociacionesy Agregaciones n Deben examinarse los escenarios para determinar si una relación debe existir entre dos clases n Dos objetos pueden comunicarse solo si se “conocen” entre ellos n Las asociaciones y/o agregaciones proporcionan una ruta de comunicación aform:Registration aform:Schedule theMgr:Registration Form Form Manager RegistrationForm despliega “habla” con ScheduleForm crea ScheduleForm “habla” con RegistrationManager 186
  • 187.
    ¿Asociación o Agregación? RegistrationFormy ScheduleForm están muy ligadas -- una ScheduleForm es “parte de” la RegistrationForm <<boundary>> <<boundary>> RegistrationForm ScheduleForm 1 1 1 ScheduleForm y RegistrationManager son independientes 1 RegistrationManager 187
  • 188.
    Relaciones de Paquetes n Los paquetes se relacionan unos con otros a través de una relación de dependencia Interfaces n Si una clase en un paquete “habla” con una clase en otro Business Rules paquete entonces se agrega una relación de dependencia al nivel del paquete University Artifacts n Los diagramas de escenario y de clases se evalúan para determinar las relaciones entre paquete 188
  • 189.
    Relaciones en elAnálisis y Diseño n Durante el análisis, se establecen conexiones (asociaciones y agregaciones) entre clases • Estas conexiones existen debido a la naturaleza de las clases y no debido a una implementación específica • Hacer una estimación inicial de multiplicidad para exponer hipótesis ocultas n Los diagramas de clases se actualizan para mostrar las relaciones agregadas n Durante el diseño: • Se refinan y actualizan las estimaciones de multiplicidad • Se avalúan y refinan las asociaciones y agregaciones • Se evalúan y refinan las relaciones de paquetes • Se maduran los diagramas de clases 189
  • 190.
    Actualización del Diagramade Clases Principal para el Sistema de Inscripción Interfaces Business Rules University Artifacts 190
  • 191.
    Actualización del Diagramade Clases de Interfaces <<boundary>> <<boundary>> RegistrationForm ScheduleForm 1 1 1 1 1 <<control>> RegistrationManager 1 (de Business Rules) <<entity>> Catalogue 1 (de UniversityArtifacts) 1 <<boundary>> BillingSystem 191
  • 192.
    Actualización del Diagramade Clases de University Artifacts <<boundary>> <<entity>> ScheduleForm Course (de Interfaces) agrega alumno a 1 0..4 1 1 1 <<control>> RegistrationManager 1 <<entity>> (de Business Rules) Catalogue 1 1 1 accesa Agrega alumno a crea 1 <<entity>> 1 <<entity>> StudentRecord CourseRoster 1 <<entity>> Schedule 192
  • 193.
    Actualización del Diagramade Clases de Business Rules <<entity>> <<boundary>> CourseRoster ScheduleForm (de UniversityArtifacts) (de Interfaces) 1 1 agrega alumno a 1 1 <<boundary>> 1 1 <<controller>> BillingSystem RegistrationManager (de Interfaces) 1 agrega alumno a 1 1 <<entity>> accesa crea 0..4 Course (de UniversityArtifacts) 1 1 <<entity>> <<entity>> StudentRecord Schedule (de UniversityArtifacts) (de UniversityArtifacts) 193
  • 194.
    Ejercicio: Relaciones n Usando los escenarios y diagramas de secuencias generados en lecciones anteriores n Actualizar los diagramas de clases mostrando relaciones entre clases • Asegurarse de que se tomen las decisiones de multiplicidad inicial n Agregar relaciones a los paquetes para el sistema 194
  • 195.
  • 196.
  • 197.
    Objetivos: Operaciones yAtributos n Usted podrá: • Definir operaciones para clases • Definir atributos para clases • Definir encapsulación y establecer sus beneficios • Representar atributos y operaciones en diagramas de clase 197
  • 198.
    ¿Qué es unaoperación? n Una clase engloba un conjunto de responsabilidades que definen el comportamiento de los objetos de esa clase n Las responsabilidades de una clase se llevan a cabo por sus operaciones n Esto no es necesariamente un mapeo de uno-a-uno • Responsabilidad de la clase Producto -- precio de venta • Operaciones para esta responsabilidad • Buscar información de una base de datos • Calcular el precio n Una operación es un servicio que puede ser solicitado desde un objeto al comportamiento de efecto Una operación debe desempeñar una función simple y cohesiva Una operación debe desempeñar una función simple y cohesiva 198
  • 199.
    Las operaciones dependendel dominio n Listar las operaciones relevantes al dominio del problema • Las operaciones de la clase Persona serán diferentes dependiendo de “quién esté preguntando” Perspectiva del Banquero Perspectiva del Doctor recibir renta examinar manejar cuenta tomarMedicina recibir líneaDeCrédito irAlHospital recibirFactura 199
  • 200.
    Nombrando Operaciones n Las operaciones deben nombrarse para indicar su resultado, no los pasos detrás de la operación. n Ejemplos: n calculateBalance() • Pobremente nombrado • Indica que se debe calcular el balance -- esta es una decisión de implementación/optimización n getBalance() • Bien nombrado • Indica solamente el resultado 200
  • 201.
    Nombrando Operaciones (cont.) n Las operaciones deben nombrarse desde la perspectiva del proveedor no del cliente n En una gasolinera, la gasolina se recibe de la bomba n La bomba tiene su responsabilidad a través de una operación -- ¿cómo se le debe llamar? • Nombres adecuados -- dispense(), giveGas() • Nombre malo -- receiveGas() • La bomba da la gasolina -- no recibe la gasolina 201
  • 202.
    ¿Qué es unaoperación primitiva? n Una operación primitiva es una operación que no puede ser implementada usando solamente las operaciones internas de la clase • Todas las operaciones de una clase son típicamente primitivas n Ejemplo: • Agregar un objeto a un conjunto -- operación primitiva • Agregar cuatro objetos a un conjunto -- no primitiva • Se puede implementar con llamadas múltiples a la operación de agregar un objeto a un conjunto 202
  • 203.
    Firma de unaOperación n La firma de una operación consiste en: • Lista de argumentos opcional • Clases o valores de retorno n Durante el análisis NO ES OBLOGATORIO llenar la firma de una operación • Esta información debe completarse en el diseño 203
  • 204.
    Despliegue de Operaciones n Las operaciones se muestran en el tercer compartimiento de la clase Course getPrerequisite () : CourseList 204
  • 205.
    Obteniendo Operaciones apartir de los Diagramas de Interacción n Los mensajes desplegados en los diagramas de secuencias y/o colaboración son generalmente operaciones de la clase receptora n Los mensajes se traducen en operaciones y se agregan al diagrama de clase registration a course registration a course manager manager obtener prerequisito getPrerequisite():CourseList 205
  • 206.
    Descubriendo Clases Adicionales n Si se especifica una firma de operación, es posible descubrir clases adicionales • Argumento en la operación • Clase de retorno n Ejemplo: • getPrerequisite() : CourseList • addStudent(John : StudentInfo) n Las clases adicionales se agregan al modelo • Se despliegan en diagramas de clases cuando sea necesario 206
  • 207.
    Descubriendo Relaciones Adicionales n Los argumentos de una operación y/o la clase de retorno denotan una relación entre la clase que posee la operación y la clase del argumento y/o la clase de retorno n Ejemplo: • La clase CourseRoster tiene una operación addStudent(John: StudentInfo) • Esto implica que hay una relación entre CourseRoster y StudentInfo n Las relaciones adicionales se agregan al modelo • Se despliegan en diagramas de clases cuando sea necesario 207
  • 208.
    ¿Qué es unatributo? n Un atributo es una definición de dato contenido en instancias de la clase n Los atributos no tienen comportamiento -- no son objetos n Los nombres de atributo son sustantivos simples • Los nombres deben ser únicos en la clase n Cada atributo debe tener una definición clara y concisa n Atributos buenos para la clase Alumno • Name -- nombre y apellido • Major -- campo superior de estudios n Atributo malo para la clase Alumno -- selectedCourses • Esta es una relación no un atributo 208
  • 209.
    Valores de Atributo n El valor de atributo está dado por el estado de un objeto particular n Cada objeto tiene un valor para cada atributo definido por su clase n Por ejemplo, para un objeto de la clase Profesor: Sue Smith 567892 Matemáticas Atrinutos Nombre Número de Identificación George Jones Materia que imparte 578391 Biología 209
  • 210.
    Los Atributos dependendel dominio n Listar todos los atributos relevantes para el dominio del problema • Los atributos de una clase Persona serán diferentes dependiendo de “quién esté preguntando” Perspectiva de Banquero Perspectiva de Doctor nombre nombre dirección dirección fechaDeNacimiento fechaDeNacimiento NumeroCuenta altura peso 210
  • 211.
    Despliegue de Atributos n Los atributos se muestran en el segundo compartimiento de la clase <<entity>> Course name description location timeOfDay creditHours getPrerequisite () : Course 211
  • 212.
    Atributos Derivados n Un atributo derivado es un atributo cuyo valor puede calcularse en base al valor de otro(s) atributo(s) • Se usa cuando no hay tiempo suficiente para re-calcular el valor cada vez que sea necesario • Tráfico del desempeño del tiempo de corrida vs. memoria requerida Rectangle length width /area 212
  • 213.
    Tipo de Dato,Atributo y Valor Inicial n Cada atributo tiene: • Tipo de Dato • Valor Inicial (Opcional) n Durante el análisis NO ES OBLIGATORIO completar la definición del atributo • Esta información debe completarse en el diseño 213
  • 214.
    ¿Cómo se descubrenlos atributos? n Se descubren atributos en el flujo de eventos de los casos de uso • Buscar sustantivos que no se consideraron buenos candidatos para clases n Otros se descubren cuando la definición de la clase se crea n Con la ayuda de expertos en el dominio, el cual nos puede proporcionar buenos atributos Sólo modele los atributos que sean relevantes al dominio del problema Sólo modele los atributos que sean relevantes al dominio del problema 214
  • 215.
    Ejemplo: Atributos enel Problema de Inscripción a Cursos n “Cada curso tendrá una descripción” • Un atributo llamado descripción se agrega a la clase Curso Course description 215
  • 216.
    Guía de Estilopara Nombrar Atributos y Operaciones n Una guía de estilo debe dictar convenciones de nombres para atributos y operaciones • Proporciona consistencia a través del proyecto • Conduce a más modelos y código que se puede mantener n Ejemplo • Los atributos y operaciones inician con una letra minúscula • No se usan subrayados • Los nombres compuestos de múltiples palabras se juntan y la primer letra de cada palabra adicional se escribe con mayúsculas 216
  • 217.
    Despliegue de Atributosy Operaciones n Los atributos y/u operaciones deben mostrarse en una clase n Pueden crearse diagramas de clases adicionales para desplegar atributos y operaciones • Las relaciones típicamente no se despliegan en estos diagramas de clase 217
  • 218.
    Encapsulado n Un modo de ver una clase es la que consiste de dos partes: la interfaz y la implementación • La interfaz puede verse y usarse por otros objetos • La implementación es oculta para los clientes n Ocultar detalles de implementación de un objeto se llama encapsulado u ocultamiento de información n El encapsulado ofrece dos tipos de protección: • Protege el estado interno de un objeto al ser capturado por sus clientes • Protege el código del cliente de los cambios en la implementación del objeto 218
  • 219.
    Ejemplo: Encapsulado changeOwnerName Sólo las operaciones proporcionadas por el objeto pueden cambiar los valores de un atributo withdraw accountNumber deposit nameOfBank Las operaciones están provistas para nameOfOwner desplegar valores de atributos que los balance clientes necesitan getBalance Los clientes no pueden modificar generateStatement el estado del objeto directamente 219
  • 220.
    Beneficios del Encapsulado n El código de la operación de un cliente puede utilizar la intefaz de otra clase n El código del cliente no puede tomar ventaja de la implementación de una operación de otra clase n La implementación puede cambiar por los siguientes motivos: • Corregir un defecto • Mejorar el desempeño • Reflejar un cambio de política n El código del cliente no será afectado por los cambios en la implementación, de este modo se reduce el “efecto de rizo (ripple)” en el cual la corrección de una operación fuerza la corrección correspondiente en una operación del cliente n El mantenimiento es más fácil y menos costoso 220
  • 221.
    Ejercicio: Operaciones yAtributos n Actualizar los diagramas de secuencias en lecciones previas y transformar los mensajes en nombres de operaciones concisas, tanto como sea necesario n Crear diagramas de clases mostrando sólo atributos y operaciones n Agregar relaciones adicionales basadas en argumentos de operaciones y/o clases de retorno 221
  • 222.
  • 223.
  • 224.
    Objetivos: Herencia n Usted podrá: • Definir y discutir herencia, generalización y especialización • Representar jerarquías de herencia en diagramas de clases • Entender las técnicas para encontrar herencias • Definir herencia múltiple 224
  • 225.
    Herencia n La herencia define una relación entre clases donde una clase comparte la estructura y/o comportamiento de una o más clases n La herencia define una jerarquía de abstracciones en las que una subclase hereda de una o más superclases • Con la herencia simple, la subclase hereda sólo de una superclase • Con la herencia múltiple, la subclase hereda de más de una superclase n La herencia es una relación del tipo: “es una” o “tipo de” 225
  • 226.
    Dibujo de unaJerarquía de Herencia RegistrationUserInfo Superclase Relación de Herencia StudentInfo Subclase 226
  • 227.
    Consideraciones de Herencia n Debido a que una relación de herencia no relaciona objetos individuales • La relación no se nombra • La multiplicidad no tiene sentido n Teóricamente, no hay límite en el número de niveles en una herencia • En la práctica, los niveles están limitados • Las jerarquías típicas de C++ son de 3 o 5 niveles • Las jerarquías de Smalltalk pueden ser un poco más profundas 227
  • 228.
    ¿Qué es loque tiene herencia? n Una subclase hereda de sus padres: • Atributos • Operaciones • Relaciones n Una subclase puede: • Agregar atributos, operaciones y relaciones • Redefine operaciones heredadas (¡sea cuidadoso!) La herencia controla las similitudes entre clases La herencia controla las similitudes entre clases 228
  • 229.
    Atributos de Herencia n Los atributos de definen en el más alto nivel de la jerarquía de herencia n Las subclases de una superclase heredan todos sus atributos n Cada subclase puede agregar atributos adicionales GroundVehicle weight Truck tiene tres atributos: licenseNumber Truck tiene tres atributos: licenseNumber licenseNumber weight weight tonnage tonnage Car Truck tonnage 229
  • 230.
    Operaciones de Herencia n Las operaciones se definen en el más alto nivel de la jerarquía de herencia n Las subclases de una superclase heredan todas las operaciones n Cada subclase puede aumentar o redefinir operaciones heredadas GroundVehicle Truck tiene tres atributos: Truck tiene tres atributos: weight licenseNumber licenseNumber licenseNumber register( ) weight weight tonnage tonnage y dos operaciones: y dos operaciones: register() register() Car Truck getTax() getTax() tonnage getTax( ) 230
  • 231.
    Relaciones de Herencia n Las relaciones también se heredan y deben definirse en el más alto nivel en la jerarquía de herencia n Las subclases de una superclase heredan todas sus relaciones n Cada subclase puede participar en relaciones adicionales GroundVehicle dueño Person weight Car está relacionado con Car está relacionado con licenseNumber 0..* 1 un dueño un dueño register( ) Truck está relacionado Truck está relacionado con un dueño con un dueño Truck también tiene un Truck también tiene un Trailer Trailer Car Truck Trailer tonnage getTax( ) 231
  • 232.
    Generalización de Clases n La generalización proporciona la capacidad de crear superclases que encapsulan la estructura y/o el comportamiento comunes a varias subclases n Procedimiento de generalización • Identificar similitudes de estructura/comportamiento entre varias clases • Crear una superclase que encapsule el comportamiento/estructura comunes • Las clases originales se hacen subclases de la superclase nueva n Las superclases son más abstractas que sus subclases 232
  • 233.
    Ejemplo de Generalización Asset BankAccount Security RealEstate Savings Checking Stock Bond Incremento de abstracción 233
  • 234.
    Especialización de Clases n La especialización proporciona la capacidad de crear subclases que representen refinamientos en los que la estructura y/o comportamiento de la superclase se agregan o modifican n Procedimiento de Especialización • Advertir que algunas instancias exhiben estructura o comportamiento especializado • Creación de subclases para agrupar instancias de acuerdo a su especialización n Las subclases son menos abstractas que sus superclases 234
  • 235.
    Ejemplo de Especialización Asset BankAccount Security RealEstate Savings Checking Stock Bond Decremento de abstracción 235
  • 236.
    Jerarquías de Herencia n Ambas técnicas, generalización y especialización, se usan en el desarrollo de jerarquías de herencia n Durante el análisis, se establecen jerarquías de herencia entre abstracciones, de ser necesario n Durante el diseño, las jerarquías de herencia se definen para: n Incrementar la reutilización n Incorporar clases de implementación n Incorporar librerías de clase disponibles 236
  • 237.
    Niveles de Abstracción Vehicle Clases al mismo al Clases al mismo al mismo nivel de mismo nivel de GroundVehicle AirVehicle herencia deben estar herencia deben estar al mismo nivel de al mismo nivel de abstracción abstracción Ford Truck FixedWing Helicopter 237
  • 238.
    Herencia Múltiple FlyingThing Animal Herencia múltiple Airplane Helicopter Bird Wolf Horse Bird hereda de ambos FlyingThing yyAnimal Bird hereda de ambos FlyingThing Animal 238
  • 239.
    Conceptos de HerenciaMúltiple n Conceptualmente directo y necesario para modelar el mundo real correctamente n En la práctica, puede conducir a dificultades en la implementación • No todos los lenguajes orientados a objetos soportan herencia múltiple directamente ¡Use herencia múltiple sólo cuando sea necesario, ¡Use herencia múltiple sólo cuando sea necesario, yy siempre con precaución !! siempre con precaución 239
  • 240.
    Problemas con HerenciaMúltiple Confusión con Herencia repetida atributos y operaciones FlyingThing Animal AnimateObject color color color getColor getColor FlyingThing Animal Bird Cada lenguaje/ambiente de programación Bird Cada lenguaje/ambiente de programación elige modos para resolver este tipo de elige modos para resolver este tipo de dificultades dificultades 240
  • 241.
    Identificación de Herencia n Es importante evaluar todas las clases para encontrar posibles relaciones de herencia • Busque comportamiento común (operaciones) y estado (atributos) en las clases n Técnica de Adición • Agregar operaciones/atributos nuevos a la(s) subclase(s) n Técnica de Modificación • Redefinir operaciones • Debe tener precaución de no cambiar las semánticas 241
  • 242.
    Herencia vs. Agregación n Con frecuencia se confunde a la herencia y a la agregación n La herencia representa una relación “es un” o “tipo de” n La agregación representa una relación “tiene un” Las palabras claves “es un” y “tiene un” ayudarán a Las palabras claves “es un” y “tiene un” ayudarán a determinar la relación correcta determinar la relación correcta 242
  • 243.
    Window y Scrollbar Window Scrollbar WindowWithScrollbar Un WindowWithScrollbar “es un” Window Un WindowWithScrollbar “es un” Window Un WindowWithScrollbar “tiene un” Scrollbar Un WindowWithScrollbar “tiene un” Scrollbar ¿Qué relaciones deben usarse? ¿Qué relaciones deben usarse? 243
  • 244.
    Window y Scrollbar(cont.) Window Scrollbar Window WindowWithScrollbar WindowWithScrollbar Scrollbar 1 1 Un WindowWithScrollbar “es un” Window Un WindowWithScrollbar “es un” Window Un WindowWithScrollbar “tiene un” Scrollbar Un WindowWithScrollbar “tiene un” Scrollbar 244
  • 245.
    Herencia vs. Agregación Herencia Agregación Palabras clave “es un” Palabras clave “tiene un” Un objeto Relaciona objetos en clases diferentes Se representa con Se representa con un diamante una flecha 245
  • 246.
    ¿Qué es Metamorfosis? n Metamorfosis 1. Un cambio en forma, estructura o función; especialmente el cambio físico que sufren algunos animales, como el renacuajo a rana 2. Cualquier cambio notorio, como en el carácter, apariencia o condición • Webster’s New World Dictionary • Simon & Schuster, Inc., 1979 La Metamorfosis existe en el mundo La Metamorfosis existe en el mundo ¿Cómo debe modelarse? ¿Cómo debe modelarse? 246
  • 247.
    Ejemplo de Metamorfosis n En una universidad, hay alumnos de tiempo completo y de medio tiempo • Los alumnos de tiempo completo tienen un numero id y una fecha de graduación, pero los alumnos de medio tiempo no • Los alumnos de medio tiempo pueden tomar hasta de tres cursos. Los alumnos de tiempo completo no tienen ese límite Part-timeStudent Full-timeStudent name name address address numberCourses studentID gradDate 247
  • 248.
    Una Aproximación n Se puede crear una relación de herencia Student name address ¿Qué sucede si un alumno ¿Qué sucede si un alumno de medio tiempo desea de medio tiempo desea convertirse en un alumno convertirse en un alumno de tiempo completo? de tiempo completo? FulltimeStudent ParttimeStudent studentID numberCourses gradDate 248
  • 249.
    Metamorfosis n Es muy difícil cambiar la clase de un objeto n Técnica de modelado mejorado • Poner la estructura y comportamiento que “cambia” en su propia clase ParttimeClassification 0..1 numberCourses Student 1 name address 1 FulltimeClassification 0..1 studentID gradDate 249
  • 250.
    Metamorfosis (cont.) Mary Smith Joe Jones Estudiante de tiempo completo Estudiante de medio tiempo MarySmith : Student JoeJones : Student 1 1 1 1 : Full-timeClassification : Part-timeClassification 250
  • 251.
    Metamorfosis (cont.) n La metamorfosis se lleva a cabo por el objeto que “habla” con las partes cambiantes : Student : Student : Parttime : Fulltime Manager Classification Classification Cambia a tiempo completo borra crea 251
  • 252.
    Metamorfosis y Herencia n La herencia puede usarse para modelar estructura, comportamiento y/o relaciones comunes a las partes “cambiantes” Student name 1 1 Classification address Fulltime Parttime studentID numberCourses gradDate 252
  • 253.
    Metamorfosis y Flexibilidad n Esta técnica también agrega flexibilidad al modelo n Ejemplo: un alumno puede también vivir en el campus. En este caso, hay un identificador de dormitorio, un número de habitación y un número de llave de la habitación ResidentInformation Student dorm 1 1 Classification name room roomKeyID 1 address 0..1 Fulltime Parttime studentID numberCourses gradDate 253
  • 254.
    Ejercicio: Herencia n Examinar las clases definidas en el problema hasta el momento y agregar herencia donde sea necesario • Asegurarse de considerar cualquier metamorfosis n Actualizar diagramas de clases como sea necesario 254
  • 255.
  • 256.
  • 257.
    Objetivos: Comportamiento de Objetos n Usted podrá: n Explicar la necesidad de los Diagramas de Transición de Estado n Entender cómo encontrar estados n Desarrollar un DTE simple que muestre • Estados y Transiciones • Eventos • Condiciones de protección • Acciones y Actividades n Entender el concepto de estados anidados n Explicar las relaciones entre diagramas de transición de estados, diagramas de objeto/interacción y diagramas de clase 257
  • 258.
    ¿Qué es unDiagrama de Transición de Estado? n Un diagrama de transición de estado se usa para mostrar la historia de la vida de una clase dada, los eventos que causan una transición de un estado a otro, y las acciones que resultan de un cambio de estado n El espacio de estados de una clase dada es la numeración de todos los estados posibles de un objeto n El estado de un objeto es una de las condiciones posibles en las que puede existir un objeto • Contiene todas las propiedades del objeto • Generalmente estático • Más los valores actuales de cada una de estas propiedades • Generalmente dinámico 258
  • 259.
    Dibujo de Estados n Un estado se representa como un rectángulo con esquinas redondeadas en un diagrama de transición de estado State Name 259
  • 260.
    Estado y Atributos n Los estados pueden distinguirse por los valores de ciertos atributos Course English101 : Course numStudents numStudents = 7 El número máximo de alumnos por curso es 10 numStudents < 10 numStudents >= 10 Open Closed 260
  • 261.
    Estados y Ligas n Los estados también pueden distinguirse por la existencia de ciertas ligas n Las instancias de la clase Profesor puede tener dos estados: • Impartir cuando existe una liga a un curso • En sabático cuando no existe liga Professor Course 1 0..* 261
  • 262.
    Estados Especiales n El estado inicial es el estado introducido cuando se crea un objeto • Un estado inicial es obligatorio • Sólo un estado inicial es permitido • El estado inicial se representa como un círculo sólido n Un estado final indica el final de vida de un objeto • Un estado final es opcional • Puede existir más de un estado final • Un estado final se representa con un “ojo de buey” Estado Estado inicial final 262
  • 263.
    Eventos n Un eventos es una ocurrencia que sucede en algún punto en el tiempo • El estado del objeto determina la respuesta a diferentes eventos n Ejemplo: • Agregación un alumno a un curso • Creación de un curso nuevo 263
  • 264.
    Transiciones n Una transición es un cambio de un estado original a un estado sucesor como resultado de algunos estímulos n El estado sucesor también podría ser el estado original n Una transición puede tomar lugar en respuesta a un evento n Las transiciones pueden clasificarse con los eventos Open Cancel course Canceled Add student 264
  • 265.
    Condiciones de Seguridad n Una condición de seguridad es una expresión booleana de valores de atributos que permiten una transición sólo si la condición es verdadera Open Registration closed[ numStudents >= 3 ] Registration Complete 265
  • 266.
    Acciones n Una acción es una operación que se asocia a una transición • Toma una cantidad insignificante de tiempo para completarse • Se considera no-interrumpible n Los nombres de acción se muestran en la flecha de transición precedida por una diagonal Registration open / Initialize Creation numStudents to 0 Open Add student 266
  • 267.
    Envío de Eventos n Un evento puede disparar el envío a otro evento • Se muestra como: ^Class.event Add student Registration open / Initialize numStudents to 0 Creation Open [ numStudents = 10 ] ^CourseReport.Create report Closed 267
  • 268.
    Actividades n Una actividad es una operación que toma tiempo para completarse n Las actividades se asocian con un estado n Una actividad • Inicia cuando se introduce el estado • Puede ejecutarse hasta el fin o puede ser interrumpida por una transición que sale Closed do: Report course is full 268
  • 269.
    Envío de Eventosen un Estado n Una actividad también puede enviar un evento a otro objeto Dropping do: ^CourseRoster.Drop student(Student) 269
  • 270.
    Transiciones Automáticas n A veces, el único propósito de un estado es ejecutar una actividad n Una transición automática ocurre cuando se completa la actividad n Si hay múltiples transiciones automáticas • Se necesita una condición de seguridad en cada transición • Las condiciones deben ser mutuamente excluyentes Closed Offered do: finalize course 270
  • 271.
    Acciones de Entraday Salida n Cuando una acción debe ocurrir sin importar como entra o sale del estado, se debe asociar la acción con el estado • En realidad, la acción se asocia con cada transición que entre o salga del estado n La acción se muestra dentro del icono del estado precedida de la palabra entry o exit Add student Unassigned Add student / numStudents = 0 Open do: Assign professor to course entry: Register a student 271
  • 272.
    Estado Anidado n Los diagramas de transición de estado pueden volverse complejos e inmanejables n Los estado anidados pueden usarse para simplificar diagramas complejos n Un superestado es un estado que incluye estados anidados llamados subestados n Las transiciones comunes de los subestados se representan en el nivel del superestado n Es permitido cualquier número de niveles de anidación n Los estados anidados pueden conducir a una reducción sustancial de complejidad gráfica, permitiéndonos modelar problemas más grandes y complejos 272
  • 273.
    Diagrama de Transiciónde Estado para la Clase Curso sin Estados Anidados addStudent addStudent/ Initialize numStudents = 0 Open Unassigned do: Initialize course do: Assign professor entry: Register a object to course student cancelCourse cancelCourse registration closed[ registration closed[ numStudents < 3 ] Canceled numStudents > = 3 ] do: Send cancellation notices [ numStudents = 10 ] cancelCourse Closed do: Report RegistrationComplete course is full do: Generate class roster 273
  • 274.
    Diagrama de Transiciónde Estado para la Clase Curso con Estados Anidados Initialize Register RegistrationComplete registration closed[ do: Generate class roster numStudents > = 3 ] Unassigned do: Assign professor to course Add student / numStudents = 0 Open registration closed[ addStudent entry: Register a student numStudents < 3 ] [ numStudents = 10 ] Canceled Closed do: Report course is closed cancelCourse 274
  • 275.
    Estados Anidados conMemoria n El uso de la característica de memoria indica que tras el regreso a un superestado, se introducirá el subestado más recientemente visitado n Use la letra H en un círculo para denotar que la característica de memoria (history) se aplica al superestado n Si no se usa la característica de memoria, siempre se tomará el subestado inicial cuando se introduzca el superestado 275
  • 276.
    Ejemplo: Estado Anidadoscon Memoria n En el sistema de Inscripción a Cursos, la clase CourseSelection hace lo siguiente • Acepta cursos primarios • Acepta cursos alternos n El usuario puede salir en cualquier momento n El usuario puede suspender una sesión por un máximo de 30 minutos mientras selecciona sus cursos n La forma se guarda después de que se han seleccionado todos los cursos n La forma se envía para procesarla después de que ha sido guardada 276
  • 277.
    Estado Anidado conMemoria (Clase RegistrationForm) Course Selection Suspend Suspend Resume do: Wait for 30 minutes Creation [ Course count < 4 ] entry: Create form do: Initialize form Primary Course Selection do: Accept course number exit: Increment course count [ Course count = 4 ] / Set course count to 0 Alternate Course Selection [ Course count = 2 ] Save do: Accept course number do: Save form exit: Increment course count Quit Submit H do: Submit form for processing [ Course count < 2 ] 277
  • 278.
    Donde iniciar... n Durante el análisis, primero hay que centrarse en las clases con comportamiento dinámico significativo n Para una clase dada, busque estados posibles al: • Evaluar valores de atributos • Evaluar operaciones • Definir las reglas para cada estado, e • Identificar las transacciones validas entre estados n Rastrear los mensajes en los diagramas de interacciones correspondientes a un objeto que tengan que ver con el modelado de la clase • El intervalo entre dos operaciones puede ser un estado 278
  • 279.
    Ejercicio: Comportamiento de Objetos n Crear un diagrama de transición de estados para modelar el comportamiento dinámico de la clase Empleado con los siguientes estados • Apply, Employed, Leave of Absence, Terminated, Retired n Información del estado Apply • Se conduce una entrevista durante este estado • Se sale de este estado con el evento empleo n Información del estado Employed • El estado Employed tiene tres subestados basados en su clasificación de pago • Hourly, Salaried, and Commissioned • La clasificación de pago puede cambiar en cualquier momento • Las clasificaciones de pago se crean/borran después de entrar/salir del subestado 279
  • 280.
    Ejercicio: Comportamiento de Objetos (cont.) n Información del estado Leave of Absence • Un empleado pude tomar un permiso de ausencia de hasta 1 año mientras esté en cualquier subestado de empleado • Al regresar de su permiso ingresa al mismo subestado de pago del estado Employed n Información del estado Terminated • Un empleado pude ser despedido mientras este en cualquier subestado de empleado • Un empleado puede renunciar mientras este en cualquier subestado de empleado • El registro de empleado se marca como terminado en este estado n Información del estado Retired • Un empleado se retira cuando tiene 65 años • La información de pensión se calcula en este estado 280
  • 281.
  • 282.
  • 283.
    Objetivos: Homogeneización n Usted podrá: • Discutir el por qué de la homogeneización • Determinar cuando deben combinarse dos clases, cuando debe dividirse una clase, cuando debe eliminarse una clase • Evaluar diagramas de clases y diagramas de interacción para mantener la consistencia del modelo • Discutir las necesidades de reestructuración de paquete 283
  • 284.
    ¿Qué es Homogenización? n Homogeneizar “mezclar en un conjunto de elementos de manera uniforma, para homogeneizar” Webster’s New Collegiate Dictionary n Entre más casos de uso y escenarios se desarrollen es necesario homogeneizar el modelo n Esto es especialmente cierto si existen múltiples equipos que están trabajando en diferentes casos de uso 284
  • 285.
    ¿Qué buscar? n Las clases se examinan para determinar si • Se pueden combinar dos o más clases • Se debe dividir una clase • Se debe eliminar una clase completamente n Se reestructuran los paquetes para resolver problemas de • Acoplamiento • Reutilización • Visibilidad 285
  • 286.
    Combinación de Clases n Cuando se realiza el análisis de casos de uso con varios equipos, cada uno puede asignar un nombre diferente a una misma clase • Esto es especialmente cierto ya que el lenguaje natural se usa para el análisis de casos de uso n Debe conducirse el desarrollo del modelo • Evaluar definiciones de clase • Evaluar la estructura y comportamiento de las clases • Buscar sinónimos • Tomar el nombre más cercano al dominio 286
  • 287.
    Ejemplo: Combinación deClases n Se eligió a Teacher, ya que no todos los instructores de la Universidad han alcanzado el estatus de Professor Department Department 1 1 1 0..* Professor 0..* 0..* Teacher name Teacher name address tenureStatus address name address tenureStatus 287
  • 288.
    Ejemplo: Combinación deClases n Al colocar una clase de control por cada caso de uso, es necesario re-evaluar dichas clases • Las clases de control con comportamiento similar pueden combinarse n Ejemplo: El Administator interactúa con los casos de uso Maintain Student Information y Maintain Professor Information • Se crearon dos clases de control • La secuencia de acciones en cada una de estas dos clases de control es muy similar (revisar, crear, borrar información del actor) • Las clases de control pueden combinarse en una clase de control que se llame RegistrationUserManager 288
  • 289.
    División de Clases n Las clases con estructura y/o comportamiento que no sean cohesivos deben dividirse en clases diferentes n Ejemplo: Student Student name address name phoneNumber address changeMajor( ) phoneNumber 0..* major numStudentsinMajor 1 Major changeMajor() name numberStudents 289
  • 290.
    Eliminación de Clases n Debe eliminarse por completo una clase del modelo n Que no tenga ninguna estructura o comportamiento n Que no participe en ningún caso de uso n En particular, examine las clases de control n La falta de responsabilidad en la secuencia puede conducir a la eliminación de la clase de control n Ejemplo: n Un caso de uso para el actor Professor es “Seleccionar cursos para impartir” • Esto quiere decir que Professor introduce el nombre y número del curso y se crea una liga a la clase ProfessorInformation • Ya que no hay mucho comportamiento relacionado a la secuencia, se elimina esta clase de control 290
  • 291.
    Diagrama de SecuenciasActualizado : Professor : ProfCourse : Course CourseForm Manager : Professor 1: open 2: set prof id 3: set course : Professor : Course CourseForm 4: process : Professor 5: addProfessor ( ) 1: open 6: addProfessor ( ) 2: set prof id 7: quit 3: set course 4: process 5: addProfessor ( ) 6: quit 291
  • 292.
    Revisión de Consistencia n Se debe revisar la consistencia de los Diagramas de Clases y los Diagramas de Interacción n ¿Se necesita al menos una operación para cada clase? n ¿Existe una clase para cada objeto en el Diagrama de interacción? n Si un diagrama de objeto o diagrama de interacción muestra un mensaje que va de un objeto de la clase A a un objeto de la clase B, verifique: • Exista una operación en la clase B espera un evento y lo manipula • Exista una asociación correspondiente entre la clase A y la clase B en el diagrama de clases • El diagrama de transición de estado para la clase B (si se ha desarrollado uno) incluye ese evento 292
  • 293.
    Reestructuración de Paquetes n Al desarrollar más casos de uso puede ser necesario reestructurar los paquetes del modelo n El fuerte acoplamiento entre paquetes puede significar que los paquetes deben combinarse n La dependencia reciproca entre paquetes puede significar que el paquete debe dividirse n Evalue consideraciones de reuso • Un paquete reusable debe tener algunas dependencias n Evalue las partes publicas y privadas de un paquete • No todas las clases en un paquete deben ser parte de la interfaz publica del paquete • Agregar clases boundary si es necesario encapsular la interfaz del paquete 293
  • 294.
    Ejercicio: Homogeneización n Discutir las decisiones de homogeneización que se necesitan en este punto del análisis 294
  • 295.
  • 296.
  • 297.
    Objetivos: Diseño Arquitectónico n Usted podrá: • Listar los atributos de una buena arquitectura • Explicar la arquitectura de “4+1” vistas • Explicar el propósito de los diagramas de componentes • Explicar el propósito de los diagramas de distribución 297
  • 298.
    Visión Arquitectónica n Dos cualidades comunes para virtualmente todos los proyectos OO son: • La existencia de una visión arquitectónica • La aplicación de un ciclo de vida incremental bien-manejado e iteractivo n La arquitectura debe ser simple • El logro del comportamiento común a través de abstracciones y mecanismos comunes 298
  • 299.
    Una Definición deArquitectura del Software “La arquitectura del software tiene que ver con la organización de sistemas de software, la selección de sus componentes, las interacciones entre estos componentes, la composición de componentes interactuando en subsistemas más grandes progresivamente y el total de los patrones que guían estas composiciones. Tiene que ver no sólo con la estructura de sistemas, sino también con su funcionalidad, desempeño, diseño, selección entre alternativas y comprensión” Mary Shaw 299
  • 300.
    Atributos de lasArquitecturas Buenas n Las buenas arquitecturas se construyen en capas de abstracción bien definidas: n Cada capa representa una abstracción coherente n Cada capa tiene una interfaz bien definida y controlada n Cada capa se construye sobre facilidades bien definidas y controladas en niveles de abstracción bajos n Hay una clara separación entre la interfaz y la implementación de cada capa n Los cambios en la implementación de una capa no viola la hipótesis hecha por sus clientes 300
  • 301.
    Desarrollo de laArquitectura del Sistema n El diseño de la arquitectura tiene que ver con el manejo de riesgo n Las buenas arquitecturas se determinan mejor a través de desarrollo iterativo e incremental n A un experimentado equipo pequeño, guiado por un Arquitecto en Jefe, se le debe asignar la responsabilidad para: n Definir y mantener la integridad arquitectónica del sistema n Aprobar todos los cambios a las interfaz de paquetes n Valorar riesgos del proyecto n Proponer el orden y contenido de cada iteración 301
  • 302.
    Dimensiones de laArquitectura del Software n Perspectivas diferentes para inversionistas diferentes • Usuario final, cliente, administrador de proyecto • Ingeniero de sistema, desarrollador, arquitecto, evaluador n Las perspectivas múltiples requieren múltiples vistas • Los diagramas de clases no muestran el mapeo del sistema al hardware • Los diagramas de bloques de hardware no describen que partes del sistema son obtenidas de software comercial 302
  • 303.
    Una Arquitectura requiere Múltiples Vistas n Para describir completamente una arquitectura, se necesitan cuatro vistas: n Una Vista Lógica que proporciona una imagen estática de las principales clases y sus relaciones n Una Vista de Componentes que muestra como está el código organizado en paquetes y librerías, así como el software comercial (COTS, commercial off-the-shelf) n Una Vista de Procesos que muestra procesos y tareas n Una Vista de Distribución que muestra los procesadores, dispositivos y ligas en el ambiente operacional n Finalmente, una Vista de Casos de Uso que explica como trabajan juntas las otras cuatro vistas 303
  • 304.
    El Modelo “4+1Vistas” Vista Logica Vista de Componentes Administración, reuso y Funcionalidad portabilidad del Software Usuarios finales Vista de Casos de Uso Ingenieros de software Entendimiento de Utilidad Vista de Procesos Vista de Distribución Desempeño, Desempeño, Disponibilidad Disponibilidad, Tolerancia a fallas, Escalabilidad Tolerancia de fallas Entrega e Instalación Integradores de Sistema Ingenieros de Sistema 304
  • 305.
    Vista Lógica n La vista lógica de una arquitectura controla los requerimientos funcionales del sistema • Lo que el sistema proporciona en términos de servicios a sus usuarios n Proporciona una imagen estática de las principales clases y sus relaciones n La vista lógica se encuentra reflejada en diagramas de clases; paquetes que contienen clases y relaciones, lo cual representa la abstracción del sistema en desarrollo 305
  • 306.
    Paquetes Lógicos Globales n Ciertos paquetes son usados por todos los demás paquetes • Foundation Classes • Conjuntos, listas, colas, etc. • Clases de manejo de errores n Estos paquetes se marcan como globales Foundation Classes global 306
  • 307.
    Implicaciones de Dependencia n Algunas implicaciones de la dependencia entre paquetes son: • Cada vez que se hace un cambio al paquete Proveedor, el paquete Cliente debe ser re-compilado y reevaluado • El paquete Cliente no puede ser reusado independientemente, ya que depende del paquete Proveedor ClientPackage SupplierPackage 307
  • 308.
    Evitar Dependencias Circulares n Es deseable que la jerarquía del paquete sea a-cíclica n Esto quiere decir que la situación siguiente debe evitarse (de ser posible) • El paquete A usa el paquete B el cual usa el paquete A n Una dependencia circular como esta, significa que los paquetes A y B tendrán que ser tratados como un solo paquete n También deben evitarse los círculos con más de dos paquetes • El paquete A usa el paquete B que usa al paquete C que usa al paquete A n Las dependencias circulares pueden romperse, dividiendo uno de los paquetes en dos paquetes más pequeños 308
  • 309.
    Dependencia Circular enel Sistema de Inscripción Interfaces Business Rules Cambiado a Incoming Interfaces Business Rules Outgoing Interfaced 309
  • 310.
    Interfaz Pública deun Paquete n Una interfaz de paquete debe encapsular su implementación detrás de una interfaz publica justo como lo hace una clase n Cada clase en un paquete tiene un parámetro de control de exportación que puede establecerse a publico o implementación (privado) • Solo las clases publicas pueden ser usadas por clases en otros paquetes • Las clases de implementación (privadas) sólo pueden ser usadas por su paquete 310
  • 311.
    Vista de Componentes n La vista de componentes tiene que ver con la organización del software en módulos para su desarrollo n Los diagramas de componentes se crean para mostrar los paquetes y los componentes que conforman el sistema en desarrollo • Muestra la distribución de clases a componentes • Muestra la distribución de componentes en paquetes n Los paquetes se organizan en capas, donde cada capa tiene una interfaz bien definida 311
  • 312.
    ¿Qué es uncomponente? n Un componente es una unidad de código fuente que sirve como bloque constructor para la estructura física de un sistema n Los estereotipos (con iconos alternos) pueden usarse para definir tipos de componentes específicos. • Ejemplos: exe, dll, main programs, headers, modules, forms n Agrupar clases en un componente, ya sea que tenga una función cooperativa o que necesite estar en proximidad para la eficiencia en la implementación n Notación de componente: Component name 312
  • 313.
    Diagramas de Componentes n Un diagrama de componentes muestra la distribución de clases y objetos en componentes durante la implementación, así como sus dependencias de compilación Name 1 Name 2 Name 1 Name 2 Name 3 313
  • 314.
    Diagramas de Componentes (cont.) n Se requiere un nombre para cada componente, este nombre denota típicamente el nombre simple del archivo físico correspondiente en el espacio de trabajo actual n La única relación es la dependencia de compilación, representada por una línea punteada dirigida que apunta hacia donde existe la dependencia n En C++, la dependencia de compilación se indica por las directivas #include n No debe haber ciclos en un conjunto de dependencias de compilación 314
  • 315.
    Ejemplo: Diagrama de Componentes Curriculum Curriculum Course Course 315
  • 316.
    Paquetes en laVista de Componentes n Un paquete en la vista de componentes es una colección de componentes, algunos de los cuales son visibles a otros paquetes y otros están ocultos n Un paquete agrupa componentes que están lógicamente relacionados n Un paquete en la vista de componentes agrupa componentes de manera similar a la que un paquete en en la vista lógica agrupa clases n Cada componente en el sistema debe existir en un solo paquete en el nivel más alto del sistema n Notación: PackageName 316
  • 317.
    Diagrama de ComponentesPrincipal n Un diagrama de componentes principales es una familia de paquetes conectados por ligas dirigidas que representan dependencias n Ejemplo. MFC RegistrationUser Interface Registration System 317
  • 318.
    Relación entre Paquetesde la Vista Lógica y de Componentes n En general, un paquete en la vista lógica puede corresponder directamente a un paquete de componentes en la vista de componentes n La estructura lógica y física puede variar por las siguientes razones: • Se fusionan paquetes en la vista lógica, para mantener juntos a objetos que se comunican frecuentemente • Los paquetes en la vista de componentes se agregan para implementar funcionalidad de bajo nivel 318
  • 319.
    Ejemplo: Correspondencia entre Paquetes en la Vista Lógica y de Componentes GuiWidgets RegistrationUser MFC RegistrationUser Interface Interface Registration Registration System System Logical View Top-Level Diagram Component View Top-Level Diagram 319
  • 320.
    Vista de Procesos n La vista de procesos de la arquitectura se enfoca en la descomposición de procesos • La vista muestra la distribución de componentes a procesos n El diagrama de componentes se actualiza para mostrar la distribución de componentes a procesos n La vista de procesos está dirigida a: la disponibilidad, la confiabilidad, el desempeño, la administración y la sincronización del sistema 320
  • 321.
    Componentes de Proceso n Las librerías ejecutables y ligadas se representan como componentes UML • Especificación de Paquete (DLL) • Especificación de Tarea (EXE) Especificación del paquete (DLL) Especificación de tarea (EXE) 321
  • 322.
    Diagrama de Componentespara un Proceso n Cada componente puede depender de otros componentes MyProcess.exe Name1 Name2 Name1 Name2 322
  • 323.
    Procesos para elSistema de Inscripción a Cursos Curriculum.exe Registration.exe Proceso para la creación Proceso para que los alumnos y mantenimiento de y profesores elijan curso curriculum 323
  • 324.
    Vista de Distribución n La vista de distribución de la arquitectura mapea componentes a nodos de procesamiento n Los requerimientos de desempeño y tolerancia a fallas se toman en cuenta n Los diagramas de distribución se crean para mostrar los diferentes nodos (procesos y dispositivos) en el sistema 324
  • 325.
    Diagrama de Distribución n Un diagrama de distribución muestra la ubicación de los componentes en nodos, de tal forma que se obtenga una vista de distribución del sistema • Los procesadores y dispositivos son estereotipos comunes de Nodo. n Los nodos se conectan en el diagrama a través de una línea, que refleje la ruta de comunicación entre ellos n Los elementos esenciales de un diagrama de distribución son los nodos y las conexiones 325
  • 326.
    Notación para Diagramasde Distribución n Un nodo es un objeto físico en tiempo de ejecución que representa recursos computacionales n Una conexión indica comunicación, generalmente a través de medios de acoplamiento directo al hardware nombre etiqueta nodo conexión 326
  • 327.
    Ejemplo: Diagrama deDistribución para el Sistema de Inscripción n Este diagrama muestra dos nodos y los dispositivos con los que se comunica el Sistema de Inscripción Sistema de Base de Inscripción Datos Dormitorios Biblioteca <<device>> Edificio <<device>> Principal <<device>> 327
  • 328.
    Procesos n Un proceso es un hilo de control de la ejecución de un programa o sistema (OO) • Un sistema grande puede dividirse en procesos múltiples o hilos de control n Los objetos se asignan a procesos (sus asignaciones pueden ser dinámicas) n Los procesos se asignan a procesadores (un conjunto de procesos puede ser dinámico) n Notación: Nombre de Procesador proceso 1, proceso 2, ... proceso n 328
  • 329.
    Mapeo de Paquetesde Desarrollo a Procesos Ejecutables n El mapeo de paquetes de desarrollo a procesos ejecutables envuelve el entendimiento de la topología del sistema y las prioridades del sistema, que incluyen: • Arquitectura de procesador, velocidad y capacidad • Mantener las asociaciones de clases juntas para minimizar la comunicación de interprocesos (IPC interprocess communication) • Estrategia IPC -- cliente/proveedor u otro? • Técnicas de proceso distribuido n Debe resolver elementos que envuelvan múltiples procesadores de hardware o sistemas distribuidos durante el diseño del sistema 329
  • 330.
    Mapeo de ProcesosEjecutables a Hardware n Los procesos deben asignarse a un dispositivo de hardware para su ejecución n Entre las consideraciones están: n Tiempo de respuesta y resultados del sistema n Comunicación: ancho de banda/capacidad n Localización física del hardware requerido n Necesidades de procesamiento distribuido n Balanceo de carga de procesos en sistemas distribuidos n Tolerancia de fallas n ... 330
  • 331.
    Vista de Casosde Usos n Los casos de usos son los conductores del diseño de una arquitectura • Abstracciones de requerimientos largos y complejos • Identificación de interfaz crítica • Forzar a los diseñadores a concretar elementos n Demuestran y validan las vistas; lógica, de componentes, de procesos y de distribución de la arquitectura 331
  • 332.
    Las “4+1 Vistas”del Modelo UML Vista Lógica Vista de Componente Diagramas de Clases, Diagramas de Componentes Diagramas de Secuencias Vista de Caso de Uso Diagramas de Casos de Uso, Diagramas de Secuencias Vista de proceso Vista de Despliegue Diagramas de Procesos Diagramas de Distribución 332
  • 333.
    ¿Cómo se documentauna Arquitectura? n La arquitectura se documenta a través de un texto escrito • Aproximadamente 100 páginas para un sistema grande n El documento incluye: • Una descripción de la filosofía de la arquitectura (las vistas) y la visión que dirige los requerimientos • Ver las ventajas y desventajas para considerar alternativas • Una vista de alto nivel de la vista lógica (paquetes y clases principales) • Escenarios específicos de la arquitectura • Vistas de alto nivel de las vistas de procesos y de distribución • Los mecanismos clave 333
  • 334.
    ¿Quién desarrolla laArquitectura del Software? n El equipo de arquitectura está compuesto por los mejores y más experimentados desarrolladores n Establecido tempranamente en el proyecto (no después de la fase de elaboración) n La mayoría de los proyectos de complejidad razonable requieren de un equipo de arquitectura, NO un sólo arquitecto • Encabezado por el arquitecto en jefe, quién dedica 100% de su tiempo • Incluye los líderes diseñadores para funciones más importnates o críticas del sistema 334
  • 335.
    Evolución del Equipode Arquitectura Fase de Construcción Equipo de Arquitectura •Arquitecto •Grupo de soporte Fase de Elaboración Equipo de arquitectura Equipo 1 de Aplicación •Arquitecto •Diseñador líder •Líderes Diseñadores •Ingenieros de •Desarrolladores de aplicación infraestructura Equipo 2 de Aplicación •Diseñador líder En la fase de elaboración, los miembros se •Ingenieros de dedican 100% al equipo de arquitectura. aplicación . Durante la fase de construcción, los miembros se convierten en diseñadores líderes para equipos de . aplicación y soporte de medio tiempo al equipo de . arquitectura 335
  • 336.
    Beneficios de unEquipo de Arquitectura n Documentos a entregar • Documento de arquitectura • Partes del documento de diseño de bajo nivel • Guías de diseño y programación • Elementos de los planes de liberación • Auditorias de diseño al sistema a liberar n La habilidad y efectividad del equipo de arquitectura es crítico para el éxito de un proyecto Con una buena arquitectura, un equipo de desarrollo normal puede triunfar. Con una arquitectura débil, hasta los desarrolladores más expertos no tendrán éxito 336
  • 337.
    Ejercicio: Diseño deAruitectura n Discutir consideraciones de arquitectura para el problema n Agregar paquetes al modelo como sea necesario • Reubicar clases en diferentes paquetes como sea necesario 337
  • 338.
  • 339.
  • 340.
    Objetivos: Mecanismos Clave n Usted podrá: • Describir algunos mecanismos claves específicos a OO • Explicar los elementos asociados con la interfaz a bases de datos • Listar algunas consideraciones para evaluar sistemas de administración de bases de datos • Describir el manejo de excepciones y sus elementos asociados • Explicar los elementos asociados con comunicación inter-proceso 340
  • 341.
    ¿Qué son losMecanismos Clave? n Un mecanismo clave es una decisión estratégica de acuerdo a estándares, políticas y prácticas comunes, por ejemplo n Un acercamiento común a un manejo de error, o n Un modo común de comunicación entre procesos n La mayoría del software tradicional se diseña con principios que aún se aplican en el diseño OO n Los problemas para resolver son similares, e.g., manejo de recursos, control de riesgos, etc. n Algunas diferencias se deben a: n Soluciones estructuradas usando métodos OO n Los elementos de lenguajes de programación OO 341
  • 342.
    Mecanismos Claves Comunes n Administración de recursos n Manejo especial requerido para el inicio y salida del sistema n Integración con sistemas de almacenamiento de datos persistentes n Detección/manejo/reporte de errores n Comunicación interproceso n Envió de mensajes n Apariencia y vista (look & feel) de la interfaz de usuario n Reutilización de software 342
  • 343.
    Administración de Recursos n Una clase administradora de recursos puede emplearse para controlar el acceso a los recursos n La clase administradora de recursos utiliza métodos de software tradicional, tales como semáforos para controlar el acceso a dichos recursos n Esta clase proporciona operaciones que permiten a los clientes del recurso, obtenerlo, descargarlo, obtener su estado, etc. n Una superclase que contenga la interfaz a los recursos administrados puede ser provista con los recursos del administrador para posibilitar su reuso 343
  • 344.
    Administración de Recursos(cont.) ResourceManager ManagedResource acquire () 1 1..* release () File SharedMemory 344
  • 345.
    Inicio y Salidadel Sistema n Si aún no se ha cubierto durante el análisis, deben definirse los casos de uso para el inicio y salida del sistema n Los escenarios deben desarrollarse para cada caso de uso -- tantos como sean necesarios para controlar a la mayoría de las situaciones normales y anormales n Durante este proceso deben descubrirse nuevos estados y comportamientos para clases existentes y la necesidad debe surgir para las clases enteramente nuevas y así controlar el inicio y/o salida del sistema 345
  • 346.
    Objetos Persistentes n Un objeto persistente es aquel que lógicamente existe bajo el ámbito del programa que lo creó n Los lenguajes de programación OO manejan objetos residentes en memoria, los cuales son esencialmente transitorios n Un objeto persistente tiene la habilidad de guardar el valor de sus atributos en algún tipo de almacenamiento persistente n Un objeto persistente puede también crearse en memoria e inicia con sus valores de atributo desde el almacenamiento persistente n La estrategia total para proveer persistencia a los objetos en el sistema, es un mecanismo de control 346
  • 347.
    Almacenamiento Persistente n El almacenamiento persistente puede hacerse empleando un sistema de archivos simple o algún tipo de sistema de administración de base de datos n Hay varios modelos para DBMSs: • Jerárquicos • Red • Relacional (RDBMS) • Orientado a Objetos (ODBMS) n El Relacional y el ODBMS son los más comunes 347
  • 348.
    Selección de unaAproximación a Persistencia n La estrategia de diseño para retener objetos persistentes deberá considerar • Tiempos de acceso • Capacidad de almacenamiento • Confiabilidad del sistema de almacenamiento • Acceso a datos existentes n El modelo elegido influirá al sistema y al diseño de objetos, de tal forma que los diseñadores deberán considerar: • Operaciones adicionales para almacenar y recuperar objetos persistentes • Adición de atributos para manejar detalles de almacenamiento del sistema • Clases adicionales para hacer interfaz con el DBMS 348
  • 349.
    Criterios de Evaluaciónde un DBMS n Se debe decidir el criterio de evaluación para elegir un DBMS n Las siguientes laminas contienen cierto criterio encontrado en “Considerations For Evaluating Object Database Management Systems” escrito por Robert Gancarz y Grant Colley, Object Magazine, Marzo/Abril 1992 • Este criterio también se aplica para elegir el sistema de administración de la base de datos 349
  • 350.
    Criterios de Evaluaciónde un DBMS (cont.) n Presencia del Vendedor • Mirar el poder financiero, estructura de la organización, procedimientos de soporte al cliente, soporte de entrenamiento y consultoría, alianzas con otras compañías n Desempeño de la Base de Datos • Ninguna marca puede probar que un DBMS es más rápido para todas las aplicaciones • El desempeño depende de la aplicación • Los prototipos específicos de aplicación son muy importantes n Capacidades de la Base de Datos • Se debe evaluar administración de transacciones, control de concurrencia, respaldo y recuperación, seguridad y soporte de un lenguaje de consulta (SQL) 350
  • 351.
    Criterios de Evaluaciónde un DBMS (cont.) n Arquitectura de la Base de Datos • Evaluar esquemas de control de concurrencia, mecanismos de seguridad y administradores de almacenamiento n Herramientas de Desarrollo • Ver las herramientas para el diseño de la base de datos, modificación del esquema de las base de datos y navegación, así como también las herramientas de depuración y afinación de la base de datos n Soporte al lenguaje de elección • Asegurarse de que hay soporte para el lenguaje de su elección para el desarrollo del sistema n Facilidad de Migración • ¿Qué tan fácil/difícil es migrar al sistema de la base de datos? 351
  • 352.
    Criterios de Evaluaciónde un DBMS (cont.) n Integración con Sistemas Legados • ¿Qué tan fácil/difícil es integrarse al sistema de administración de base de datos existente? n Soporte Multi-usuario • Evaluación del soporte para desarrollo multiusuario, administración de configuración, control de versiones y estrategias de seguridad Nota: Invierta tiempo y esfuerzo para seleccionar el sistema de Nota: Invierta tiempo y esfuerzo para seleccionar el sistema de administración de base de datos apropiado para el proyecto administración de base de datos apropiado para el proyecto SIEMPRE es más caro corregir que hacerlo bien desde el principio!!! SIEMPRE es más caro corregir que hacerlo bien desde el principio!!! 352
  • 353.
    Productos de laBase de Datos Relacional n Hay dos factores principales que deben tomarse en cuenta cuando se diseña un sistema OO usando bases de datos relacionales n Primero, existe una diferencia semántica natural entre el modelo basado en clases un diseño orientado a objetos y el modelo basado en tablas de una base de datos relacional • Se debe definir un mapeo o traducción entre los dos n Segundo, se debe definir el comportamiento que hace interfaz con el RDBMS y que implementa esta traducción • ¿Debe insertarse este comportamiento en objetos persistentes o de algún modo debe mantenerse separado? 353
  • 354.
    Mapeo a Basesde Datos Relacionales n Típicamente, cada clase mapea a una tabla y cada instancia mapea a un renglón Customer name Tabla Customer address discount customerID name address discount 354
  • 355.
    Mapeo a Basesde Datos Relacionales (cont.) n Las relaciones de uno-a-muchos se implementan usando una llave foránea en la tabla que representa a la clase que tiene la multiplicidad mayor a uno en la relación Customer name Tabla Customer address discount customerID name address discount 1 Tabla Order 0..* orderID delivery urgency customerID Order deliveryTime urgency 355
  • 356.
    Mapeo a Basesde Datos Relacionales (cont.) n Se crean tablas para resolver las relaciones de muchos-a- muchos Product Tabla Product Ingredient 0..* productID ingredientID 1..* Ingredient 356
  • 357.
    Mapeo a Basesde Datos Relacionales (cont.) n Las superclases / subclases también pueden mapearse a tablas • Cada clase y subcalse es una tabla • Se proporcionan vistas para la jerarquía Order deliveryTime Tabla Order urgency orderID deliveryTime urgency SpecialOrder Tabla SpecialOrder StandingOrder startDate endDate frequency orderID endDate startDate 357
  • 358.
    Mapeo a Basesde Datos Relacionales (cont.) n Existen estrategias alternas para superclases y subclases • Repetir todos los atributos en la tabla de superclase • Problema: espacio desperdiciado • Repetir todos los atributos en la tabla de subclase • Problema: redundancia n Se buscan la mejor relación con respecto al desempeño y espacio de almacenamiento para decidir que mapeo usar en cada situación de herencia 358
  • 359.
    Interfaz con elRDBMS n El elemento principal asociado con la creación de una interfaz con un RDBMS, es si se separa o no el comportamiento específico de la aplicación del comportamiento específico de la base de datos n Suponga que nuestro sistema tiene una clase Cliente que se ha decidido que será persistente n ¿Deberá la clase Cliente contener los detalles del mapeo OO-a- RDBMS? n ¿Deberá la clase Cliente contener el comportamiento para hacer interfaz con el agente RDBMS (es decir, código que genera SQL para leer/escribir de/a la base de datos)? n ¿Deberá la clase Cliente incluso saber que es persistente? n De cualquier forma se puede trabajar - cada uno tiene sus ventajas y desventajas 359
  • 360.
    Interfaz con RDBMS(cont.) n El comportamiento específico de la base de datos no está separado del comportamiento específico de la aplicación: • Cada clase persistente puede tener las funcionalidades de crear, leer, actualizar y borrar (CRUD) construidas en (operaciones que desempeñan mapeo OO-a-RDBMS y generan SQL para implementarlo) • Ventajas • No es técnicamente retador para implementar • Desventajas • Los modelos OO y RDBMS no son separables • La funcionalidad CRUD no siempre es limpiamente heredable 360
  • 361.
    Comportamiento de laBase de Datos dentro de la Clase : CurriculumManager : Course 1: save ( ) Course description Course debe tener conocimiento Course debe tener conocimiento de la base de datos save () de la base de datos 361
  • 362.
    Interfaz con RDBMS n El comportamiento específico de la base de datos se separa del comportamiento específico de la aplicación n Se puede modelar al sistema en dos particiones: Aplicación e Interfaz de la Base de Datos • Para cada clase persistente, una interfaz de base de datos asociada se define, la cual entiende el mapeo OO-a-RDBMS y tiene el comportamiento para hacer interfaz con el RDBMS n Ventajas • El modelo OO es separable del modelo RDBMS • Existen herramientas disponibles para generar las clases de interfaz básicas a la base de datos n Desventajas • Más técnicamente retador de implementar 362
  • 363.
    Comportamiento de Basede Datos Separado : CurriculumManager : Transaction : DBCourse : Course Manager 1: saveCourse (Course) 2: save (Course) 3: getDescription ( ) 4: makePersistent ( ) TransactionManager TransactionManager TransactionManager separa lo lógico (Course) separa lo lógico (Course) de lo físico (DBCourse) de lo físico (DBCourse) Course DBCourse 363
  • 364.
    DBMS Orientado aObjetos n Los ODBMS permiten el almacenamiento y recuperación de los objetos (con datos complejos encapsulados en cada objeto) n Un ODBMS retiene típicamente • Objetos (valores de atributos) • Información de la clase sobre cada objeto n No hay diferencia semántica entre el modelo OO y el modelo ODBMS - son idénticos n No debe diseñarse comportamiento especial para hacer interfaz con el ODBMS 364
  • 365.
    DBMS Orientado aObjetos (cont.) n Ventajas: • Interfaz sin parches entre la aplicación y la base de datos • Se necesita relativamente poco código para hacer a los objetos persistentes • Muy efectivo con sistemas que deben atravesar estructuras de datos complicadas n Desventajas: • Riesgo más alto de desarrollo ya que la tecnología y producto de ODBMS no son tan maduros como sus contrapartes de RDBMS • El desempeño con estructuras simples de datos no proporcionan ventajas sobre RDBMS n Se debe evaluar la inversión de tecnología relacional existente cuando se evalúe la tecnología de bases de datos OO 365
  • 366.
    Detección de Errores n Debe establecerse un mecanismo consistente para la detección de errores n Los objetos deben detectar errores que podrían violar su integridad - esto incluye errores • Que surgen con la operación • Que resultan de parámetros recibidos de objetos clientes • Que resulten de valores de retorno proporcionados por objetos proveedores n Se puede establecer un plan para monitorear la salud del sistema • Se define operación de prueba para cada clase que verifique la integridad o estructura interna, y • Monitoreo de objetos definidos para revisar periódicamente cada función de prueba de objeto 366
  • 367.
    Manejo de Errores n Aún en los sistemas OO, el manejo de errores debe diseñarse cuidadosamente -- en más del 30% del código final existen condiciones de manejo de error n Los lenguajes OO (como 3.0 C++) proporcionan elementos de manejo de excepción para auxiliar en este diseño n El manejo de excepciones permite que un error se maneje por un objeto distinto que el objeto que detectó el error n Esto es con frecuencia apropiado, ya que el objeto detector no siempre conoce el impacto a un sistema por un error 367
  • 368.
    Ejemplo de Manejode Excepción class String { public: class RangeError { int badIndex; }; // error type char getChar(int index) const; // ... }; char String::getChar(int index) const { if (index < 0 || index > lastValid) throw RangeError(index); // throw point return contents[index]; }; void foo() { try { String s = “hello”; char c = s.getChar(0); } catch (const String::RangeError& why) { // catch point cout << “subscript out of range” << why.badIndex << endl; } } 368
  • 369.
    Throwing y CatchingExcepciones n Cuando hay un problema que no puede ser manejado en el contexto actual, se puede crear y “lanzar” una excepción • throw Problem(“things are bad”); n ¿Qué hace throw? • Se crea y “regresa” al objeto excepción n ¿A dónde va el objeto excepción? • Cuando se lanza una excepción se busca la llamada a la pila para el primer manejador (handler) • Habrá un manejador de excepción para cada tipo de excepción que pueda cargarse • catch (Problem&) {// handle exceptions of type Problem} 369
  • 370.
    Elementos de Manejode Excepción n En el proceso de búsqueda de llamada a la pila, se llaman a los destructores de objetos locales • Variables automáticas • Parámetros de valor • Temporales n No se llama a los destructores para • Variables dinámicas • Variables estáticas n Nunca se ejecuta el código después del punto de lanzamiento n Las excepciones se apoderan de la administración de recursos (ej. Cerrar archivos abiertos) 370
  • 371.
    ¿Deben Usarse Siemprelas Excepciones? n No deben usarse las excepciones en las siguientes situaciones: • Condiciones ordinarias de error • Si hay suficiente información disponible para manejar el error entonces NO hay una excepción • Para controlar el flujo del problema • Una excepción NO es un regreso alterno 371
  • 372.
    ¿Cuándo Deben Usarselas Excepciones? n Las Excepciones se lanzan como resultado de un error serio • No hay regreso al punto donde se lanzó la excepción n Las Excepciones no deben usarse si el error puede manejarse (arreglarse) y el proceso continua • Puede llamarse una operación para “arreglar” el problema y el proceso puede continuar 372
  • 373.
    Uso Típico deExcepciones n Arreglar el problema y continuar el proceso sin procesar de nuevo la función que lanzó la excepción n Calcular un resultado alterno n Lanzar el error a un contexto más alto n Terminar el programa n Ocultar funciones que usan esquemas de error ordinario n Simplificar el código n Hacer al código más fácil de mantener 373
  • 374.
    Reporte de Error n El almacenamiento del registro de errores de forma correcta y el reporte en línea son las claves de la mayoría de los sistemas n El comportamiento del control de errores consistente puede implementarse en base a la clase Error usada en el manejo de excepción n Este comportamiento puede incluir n Agregar el error a un registro de errores que abarque al sistema (system-wide error log) n Distribuir los errores del proceso los cuales facilitan el monitoreo en línea de errores n Este tipo de acercamiento asegura la consistencia al separar la responsabilidad detallada de las clases de aplicación 374
  • 375.
    Comunicación Interprocesos n ClassA llama a la operación functionB() de la ClassB n ¿Qué sucede cuando las clases ClassA y ClassB están en proceso diferentes? n Esto se convierte en un resultado crítico en sistemas distribuidos n Se necesita un mecanismo estándar para la comunicación interprocesos : ClassA : ClassB ClassA ClassB 1: functionB ( ) functionB( ) 375
  • 376.
    Comunicación Interprocesos (cont.) n Una solución común que soporta el paradigma OO se ha desarrollado n Clases Proxy se insertan en cada proceso el cual proporciona las interfaz de las clases originales y encapsula la comunicación de nivel menor n La distribución es transparente a clases de aplicación 376
  • 377.
    Estándares Distribuidos deOO n La elección de un estándar de distribución es un elemento de diseño (si su sistema usa objetos distribuidos) n Hay dos estándares para la distribución OO n Common Object Request Broker Architecture (CORBA) n Component Object Model (COM+/DCOM/COM/OLE) n Object Request Brokers (ORB) proporciona acceso transparente a objetos en un ambiente distribuido n ORB permite la conectividad de ubicación independiente cliente/servidor n Las decisiones de distribución pueden tomarse al tiempo de corrida 377
  • 378.
    Clases Proxy ClassA ProxyClientB ProxyServerB ClassB Object Request Broker 378
  • 379.
    Planeación para Reuso n Los componentes reusables deben considerarse previamente en el proceso de diseño para incorporarlo al sistema n La evaluación de librerías de software comerciales e internas para aplicarlos al sistema por módulos n Las librerías de clases son grupos de clases que colaboran para proporcionar algún servicio, interfaz o función n Librerías de clases están comúnmente disponibles como: n Container objects n Interfaces to databases n User interface widgets 379
  • 380.
    Actualización de Diagramas n Los diagramas de clases se actualizan para mostrar los mecanismos claves elegidos n Los diagramas de secuencias se actualizan para mostrar las interacciones entre clases descubiertas y clases que representan estrategias de mecanismos clave 380
  • 381.
    Diagrama de ClasesActualizado Outgoing GUI Widgets Incoming Interfaces Interfaces Business University Rules Artifacts Foundations Error Database Handling global global 381
  • 382.
    Diagrama de Secuencias Actualizado aForm : theManager : theCourse anOffering dbMgr : dbCourse : dbOffering : : Registrar CurriculumMgr CurriculumMgr : Course : (Course TransactionMgr DBCourse DBOffering 1: open 2: enter id 3: verify id 4: enter 5: create a 6: set number, name, description, 7: set number offerings, professor, 8: process 9: create course(number, name, description, credit hours, offerings, 10: create(number, name, description, 11: create offering(number, pofessor, 12: create(professor, time, 13: save 14: save(course) 15: get info 16: commit 17: save(offering) 18: get info 19: commit 382
  • 383.
    Ejercicio: Mecanismos Clave n Discuta las estrategias de mecanismos clave para el problema n Actualice el diagrama de clases para mostrar la incorporación de mecanismos clave n Actualice los diagramas que sean necesarios 383
  • 384.
  • 385.
  • 386.
    Objetivos: Diseñar Clases n Usted podrá: • Discutir decisiones de diseño de interfaz de usuario • Agregar clases de nivel de diseño para solucionar problemas de diseño • Usar patrones de diseño para resolver problemas de diseño 386
  • 387.
    Diseño de Interfazde Usuario n Las clases boundary manejan las comunicaciones de lainterfaz entre el usuario y el sistema • Proporcionan capacidad para enviar y recibir información del exterior del sistema n Durante el análisis, se definen clases boundary de alto nivel n Durante el diseño, se completa el diseño de la interfaz de usuario • Windows layouts • Número de ventanas • Manejo de eventos iniciados por los usuarios 387
  • 388.
    Descubriendo de Requerimientos de Interfaz n Cualquier prototipo de la interfaz de usuario hecho con anterioridad es un buen punto de partida para esta fase de diseño n Los diagramas de secuencia y/o colaboración también proporcionan una buena fuente para los requerimientos de la interfaz • Algo en el sistema debe proporcionar la capacidad para recibir “mensajes” provenientes de un actor • Algo en el sistema debe proporcionar la capacidad de enviar todos los “mensajes” dirigidos a un actor 388
  • 389.
    Diagrama de Secuenciaspara el Escenario de “Crear Cursos” aForm : theManager : theCourse anOffering dbMgr : dbCourse : dbOffering : : Registrar CurriculumForm : Course : (Course CurriculumMgr TransactionMgr DBCourse DBOffering 1: open 2: enter id 3: verify id 4: enter 5: create a 6: set number, name, description, 7: set number offerings, professor, 8: process 9: create course(number, name, description, credit hours, offerings,) 10: create(number, name, description,) 11: create offering(number, professor,) 12: create(professor, time,) 13: save 14: save(course) 15: get info 16: commit 17: save(offering) 18: get info 19: commit 389
  • 390.
    Requerimientos de laInterfaz de Usurio n Actor “Registrar” • Introduce la información necesaria para crear un Course y sus ofertas n Requerimientos de otros escenarios • El actor tiene la habilidad de crear, consultar, modificar y borrar Course, así como también ofertas de Course n Decisiones de diseño • Una ventana que contenga todas las opciones disponibles para el actor “Registrar” • Una ventana que contenga la información de Course • Una ventana que contenga información de ofertas de Course • Botones disponibles en las ventanas de Course y de ofertas de Course que permitan guardar, cancelar o borrar la información 390
  • 391.
    Ventana Principal delActor Registrar 391
  • 392.
  • 393.
    Ventana de Ofertasde Course 393
  • 394.
    Inscripción a Course registration schedule available John : form form courses Student 1: enter id 2: validate id 3: enter current semester 4: create new schedule 5: display 6: get courses 7: select 394
  • 395.
    Requerimientos para este Escenario n Actor “Student” • Debe proporcionar cursos seleccionados para el semestre actual • La lista de cursos disponibles se despliega al actor n Decisiones de diseño • Se crea una ventana que contenga listas de selección de cursos • Las listas contienen nombres de todos los cursos ofrecidos 395
  • 396.
  • 397.
    ¿Qué sucede cuándose presiona el botón OK? n Todos los constructores de la interfaz de usuario son diferentes • Algunos crean objetos que contienen información de la ventana • Otros crean estructuras de datos con información n Algunas técnicas comunes • 1. Las clases Control reciben los datos de una ventana y procesan los datos • Los datos de la ventana pasan de la ventana a la clase Control, • 2. El botón sabe que hacer con los datos en la ventana 397
  • 398.
    Clases Utility n El estereotipo <<utility>> se usa para una clase que contiene una colección de subprogramas libres • Los subprogramas libres son funciones no-miembro, por ejemplo, funciones que no pertenecen a una clase en particular n Las clases Utility se define generalmente; • Para proporcionar algunos servicios de algoritmos comunes, los servicios pueden reusarse en una variedad de contextos • Para librerías ocultas o aplicaciones no orientadas a objetos <<utility>> MathFunctions 398
  • 399.
    Ejemplo: Clase Utility n La clase utility SchedulingAlgorithms contiene funciones para resolver conflictos de horario <<utility>> Scheduling Algorithms 1 0..* <<controller>> Course RegistrationManager 1 1..* 399
  • 400.
    Ejemplo: Clase Utility(cont.) n Para evitar utilerías múltiples (funciones libres de C++) que conviertan las unidades de distancia, se puede crear una clase utility para empaquetar todas las funciones bajo una interfaz Usando Funciones Libres Usando Clases Utility de C++ (preferible) extern float #ifndef UNIT_UTILITIES #define UNIT_UTILITIES inchToCentimeter(float inch); extern float class/*_utility*/ Unit_Utilities { centimeterToInch public: (float centimeter); static float inchToCentimeter(float inch); static float centimeterToInch(float centimeter); }; #endif // UNIT_UTILITIES 400
  • 401.
    Clases Help n Durante el diseño, una clase puede agregarse como “help”, ya que desempeña alguna funcionalidad necesaria n Ejemplo: • El CurriculumForm debe verificar que el id introducido sea válido • Si la verificación se identifica con el formato del id, entonces la ventana puede desempeñar esta funcionalidad • Si la verificación se identifica con seguridad, entonces se necesita información adicional • Lista de id válidos • Esta clase se agrega al sistema 401
  • 402.
    Aparición de Patrones n Un patrón de diseño es una solución a un problema de diseño común n Un Patrón • Describe un problema común de diseño • Describe la solución al problema • Discute los resultados y trade-offs de la aplicación del patrón n Los patrones se están colectando, catalogando y usando para construir sistemas • Proporciona la capacidad de reusar diseño y arquitecturas exitosas • Da como resultado sistemas más fáciles de mantener • Incrementa productividad 402
  • 403.
    Adaptación de Patrones n Los sistemas de inscripción a curso tienen tres tipos de usuarios: alumnos, profesores y el administrador n Se creó una jerarquía de RegistrationUser para los diferentes tipos de usuarios n El tipo de usuario que se va a acrear depende de los datos introducidos n Problema: quien crea el tipo específico de usuario n El patron Factory Method puede usarse para crear el tipo correcto de usuario al momento de ejecución • Se le da el dato al factory y se le pide que cree el tipo correcto de objeto 403
  • 404.
    El Patrón Factory UserFactory creates RegistrationUser create (what) 1 1 Student Professor Registrar La creación (what) de la operación UserFactory La creación (what) de la operación UserFactory crea el tipo correcto de RegistrationUser crea el tipo correcto de RegistrationUser 404
  • 405.
    Otros Patrones n Prototype: crea un objeto copiando un objeto prototipo n Singleton: asegura que una clase tiene sólo una instancia y proporciona un punto global de acceso a la misma n Adapter: convierte la interfaz de una clase a otra interfaz n Iterator: proporciona una manera de accesar los elementos de un objeto agregación n Memento: captura y externaliza el estado interno de un objeto de modo que el objeto pueda restablecer este estado después (esto se hace sin romper la encapsulación) 405
  • 406.
    ¿Cuántas Clases senecesitan? n Varias..., clases simples quiere decir que cada clase • Encapsula menos de la inteligencia de todo el sistema • Es más reusable • Es más fácil de implementar n Pocas..., clases complejas quiere decir que cada clase • Encapsula una gran porción de la inteligencia de todo el sistema • Es menos propensa al reuso • Es más difícil de implementar Regla: Una clase debe tener un único propósito y bien enfocado Regla: Una clase debe tener un único propósito y bien enfocado Una clase debe hacer una cosa y hacerla bien Una clase debe hacer una cosa y hacerla bien 406
  • 407.
    Ejercicio: Diseño deClases n Discuta que clases adicionales pueden agregarse al modelo para facilitar las decisiones de diseño n Actualizar los diagramas, tanto como sea necesario 407
  • 408.
  • 409.
  • 410.
    Objetivos: Diseño deRelaciones n Usted podrá: n Determinar la navegación de las relaciones n Mejorar las relaciones de asociación y agregación n Discutir opciones de visibilidad de objetos n Discutir múltiples decisiones de diseño n Diseñar clases de asociación 410
  • 411.
    Navegación n En el análisis, las asociasiones son bi-direccionales n En el diseño, una asociación puede ser uni-direccional n Una flecha se agrega a la asociación para mostrar que la navegación solo va en una dirección Customer puede Customer puede Customer Order “hablar” con Order “hablar” con Order 0..* Order no puede Order no puede “hablar” con Customer “hablar” con Customer 411
  • 412.
    Decisiones de Navegación n Durante el diseño nos fijamos si en realidad es necesario navegar en ambas direcciones n La necesidad de navegación se revela en los casos de uso y en los escenarios • Dada una instancia de la clase A, ¿necesitamos encontrar todas las instancias asociadas de la clase B? • Dada una instancia de la clase B, ¿necesitamos encontrar todas las instancias asociadas de la clase A? 412
  • 413.
    Preguntas de Navegación n El sistema debe contestar preguntas como: • ¿De qué proveedor puedo comprar este producto? (producto - proveedor) • ¿Qué productos fueron ordenados para este proveedor en particular? (proveedor - producto) Supplier Product 1..* 1..* 413
  • 414.
    La Navegación Two-Wayvs. la Navegación One-Way n Las asociaciones two-way son más difíciles y costosas de implementar que las asociaciones one-way n Aunque se requiera la navegación two-way, una asociación one-way puede ser suficiente bajo ciertas circunstancias. Por ejemplo: • La navegación en una de las direcciones es poco frecuente y no tiene exigencias estrictas de desempeño, o • El número de instancias de una de las clases es muy pequeño 414
  • 415.
    Ejemplo: Simplificación deuna Asociación One-Way n Situación1: Frecuentemente necesito preguntar que proveedor(es) proporcionan cierto producto, pero sólo necesito pedir una lista de todos los productos proporcionados por un proveedor trimestralmente para el proceso de facturación • Implementar la dirección de Producto-a-Proveedor y buscar todas las instancias de Producto cuando se compile una lista de Producto para cada Proveedor n Situación 2: Sólo existen dos proveedores • Implementar sólo la dirección Producto-a-Proveedor y buscar todos los registros de Producto cuando necesite recorrer la asociación en la dirección opuesta Supplier Product 1..* 415
  • 416.
    Navegación para Agregaciones n Una agregación también puede ser uni-direccional n Se agrega una flecha a la línea de agregación Order OrderItem 1..* 416
  • 417.
    Refinando Agregaciones n Una relación de agregación quiere decir que el objeto origen debe contener conocimiento semántico del objeto destino n Las relaciones pueden ser de dos tipos: • Por referencia • Por valor 417
  • 418.
    Implicaciones Por-Valor yPor- Referencia n Por valor implica que los objetos se crean y destruyen como consecuencia de la creación y destrucción de otro objeto n En otras palabras, los tiempos de vida de los objetos relacionados son iguales n Por referencia implica que los tiempos de vida de los objetos relacionados pueden ser independientes n Por lo tanto, la selección de por valor o por referencia determina como se diseña para que el lenguaje de programación elegido (como C++) cree y borre un objeto 418
  • 419.
    Relaciones Por-Referencia n Las relaciones por-referencia denotan tiempos de vida independientes • Se muestra como un diamante vacío Catalogue Course 1..* 419
  • 420.
    Relaciones Por-Valor n Las relaciones por-valor indican tiempos de vida dependientes • Al crear el objeto se crea también el objeto relacionado • Al borrar el objeto se borra también el objeto relacionado n Por ejemplo, cuando se crea CourseSelectionWindow también se crea OKButton CourseSelectionWindow 1 1 OKButton 420
  • 421.
    Relaciones de Dependencia n Una relación de dependencia quiere decir que una clase depende de algunos servicios de otra clase n Una relación de dependencia es como una flecha punteada Client Supplier Un objeto Client depende de un objeto Supplier Un objeto Client depende de un objeto Supplier 421
  • 422.
    Relaciones de Dependencia(cont.) n Una relación de dependencia indica, ya sea que: n Las operaciones de la clase cliente crean objetos de la clase proveedor n Las operaciones de la clase cliente tienen firmas en donde aparecen clase de retorno o argumentos, por lo que son instancias o referencias a la clase proveedor 422
  • 423.
    Las Operaciones creanObjetos de la Clase Proveedor RegistrationManager process () #include “BillingSystem.h” void RegistrationManager::process(){ BillingSystem theInterface; … } BillingSystem 423
  • 424.
    Los Objetos Proveedorcomo Argumentos de una Operación TransactionManager class Course; saveCourse (Course&) class TransationManager { public: … void saveCourse(Course&); private: … Course }; 424
  • 425.
    Visibilidad de Objeto n Las relaciones proporcionan una ruta de comunicación entre objetos n Para que los objetos “hablen” deben ser visibles • La visibilidad de objeto determina el diseño de una relación Puedo ver . . . 425
  • 426.
    Opciones de Visibilidadde Objetos n Hay cuatro opciones de visibilidad n Global • El objeto proveedor es un objeto global n Parámetro • El objeto proveedor es un parámetro de una operación del objeto cliente n Local • El objeto proveedor es declarado localmente n Campo • El objeto proveedor es un campo en el objeto cliente 426
  • 427.
    Modelo de Análisis n La operación createCourse() de CurriculumController le pide al TransactionManager que guarde el nuevo objeto Course Diagrama de Clases Diagrama de Colaboración CurriculumController : CurriculumController createCourse () 1 1: saveCourse (Course) 1 TransactionManager : TransactionManager saveCourse (Course) 427
  • 428.
    Modelo de Diseño-- Visibilidad Global n El objeto TransactionManager se declara globalmente 1: saveCourse (Course) : CurriculumController G G : TransactionManager n La visibilidad global se traduce en la relación de dependencia CurriculumController TransactionManager createCourse () saveCourse (Course&) 428
  • 429.
    Visibilidad Global static TransactionManager theManager; class CurriculumController { public: void createCourse(); … }; class Course; void CurriculumController::createCourse() { Course *aNewCourse; … theManager.saveCourse(aNewCourse); … }; 429
  • 430.
    Modelo de Diseño-- Visibilidad de Parámetro n El objeto TransactionManager es un parámetro de la operación createCourse() del CurriculumController • El objeto TransactionManager sólo es visible a la operación createCourse 1: saveCourse (Course) : CurriculumController PG : TransactionManager n La visibilidad de parámetro se traduce en relación de dependencia CurriculumController TransactionManager createCourse (TransactionManager&) saveCourse (Course&) 430
  • 431.
    Visibilidad de Parámetro classTransactionManager; class Course; class CurriculumController { public: void createCourse(TransactionManager&); … }; void CurriculumController:: createCourse(TransactionManager& theManager) { Course *aNewCourse; … theManager.saveCourse(aNewCourse); … } 431
  • 432.
    Modelo de Diseño-- Visibilidad Local n El objeto TransactionManager se declara dentro de la operación createCourse() del CurriculumController • El objeto TransactionManager sólo es visible a la operación createCourse() 1: saveCourse (Course) : CurriculumController L G : TransactionManager n La visibilidad local se traduce a una relación de dependencia CurriculumController TransactionManager createCourse () saveCourse (Course&) 432
  • 433.
    Visibilidad Local #include“TransactionManager.h”; class Course; class CurriculumController { public: void createCourse(); … }; void CurriculumController::createCourse() { Course *aNewCourse; TransactionManager theManager; … theManager.saveCourse(aNewCourse); … } 433
  • 434.
    Modelo de Diseño-- Visibilidad de Campo n El objeto TransactionManager es un dato miembro de la clase CurriculumController n El objeto TransactionManager es visible a todas las operaciones de la clase CurriculumController 1: saveCourse (Course) : CurriculumController FG : TransactionManager n La visibilidad de campo se traduce a una relación de asociación (o agregación) CurriculumController TransactionManager createCourse () saveCourse (Course) 434
  • 435.
    Visibilidad de Campo #include “TransactionManager.h”; class Course; class CurriculumController { public: void createCourse(); … private: TransactionManager theManager; }; void CurriculumController::createCourse() { Course *aNewCourse; … theManager.saveCourse(aNewCourse); … } 435
  • 436.
    Ejemplo: Diseño deRelación n El CurriculumController es responsable por la administración de toda la información de Course. Course se crea y se guarda en la base de datos Curriculum. Un TransactionManager es responsable por las interfaz a la base de datos. Hay una clase DBCourse que sabe como guardar la información de Course pertinente. Cada Course puede tener entre 3 y 10 alumnos inscritos y tiene sólo un Professor. Un alumno puede inscribirse a un máximo de 4 cursos. Cada profesor imparte tres cursos. Se ejecuta un reporte listando cursos, el profesor y los alumnos inscritos para las tres primeras semanas del semestre. 436
  • 437.
    Modelo Antes delDiseño de la Relación CurriculumController 1 1 Course Student createCourse () 1..* 0..4 3..10 1 1 3 1 1 1 TransactionManager DBCourse Professor 1 1 saveCourse (Course) save (Course) 437
  • 438.
    Decisiones de Diseño n El CurriculumController usa al TransactionManager para cada Course que administra • La operación createCourse() no es la única operación que usa el TransactionManager • Se elige visibilidad de campo • El CurriculumController envía mensajes al TransactionManager, pero el TransactionManager no envía ningún mensaje al CurriculumController • La relación es uni-direccional (CurriculumController a TransactionManager) 438
  • 439.
    Decisiones de Diseño(cont.) n El CurriculumController crea un nuevo curso dentro de la operación createCourse() • Se elige la visibilidad local n La operación saveCourse() del TransactionManager se le pasa un objeto Course como parámetro • Se elige la visibilidad de parámetro • El TransactionManager usa al objeto DBCourse para guardar el objeto Course • Esta es la única operación que necesita al objeto Course • Se elige la visibilidad local 439
  • 440.
    Decisiones de Diseño(cont.) n Se le pasa un objeto Course a la operación salvar de DBCourse • Se elige visibilidad de parámetro n Un Course debe saber de sus alumnos para generar el reporte • Estos requerimientos no establecen que un alumno debe saber de sus cursos • La relación se hace uni-direccional n Un Course debe saber de su Professor para generar el reporte • Estos requerimientos no establecen que el Professor deba saber de sus cursos • La relación se hace uni-direccional 440
  • 441.
    Modelo Después delDiseño de Relación CurriculumController createCourse () Course Student 3..10 1 TransactionManager DBCourse Professor saveCourse (Course) save (Course) 1 441
  • 442.
    Multiplicidad para Relaciones n La multiplicidad es el número de instancias que participan en una asociación n Las estimaciones iniciales de multiplicidad hechas durante el análisis deben actualizarse y refinarse durante el diseño n Todas las relaciones de asociación y agregación deben tener multiplicidad especificada 442
  • 443.
    Implementación de Asociaciones con Multiplicidad de 1 o 0 a 1 n Si cada curso tiene como máximo un Professor, entonces cada objeto Course puede incluir un apuntador simple al objeto Professor correspondiente class Professor; class Course { Course 0..* 1 Professor public: Teacher // public info private: Professor *teacher; … }; 443
  • 444.
    Opcionalidad n Si una liga es opcional, se debe incluir una operación para probar la existencia de la liga n Por ejemplo, si un Professor puede estar en sabático, debe incluirse una operación apropiada en la clase Professor para probar la liga Professor Course teaching( ) 1 0..* 444
  • 445.
    Diseño de Opcionespara Multiplicidad de Más de Uno n La multiplicidad de más de uno se diseña generalmente empleando clases “contenedoras “ • Una clase contenedora es la clase cuyas instancias son colecciones de otros objetos n Las clases contenedoras comunes incluyen: • Conjuntos, listas, diccionarios, pilas, colas, ... • Las clases contenedoras son con frecuencia clases con parámetros que se muestran como: Item List 445
  • 446.
    Ejemplo de Clasecon Parámetro Item #include “List.h” List class Course { public: … private: Course StudentList Student List<Student> students; 1 … } 446
  • 447.
    Notación de ClasesContenedoras n Para reducir el desorden en los diagramas de clases, las clases contenedoras no se muestran típicamente en los diagramas de clases n Si se necesita el tipo de contenedor para comunicación, se debe usar una nota List Course Student 3..10 447
  • 448.
    Clase Asociación n Una clase de asociación contiene información que pertenece a una liga entre objetos no a cada objeto implicado en la relación Course Student 4 3..10 grade 448
  • 449.
    Diseño de Clasesde Asociación n Durante el diseño, las clases de asociación evolucionan: n Se transforma a la clase de asociación en una clase interpuesta entre las otras dos clases n Se establecen asociaciones con la multiplicidad apropiada entre la clase de asociación y las otras dos clases • La multiplicidad siempre es UNA de la clase de asociación a las clases ligadas n Diseño de asociaciones nuevas • La navegación debe ser bi-direccional o uni-direccional 449
  • 450.
    Diseño de Clasesde Asociación (cont.) Course Report Student grade 4 1 1 3..10 450
  • 451.
    Ejercicio n Usando escenarios y diagramas de clases desarrollados n Discutir consideraciones del diseño de relación n Actualice los diagramas de clases para mostrar las consideraciones del diseño de relación 451
  • 452.
  • 453.
    Diseño de Atributosy Operaciones 453
  • 454.
    Objetivos: Diseño deAtributos y Operaciones n Usted podrá: • Discutir el control de acceso y encapsulación • Usar la notación para control de acceso en diagramas de clases • Diseñar representaciones de atributos • Representación de tipos de atributos y valores por omisión • Listar los cuatro tipos de operaciones comúnmente proporcionadas por una clase • Representar las firmas de las operaciones • Describir los niveles de control de acceso que soporta C++ • Discutir la relación de amistad y la encapsulación • Discutir las opciones de diseño disponibles en C++ para atributos • Discutir el soporte en C++ para operaciones 454
  • 455.
    Control de Accesoy Encapsulación n La notación UML tiene la habilidad de especificar el acceso de otros atributos y operaciones • El acceso debe ser público, protegido o privado n El control de acceso se usa para reforzar la encapsulación Operaciones protegidas Operaciones públicas Atributos y privadas 455
  • 456.
    Control de AccesoEspecificado en Diagramas de Clases n Los símbolos de acceso pueden ser usados en un icono de clase para indicar la accesibilidad de atributos y operaciones n El control de acceso se especifica para atributos y operaciones precediendo el nombre del miembro con los símbolos siguientes: • +Acceso publico • #Acceso protegido • - Acceso privado n El acceso es otorgado explícitamente por la clase misma y el cliente no la toma por la fuerza 456
  • 457.
    Ejemplo: Control deAcceso Especificado en Diagramas de Clases Course -maxStudents -name +addStudent () +isFull () #determineCourseSize() 457
  • 458.
    Representaciones de Atributo n Durante el análisis, fue suficiente especificar sólo el nombre del atributo • A menos que la representación sea un requerimiento que restrinja al diseñador n Las representaciones de atributos deben completarse en el diseño n Se debe asignar un valor por omisión para cada atributo • attributeName : Type = Default n Ejemplo: algunos atributos de la clase Document son: • Title : String • Author : String • LastRevised : Date = Today 458
  • 459.
    Determinación de Tiposde Dato de Atributos n El diseñador debe seleccionar una representación de dato apropiada para cada atributo de entre los siguientes: • Tipo de dato preconstruido (Built-in data type) • Tipo de dato definido por el usuario (User-defined data type) • Clases definidas por el usuario (User-defined class) n Los detalles más finos del diseño de atributos dependen del lenguaje de implementación Análisis Diseño Course Course - name - name : String - description - description : DayType - maxStudents - maxStudents : short = 0 459
  • 460.
    Diseño de Operaciones n Durante el análisis • Las operaciones se crean para implementar el comportamiento expresado en los casos de uso n Durante el diseño • Los detalles a nivel de implementación se agregan a las operaciones • Se agregan operaciones para completar la clase 460
  • 461.
    Tipos de Operaciones n Una clase completa debe tener operaciones categorizadas en cuatro tipos*: • Funciones de administración • Funciones de implementación • Funciones de acceso • Funciones de ayuda *[Lippman, Stanley. C++ Primer,. Reading, Mass.: Addison-Wesley, 1991] 461
  • 462.
    Operaciones de Administración n Se debe proporcionar un subconjunto de operaciones de cualquier clase para proporcionar las funciones de administración de la clase • Inicialización, creación, destrucción, administración de memoria, etc. • Las operaciones de administración proporcionan estos servicios n Las más comunes son los constructores y los destructores • Desempeñan la creación y destrucción de objetos de la clase n Todas las clases necesitan proporcionar al menos estas operaciones de administración 462
  • 463.
    Operaciones de Implementación n El subconjunto de operaciones de una clase que proporcionan las capacidades básicas de la clase se llaman operaciones de implementación n Estas operaciones son las que prevalecen desde el análisis n Si se requiere o necesita cualquier rastreo, estas son las operaciones que se rastrean en el diseño 463
  • 464.
    Operaciones de Acceso n El diseño orientado a objetos encapsula la representación interna de la clase n Concepto de ocultamiento de información n Las operaciones que soportan el acceso a los atributos se les hace referencia como operaciones de acceso n También conocidas como operaciones de obtener (get) y colocar (set) n Cualquier atributo puede tener estas operaciones de acceso 464
  • 465.
    Operaciones de Ayuda n El ultimo conjunto de operaciones son aquellas llamadas operaciones de ayuda, que se encargan de las funciones auxiliares de la clase que generalmente no es para el usuario • No son parte de la interfaz pública • Operaciones privadas son usadas solo por miembros de la clase • Generalmente se invocan por otras operaciones de la clase 465
  • 466.
    Firmas de lasOperaciones n Durante el diseño, se determina la firma de cada operación • Argumentos o parámetros de la operación • Tipo de datos de retorno de la operación Análisis Diseño Course Course +addStudent (newStudent) +addStudent (newStudent : Student*):void 466
  • 467.
    Atributos y Operacionespara la Clase Course Course -description : char* -name : char* -daysOffered : DayType -creditHours : short -location : UniversityPlace -maxStudents : short +isFull ():bool +addStudent (newStudent : Student*):void +getDescription ():const char* +save ():void +getName ():const char* +getDaysOffered ():dayType +getCreditHours ():short +getLocation ():const UniversityPlace +Course (name : char&,location : UniversityPlace&,desc : char&,days : DayType,hours : short,maxStudents : short) +~Course () +Course ( : const Course&) 467
  • 468.
    Control de Accesoen C++ n El control de acceso de UML mapea directamente a C++. El control de acceso se indica por las siguientes palabras clave: n Public: Accesible a todos los clientes n Protected: Accesible solo a todas las subclases n Private: Accesible solo a la clase misma n En C++, los atributos se llaman variables miembro mientras las operaciones se llaman funciones miembro. n El acceso para todos los atributos son usualmente privados o protegidos n El acceso para todas las operaciones que son parte de la interfaz externa es publica 468
  • 469.
    Ejemplo: Control deAcceso para miembros de una Clase class Course { public: void addStudent(Student*); bool isFull(); Operación pública … protected: int determineCourseSize(); Operación protegida private: String name; short maxStudents; Atributos privados }; 469
  • 470.
    Friendship (Amistad) n Un amigo es una clase u operación cuya implementación puede hacer referencia a partes privadas o protegidas de otra clase n En C++ el mecanismo de amistad permite a una clase distinguir ciertas clases privilegiadas que tienen los derechos para ver las partes protegidas y privadas de la clase Precaución: Friendships (Amistades) rompen la Precaución: Friendships (Amistades) rompen la encapsulación de la clase, y por lo tanto debe encapsulación de la clase, y por lo tanto debe escogerse cuidadosamente y usarse sólo escogerse cuidadosamente y usarse sólo cuando sea absolutamente necesario cuando sea absolutamente necesario 470
  • 471.
    Atributos de C++ n Los atributos se llaman variables miembros en C++ n C++ proporciona un rango de tipos de datos para cada variable miembro. n Built-in types incluyen: • Integers, including short, int, long • Floating point numbers, including float, double, long double • Character, including char n Derived types incluyen arrays, strings, structures, unions y pointers n User-defined types como enum y typedef n User-defined classes 471
  • 472.
    Tipos Built-in yDerived class Course { public: Course -description : char* … -name : char* private: -creditHours : short -maxStudents : short char *description; char *name; short creditHours; short maxStudents; }; 472
  • 473.
    Tipos Definidos porel Usuario enum dayType { MW, MWF, TT }; class Course { public: Course … -description : char* private: -name : char* -creditHours : short char *description; -maxStudents : short char *name; -daysOffered : dayType short creditHours; short maxStudents; dayType daysOffered; }; 473
  • 474.
    Clase Definida porel Usuario class UniversityPlace { #include “UniversityPlace.h”; public: enum dayType { MW, MWF, TT }; … class Course { private: public: char *building; … short room; private: }; char *description; Course char *name; -description : char* -name : char* short creditHours; -creditHours : short short maxStudents; -maxStudents : short -daysOffered : DayType dayType daysOffered; -location : UniversityPlace UniversityPlace location; }; 474
  • 475.
    Soporte para Operacionesen C++ n Las operaciones se llaman funciones miembro en C++ n C++ normalmente distingue las operaciones de administración de otras operaciones n C++ soporta los conceptos de parámetros y valores de retorno en operaciones 475
  • 476.
    Operaciones de Administraciónen C++ n Cada clase en C++ define operaciones de administración llamadas constructores y destructores n Si los constructores y los destructores no están definidos, se proporcionan versiones por omisión n Un constructor define como se construyen los objetos de una clase n Un constructor de copia se usa para hacer una copia de un objeto existente n Un destructor define lo que sucede cuando se destruye un objeto 476
  • 477.
    Constructores n Los constructores son funciones miembro que tienen el mismo nombre de la clase misma n Los constructores se usan también para iniciar las variables miembro de una clase class Course { public: Course(); // Constructor ... private: short maxStudents; }; Course::Course() : maxStudents(0) // Constructor { // Constructor code }; 477
  • 478.
    Constructores de Copia n Los constructores de copia se usan para iniciar un objeto usando los valores de otro objeto n El compilador creará una copia por omisión si no se provee una n Todos los datos miembros en la copia se inician copiando el valor del objeto original n Los constructores de copia son llamados cuando los objetos se pasan por valor 478
  • 479.
    Constructor de Copia (PorOmisión) Correcto class Circle { public: Circle(float x, float y, float r): xPosition(x), yPosition(y), radius(r) {}; private: float xPosition; float yPosition; float radius: }; 479
  • 480.
    ¿Qué sucede aquí? class Employee { public: Employee(const char *n= ““); ~Employee () {delete []name;}; private: char *name; }; Employee::Employee(const char *n): name(new char[strlen(n)+1]) { strcpy(name,n); } 480
  • 481.
    Clase Employee Correcta class Employee { public: Employee(const char *n= “ “); Employee(const Employee &); ~Employee () {delete []name;}; private: char *name; }; Employee::Employee(const char *n): name(new char[strlen(n)+1]) { strcpy(name,n); }; Employee::Employee(const Employee& emp): name(new char[strlen(emp.name)+1]){ strcpy(name,emp.name); } 481
  • 482.
    Constructor de Copia n El constructor de copia por omisión no puede ser usado si: n La clase contiene apuntadores o referencias a otros objetos n Se hace extra procesamiento cuando se crea y borra un objeto • Ejemplo: incrementar el número de objetos en el constructor y decrementar el número de objetos en el destructor 482
  • 483.
    Inicialización de Miembros n ¿Diseño bueno o malo? class Employee { public: Employee(const String&); private: String name; }; Employee::Employee(const String& n) { name = n; } Indicación: ¿Cómo se inicia name? Indicación: ¿Cómo se inicia name? 483
  • 484.
    Inicialización de Miembros n Se inicia el nombre de atributo usando el constructor string (cadena) por omisión n El valor del nombre se cambia en el cuerpo del constructor 484
  • 485.
    Inicialización de Miembros- Diseño n El nombre del atributo inicia usando el constructor String(String &) class Employee { public: Employee(const String&); private: String name; }; Employee::Employee(const String& n): name(n) {} 485
  • 486.
    Inicialización de Miembros n ¿Qué hay acerca de tipos built-in? n Los tipos Built-in no tienen constructores entonces no importa Buen estándar Buen estándar Siempre usar inicio de miembro Siempre usar inicio de miembro Código más fácil de leer Código más fácil de leer Código más fácil de mantener Código más fácil de mantener 486
  • 487.
    Orden de Inicialización n ¿Qué sucede aquí? extern String LookupEmployee(long); class Employee { public: Employee(long); private: String name; long id; }; Employee::Employee(long i): id(i), name(LookupEmployee(id)) {}; 487
  • 488.
    Orden de Inicialización n La inicialización ocurre en el orden especificado en la declaración de la clase NO en la orden en el constructor n En el ejemplo, LookupEmployee se llama usando una variable inicializada n Arreglar n Cambiar el orden en la declaración de la clase Buen estándar Buen estándar La orden de declaración de la clase y el orden de La orden de declaración de la clase y el orden de inicialización deben ser las mismas inicialización deben ser las mismas 488
  • 489.
    Operaciones de C++ n C++ soporta pasar parámetros a operaciones y regresar un solo elemento como tipo de regreso n Por ejemplo: bool addStudent (const Student & student); n C++ soporta diferentes modos de pasar parámetros n Pasar por valor n Pasar por referencia 489
  • 490.
    Pasar por Valor n Mecanismo por omisión en C++ n Se hace una copia del parámetro actual n Cambia al parámetro formal, no cambia el parámetro actual void Course::addStudent(Student aStudent){ … aStudent.setName(“noName”); // name of aStudent set to “noName” }; main() { Student theStudent; theStudent.setName(“Terry”); aCourse.addStudent(theStudent); // name is still set to Terry … } 490
  • 491.
    Pasar por Referencia n Soportado por argumentos de referencia y apuntadores n No se hace copiado de objetos n Los cambios del parámetro formal cambian al parámetro actual void Course::addStudent(Student& aStudent){ … aStudent->setName(“noName”); // name of aStudent set to “noname” }; main() { Course aCourse; Student *theStudent; theStudent = new Student; theStudent->setName(“Terry”); aCourse.addStudent(theStudent); // name is “noName” … } 491
  • 492.
    Apuntadores y Referencias n Un apuntador no es lo mismo que una referencia n Una apuntador • Es una dirección • Puede cambiar para apuntar a otro objeto • Puede no estar iniciado • Puede ser nulo n Una referencia • Es un alias para un objeto • Debe estar iniciado • Una vez iniciado, la referencia no puede cambiar para referenciar a otro objeto 492
  • 493.
    Apuntador y Referencia(cont.) n Un apuntador debe usarse si • Hay una posibilidad de que que no hay nada a que referenciar (nulo) • Hay necesidad de referenciar a cosas diferentes en tiempos diferentes n Se debe usar una referencia si • Hay siempre un objeto que referenciar • No hay necesidad de cambiar la referencia 493
  • 494.
    Modificador Const n Un objeto const no puede ser modificado n Al pasar una referencia a un objeto const se preserva lo que se pasó por medio de semánticas de valor sin tener que copiar void foo(const T& object) // copy constructor not called { // cannot modify object } 494
  • 495.
    Tipos de Retorno n C++ soporta regresar un objeto por valor o por referencia n El regreso por valor resulta en la copia del objeto que regresa que se esta haciendo • Puede ser costoso n El regreso por referencia no resulta en una copia • Requiere que el cliente asuma la carga de administración de memoria 495
  • 496.
    Ejercicio n Usando los escenarios desarrollados, discutir consideraciones de diseño de atributo y operación 496
  • 497.
  • 498.
  • 499.
    Objetivos: Diseño deHerencia n Usted podrá: • Refinar la jerarquía de herencia del nivel de análisis para incrementar el reuso • Discutir como soporta C++ la herencia • Definir polimorfismo y describir como se soporta en C++ • Diferenciar entre ligado estático y dinámico • Usar funciones virtuales para solicitar ligado dinámico • Determinar el nivel apropiado de acceso para datos y funciones miembros con herencia 499
  • 500.
    Jerarquías de Herencia n Durante el análisis, se establecen jerarquías de herencia n Durante el diseño, las jerarquías de herencia se refinen a: • Incrementar reuso • Incorporar clases de implementación • Incorporar clases de librería disponibles Superclass Subclass 500
  • 501.
    Refinar la Jerarquíade Herencia n Se revisan los diagramas de análisis para identificar cosas comúnes de • Atributos, y/o • Operaciones, y/o • Asociaciones n Se definen superclases nuevas que contengan elementos comunes n Esto reduce la cantidad de código que se va a escribir y refuerza la uniformidad, no se puede manejar un mismo elemento en dos clases diferentes si las dos clases lo heredan de una superclase común 501
  • 502.
    Ejemplo: Refinar laJerarquía Mortgage SavingAccount interestRate interestRate getPayment( ) getBalance( ) 0..* 1..* granted to is owned by Customer 1..* 1..* Diagrama de Clase a Nivel Análisis 502
  • 503.
    Ejemplo: Refinar laJeraquía (cont.) La asociación con InterestBearingItem Customer se cambió a Customer interestRate superclase 1..* 1..* getRate() interestRate se hereda a ambas subclases y debe manejarse de forma idéntica Mortgage SavingsAccount getPayment() Ambos getPayment() y getBalance() getBalance() requieren cálculo del interés que es llevado a cabo por el Diagrama de Clases a Nivel de Diseño método heredado getRate() 503
  • 504.
    Soporte de Herenciaen C++ n C++ proporciona soporte a nivel lenguaje, directo para herencia de atributos y operaciones n La terminología de herencia es • Clase “Base” en lugar de superclase Base Class • Clase “Derivada” en lugar de subclase Derived Class 504
  • 505.
    Las Operaciones seheredan de Clases Base en C++ class BankAcct { Las operaciones declaradas en public: una clase base no necesitan void deposit (); repetirse en la clase derivada }; class SavingsAcct : public BankAcct { public: void getBalance (); }; Un cliente de una clase derivada puede invocar miembros public void client () { de clases derivadas y base SavingsAcct myAcct; myAcct.getBalance (); // derived myAcct.deposit (); // base }; 505
  • 506.
    Los Atributos seheredan de Clases Base en C++ Los atributos declarados en un clase base no necesitan repetirse en la clase derivada class base { private: int x; }; class derived : public base { Objetos private: int z; aBase aDerived }; x x z 506
  • 507.
    Polimorfismo n El término griego Polymorphos quiere decir “tener muchas formas” • El polimorfismo es la habilidad de definir una sola interfaz con implementaciones múltiples n Los clientes pueden invocar operaciones de objetos sin saber su tipo • Los clientes pueden implementarse “genéricamente” para invocar una operación de objeto sin saber el tipo de objeto • Si los objetos se agregan eso soporta la misma operación, el cliente no necesita ser modificado para manejar al objeto nuevo n El polimorfismo permite que los clientes manipulen objetos en términos de su superclase común 507
  • 508.
    Ejemplo de Polimorfismo Animal talk () Lion Tiger talk () talk () Sin Polimorfismo Con Polimorfismo if animal = “Lion” then do the Animal talk do the Lion talk else if animal = “Tiger” then do the Tiger talk end 508
  • 509.
    Polimorfismo y C++ n El polimorfismo es una ventaja de herencia realizada durante la implementación n C++ porporciona soporte para el polimorfismo a través de • Ligado dinámico (o tardío) • Funciones virtuales n El diseñador debe permitir explícitamente el polimorfismo a través del uso apropiado de funciones miembro virtuales de C++ virtual void talk(); 509
  • 510.
    Ligado Dinámico vs.Estático n Normalmente el método particular que se va a ejecutar como resultado de una llamada de función se conoce al momento de compilación. Esto se llama ligado estático (o temprano) • El compilador reemplaza la llamada de función con código diciendo el programa que direcciona para saltar y poder encontrar esa función n Con el polimorfismo, el tipo particular de objeto para el que un método se va a invocar no se conoce hasta el tiempo de ejecución • El compilador no puede proporcionar la dirección al tiempo de compilación • El programa selecciona al método mientras esta corriendo n Esto se conoce como ligado tardío o ligado dinámico 510
  • 511.
    Herencia y Destructores n Si un destructor no es virtual entonces el borrado a través del apuntador de la clase base llamará al destructor incorrecto, si el objeto al que apunta es de la clase derivada Ball Ball () ~Ball () Baseball Baseball () ~Baseball 511
  • 512.
    Herencia y Destructores(cont.) class Ball { class Baseball : public Ball { public: public: Ball(); Baseball(); ~Ball(); ~Baseball(); } } main() { Ball *myBall; myBall = new Baseball(); OK -- Baseball constructor called delete myBall; not OK -- Ball destructor called } 512
  • 513.
    Virtual vs. Desempeño n Los logros en el desempeño se realizan al no tener que ejecutar declaraciones switch/case n Cada vez que se llama a una función virtual, la función correcta que se va a invocar se determina al examinar la tabla virtual n Se establecen algunas instrucciones por llamada n Las funciones no pueden ponerse en línea (inline) n El compilador no sabe que poner en línea n Mayor impacto en funciones pequeñas n El tiempo para la llamada de función es un porcentaje significativo del tiempo de ejecución de función Sugerencia: Si el uso de funciones virtuales yyclases virtuales Sugerencia: Si el uso de funciones virtuales clases virtuales hace más claro el diseño, yyel código más fácil de entender hace más claro el diseño, el código más fácil de entender entonces probablemente valga la pena entonces probablemente valga la pena 513
  • 514.
    Diseño del Polimorfismo n En el diseño, el desarrollador debe: • Examinar las jerarquías de herencia y determinar cuales operaciones deben ser polimorfas • Actualizar los diagramas de clases para indicar que cada clase y/o subclase deben proporcionar un método para una operación dada • Declarar todas las operaciones polimorfas que van a ser virtuales en la clase base que los define 514
  • 515.
    Clases Abstractas n Una clase abstracta es aquella a la que no se le pueden crear instancias n Las clases abstractas deben tener al menos una subclase para ser útiles Animal Abstract talk () Todos los objetos Todos los objetos son ya sea leones o son ya sea leones o tigres; no hay tigres; no hay Lion Tiger instancias directas instancias directas de Animal de Animal talk () talk () 515
  • 516.
    Diseño de ClasesAbstractas n Las clases abstractas se diseñan de forma diferente de las demás clases n Con las clases abstractas el diseñador asume que las subclases agregaran su estructura y comportamiento n La clase abstracta no necesita proporcionar métodos para cada operación que define n La clase abstracta debe proporcionar el protocolo para todas las operaciones polimorfas 516
  • 517.
    Ejemplo: Clases Abstractasy Protocolos Animal El Animal no necesita El Animal no necesita Abstract talk () especificar el método talk() especificar el método talk() Los métodos deben ser Los métodos deben ser provistos por Lion yyTiger para provistos por Lion Tiger para talk() yyestos métodos deben talk() estos métodos deben Lion Tiger conformar al protocolo definido conformar al protocolo definido talk () talk () en Animal en Animal 517
  • 518.
    C++ y ClasesAbstractas n C++ permite que un desarrollador afirme que un método de una clase abstracta no pueda ser invocado directamente, al iniciar su declaración a cero n Tal método es llamado una función virtual pura n C++ prohibe la creación de instancias de clases que contengan funciones virtuales puras class Animal { ... virtual void talk() = 0; Asegura que no se pueden }; crear instancias de Animal 518
  • 519.
    Clases Abstractas yHerencia n Hay 3 consideraciones de diseño importantes de funciones involucradas aquí: n Proporcionar una interfaz de función solo a clases derivadas: • Usar una función virtual pura n Proporcionar una interfaz de función y comportamiento por omisión a clases derivadas: • Usar una función virtual (no pura) por omisión (con código que puede prevalecer) n Proporcionar una interfaz de función y comportamiento obligatorio a clases derivadas: • Usar una función no virtual (que NO está diseñada para permanecer en subclases) 519
  • 520.
    Derivación Pública vs.Derivación Privada n Las subclases se implementan en C++ usando derivación pública n Con derivación pública, la interfaz pública de la clase base permanece pública en la clase derivada n Los objetos de la clase derivada pueden accesar todos los elementos públicos de la clase base n Las funciones miembro de la clase derivada tienen acceso a todos los atributos y operaciones públicas y con herencia protegida 520
  • 521.
    Derivación Pública vs.Derivación Privada (cont.) n C++ también permite derivación privada en la que la interfaz pública de la clase base se convierte en privada en la clase derivada n Los objetos de la clase derivada no pueden accesar elementos públicos de la clase base n Las funciones miembro de la clase derivada aún tiene acceso a todos los atributos y operaciones protegidos y públicos n La derivación privada es de ayuda en implementaciones de reuso - no es herencia verdadera y no se usa para implementar subclases n Significa “se implementa en términos de” 521
  • 522.
    Principio de Substituciónde Liskov n Si para cada objeto O1 de tipo S hay un objeto O2 de tipo T tal que para todos los programas P definidos en términos de T, el comportamiento de P no se cambia cuando O1 se substituye por O2 entonces S es un subtipo de T Menos formal: n Puede siempre pasar un apuntador o referencia a una clase derivada a una función que espera un apuntador o referencia a una clase base Estas reglas representan el estilo ISA de programación Estas reglas representan el estilo ISA de programación 522
  • 523.
    Estilo de ProgramaciónISA List insertTop (Item) insertBottom (Item) removeTop () removeBottom () ¿Siguen estas clases el estilo ¿Siguen estas clases el estilo insert (Item, de programación ISA? de programación ISA? position) Stack 523
  • 524.
    Estilo de ProgramaciónISA (cont.) n Las clases NO siguen el estilo ISA de programación n Un Stack necesita algo del comportamiento de una List pero no todo n Si un método espera una List, entonces la operación insert (position) debe ser exitosa n Si a un método se le pasa un Stack, entonces el insert(position) fallará Una subclase (Clase derivada) de estilo ISA NO Una subclase (Clase derivada) de estilo ISA NO debe tener más restricciones que su superclase debe tener más restricciones que su superclase 524
  • 525.
    Factoring n A veces puede usarse Factoring para arreglar el problema • No puede usarse si la clase List no puede cambiarse SequentialContainer insertTop (Item) removeTop () List Stack insertBottom (Item) removeBottom () insert (Item, position) 525
  • 526.
    Delegación n También se puede usar delegación para arreglar el problema List void Stack::push(Item I) { Stack body.insertTop(I); insertBottom (Item) }; push (Item) removeBottom () pop () 1 insert (Item, position) const Item Stack::pop() { remove (position) return body.removeTop(); }; 526
  • 527.
    Herencia Privada n La herencia privada se usa a veces para circumvent problemas de estilo ISA void Stack::push(Item I) { List insertTop(I); insertBottom (Item) }; removeBottom () insert (Item, position) const Item Stack::pop() { remove (position) insertTop (Item) return removeTop(); }; Private inheritance push() y pop() pueden accesar push() y pop() pueden accesar Stack métodos de List pero las instancias de métodos de List pero las instancias de push (Item) Stack no pueden Stack no pueden pop () 527
  • 528.
    Herencia Múltiple n Con herencia múltiple, una subclase hereda de más de una superclase Asset InsurableItem InterestBearing BankAccount 528
  • 529.
    Soporte de C++para Herencia Múltiple n Mucha más complejidad asociada con el diseño de herencia múltiple n Con frecuencia sobre-utilizado n Deben resolverse dos problemas: • Colisión de nombres o • Herencia repetida 529
  • 530.
    Colisiones de Nombres n Las colisiones de nombres resultan cuando dos o mas superclases definen el mismo atributo u operación n Ambos InsurableItem y InterestBearingItem tienen atributos que se llaman presentValue Asset InterestBearing Un objeto BankAccount quiere Un objeto BankAccount quiere InsurableItem presentValue presentValue imprimir el presentValue imprimir el presentValue ¿Cuál se imprime? ¿Cuál se imprime? BankAccount 530
  • 531.
    Resolución de Colisionesde Nombres n Esta ambigüedad puede resolverse al calificar totalmente el nombre para indicar la fuente de la declaración n InsurableItem::presentValue O n InterestBearingItem::presentValue 531
  • 532.
    Ejemplo: Herencia Múltiple n Entre más compleja sea la herencia, es más difícil detectar colisiones de nombres Asset InterestBearing InsurableItem RealEstate Security BankAccount Stock Bond Savings Checking 532
  • 533.
    Ejemplo: Declaraciones enC++ class Asset . . . class InsurableItem : public Asset class InterestBearing : public Asset class BankAccount : public InsurableItem, public InterestBearing . . . class RealEstate : public Asset, public InsurableItem . . . class Security : public InterestBearing . . . class SavingsAccount : public BankAccount . . . class CheckingAccount : public BankAccount . . . class Stock : public Security . . . class Bond : public Security . . . 533
  • 534.
    Herencia Repetida n Otro problema asociado con la herencia múltiple es la herencia repetida. Considere el siguiente ejemplo: Window WindowWithDialogBox WindowWithScrollbar ScrollingWindowWithDialogBox 534
  • 535.
    Herencia Repetida (cont.) n Note la figura de diamante distintiva de la jerarquía de herencia n Esto indica que la misma clase base esta siendo heredada por una clase derivada más de una vez. Por ejemplo, ScrollingWindowWithDialogBox esta heredando Window más de una vez n Con la herencia repetida, dos o más superclases comparten una superclase común n ¿Cuántas copias de los atributos de Windows se incluyen en instancias de ScrollingWindowWithDialogBox? 535
  • 536.
    Clases Base Virtuales n En este caso, ScrollingWindowWithDialogBox solo necesita una copia de las variables de la instancia Window n Para asegurar que una copia es heredada, se declara la clase base común como virtual cuando está siendo derivada a clases base intermedias n Todas las clases intermedias derivan de la clase base común de forma virtual n La única copia que es heredada se considera que se comparte por las múltiples rutas de derivación n Uso del operador de resolución de ámbito para referir a elementos compartidos heredados de la clase base común no se requiere con la derivación virtual 536
  • 537.
    Ejemplo: Clase BaseVirtual n Window es la clase base n Cada ventana tiene una “x” y una “y” que indican el punto de origen n La función miembro Window::paint pinta la ventana básica class Window { public: ... virtual void paint( ) { // paint window stuff only } protected: Point x, y; // origin ... } ; 537
  • 538.
    Ejemplo: Clases Derivadas Intermedias n Las clases derivadas intermedias derivan de Windows de manera virtual n Cada clase derivada hereda una “x” y una “y” de la clase base y la función miembro Window::paint class WindowWithDialogBox : class WindowWithScrollBar : public virtual Window { public virtual Window { public: public: … ... void dialogBoxPaint( ); void scrollBarPaint( ); // paint only dialog box // paint only scrollbar virtual void paint( ); virtual void paint( ); // invoke Window::paint // invoke Window::paint and // and // paint scrollbar // paint dialog box ... }; } ; 538
  • 539.
    Ejemplo: Herencia Repetida n La clase derivada ScrollableWindowWithDialogBox hereda una “x” y una “y”, porque ambas clases padre fueron virtualmente derivadas de Window n Note que esta clase no incluye la palabra reservada virtual de sus clases padres class ScrollableWindowWithDialogBox : public WindowWithDialogBox , public WindowWithScrollBar { public: ... virtual void paint( ); ... } ; 539
  • 540.
    Herencia Repetida yFunciones Miembro n Un error común al diseñar una clase derivada del más bajo-nivel es invocar la función común de la clase base más de una vez n Por ejemplo, suponga que hace un código de la función pintar del más bajo-nivel como sigue: virtual void ScrollableWindowWithDialogBox::paint() { WindowWithDialogBox::paint( ); WindowWithScrollBar::paint( ); } n Entonces la funcion Window::paint sera invocada dos veces, una de WindowWithDialogBox::paint y otra de WindowWithScrollBar::paint n Esto podría ser solo una perdida de tiempo o podría (en algunos sistemas) corromper la imagen en pantalla 540
  • 541.
    Herencia Repetida yFunciones Miembro (cont.) n En el código siguiente, se ha evitado el error virtual void ScrollableWindowWithDialogBox::paint( ) { Window::paint( ) ; // invoke base class paint only once ! WindowWithDialogBox::dialogBoxPaint( ); // then paint the dialog box WindowWithScrollBar::scrollBarPaint( ); // then paint the scrollbar } 541
  • 542.
    Herencia Múltiple n La herencia múltiple es conceptualmente directa y se necesita para modelar exactamente varios problemas del mundo-real n Los diseñadores novatos tienden al sobreuso de la herencia múltiple, por ejemplo, el usar herencia múltiple cuando se podría usar la agregación n En la práctica, la herencia múltiple es un problema de diseño complejo y puede guiar a dificultades de implementación, incluyendo colisiones de nombres y herencia repetida Use herencia múltiple solo cuando sea necesario, Use herencia múltiple solo cuando sea necesario, yy siempre con precaución! siempre con precaución! 542
  • 543.
    Ejercicio n Discuta las decisiones de diseño de herencia para el problema que se esta desarrollando 543
  • 544.
  • 545.
  • 546.
    Objetivos: Resumen n Usted podrá: • Resumir el curso listando las actividades que ocurren durante cada fase del proceso de desarrollo 546
  • 547.
    Resumen -- ElProceso de Desarrollo n El proceso de desarrollo es una vista de alto nivel del proceso completo al desarrollar un producto de software • Comprende cuatro fases: inicio, elaboración, construcción y transición n Las fases del ciclo de desarrollo se descomponen en una serie de iteraciones a través de las cuales el software evoluciona incrementalmente • Cada iteración se planea para controlar los elementos de mayor riesgo del sistema n Las actividades del análisis y diseño ocurren durante las fases de inicio, elaboración y construcción 547
  • 548.
    Resumen -- FaseInicio n El propósito de esta fase es establecer el caso de uso para un nuevo sistema o para la actualización de un sistema existente n Las salidas incluyen un conjunto de requerimientos esenciales para el proyecto, una valoración inicial del riesgo y, opcionalmente un prototipo conceptual y un modelo inicial del dominio n Un prototipo conceptual puede construirse para validar hipótesisy percepciones de riesgo (tales como funcionalidad, desempeño, tamaño, complejidad, base tecnológica) • Frecuentemente se intenta no tomar en cuanta al código 548
  • 549.
    Resumen -- Fasede Elaboración n Esta fase envuelve el análisis del dominio del problema y el establecimiento de una base arquitectónica para el sistema n Las salidas de esta fase consisten en un modelo del comportamiento del sistema que incluye el modelo de casos de uso, escenarios, un modelo del dominio, una arquitectura de ejecutables y una estrategia de diseño que controle los mecanismos clave necesarios para el desarrollo del sistema n El modelo de casos de uso contiene actores y casos de uso • Un actor es alguien o algo que intercambia información activamente con el sistema, proporciona entradas al sistema o recibe pasivamente información del sistema • Un caso de uso demuestra funcionalidad desempeñada por el sistema en respuesta a estímulos de un actor 549
  • 550.
    Resumen -- Fasede Elaboración (cont.) n Un escenario es una secuencia de declaraciones expresadas en lenguaje natural • Es una instancia de un caso de uso n Los objetos se identifican al examinar los escenarios y los objetos relacionados se agrupan en clases n El modelo de dominio inicial se actualiza para contener las clases nuevas n Las arquitecturas buenas se construyen en capas bien definidas de abstracción donde cada capa • Representa una abstracción coherente • Tiene una interfaz bien definida y controlada • Se construye sobre facilidades bien definidas y controladas en niveles menores de abstracción 550
  • 551.
    Resumen -- Fasede Elaboración (cont.) n La arquitectura se valida al crear una versión ejecutable que: • Aplique alguno o todos los comportamientos de los escenarios claves • Su código de producción sea de calidad • Considere la mayoría, sino todas, las interfaces arquitectónicas claves n Un mecanismo clave es una decisión basada en estándares, políticas y prácticas comunes de la organización • Ejemplo: administración de recursos, persistencia, manejo de errores, distribución de objetos y migración 551
  • 552.
    Resumen -- Fasede Construcción n En esta fase, las iteraciones envuelven el ciclo de vida del desarrollo de la aplicación • El desarrollo se realiza a través de una secuencia de iteraciones n Cada iteración se compone de • Una valoración del análisis, diseño e implementación actual para identificar riesgos críticos sin resolver • Los escenarios ilustran los riesgos del modelo actual del análisis y diseño, por lo que se extiende a manejar estos riesgos • La implementación se extiende para retirar los riesgos identificados • Después de que se revisó y probó la implementación, se actualiza el modelo del análisis y diseño para reflejar los cambios hechos durante la implemetación n La siguiente iteración inicia con el modelo actualizado 552
  • 553.
    Resumen -- Fasede Construcción (cont.) n Las actividades de esta fase incluyen: • La adición de clases al modelo reflejando el “CÓMO” debe desarrollarse el sistema • Clases de Interface • Clases de Controller • Clases de Helping • Refinamiento de la navegación de relaciones • Especificación del tipo de contenido de relación • Por referencia • Por valor • La madurez de algunas relaciones con respecto a su dependencia 553
  • 554.
    Resumen -- Fasede Construcción (cont.) n Actividades de diseño (continuación) • Especificación de tipos de datos de los atributos • Especificación de las firmas de las operaciones • Adición de operaciones de administración, acceso y ayuda • Refinamiento de jerarquías de herencia para incrementar la reutilización • Adición de funciones virtuales para soportar el polimorfismo • Resolución de problemas de herencia múltiple 554
  • 555.
  • 556.
  • 557.
    Análisis y Diseño n G. Booch, Object-Oriented Analysis and Design with Applications, Benjamin/Cummings, Redwood City, CA, 1994 n J. Rumbaugh, et al., Object-Oriented Modeling and Design, Prentice- Hall, Englewood Cliffs NJ, 1991 n I. Jacobson, et al., Object-Oriented Software Engineering, Addison- Wesley, Reading, MA, 1992 n R. Wirfs-Brock et al., Designing Object-Oriented Software, Prentice- Hall, Englewood Cliffs NJ, 1990 n N. Wilkinson, Using CRC Cards, SIGS Books, New York, NY, 1995 n M. Lorenz, Object-Oriented Software Development, Prentice-Hall, Englewood Cliffs NJ, 1993 557
  • 558.
    Análisis y Diseño n G. Booch (edited by ed Eykholt), Best of Booch: Designing Strategies, SIGS Books & Multimedia, New York, NY, 1996 n J. Rumbaugh, OMT Insights: Perspectives on Modeling from the Journal of Object-Oriented Programming, SIGS Books & Multimedia, New York, NY, 1996 558
  • 559.
    Diseño de Interfazde Usuario n D. Collins, Designing Object-Oriented User Interfaces, Benjamin/Cummings, Redwood City, CA, 1995 n G. Lee, Object-Oriented GUI Application Development, Prentice Hall, Englewood Cliffs, NJ, 1993 559
  • 560.
    Arquitectura n E. Rechtin, Systems Architecting: Creating and Building Complex Systems, Prentice-Hall, Englewood Cliffs NJ, 1991 n E. Gamma, et al., Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995 n D. E. Perry, and A. L. Wolf, Foundations for the Study of Software Architecture, ACM Soft. Eng. Notes, 17 (4), Oct. 1992, pp. 40-52 n P. Kruchten, The 4+1 View Model of Architecture, IEEE Software, November 1995 560
  • 561.
    Software General n S. McConnell, Code Complete - A Practical Handbook of Software Construction, Microsoft Press, Redmond, WA, 1993 n J. McCarthy, Dynamics of Software Development, Microsoft Press, Redmond, WA, 1995 n F. P. Brooks, Jr., The Mythical Man-Month, Addison-Wesley, Reading, MA, 1995 n D. Firesmith and E. Eykholt, Dictionary of Object Technology, SIGS Books, New York, NY, 1995 561
  • 562.
    Metrics n M. Lorenz and J. Kidd, Object-Oriented Software Metrics, Prentice Hall, Englewood Cliffs, NJ, 1994 562
  • 563.
    Administración de Proyectos n G. Booch, Object Solutions, Addison-Wesley, Reading, MA, 1996 563
  • 564.
    Mecanismos Clave n R. Orfali, D. Harkey, and J. Edwards, The Essential Distributed Objects Survival Guide, John Wiley & Sons, New York, NY, 1996 n D. Barry, The Object Database Handbook, John Wiley & Sons, New York, NY, 1996 564
  • 565.
    Libros Introductorios deC++ n S. Lippman, C++ Primer, Addison-Wesley, Reading, MA , 1991 n Stroustrup, C++ Programming Language, Addison-Wesley, Reading, MA, 1991 n P. Winston, On to C++, Addison-Wesley, Reading, MA, 1994 n S. Davis, C++ for Dummies, IDG Books, Foster City, CA, 1994 n B. Eckel, Thinking C++, Prentice-Hall, Englewood Cliffs, NJ, 1995 565
  • 566.
    Libros Intermedios deC++ n S. Meyers, Effective C++, Addison-Wesley, Reading MA, 1992 n R. Murray, C++ Strategy and Tactics, Addison-Wesley, Reading MA, 1993 n T. Cargill, C++ Programming Style, Addison-Wesley, Reading MA, 1992 n R. Martin, Designing Object-Oriented C++ Applications Using the Booch Method, Prentice Hall, Englewood Cliffs, NJ, 1995 n J. Soukup, Taming C++, Addison-Wesley, Reading MA, 1994 n A. Riel, Object-Oriented Design Heuristics, Addison-Wesley, Reading MA, 1996 n S. Meyers, More Effective C++, Addison-Wesley, Reading MA, 1996 566
  • 567.
    Libros Avanzados deC++ n Flaymig, Practical Data Structures in C++ n Vilot/Booch, C++ Programmer's Power Pack n Stroustrup, The Nature and Design of C++, Addison-Wesley, Reading, MA, 1994 n J. Coplien, Advanced C++, Addison-Wesley, Reading, MA, 1992 567
  • 568.
    Problema de Nómina Este ejemplo esta basado en la aplicación de nómina encontrado en el libro “Designing Object Oriented C++ Applications Using the Booch Method,” Robert C Martin, Prentice- Hall, 1995. 568
  • 569.
    Declaración del Problemade Nómina n El sistema consiste de una base de datos de empleados de una compañía y sus datos asociados, así como tarjetas de chequeo. Todos los empleados se identifican por un número ID único de empleado. El sistema debe pagar a cada empleado la cantidad correcta, a tiempo, por el método que ellos especifican. n Algunos empleados trabajan pagándoseles una cuota por hora. Entregan tarjetas de chequeo diariamente que registran la fecha y número de horas trabajadas. Si alguno trabaja más de 8 horas, se les paga el 50% adicional de su cuota correspondientes por cada hora extra. Los empleados por hora reciben su pago cada semana. n Otros empleados reciben un salario y aún así entregan sus tarjetas de chequeo diariamente, ya que contienen las horas trabajadas. De esta manera, el sistema pueda guardar un registro de las horas trabajadas. Estos empleados reciben su pago el último día laborable del mes. 569
  • 570.
    Declaración del Problemade Nómina n Algunos de los empleados asalariados reciben también una comisión basada en sus ventas. De este modo, entregan sus ordenes de compra, en donde se reflejan la fecha y monto de la venta. La cuota de comisión se determina para cada empleado, siendo esta del 10%, 15%, 25% o 35%. Los vendedores reciben su pago cada quince días. n Inicialmente, el cheque de pago del empleado debe recogerse con el Pagador. Los empleados pueden cambiar su método de pago. Pueden obtener sus cheques de pago por correo a la dirección postal que deseen o pueden solicitar depósito directo en una cuenta de banco de su elección. 570
  • 571.
    Declaración del Problemade Nómina n El Administrador de Nómina mantiene actualizada la información del empleado. El Administrador de Nómina es responsable de agregar, borrar y cambiar la información de los empleados; tal como su nombre, dirección, método de pago y clasificación de pago (por hora, asalariado, comisionado) n La aplicación de nómina se ejecutará cada viernes y el último día laborable del mes. Le pagará a los empleados correspondientes en ese día. El sistema sabrá en que fecha se les debe pagar a los empleados, entonces generará registros de pagos de la última vez que el empleado recibió su pago en la fecha especificada. 571
  • 572.
  • 573.
    Solución del ProblemaNómina Este ejemplo esta basado en la aplicación de nómina encontrado en “Designing Object Oriented C++ Applications Using the Booch Method,” Robert C Martin, Prentice-Hall, 1995. 573
  • 574.
    Ejercicio: Comportamiento del Sistema n Usando el problema provisto por el instructor n Dibuje un diagrama de casos de uso n Escriba una definición para cada actor n Para un casos de uso • Escriba una breve descripción (dos sentencias máximo) • Escriba el flujo de eventos • Liste algunos escenarios posibles 574
  • 575.
    Diagrama de Casosde Uso Hourly Employee Salaried Time Management Employee Commissioned Employee Purchase Order Management Maintain Employee Information Payroll Administrator Run Payroll Bank 575
  • 576.
    Actores para elSistema de Nómina n Empleado por hora • Persona que recibe un pago por hora. Pago de tiempo extra (1 1/2 más de la cuota por hora) se recibe por todas las horas trabajadas en exceso de 40 horas por semana n Empleado asalariado • Persona que se le paga un salario fijo n Empleado comisionado • Empleado asalariado que tambien recibe una comision por sus ventas n Administrador de nomina • Persona responsable del mantenimiento de la informacion de los empleados. El administrador genera la nómina n Banco • Entidad receptora de los pagos de nómina depositados en cuentas definidas por los empleados 576
  • 577.
    Breves Descripciones n Mantenimiento de Informacion de Empleado • Este caso de uso es iniciado por el Administrador de Nómina. Proporciona la capacidad de agregar, modificar, borrar y/o revisar la informacion del empleado necesaria para el sistema de nomina n Ejecucion de Nómina • Este caso de uso es iniciado por el Administardor de Nómina. Proporciona un mecanismo para generar los pagos a los empleados 577
  • 578.
    Breves Descripciones n Administración de Tiempo • Este caso de uso es iniciado por cualquier tipo de Empleado. Proporciona la capacidad de registrar, modificar, borrar y/o revisar horas trabajadas para una semana específica n Administración de Ordenes de Compra • Este caso de uso es iniciado por un Empleado Comisionado. Proporciona la capacidad de registrar, modificar, borrar y/o revisar ordenes de compra 578
  • 579.
    Flujo de Eventospara el Caso de Uso de Mantenimiento de Información de Empleado n 2.1 Pre-condiciones Ninguna n 2.2 Flujo Principal Este caso de uso inicia cuando el Administrador de Nómina introduce su número id de empleado. El sistema verifica que el número id de empleado introducido sea válido. El sistema despliega las actividades disponibles y le pide al usuario que seleccione una: ADD, DELETE, MODIFY, REVIEW, o QUIT. Si la actividad seleccionada es ADD, el A-1: Se desempeña un subflujo de New Employee. Si la actividad seleccionada es DELETE, el A-2: Se desempeña un subflujo de Delete an Employee. Si la actividad seleccionada es MODIFY, el A-3: Se desempeña un subflujo de Modify an Employee. 579
  • 580.
    Flujo de Eventospara el Caso de Uso de Mantenimiento de Información de Empleado Si la actividad seleccionada es REVIEW, el A-4: se desempeña un subflujo de Review an Employee. Si la actividad seleccionada es QUIT, el caso de uso termina. El usuario puede cancelar el caso de uso en cualquier punto en el flujo de eventos, en el que los cambios no toman lugar para el empleado que se está procesando y el caso de uso inicia de nuevo. n 2.3 Flujos alternos A-1: Agregar un Empleado Nuevo El sistema generará un número id de empleado y desplegará la pantalla del empleado. El sistema llenará el número id del empleado. El usuario debe llenar la siguiente información: nombre y dirección del empleado. El usuario deberá escribir el tipo de empleado: por hora, asalariado o comisionado. 580
  • 581.
    Flujo de Eventospara el Caso de Uso de Mantenimiento de Información de Empleado Si el tipo de empleado es por hora, el usuario deberá proporcionar el rango de horas. Si el tipo de empleado es asalariado, el usuario deberá proporcionar el salario. Si el tipo de empleado es comisionado el usuario deberá proporcionar el salario y el porcentaje de comisión. El usuario deberá proporcionar el método de pago: recogerlo con el Pagador, depósito directo o correo. Si el metodo de pago es depósito directo, el usuario deberá proporcionar el número de cuenta del banco y su dirección. Si el método de pago es correo, el usuario deberá proporcionar la direccion postal. Toda la información es validada por el sistema (E-1) después de haberla introducido. Cuando ya se introdujo toda la información, el usuario le pide al sistema que procese al empleado. El sistema guarda la información para su uso futuro (E-2) y el caso de uso inicia de nuevo. 581
  • 582.
    Flujo de Eventospara el Caso de Uso de Mantenimiento de Información de Empleado A-2: Borrar un empleado El usuario introduce un número de id. El sistema lo valida (E-3) y despliega la información del empleado. El sistema pide al usuario que confirme el borrado. Si se confirma, el empleado es borrado del sistema. Si el borrado no es confirmado, la peticion se cancela. El caso de uso inicia de nuevo. A-3: Modificar un Empleado El usuario introduce un número de id. El sistema lo valida (E-3) y despliega la información del empleado. El usuario actualiza los campos requeridos. El sistema verificará la información después de que se introdujo (E-1). Después de que se han hecho todos los cambios, el usuario le dice al sistema que procese al empleado. El sistema guarda la información para uso futuro (E-2) y el caso de uso inicia de nuevo. 582
  • 583.
    Flujo de Eventospara el Caso de Uso de Mantenimiento de Información de Empleado A-4: Revisar un Empleado El usuario introduce un número de id. El sistema lo valida (E-2) y despliega la información del empleado. Cuando el usuario indica que ya terminó de revisar, el caso de uso inicia de nuevo. n 2.4 Flujos de excepción E-1: Información de empleado invalida. El usuario sabe que se ha introducido información invalida. El usuario puede re-introducir la información para terminar el caso de uso. E-2: El sistema no puede guardar la información del empleado. El usuario sabe porque no se puede guardar la información. El caso de uso inicia de nuevo. E-3: La información del empleado no puede ser desplegada. El usuario sabe porque la información no puede ser desplegada. El caso de uso inicia de nuevo. 583
  • 584.
    Flujo de eventospara el Caso de Uso de Ejecución de Nómina n 2.1 Pre-condiciones Ninguna n 2.2 Flujo Principal El caso de uso empieza cuando el Administrador de Nómina introduce su número id de empleado. El sistema verifica que el número id de empleado introducido sea valido y capaz de generar la nómina (E-1). El usuario introduce la fecha de nómina y le pide al sistema que genere la nómina. El sistema obiente los datos de todos los empleados que deben recibir pago la fecha deseada (E-2). El sistema calcula el pago y las deducciones legales. Si el método de pago es recogerlo con el Pagador o Correo, el sistema imprime un cheque de pago. Si elmétodo de pago es depósito bancario, el sistema creará una transacción bancaria. El caso de uso termina cuando todos los empleados que deban recibir pago en la fecha deseada hayan sido procesados. 584
  • 585.
    Flujo de eventospara el Caso de Uso de Ejecución de Nómina n 2.3 Flujos Alternos Ninguno n 2.4 Flujos de Excepción E-1: Id invalido introducido. El usuario puede re-introducir un número id o terminar el caso de uso. E-2: La informacion del empleado no puede ser obtenida. El usuario sabe porque no se puede obtener la información. El caso de uso i nicia de nuevo desde el principio. 585
  • 586.
    Flujo de Eventospara el Caso de Uso de Administración de Tiempo n 2.1 Pre-condiciones Ninguna n 2.2 Flujo Principal El caso de uso inicia cuando el Empleado introduce su número id de empleado. El sistema verifica que el número id de empleado introducido sea valido (E-1). El sistema despliega las avtividades disponibles y le pide al usuario que seleccione una: ADD, DELETE, MODIFY, REVIEW, o QUIT. Si la actividad seleccionada es ADD, el A-1: Se desempeña un subflujo de Add a New Timecard. Si la actividad seleccionada es DELETE, el A-2: Se desempeña un subflujo Delete a Timecard. 586
  • 587.
    Flujo de Eventospara el Caso de Uso de Administración de Tiempo Si la actividad seleccionada es MODIFY, the A-3: Se desempeña un subflujo de Modify a Timecard. Si la actividad seleccionada es REVIEW, el A-4: Se ejecuta un subflujo de Review a Timecard. Si la actividad seleccionada es QUIT, el caso de uso termina. El usuario puede cancelar el caso de uso en cualquier punto del flujo de eventos y el caso de uso inicia de nuevo. 587
  • 588.
    Flujo de Eventospara el Caso de Uso de Administración de Tiempo n 2.3 Flujos alternos A-1: Agregar una Tarjeta de tiempo nueva El sistema desplegara la pantalla de la tarjeta de tiempo. El usuario debera llenar la siguiente informacion: numero id de empleado, fecha y horas trabajadas. Cuando ya se introdujo toda la informacion, el usuario le pide al sistema que procese la tarjeta de tiempo. El sistema asocia la tarjeta de tiempo con el empleado correcto, guarda la informacion para uso futuro (E-2) y el casos de uso inicia de nuevo. A-2: Borrar una Tarjeta de tiempo El usuario introduce el numero id de empleado y la fecha. El sistema retrieves (E-3) y despliega la informacion de la tarjeta de tiempo. Se le pregunta al usuario si confirma el borrado. Si lo confirma, se borra la tarjeta de tiempo del sistema. Si no se confirma el borrado, se cancela la peticion. El casos de uso inicia de nuevo. 588
  • 589.
    Flujo de Eventospara el Caso de Uso de Administración de Tiempo A-3: Modificar Timecard El usuario introduce el número de id del empleado y la fecha. El sistema obtiene (E-3) y despliega la información de timecard. El usuario actualiza el número de horas trabajadas y le pide al sistema que procese el timecard. El sistema guarda la información para uso futuro (E-2) y el caso de uso inicia de nuevo. A-4: Revisar Timecard El usuario introduce un número de id del empleado y una fecha. El sistema obtiene (E-3) y despliega la información de timecard. El usuario indica que ya finalizó la revisión y el caso de uso inicia de nuevo. 589
  • 590.
    Flujo de Eventospara el Caso de Uso de Administración de Tiempo n 2.4 Flujos de Excepción E-1: Id introducido no válido. El usuario puede re-introducir un número de id o finaliza el caso de uso. E-2: El sistema es incapaz de guardar la información de timecard. El usuario sabe porque no se puede guardar la información. El caso de uso inicia de nuevo. E-3: No se puede obtener la información de timecard. El usuario sabe porque no se pudo obtener la información. El caso de uso inicia de nuevo. 590
  • 591.
    Flujo de Eventospara el Caso de Uso de Administración de la Orden de Compra n 2.1 Pre-condiciones Ninguna n 2.2 Flujo Principal Este caso de uso inicia cuando el empleado introduce su número de id. El sistema verifica que el número de id sea válido (E-1). El sistema despliega las actividades disponibles y pide que seleccione una: ADD, DELETE, MODIFY, REVIEW, o QUIT. Si la actividad seleccionada es ADD, el A-1: Se desempeña un subflujo de agregacion de New Purchase Order. Si la actividad seleccionada es DELETE, el A-2: Se desempeña un un subflujo de borrado de Delete a Purchase Order. 591
  • 592.
    Flujo de Eventospara el Caso de Uso de Administración de la Orden de Compra Si la actividad seleccionada es MODIFY, el A-3: Se desempeña un subflujo de modificación Modify a Purchase Order. Si la actividad seleccionada es REVIEW, el A-4: Se desempeña un subflujo de revisión de Purchase Order. Si la actividad seleccionada es QUIT, el caso de uso termina. El usuario puede cancelar el caso de uso en cualquier punto del flujo de eventos, el caso de uso inicia de nuevo. 592
  • 593.
    Flujo de Eventospara el Caso de Uso de Administración de la Orden de Compra n 2.3 Flujos alternos A-1: Agregar New Purchase Order El sistema despliega la pantalla de orden de compra. El usuario debe llenar la siguiente información: número de orden de compra, fecha, producto comprado, cantidad de la venta, nombre del cliente y dirección del cobro del cliente. Cuando se introdujo toda la información, el usuario le pide al sistema que procese la orde. El sistema guarda la información para uso futuro (E-2) y el caso de uso inicia de nuevo. 593
  • 594.
    Flujo de Eventospara el Caso de Uso de Administración de la Orden de Compra A-2: Borrar una orden de compra El usuario introduce un número de id de empleado y un número de orden de compra. El sistema obtiene (E-3) y despliega la información de la orden de compra. Se le pide al usuario que confirme el borrado. Si lo confirma, se borra la orden de compra del sistema. Si no se confirma, se cancela la petición. El caso de uso inicia de nuevo. A-3: Modificar orden de compra El usuario introduce un número de id de empleado y un número de orden de compra. El sistema obtiene (E-3) y despliega información de la orden de compra. El usuario actualiza los campos necesarios y le pide al sistema que procese la orden de compra. El sistema guarda la información para uso futuro (E-2) y el caso de uso inicia de nuevo. 594
  • 595.
    Flujo de Eventospara el Caso de Uso de Administración de la Orden de Compra A-4: Revisión de la orden de compra El usuario introduce el número de id de empleado y el número de la orden de compra. El sistema obtiene (E-3) y despliega la información de la orden de compra. Cuando el usuario indica que ya termino de revisar, el caso de uso inicia de nuevo. n Flujos de Excepción E-1: Id introducido no valido. El usuario puede re-introducir el número de id o finaliza el caso de uso. E-2: El sistema es incapaz de guardar la información de la orden de compra. El usuario sabe porque no se pudo guardar la información. El caso de uso inicia de nuevo desde el principio. E-3: La información de la orden de compra no puede ser obtenida. El usuario sabe porque no se pudo obtener la información. El caso de uso inicia desde el principio. 595
  • 596.
    Algunos Escenarios parael Caso de Uso de Mantenimiento de la Información de Empleado n Crear un empleado por hora n Crear un empleado comisionado n Crear un empleado asalariado n Cambiar una categoria de pago de empleado n Cambiar un método de entrega de pago de empleado n Cambiar otra informacion de empleado n Revisar informacion de empleado n Borrar un empleado 596