Vista previa del material en texto
Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 1/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] Proceso para construir DSD y DCD Diseño de Sistemas 1. Índice 1. Índice .................................................................................................................................. 1 2. Introducción ........................................................................................................................ 1 2.1. Propósito del documento ................................................................................................ 1 2.2. Alcance del documento................................................................................................... 2 2.3. Definiciones, abreviaturas y acrónimos .......................................................................... 2 2.4. Documentos Relacionados ............................................................................................. 2 2.5. Visión general del documento ........................................................................................ 2 3. Proceso para construir Diagrama de Secuencia de Diseño (DCD) y Diagrama de Clases de Diseño (DSD) ........................................................................................................................... 2 3.1. Desarrollo del proceso paso a paso sobre el ejemplo.................................................... 2 3.1.1. DCD inicial ............................................................................................................... 2 3.1.2. DSD evento 1 (crearNuevaVenta)........................................................................... 3 3.1.2.1. Crear líneas de vida iniciales ............................................................................... 3 3.1.2.2. Crear menaje para el evento ............................................................................... 4 3.1.2.3. Mensaje Create a Venta ...................................................................................... 5 3.1.2.3.1. Controlar necesidad de variable de instancia .................................................. 5 3.1.2.3.2. Dibujar mensaje y retorno en el DSD............................................................... 5 3.1.2.3.3. Agregar mensaje en el DCD ............................................................................ 6 3.1.2.3.4. Agregar Notas en el DSD si hay código no representado por el dibujo........... 6 3.1.2.4. Mensaje Create de la colección........................................................................... 7 3.1.3. DSD evento 2 (introducirArticulo) ............................................................................ 9 3.1.3.1. Crear Líneas de Vida iniciales ............................................................................. 9 3.1.3.2. Crear Mensaje para el evento.............................................................................. 9 3.1.3.3. Mensaje BuscarProdcuto................................................................................... 10 3.1.3.3.1. Mensaje getId ................................................................................................. 11 3.1.3.3.2. Retorno del Mensaje ...................................................................................... 13 3.1.3.4. Mensajes para obtener Descripción y Precio .................................................... 14 3.1.3.5. Mensaje para crear instancia LineaDeVenta..................................................... 17 3.1.3.6. Mensaje para Agregar la Linea de Venta a la colección ................................... 19 3.1.3.7. Cálculo del subtotal............................................................................................ 21 3.1.3.8. DSD completo evento 2 ..................................................................................... 22 3.1.4. DCD completo para eventos 1 y 2........................................................................ 23 3.2. Proceso para hacer DCD y DSD simultáneamente:..................................................... 24 4. Historia de Versiones del documento............................................................................... 24 2. Introducción 2.1. Propósito del documento Especificar las actividades a realizar para construir los diagramas de secuencia de diseño y los diagramas de clase de diseño en la asignatura Diseño de Sistemas. Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 2/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 2.2. Alcance del documento Las consignas de este documento aplican a todos los alumnos de la asignatura Diseño de Sistemas de la carrera de Ingeniería en Sistemas de Información dictada en la Universidad Tecnológica Nacional - Facultad Regional Rosario. 2.3. Definiciones, abreviaturas y acrónimos DSD � Diagrama de Secuencia de Diseño DCD � Diagrama de Clase de Diseño 2.4. Documentos Relacionados Documento Nombre / Ubicación del archivo Fuente DR1 – Políticas de Diagramas UML Nombre: Politicas_de_Diagramas_UML_v1_15.pdf Ubicación: http://es.groups.yahoo.com/group/ds_utn_rosario/files Enrique Porta Luciano Ripani 2.5. Visión general del documento Esta solución esta basada en el ejemplo presentado por Larman en el libro UML y patrones. Nuestra solución no coincide exactamente con la solución propuesta por Larman, ya que este documento se basa en las políticas de nuestra cátedra (ver DR1 – Políticas de Diagramas UML). En la sección 3 de este documento se presenta un ejemplo del proceso para hacer DSD y DCD. Vamos a realizar solo los eventos crearNuevaVenta e introducirArticulo . No vamos a hacer los eventos realizarPago y finalizarVenta para simplificar este trabajo. Para dibujar los diagramas utilizaremos Rational. La versión que estamos utilizando de Rational (IBM Rational® Rose® Developer for Java™) tiene algunas limitaciones ya que esta basada en UML 1.4. 3. Proceso para construir Diagrama de Secuencia de Diseño (DCD) y Diagrama de Clases de Diseño (DSD) 3.1. Desarrollo del proceso paso a paso sobre el ej emplo 3.1.1. DCD inicial En el DCD Procesar Venta creamos las clases que están el Modelo de Dominio (MD) y que estén involucradas en el caso de uso (en este apunte solo limitado a los eventos crearNuevaVenta e introducirArticulo ), o sea creamos EspecificacionDelProducto , LineaDeVenta y Venta. Luego creamos las clases que no están en el MD. En este caso, agregamos al DCD inicial las clases ControladorProcesarVenta y CatalogoDeProductos (a esta clase le agregamos el estereotipo Singleton). Finalmente teniendo en cuenta que en el MD las clases son clases candidatas, debemos revisar la coherencia del DCD para determinar si hay que eliminar alguna clase, o dividir una clase en dos o mas clases, o juntar varias clases en una clase. Esta revisión deberá realizarse continuamente mientrasse construye los DSD. Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 3/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] El Diagrama de Clases inicial nos queda: «singleton» CatalogoDeProductos ControladorProcesarVenta EspecificacionDelProducto Venta LineaDeVenta 3.1.2. DSD evento 1 (crearNuevaVenta) 3.1.2.1. Crear líneas de vida iniciales Luego creamos en el diagrama de secuencia crearNuevaVenta la línea de vida para el actor Cajero. Ponemos el Cajero porque XDE no nos permites originar un mensaje si no hay una línea de vida, pero la política fijada por la cátedra no lo exige. Luego creamos la línea de vida de la clase ControladorProcesarVenta y nos queda: Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 4/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.2.2. Crear menaje para el evento Luego agregamos al DSD el mensaje como CrearNuevaVenta(). Ahora se agrega a la clase ControladorProcesarVenta la operación crearNuevaVenta(). «singleton» CatalogoDeProductos ControladorProcesarVenta + crearNuevaVenta ( ) EspecificacionDelProducto Venta LineaDeVenta Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 5/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.2.3. Mensaje Create a Venta Ahora comenzaremos a agregar las líneas de vida y los mensajes al DSD. Comencemos con el mensaje create() desde ControladorProcesarVenta a Venta 3.1.2.3.1. Controlar necesidad de variable de insta ncia Antes de agregar un mensaje en el DSD primero tenemos que plantearnos lo siguiente: 1) A que clase se enviará el mensaje (en este caso Venta) 2) ¿Debemos guardar el objeto obtenido o creado, para que lo use otro evento? Si es así, necesito asignarlo a una variable de instancia del controlador, y crear la asociación en caso de que no haya sido creada previamente. Para eso tenemos que crear la asociación entre ControladorProcesarVenta y Venta, y agregar la variable de instancia ventaActual:Venta a la clase ControladorProcesarVenta ControladorProcesarVenta + ventaActual : Venta + crearNuevaVenta ( ) Venta 0..1 - ventaActual 1 3.1.2.3.2. Dibujar mensaje y retorno en el DSD Después de crear en el DCD la asociación entre las clases ControladorProcesarVenta y Venta, creamos la línea de vida de la clase Venta y agregamos el mensaje create() desde ControladorProcesarVenta a Venta. También creamos los mensajes de retorno. El DSD nos queda: Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 6/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.2.3.3. Agregar mensaje en el DCD Ahora agregamos en la clase Venta la operación create() Venta + create ( ) 0..1 - ventaActual 3.1.2.3.4. Agregar Notas en el DSD si hay código no representado por el dibujo Luego agregamos una nota para indicar como se inicializan los atributos fecha y hora (fecha = date() y hora = time() ) El DSD nos queda Ahora agregamos en la clase Venta los atributos fecha y hora Venta + fecha + hora + create ( ) Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 7/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.2.4. Mensaje Create de la colección De la misma manera que con el mensaje anterior, ahora analizamos el mensaje create desde Venta a la colección LineaDeVenta. Antes de agregar un mensaje en el DSD primero tenemos que plantearnos lo siguiente: 1) A que clase se enviará el mensaje (en este caso LineaDeVenta) 2) ¿Debemos guardar el objeto obtenido o creado, para que lo use otro evento? Si es así, necesito asignarlo a una variable de instancia, y crear la asociación en caso de que no haya sido creada previamente. Para eso tenemos que crear la asociación entre Venta y LineaDeVenta, y agregar el atributo líneas: array de LineaDeVenta Venta + fecha + hora + lineas : array de LineaDeVenta + create ( ) LineaDeVenta 1..* 1 Después de crear en el DCD la asociación entre las clases Venta y LineaDeVenta, creamos la línea de vida el multiobjeto LineaDeVenta en el DSD. Luego agregamos el mensaje create() desde Venta a LineaDeVenta y agregamos el mensaje de retorno. Como el mensaje es a la colección del multiobjeto y no a la clase LineaDeVenta, no se agrega la operación create() a la clase LineaDeVenta. Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 8/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] Por último agregamos notas para documentar la asignación en variables de instancias ventaActual y el array de LineaDeVenta El DSD nos queda: El DCD nos queda: ControladorProcesarVenta + ventaActual : Venta + crearNuevaVenta ( ) Venta + fecha + hora + lineas : array de LineaDeVenta + create ( ) 0..1 - ventaActual 1 LineaDeVenta 1..* 1 Proceso para construir DSD y DCD - Diseño de SistemasAutor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 9/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3. DSD evento 2 (introducirArticulo) Luego creamos en el diagrama de secuencia introducirArticulo la línea de vida para el actor Cajero. 3.1.3.1. Crear Líneas de Vida iniciales Luego creamos la clase ControladorProcesarVenta en el DSD, y nos queda: 3.1.3.2. Crear Mensaje para el evento Luego agregamos al DSD el mensaje introducirArticulo(id,cantidad) Ahora agregamos en la clase ControladorProcesarVenta la operación introducirArticulo con los parámetros id y cantidad. ControladorProcesarVenta + ventaActual : Venta + introducirArticulo ( [in] id , [in] cantidad ) + crearNuevaVenta ( ) Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 10/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.3. Mensaje BuscarProdcuto Vamos a agregar el BuscarProdcuto mensaje desde ControladorProcesarVenta a CatalogoDeProductos Antes de agregar otro mensaje en el DSD primero tenemos que plantearnos lo siguiente: 1) A que clase se enviará el mensaje (en este caso CatalogoDeProductos) 2) ¿ Tenemos alguna variable en el DCD que me permita acceder a esa clase?. a) Para eso tenemos que crear la asociación entre ControladorProcesarVenta y CatalogoDeProductos, y agregar el atributo cp:CatalogoDeProductos. Otra opción en este caso, dado que CatalogoDeProductos es singleton, es poner una dependencia entre ControladorProcesarVenta y CatalogoDeProductos. El DCD nos queda «singleton» CatalogoDeProductos ControladorProcesarVenta + ventaActual : Venta + cp : CatalogoDeProductos + introducirArticulo ( [in] id , [in] cantidad ) + crearNuevaVenta ( ) 1 1..* Luego creamos la línea de vida de la clase CatalogoDeProductos en el DSD y agregamos el mensaje desde ControladorProcesarVenta a CatalogoDeProductos El DSD nos queda: cp : «singleton» CatalogoDe Productos : ControladorProcesarVenta : Cajero 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) Ahora agregamos a la clase CatalogoDeProductos la operación buscarProducto con el parámetro id. «singleton» CatalogoDeProductos + buscarProducto ( [in] id ) ControladorProcesarVenta + ventaActual : Venta + cp : CatalogoDeProductos + introducirArticulo ( [in] id , [in] cantidad ) + crearNuevaVenta ( ) 1 1 1..* Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 11/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.3.1. Mensaje getId Vamos a agregar el mensaje getId() desde CatalogoDeProductos a EspecificacionDelProducto Antes de agregar otro mensaje en el DSD primero tenemos que plantearnos lo siguiente: 1) A que clase se enviará el mensaje (en este caso EspecificacionDelProducto) 2) ¿ Tenemos alguna variable en el DCD que me permita acceder a esa clase?. a) Para eso tenemos que crear la asociación entre CatalogoDeProductos y EspecificacionDelProducto, y agregar el atributo especificaciones: array de EspecificacionDelProducto. «singleton» CatalogoDeProductos + especificaciones : array de EspecificacionDelProducto + buscarProducto ( [in] id ) EspecificacionDelProducto 1 1..* 1..* 1 Luego creamos la línea de vida del multiobjeto especificaciones:EspecificacionDelProducto en el DSD Luego agregamos el mensaje getid() desde CatalogoDeProductos a especificaciones:EspecificacionDelProducto. especificaciones : Especificacion DelProducto cp : «singleton» CatalogoDe Productos : ControladorProcesarVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 12/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] Luego le agregamos los asteriscos al mensaje. especificaciones : Especificacion DelProducto cp : «singleton» CatalogoDe Productos : ControladorProcesarVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) * * Ahora agregamos a la clase EspecificacionDelProducto la operación getId y su respectivo atributo. «singleton» CatalogoDeProductos + especificaciones : array de EspecificacionDelProducto + buscarProducto ( [in] id ) EspecificacionDelProducto + Id + getId ( ) 1 1..* 1 Luego agregamos el mensaje de retorno id. especificaciones : Especificacion DelProducto cp : «singleton» CatalogoDe Productos 2 : buscarProducto ( id ) 3 : getId ( ) id * * Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 13/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.3.2. Retorno del Mensaje Luego agregamos el mensaje de retorno ep:EspecificacionDelProducto. especificaciones : Especificacion DelProducto cp : «singleton» CatalogoDe Productos : ControladorProcesarVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto * * Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 14/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.docPlantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.4. Mensajes para obtener Descripción y Precio Vamos a agregar mensajes para obtener la descripción y el precio de un item desde ControladorProcesarVenta a ep:EspecificacionDelProducto. Antes de agregar otro mensaje en el DSD primero tenemos que plantearnos lo siguiente: 1) A que clase se enviará el mensaje (en este caso EspecificacionDelProducto) 2) ¿ Tenemos alguna variable en el DCD que me permita acceder a esa clase?. Para eso creamos la dependencia entre ControladorProcesarVenta y EspecificacionDelProducto En el DCD dibujamos la dependencia entre ControladorProcesarVenta y EspecificacionDelProducto «singleton» CatalogoDeProductos + especificaciones : array de EspecificacionDelProducto + buscarProducto ( [in] id ) ControladorProcesarVenta + ventaActual : Venta + cp : CatalogoDeProductos + introducirArticulo ( [in] id , [in] cantidad ) + crearNuevaVenta ( ) EspecificacionDelProducto + Id + getId ( ) Venta + fecha + hora + lineas : array de LineaDeVenta + create ( ) 0..1 - ventaActual 1 1 1..* 1..* 1 1 Luego creamos la línea de vida de la instancia ep de EspecificacionDelProducto El DSD nos queda Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 15/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] Luego creamos el mensaje getDescripcion desde ControladorProcesarVenta a ep:EspecificacionDelProducto. ep : EspecificacionDelProducto especificaciones : Especificacion DelProducto cp : «singleton» CatalogoDe Productos : ControladorProcesarVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto 4 : getDescripcion ( ) * * Luego agregamos el mensaje de retorno Descripcion ep : EspecificacionDelProducto especificaciones : Especificacion DelProducto cp : «singleton» CatalogoDe Productos : ControladorProcesarVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto 4 : getDescripcion ( ) Descripcion * * Ahora agregamos a la clase EspecificacionDelProducto la operación getDescripcion() y el respectivo atributo EspecificacionDelProducto + descripcion + Id + getId ( ) + getDescripcion ( ) 1..* Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 16/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] Luego creamos el mensaje getPrecio desde ControladorProcesarVenta a ep:EspecificacionDelProducto. Luego agregamos el mensaje de retorno Precio El DSD nos queda ep : EspecificacionDelProducto especificaciones : Especificacion DelProducto cp : «singleton» CatalogoDe Productos : ControladorProcesarVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto 4 : getDescripcion ( ) Descripcion 5 : getPrecio ( ) Precio * * Ahora agregamos a la clase EspecificacionDelProducto la operación getPrecio() Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 17/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.5. Mensaje para crear instancia LineaDeVenta Vamos a agregar mensajes para crear una instancia de línea de venta desde ControladorProcesarVenta a LineaDeVenta. En el DCD tenemos que dibujar la dependencia entre ControladorProcesarVenta y LineaDeVenta «singleton» CatalogoDeProductos + especificaciones : array de EspecificacionDelProducto + buscarProducto ( [in] id ) ControladorProcesarVenta + ventaActual : Venta + cp : CatalogoDeProductos + introducirArticulo ( [in] id , [in] cantidad ) + crearNuevaVenta ( ) EspecificacionDelProducto + descripcion + precio + Id + getId ( ) + getDescripcion ( ) + getPrecio ( ) Venta + fecha + hora + lineas : array de LineaDeVenta + create ( ) 0..1 - ventaActual 1 1 1..* 1..* 1 LineaDeVenta 1..* 1 En el DCD creamos la asociación entre LineaDeVenta y EspecificacionDelProducto, y agregamos el atributo ep: EspecificacionDelProducto en la clase LineaDeVenta. Luego creamos la línea de vida la instancia lv:LineaDeVenta. Posteriormente creamos el mensaje create(ep,cantidad) desde ControladorProcesarVenta a lv:LineaDeVenta. El DSD nos queda: : ControladorProcesarVenta cp : «singleton» CatalogoDe Productos especificaciones : Especificacion DelProducto ep : EspecificacionDelProducto lv : LineaDeVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto 4 : getDescripcion ( ) Descripcion 5 : getPrecio ( ) Precio 6 : create ( ep:EspecificacionDel Producto , cantidad ) * * Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 18/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] Nota: Al agregar create a la LineaDeVenta, XDE no muestra los tipos de datos en los DSD. Pero deben incluirse los tipos de datos en exámenes y parciales porque la política de la cátedra lo exige Ahora agregamos a la clase LineaDeVenta la operación create(ep,cantidad) y los respectivos atributos. El DCD nos queda: «singleton» CatalogoDeProductos + especificaciones : array de EspecificacionDelProducto + buscarProducto ( [in] id ) ControladorProcesarVenta + ventaActual : Venta + cp : CatalogoDeProductos + introducirArticulo ( [in] id , [in] cantidad ) + crearNuevaVenta ( ) EspecificacionDelProducto + descripcion + precio + Id + getId ( ) + getDescripcion ( ) + getPrecio ( ) Venta + fecha + hora + lineas : array de LineaDeVenta + create ( ) 0..1 - ventaActual 1 1 1..* 1..* 1 LineaDeVenta + cantidad + ep : EspecificacionDelProducto + create ( [in] ep : EspecificacionDelProducto , [in] cantidad ) 1..* 1 0..* 1Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 19/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.6. Mensaje para Agregar la Linea de Venta a l a colección Vamos a analizar los mensajes para agregar la instancia de línea de venta a la colección. Primero creamos la línea de vida ventaActual:Venta Posteriormente creamos el mensaje agregarLinea(lv) desde ControladorProcesarVenta a ventaActual:Venta. Luego creamos el mensaje de retorno. Luego creamos la línea de vida de la colección lineas:LineaDeVenta. Posteriormente creamos el mensaje add(lv) desde ventaActual:Venta a lineas:LineaDeVenta. Luego creamos el mensaje de retorno. Como el mensaje add(lv) es a la colección del multiobjeto y no a la clase LineaDeVenta, no se agrega la operación add(lv) a la clase LineaDeVenta. Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 20/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] El DSD nos queda: ventaActual : Venta : ControladorProcesarVenta cp : «singleton» CatalogoDe Productos especificaciones : Especificacion DelProducto ep : EspecificacionDelProducto lv : LineaDeVenta lineas : LineaDeVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto 4 : getDescripcion ( ) Descripcion 5 : getPrecio ( ) Precio 6 : create ( ep:EspecificacionDel Producto , cantidad ) 7 : agregarLinea ( lv:LineaDeVenta ) 8 : add ( lv ) * * Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 21/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.7. Cálculo del subtotal Ahora agregamos una nota con la forma de calcular el subtotal. Por ultimo ponemos el mensaje de retorno desde el ControladorProcesarVenta al actor Cajero y le ponemos el texto Descripcion + Subtotal y el DSD nos queda: : Cajero : ControladorProcesarVenta cp : «singleton» CatalogoDe Productos especificaciones : Especificacion DelProducto ep : EspecificacionDelProducto 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto 4 : getDescripcion ( ) Descripcion 5 : getPrecio ( ) Precio 6 : create ( ep:EspecificacionDel Producto , cantidad ) 7 : agregarLinea ( lv:LineaDeVenta ) Descripcion + Subtotal * * subtotal = subtotal + ( cantidad * precio) Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 22/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.3.8. DSD completo evento 2 El DSD nos queda: ventaActual : Venta : Cajero : ControladorProcesarVenta cp : «singleton» CatalogoDe Productos especificaciones : Especificacion DelProducto ep : EspecificacionDelProducto lv : LineaDeVenta lineas : LineaDeVenta 1 : introducirArticulo ( id , cantidad ) 2 : buscarProducto ( id ) 3 : getId ( ) id ep:EspecificacionDelProducto 4 : getDescripcion ( ) Descripcion 5 : getPrecio ( ) Precio 6 : create ( ep:EspecificacionDel Producto , cantidad ) 7 : agregarLinea ( lv:LineaDeVenta ) 8 : add ( lv ) Descripcion + Subtotal * * subtotal = subtotal + ( cantidad * precio) Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 23/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.1.4. DCD completo para eventos 1 y 2 El DCD nos queda: «singleton» CatalogoDeProductos + especificaciones : array de EspecificacionDelProducto + buscarProducto ( [in] id ) ControladorProcesarVenta + subtotal + ventaActual : Venta + cp : CatalogoDeProductos + introducirArticulo ( [in] id , [in] cantidad ) + crearNuevaVenta ( ) EspecificacionDelProducto + descripcion + precio + Id + getId ( ) + getDescripcion ( ) + getPrecio ( ) Venta + fecha + hora + lineas : array de LineaDeVenta + create ( ) + agregarLinea ( [in] lv : LineaDeVenta ) 0..1 - ventaActual 1 1 1..* 1..* 1 LineaDeVenta + cantidad + ep : EspecificacionDelProducto + create ( [in] ep : EspecificacionDelProducto , [in] cantidad ) 1..* 1 0..* 1 Proceso para construir DSD y DCD - Diseño de Sistemas Autor: E. Porta (Director Cátedra DS) - L. Ripani (Director Área Sistemas - DISI) Versión : 1.04 [11/10/08] Cátedra Diseño de Sistemas UTN – F.R.Ro. 24/24 11/10/2008 11:58:00 C:\Enrique\UTN_2008\DS\Material_Clase_Practica_Pre_Examen\Proceso_DSD_DCD_v1_04.doc Plantilla: campo word: doc_basico_UTN_v3_0.dot hardwired: doc_basico_UTN v. 3.0 [25/7/07] 3.2. Proceso para hacer DCD y DSD simultáneamente: A modo de conclusión si reflexionamos sobre las actividades expuestas en la sub-sección anterior (paso a paso sobre el ejemplo), podemos formalizar de manera breve el proceso de la siguiente manera: 1- Agregar al DCD las clases (sin atributos) del MD que sean necesarias para el caso de uso 2- Agregar al DCD las clases de diseño que hagan falta a priori (sin atributos) 3- Poner el controlador en el DSD, y elegir un evento del DSS 4- Ir trabajando en el DSD, agregando mensajes, y por cada mensaje plantearse: a- ¿A qué clase le enviaré el mensaje? a.1- Como alternativa puedo tener un paso solo de nota como inicialización de variables o acumulación de valores, etc. b - ¿Tenemos alguna variable en el DCD que me permite accedera esa clase? o ¿Debemos guardar el objeto obtenido o creado, para que lo use otro evento? b.1- Crear asociación --> agregando en DCD el atributo y la relación (Dibujar navegabilidad y multiplicidad en el DCD) b.2- Otra opción a b.1 sería Crear dependencia --> agregando en DSD la relación c- Crear la línea de vida al DSD d- Ponerle nombre al objeto en el DSD d.1- si es variable de instancia --> el nombre debe coincidir con el DCD d.2- si es variable local --> no hace falta coincidir con DCD e- Crear el método en el DSD y en el DCD (solo si es mensaje no es a la colección de un multiobjeto) f- Revisar si hace falta usar * en el DSD g- dibujar los retornos h- Si alguno de los argumentos es de tipo no primitivo, indicarlo en el DCD y DSD 5 – Revisar el DCD para controlar si han quedado clases del MD que no se usan. 4. Historia de Versiones del documento Versión Fecha Autor Descripción 1.01 27/06/08 LR / EP Versión inicial 1.02 01/07/08 LR / EP Revisión general 1.03 08/10/08 LR / EP Revisión (Proceso_DSD_DCD.mdx ) 1.04 11/10/08 EP Revisión en DSD