Parte 2 - Tema 2 Flashcards
¿Qué es un patrón de integración?
Es una solución reutilizable y probada para resolver problemas comunes en la integración de diferentes sistemas o aplicaciones.
¿Por qué son importantes los patrones de integración?
Aceleran el desarrollo, promueven la coherencia, facilitan el mantenimiento y mejoran la escalabilidad de las soluciones de integración.
¿Cuáles son los tipos principales de patrones de integración?
- Estructurales: Definen la arquitectura general de la integración (p.ej., bus de servicios, hub and spoke).
- De comportamiento: Describen cómo interactúan los sistemas (p.ej., solicitud-respuesta, publicación-suscripción).
- De datos: Manejan la transformación y el mapeo de datos (p.ej., mediación, correlación).
¿Qué es el patrón de bus de servicios?
Un componente central (bus) que actúa como intermediario entre múltiples sistemas, desacoplándolos y facilitando la comunicación.
¿Qué es el patrón hub and spoke?
Un hub central se conecta a múltiples sistemas spoke, centralizando la integración y simplificando la gestión.
¿Qué es el patrón de publicación-suscripción?
Los sistemas publican eventos y otros sistemas se suscriben para recibirlos, permitiendo una comunicación flexible y desacoplada.
¿Qué factores se deben considerar al elegir un patrón de integración?
Requisitos funcionales y no funcionales, complejidad de la integración, escalabilidad, rendimiento, seguridad.
¿Cuáles son las ventajas y desventajas de cada patrón?
- Bus de servicios: Alta flexibilidad, desacoplamiento, pero puede ser complejo de configurar y administrar.
- Hub and spoke: Centralización, fácil gestión, pero puede convertirse en un punto único de falla.
- Publicación-suscripción: Escalabilidad, desacoplamiento, pero requiere una infraestructura de mensajería.
¿Qué es la cohesión en el contexto del diseño de sistemas?
Es la medida en que los elementos de un módulo (como una clase o un componente) están relacionados entre sí y colaboran para cumplir una única tarea.
¿Por qué es importante la alta cohesión?
- Facilita la comprensión, el mantenimiento y la reutilización del código.
- Reduce la probabilidad de errores.
- Mejora la testabilidad.
¿Qué es el acoplamiento en el diseño de sistemas?
Es la medida en que un módulo depende de otros módulos. Es decir, qué tan conectados están los diferentes componentes de un sistema.
¿Por qué es deseable un bajo acoplamiento?
- Facilita los cambios y la evolución del sistema.
- Reduce el impacto de los errores.
- Aumenta la independencia de los módulos.
¿Cuál es la relación entre cohesión y acoplamiento?
Generalmente, una alta cohesión va de la mano de un bajo acoplamiento. Módulos con una responsabilidad bien definida (alta cohesión) tienden a tener menos dependencias con otros módulos (bajo acoplamiento).
¿Cuáles son los principales beneficios de diseñar sistemas con alta cohesión y bajo acoplamiento?
- Mayor mantenibilidad.
- Mayor reutilización de código.
- Menor complejidad.
- Mayor facilidad para realizar pruebas.
- Menor riesgo de introducir errores al realizar cambios.
¿Puedes dar un ejemplo de un módulo con alta cohesión y bajo acoplamiento?
Una clase que se encarga únicamente de validar datos de entrada.
¿Puedes dar un ejemplo de un módulo con baja cohesión y alto acoplamiento?
Una clase que realiza cálculos matemáticos, maneja la interfaz de usuario y accede a la base de datos.
¿Qué técnicas se pueden utilizar para mejorar la cohesión y reducir el acoplamiento?
- Principio de responsabilidad única (SRP): Cada clase debe tener una única razón para cambiar.
- Encapsulación: Ocultar los detalles de implementación de una clase.
- Interfaces bien definidas: Especificar claramente cómo interactúan los módulos.
- Patrones de diseño: Utilizar patrones como Fachada, Adaptador, etc.
¿Qué es un patrón de diseño?
Es una solución reutilizable y probada a un problema común en el diseño de software. Es como una plantilla que se puede adaptar a diferentes situaciones.
¿Cuál es el objetivo principal de los patrones de diseño?
Mejorar la calidad del software, haciéndolo más flexible, mantenible, reutilizable y escalable.
¿Cuáles son las tres categorías principales de patrones de diseño?
- Creacionales: Se ocupan de la creación de objetos.
- Estructurales: Se ocupan de la composición de clases y objetos.
- De comportamiento: Describen cómo interactúan los objetos.
¿Qué es el patrón Factory Method?
Define una interfaz para crear un objeto, pero deja que las subclases decidan qué clase instanciar.
¿Qué es el patrón Abstract Factory?
Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
¿Qué es el patrón Singleton?
Garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a ella.
¿Qué es el patrón Adapter?
Convierte la interfaz de una clase en otra que el cliente espera
¿Qué es el patrón Composite?
Compone objetos en estructuras de árbol para representar jerarquías parte-todo.
¿Qué es el patrón Facade?
Proporciona una interfaz unificada a un conjunto de interfaces en un subsistema.
¿Qué es el patrón Observer?
Define una dependencia uno a muchos entre objetos de manera que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.
¿Qué es el patrón Strategy?
Define una familia de algoritmos, encapsula cada uno y los hace intercambiables.
¿Qué es el patrón State?
Permite a un objeto modificar su comportamiento cuando su estado interno cambia.
Dios objeto (God object)
- Descripción: Una clase que hace demasiadas cosas, concentrando toda la lógica del sistema.
- Consecuencias: Dificulta el mantenimiento, testing y la reutilización del código.
- Pregunta: ¿Cómo identificar un dios objeto? Busca clases con muchos métodos y atributos, o que interactúen con muchas otras clases.
Clase Dios (God class)
- Descripción: Similar al dios objeto, pero a nivel de clase. Es una clase que conoce demasiado sobre otras clases y sus responsabilidades.
- Consecuencias: Aumenta el acoplamiento y dificulta los cambios.
- Pregunta: ¿Cómo evitar una clase dios? Aplica el principio de responsabilidad única (SRP) y descompone la clase en clases más pequeñas con responsabilidades bien definidas.
Spaghetti code
- Descripción: Código altamente entrelazado y difícil de seguir, con muchas dependencias y saltos condicionales.
- Consecuencias: Dificulta la comprensión, el mantenimiento y la depuración del código.
- Pregunta: ¿Cómo evitar el spaghetti code? Utiliza buenas prácticas de programación, como nombrar variables y métodos de forma clara, utilizar comentarios y modularizar el código.
Feature envy
- Descripción: Una clase está demasiado interesada en los detalles de otra clase.
- Consecuencias: Aumenta el acoplamiento y dificulta los cambios.
- Pregunta: ¿Cómo identificar el feature envy? Busca métodos que accedan a los atributos privados de otra clase.
Large class
- Descripción: Una clase que es demasiado grande y compleja.
- Consecuencias: Dificulta la comprensión, el mantenimiento y la reutilización.
- Pregunta: ¿Cómo evitar las clases grandes? Aplica el principio de responsabilidad única y descompone la clase en clases más pequeñas.
Gold plating
- Descripción: Agregar características innecesarias o complejas a un sistema, más allá de los requisitos iniciales.
- Consecuencias: Aumenta la complejidad, el tiempo de desarrollo y los costos de mantenimiento.
- Pregunta: ¿Cómo identificar el gold plating? Compara los requisitos iniciales con la implementación final. ¿Hay características que no aportan valor al usuario?
Lava flow
- Descripción: Código duplicado que se propaga por todo el sistema, a menudo debido a la falta de refactorización.
- Consecuencias: Dificulta el mantenimiento y aumenta el riesgo de introducir errores al realizar cambios.
- Pregunta: ¿Cómo evitar el lava flow? Utiliza herramientas de refactorización y promueve la creación de bibliotecas reutilizables.
Mutable data
- Descripción: Datos que pueden ser modificados después de su creación, lo que puede llevar a errores difíciles de rastrear.
- Consecuencias: Reduce la previsibilidad del sistema y dificulta la depuración.
- Pregunta: ¿Cómo evitar el uso de datos mutables? Utiliza estructuras de datos inmutables siempre que sea posible.
Premature optimization
- Descripción: Optimizar el código antes de que sea necesario, lo que puede llevar a soluciones complejas y difíciles de mantener.
- Consecuencias: Aumenta la complejidad del código y puede reducir la legibilidad.
- Pregunta: ¿Cómo evitar la optimización prematura? Centra tus esfuerzos en escribir código claro y correcto, y solo optimiza cuando haya evidencia de un cuello de botella.
Shotgun surgery
- Descripción: Hacer muchos pequeños cambios en diferentes partes del sistema para implementar una nueva característica.
- Consecuencias: Aumenta el riesgo de introducir errores y dificulta el mantenimiento.
- Pregunta: ¿Cómo evitar el shotgun surgery? Identifica las áreas del sistema que necesitan ser modificadas y realiza cambios más focalizados.
¿Qué es UML?
Es un lenguaje estándar para modelar sistemas orientados a objetos. Se utiliza para visualizar, especificar, construir y documentar los artefactos de un sistema de software.
¿Para qué sirve UML?
- Facilita la comunicación entre los miembros de un equipo de desarrollo.
- Ayuda a comprender mejor los requisitos del sistema.
- Permite identificar y resolver problemas de diseño en etapas tempranas del desarrollo.
¿Cuáles son los diagramas más comunes en UML?
Diagrama de clases, diagrama de casos de uso, diagrama de secuencia, diagrama de actividades, diagrama de componentes, diagrama de despliegue.
¿Qué representa un diagrama de clases?
Muestra las clases de un sistema, sus atributos, operaciones y relaciones entre ellas.
¿Cuáles son los tipos de relaciones entre clases?
Asociación, agregación, composición, generalización (herencia).
¿Qué representa un diagrama de secuencia?
Muestra la interacción entre objetos a lo largo del tiempo.
¿Cuáles son los elementos principales de un diagrama de secuencia?
Objeto, línea de vida, mensaje.
¿Qué representa un diagrama de actividades?
Muestra el flujo de control de un proceso
¿Cuáles son los elementos principales de un diagrama de actividades?
Nodo inicial, nodo final, acción, decisión, bifurcación, unión.
¿Qué representan los diagramas de componentes y despliegue?
- El diagrama de componentes muestra la organización de los elementos físicos de un sistema (módulos, bibliotecas).
- El diagrama de despliegue muestra la distribución física de los componentes en tiempo de ejecución.