apuntes:diagramas
Diferencias
Muestra las diferencias entre dos versiones de la página.
| apuntes:diagramas [08/06/2018 08:58] – [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 | ||