Parte 2 - Tema 2 Flashcards

1
Q

¿Qué es un patrón de integración?

A

Es una solución reutilizable y probada para resolver problemas comunes en la integración de diferentes sistemas o aplicaciones.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Por qué son importantes los patrones de integración?

A

Aceleran el desarrollo, promueven la coherencia, facilitan el mantenimiento y mejoran la escalabilidad de las soluciones de integración.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Cuáles son los tipos principales de patrones de integración?

A
  • 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).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué es el patrón de bus de servicios?

A

Un componente central (bus) que actúa como intermediario entre múltiples sistemas, desacoplándolos y facilitando la comunicación.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Qué es el patrón hub and spoke?

A

Un hub central se conecta a múltiples sistemas spoke, centralizando la integración y simplificando la gestión.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿Qué es el patrón de publicación-suscripción?

A

Los sistemas publican eventos y otros sistemas se suscriben para recibirlos, permitiendo una comunicación flexible y desacoplada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Qué factores se deben considerar al elegir un patrón de integración?

A

Requisitos funcionales y no funcionales, complejidad de la integración, escalabilidad, rendimiento, seguridad.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Cuáles son las ventajas y desventajas de cada patrón?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿Qué es la cohesión en el contexto del diseño de sistemas?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Por qué es importante la alta cohesión?

A
  • Facilita la comprensión, el mantenimiento y la reutilización del código.
  • Reduce la probabilidad de errores.
  • Mejora la testabilidad.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

¿Qué es el acoplamiento en el diseño de sistemas?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

¿Por qué es deseable un bajo acoplamiento?

A
  • Facilita los cambios y la evolución del sistema.
  • Reduce el impacto de los errores.
  • Aumenta la independencia de los módulos.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

¿Cuál es la relación entre cohesión y acoplamiento?

A

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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

¿Cuáles son los principales beneficios de diseñar sistemas con alta cohesión y bajo acoplamiento?

A
  • Mayor mantenibilidad.
  • Mayor reutilización de código.
  • Menor complejidad.
  • Mayor facilidad para realizar pruebas.
  • Menor riesgo de introducir errores al realizar cambios.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Puedes dar un ejemplo de un módulo con alta cohesión y bajo acoplamiento?

A

Una clase que se encarga únicamente de validar datos de entrada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Puedes dar un ejemplo de un módulo con baja cohesión y alto acoplamiento?

A

Una clase que realiza cálculos matemáticos, maneja la interfaz de usuario y accede a la base de datos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

¿Qué técnicas se pueden utilizar para mejorar la cohesión y reducir el acoplamiento?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

¿Qué es un patrón de diseño?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

¿Cuál es el objetivo principal de los patrones de diseño?

A

Mejorar la calidad del software, haciéndolo más flexible, mantenible, reutilizable y escalable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

¿Cuáles son las tres categorías principales de patrones de diseño?

A
  • 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.
21
Q

¿Qué es el patrón Factory Method?

A

Define una interfaz para crear un objeto, pero deja que las subclases decidan qué clase instanciar.

22
Q

¿Qué es el patrón Abstract Factory?

A

Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.

23
Q

¿Qué es el patrón Singleton?

A

Garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a ella.

24
Q

¿Qué es el patrón Adapter?

A

Convierte la interfaz de una clase en otra que el cliente espera

25
Q

¿Qué es el patrón Composite?

A

Compone objetos en estructuras de árbol para representar jerarquías parte-todo.

26
Q

¿Qué es el patrón Facade?

A

Proporciona una interfaz unificada a un conjunto de interfaces en un subsistema.

27
Q

¿Qué es el patrón Observer?

A

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.

28
Q

¿Qué es el patrón Strategy?

A

Define una familia de algoritmos, encapsula cada uno y los hace intercambiables.

29
Q

¿Qué es el patrón State?

A

Permite a un objeto modificar su comportamiento cuando su estado interno cambia.

30
Q

Dios objeto (God object)

A
  • 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.
31
Q

Clase Dios (God class)

A
  • 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.
32
Q

Spaghetti code

A
  • 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.
33
Q

Feature envy

A
  • 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.
34
Q

Large class

A
  • 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.
35
Q

Gold plating

A
  • 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?
36
Q

Lava flow

A
  • 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.
37
Q

Mutable data

A
  • 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.
38
Q

Premature optimization

A
  • 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.
39
Q

Shotgun surgery

A
  • 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.
40
Q

¿Qué es UML?

A

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.

41
Q

¿Para qué sirve UML?

A
  • 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.
42
Q

¿Cuáles son los diagramas más comunes en UML?

A

Diagrama de clases, diagrama de casos de uso, diagrama de secuencia, diagrama de actividades, diagrama de componentes, diagrama de despliegue.

43
Q

¿Qué representa un diagrama de clases?

A

Muestra las clases de un sistema, sus atributos, operaciones y relaciones entre ellas.

44
Q

¿Cuáles son los tipos de relaciones entre clases?

A

Asociación, agregación, composición, generalización (herencia).

45
Q

¿Qué representa un diagrama de secuencia?

A

Muestra la interacción entre objetos a lo largo del tiempo.

46
Q

¿Cuáles son los elementos principales de un diagrama de secuencia?

A

Objeto, línea de vida, mensaje.

47
Q

¿Qué representa un diagrama de actividades?

A

Muestra el flujo de control de un proceso

48
Q

¿Cuáles son los elementos principales de un diagrama de actividades?

A

Nodo inicial, nodo final, acción, decisión, bifurcación, unión.

49
Q

¿Qué representan los diagramas de componentes y despliegue?

A
  • 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.