diagrama_uml_clases_guiado
diagrama_uml_clases_guiado
NOTA: Dentro de los diagramas estructurales, y de todos los UML en general, el diagrama
de clases es el más importante porque representa los elementos estáticos del sistema, sus
atributos y comportamientos, y como se relacionan entre ellos. Contiene las clases
del dominio del problema, y a partir de éste se obtendrán las clases que formarán después
el programa informático que dará solución al problema.
Atributos: Forman la parte estática de la clase. Son un conjunto de variables para las
que es preciso definir:
Su nombre.
Su tipo, puede ser un tipo simple, que coincidirá con el tipo de dato que se
seleccione en el lenguaje de programación final a usar, o compuesto, pudiendo
incluir otra clase.
Además, se pueden indicar otros datos como un valor inicial o su visibilidad. La
visibilidad de un atributo se puede definir como:
Público: Se pueden acceder desde cualquier clase y cualquier parte del programa.
Privado: Sólo se pueden acceder desde operaciones de la clase.
Protegido: Sólo se pueden acceder desde operaciones de la clase o de clases
derivadas en cualquier nivel.
Paquete: Se puede acceder desde las operaciones de las clases que pertenecen al
mismo paquete que la clase que estamos definiendo. Se usa cuando el lenguaje de
implementación es Java.
Los parámetros y tipos de retorno de los métodos en el diagrama de clases que hemos
representado pueden variar según las necesidades específicas del sistema que se está
diseñando. Una posible solución para los parámetros y tipos de retorno de los métodos
en cada clase podría ser la siguiente:
Clase Producto:
El método `mostrarInfo()` no tiene parámetros y podría
devolver una cadena que contenga la información del
producto.
Clase Categoría:
El método agregarProd() podría tener un
parámetro producto de tipo ‘producto’ y no
devolver nada.
El método eliminarProd() podría tener un parámetro producto de tipo ‘producto’ y no
devolver nada.
Clase Pedido:
El método agregarProd() podría tener un parámetro producto de tipo ‘producto’ y no
devolver nada.
El método eliminarProd() podría tener un parámetro producto de tipo ‘producto’ y no
devolver nada.
El método calcularTotal() no tiene parámetros y podría devolver un número que
represente el total del pedido.
Clase Cliente:
El método hacerPedido() podría tener un parámetro pedido de tipo ‘pedido’ y no
devolver nada.
El método verHistorial() no tiene parámetros y podría devolver una lista de objetos de
tipo ‘pedido’ que representen el historial de pedidos del cliente.
- La clase Producto está relacionada con la clase Categoría ya que un producto pertenece
a una categoría.
- La clase Pedido está relacionada con la clase Producto ya que un pedido puede
contener varios productos.
- La clase Cliente está relacionada con la clase Pedido ya que un cliente puede hacer
varios pedidos.
De asociación: una relación de asociación entre dos clases indica que existe una conexión
entre ellas. Esta conexión puede ser bidireccional o unidireccional y puede tener diferentes
multiplicidades (cardinalidades) para indicar cuántas instancias de una clase están
relacionadas con cuántas instancias de la otra clase.
De herencia; La herencia es una propiedad que permite a los objetos ser construidos a
partir de otros objetos, es decir, la capacidad de un objeto para utilizar estructuras de datos
y métodos presentes en sus antepasados. El objetivo principal de la herencia es
la reutilización, poder utilizar código desarrollado con anterioridad.
En nuestro ejemplo esta es una posible solución para los tipos de relaciones entre las clases:
La relación entre la clase Producto y la clase Categoría podría ser una relación de
asociación, lo que significa que un producto está asociado con una categoría.
La relación entre la clase Pedido y la clase Producto podría ser una relación de
agregación, lo que significa que un pedido está compuesto por varios productos. (La
representamos de asociación)
La relación entre la clase Cliente y la clase Pedido podría ser una relación de
composición, lo que significa que un cliente es responsable de sus pedidos. (La
representamos de asociación)
d. Cardinalidad
- La relación entre la clase Producto y la clase Categoría podría ser de "muchos a uno",
lo que significa que un producto pertenece a una categoría y una categoría puede tener
muchos productos.
- La relación entre la clase Cliente y la clase Pedido podría ser de "uno a muchos", lo
que significa que un cliente puede hacer varios pedidos y un pedido pertenece a un
cliente.
e. Atributos de enlace
- La relación entre la clase Producto y la clase Categoría podría tener un atributo de enlace
llamado cantidad para representar la cantidad de productos de una categoría específica
que están disponibles en la tienda.
- La relación entre la clase Pedido y la clase Producto podría tener un atributo de enlace
llamado cantidad para representar la cantidad de un producto específico que se ha
agregado a un pedido. (En este ejemplo, hemos agregado una clase asociativa
llamada DetallePedido entre las clases Pedido y Producto. Esta clase asociativa tiene un
atributo llamado cantidad que representa el atributo de enlace entre las dos clases.
También hemos agregado un método llamado calcularSubtotal() para calcular el subtotal
del detalle del pedido.)
- La relación entre la clase Cliente y la clase Pedido podría tener un atributo de enlace
llamado fechaEntrega para representar la fecha en que se entregará un pedido a un
cliente.