apuntes:diagramas
Diferencias
Muestra las diferencias entre dos versiones de la página.
apuntes:diagramas [08/06/2018 09:01] – [Clase: Atributos, Métodos y Visibilidad] Fernando Valdeón | apuntes:diagramas [16/09/2024 19:32] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ====== Elaboración de Diagramas ====== | ||
+ | |||
+ | |||
+ | ===== Lenguaje de Modelado Unificado (UML)===== | ||
+ | {{ : | ||
+ | Es un lenguaje de modelado universal para el campo del desarrollo de software que sirve de estandar a la hora de diseñar los sistemas. | ||
+ | |||
+ | __No es un lenguaje para crear programas__ sino para diseñar partes del mismo, su estructura, cómo se relaciona con otras partes del programa, cómo se comporta o funciona ante un usuario, los estado por los que puede pasar en su ejecución, etc. **UML es un lenguaje, por lo que usa unos símbolos concretos para cada modelo**. | ||
+ | |||
+ | Dentro de la familia de diagramas UML hay tipos más usados habitualmente, | ||
+ | {{ : | ||
+ | |||
+ | |||
+ | ===== Diagramas de Casos de Uso ===== | ||
+ | Un diagrama de casos de uso es una lista de pasos que definen la interacción entre un actor y el sistema propiamente dicho. Deben cumplir los siguientes objetivos: | ||
+ | |||
+ | * Indicar los requisitos funcionales: | ||
+ | * Proporcionar una descripción clara de su uso: cómo el usuario interactúa con el sistema. | ||
+ | * Se debe leer con claridad. | ||
+ | * Orientar en la realización de pruebas: nos dice cómo debe funcionar (requisitos). | ||
+ | * Sirve de guía para crear la documentación de uso del programa. | ||
+ | |||
+ | |||
+ | Un diagrama de casos de uso debe mostrar a simple vista, qué se puede hacer con un programa desde el punto de vista de un usuario. Cada cosa que el usuario hace, //es un caso de uso//. | ||
+ | |||
+ | {{ : | ||
+ | ==== Elementos de un diagrama de casos de uso ==== | ||
+ | UML es un lenguaje, por lo que debemos usar su notación concreta para cada elemento: | ||
+ | |||
+ | * **Actores**: | ||
+ | * **Casos de uso**: Representan el funcionamiento que se produce tras la orden de un actor. Se representan con una //elipse//, y dentro se escribe la descripción textual. | ||
+ | * **Relaciones**: | ||
+ | * Un rectángulo se usa para representar los límites del sistema, si es necesario. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | **Para diseñar un diagrama de casos de uso se comienza por reconocer los actores y los casos de uso, para posteriormente relacionarlos.** | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ==== Relaciones entre casos de uso ==== | ||
+ | Las principales relaciones entre casos de uso son las de inclusión y extensión. Muchas veces se suelen confundir: | ||
+ | |||
+ | * **Inclusión**: | ||
+ | {{ : | ||
+ | |||
+ | * **Extensión**: | ||
+ | {{ : | ||
+ | ===== Diagramas de Clases ===== | ||
+ | Un diagrama de clases nos ayuda a tener un enfoque de las relaciones entre las clases que conforman un programa. | ||
+ | Está compuesto de los siguientes elementos: | ||
+ | - **Clases**: | ||
+ | - **Relaciones**: | ||
+ | |||
+ | ==== 1 - Clases: Atributos, Métodos y Visibilidad ==== | ||
+ | Define las características de un tipo de objeto concreto. Encapsula toda la información de un objeto, y está compuesta de métodos y atributos o campos. | ||
+ | |||
+ | El UML se representa por una //caja// con 3 secciones: | ||
+ | {{ : | ||
+ | * Superior: Nombre de la clase. | ||
+ | * Intermedio: Atributos de la clase. | ||
+ | * Inferior: Métodos de la clase. | ||
+ | |||
+ | |||
+ | === Visibilidad === | ||
+ | Se coloca alguno de los siguientes símbolos delante del nombre del miembro de la clase (atributo o método): | ||
+ | | + | Público | | ||
+ | | - | Privado | | ||
+ | | # | Protegido | | ||
+ | | ~ | Default (Package-private) | | ||
+ | |||
+ | === Tipos de miembros === | ||
+ | Los miembros de una clase pueden ser: instancias o clasificadores. | ||
+ | * Instancias: tienen como ámbito una instancia (objeto) específica. | ||
+ | * Clasificadores: | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | === Tipo de clase === | ||
+ | Si la clase es una clase abstracta o una interface (clase abstracta pura), se indica sobre el nombre de la clase con comillas: | ||
+ | {{ : | ||
+ | ==== 2 - Relaciones entre objetos==== | ||
+ | Representa las // | ||
+ | - Herencia | ||
+ | - Asociación | ||
+ | - Agregación | ||
+ | - Composición | ||
+ | |||
+ | |||
+ | === Herencia === | ||
+ | |||
+ | Se representa por una línea con una flecha en el extremo de la superclase. | ||
+ | {{ : | ||
+ | |||
+ | Indica que una clase puede ser de distintos tipos de clase: varias subclases // | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === Asociación === | ||
+ | Se representa por una flecha abierta. | ||
+ | {{ : | ||
+ | Representa cualquier tipo de asociación entre dos clases. Por ejemplo, cuando una clase usa métodos de otra clase, o cuando hay un método que recibe tipos de datos de otra clase. | ||
+ | |||
+ | Además, en cualquier tipo de relación de asociación se puede indicar la cardinalidad de la relación para indicar la cantidad de participación entre las dos clases. | ||
+ | |||
+ | Hay dos tipos de asociación mas restrictivos que concretan el tipo de relación de asociación entre dos clases: la agregación y la composición. Ambas representan relaciones entre objetos pero se diferencian en su rigidez. | ||
+ | {{ : | ||
+ | |||
+ | Para explicar el concepto vamos a plantear el siguiente ejemplo: | ||
+ | //Una universidad posee varios departamentos, | ||
+ | Una Universidad es una composición de Departamentos, | ||
+ | |||
+ | |||
+ | === Agregación === | ||
+ | {{ : | ||
+ | Se representa por una línea con un rombo. Es un tipo de relación de Asociación, | ||
+ | |||
+ | |||
+ | Una agregación se da cuando una clase es una colección o un contenedor de otras clases, pero no depende de la existencia de esas otras clases. Si la clase que contiene a la colección desaparecen, | ||
+ | |||
+ | En el siguiente ejemplo, la clase Departamento es un contenedor de clases Profesor: | ||
+ | <code java> | ||
+ | public class Departamento{ | ||
+ | | ||
+ | | ||
+ | |||
+ | //Los profesores ya existen y recibo un listado por parámetro | ||
+ | | ||
+ | this.listadoProfesores = listadoProfesores; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Los Profesores no desaparecen porque desaparezca el objeto Departamento. | ||
+ | |||
+ | === Composición === | ||
+ | {{ : | ||
+ | Se representa por una línea con un rombo negro. | ||
+ | |||
+ | La composición de clases es una relación aun más estricta que la agregación. Se da cuando una clase contiene referencias a otra clase, pero la vida de las instancias contenidas está ligada a la vida de la instancia contenedora. O sea, si la clase compuesta desaparece también lo harán las clase contenidas. | ||
+ | |||
+ | <code java> | ||
+ | public class Universidad{ | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | this.listadoDepartamentos = new ArrayList<> | ||
+ | } | ||
+ | |||
+ | | ||
+ | Departamento nuevoDepartamento = new Departamento(codigo, | ||
+ | listadoDepartamentos.add(nuevoDepartamento); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Si desaparece el objeto Universidad desaparecen también los departamentos que posee. Además un departamento solo puede pertenecer a una sola Universidad. | ||
+ | |||
+ | =====Herramientas para diseñar diagramas===== | ||
+ | Para crear un diagramas de clases y casos de uso nos basta con alguna aplicación que permita crear cajas, elipses, etc. Podemos usar la herramienta [[http:// | ||
+ | |||
+ | Por otra parte, también existen diferentes herramientas para crear diagramas de clases y generar el código posterior. Una de las herramientas más famosas para el modelado UML de clases es [[http:// | ||
+ | |||
+ | =====Ingeniería inversa===== | ||
+ | Se conoce con este término el proceso de obtener un modelo a partir del código ya realizado. Este proceso es **inverso** al órden de las etapas a la hora de desarrollar software, ya que primero se realiza el modelado, para posteriormente tener claro qué se debe programar. | ||
+ | |||
+ | Existen distintas herramientas para obtener el diagrama de clases a partir de un código fuente ya creado. También podemos crear un diagrama de una bbdd a partir del código sql con el que hemos definido la base de datos. | ||
+ | |||
+ | PhpMyAdmin y MySQL WorkBench permiten realizar ingeniería inversa a partir de una base de datos. Para Java existe la herramienta ArgoUML y también existen diversos pluggins para hacerlo desde Eclipse. | ||
+ | ===== Prácticas ===== | ||
+ | |||
+ | - Modelado del comportamiento de un programa. Diagrama de casos de uso. | ||
+ | - Modelado de la estructura de un programa. Diagramas de clases. | ||
+ | |||
+ | ---- | ||
+ | (c) {{date> %Y}} Fernando Valdeón | ||