Estimados alumnos
En vista de que hay varias dudas sobre la resolución del modelo del TP05, les voy a dejar una solución posible como ejemplo, claro que NO es la única solución pero responde a lo que se solicita en el trabajo práctico, también les agrego algunos comentarios al respecto:
- UUID: en este caso supuse que vamos a utilizar el tipo de datos UUID que existe en java solo por cuestiones de simplicidad, podrían haber creado un método privado en la clase Compra que genere ese valor
- Relación entre cliente y compra: está puesta como agregación pero también podría ser composición, el enunciado no brinda detalles al respecto así es que ambas podrían ser válidas, tal vez la composición es más adecuada
- Compra - Cliente: En cliente también se podría haber incluido una lista que guarde todas sus compras y un método "agregarCompra", pero en este caso diseñe las compras en una lista separada en el manager dado que considero que facilitaría ciertas búsquedas.
- Manager: SI debe ir en el modelo diagrama dado que es precisamente el encargado de gestionar los las operaciones del modelo (registrar, buscar, contar, etc.) y es fundamental que las firmas de los métodos sean correctos. Las validaciones solicitadas en el enunciado deben incluirse en la implementación de los correspondientes métodos como así también las excepciones solicitadas. Esta parte tiene fundamental importancia en la evaluación, por ejemplo el método agregarCliente debería incluir las validaciones de que el dni y el email NO existan en la lista de clientes, estas validaciones podrían ser métodos privados del manager.
- Pruebas Unitarias: Son las encargadas de probar a los métodos del manager por lo tanto es aquí a donde se crean los objetos, se asignan valores a sus atributos y se prueban las validaciones y demás operaciones solicitadas en el enunciado. Las pruebas unitarias no se incluyen en el modelo
- Clases de Enumerados y demás utilidades: NO es necesario que las incluyan en este diagrama ya que no forman parte del modelo pero si es que las incluyen deben asociarlas con la clase que corresponda con líneas de puntos
- Otras clases del modelo: podrían también incluir algunas clases de menor relevancia del modelo, por ejemplo Localidad (con atributos id y descripción) y estaría perfecto. En este caso no la agregué porque no es relevante y la puse como String
Analicen por favor este caso de estudio y si tienen dudas dejen sus consultas en este foro, recuerden que NO es la única solución