2.2.6 Refactorización Flashcards

(28 cards)

1
Q

¿Qué es la refactorización?

A

Refactorizar el código es cambiar el código con dos restricciones cruciales: Los cambios hacen que el código sea más fácil de entender y, por tanto, más barato de modificar. Los cambios nunca modifican la funcionalidad, el comportamiento observable, del código.

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

¿Por qué se hace refactorización?

A

Para mejorar la legibilidad, eliminar duplicación, reducir la complejidad y facilitar el mantenimiento.

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

Da 3 técnicas comunes de refactorización.

A

Extraer método, renombrar variable, mover función a otra clase.

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

¿La refactorización mejora el rendimiento del software?

A

No necesariamente

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

¿Cuál es la diferencia entre refactorizar y reescribir?

A

Refactorizar mantiene el mismo comportamiento funcional

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

¿Qué es un antipatrón?

A

Una solución común que parece buena al principio pero causa problemas a largo plazo.

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

Menciona un ejemplo de antipatrón y por qué es malo.

A

God Object: concentra demasiadas responsabilidades, lo que hace difícil su mantenimiento.

Spaghetti Code: el flujo del programa es enredado, lo que complica su comprensión y mantenimiento.

Lava Flow: hay código antiguo o sin uso que sigue en el sistema, lo que aumenta la complejidad y el riesgo de errores.

Hard Coding: escribir valores fijos en el código en lugar de parametrizarlos, lo que reduce la flexibilidad del sistema.

Copy-Paste Programming: duplicar código en lugar de reutilizarlo, lo que causa errores y dificulta cambios.

Boat Anchor: tener componentes o código inútil que no se elimina por si acaso, lo que añade peso innecesario al sistema.

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

¿Qué es el principio de responsabilidad única (SRP)?

A

Cada clase debe tener una sola razón para cambiar.

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

¿Qué técnica de refactorización consiste en dividir un método largo en métodos más pequeños y específicos?

A

Extraer método.

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

¿Qué tipo de errores busca evitar la refactorización?

A

Errores por código duplicado o difícil de mantener.

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

¿Cuál es una señal clara de que un código necesita refactorizarse?

A

Código duplicado o funciones muy largas.

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

¿Qué herramienta se usa comúnmente para detectar partes del código que pueden mejorarse?

A

Linter o herramientas de análisis estático.

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

¿Qué principio de diseño se busca respetar al refactorizar con SRP?

A

Cada clase o función debe tener una sola responsabilidad.

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

¿Cuál es el riesgo de realizar refactorización sin tener pruebas automatizadas?

A

Puedes introducir errores sin darte cuenta, ya que no tienes forma de validar que el comportamiento del sistema siga siendo el mismo.

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

¿Cómo se relaciona la refactorización con los principios SOLID?

A

La refactorización busca cumplir principios como SRP (una responsabilidad por clase) o OCP (abierto a extensión, cerrado a modificación) para mejorar el diseño.

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

¿Cuándo es mejor reescribir un módulo completo en lugar de refactorizarlo?

A

Cuando el código es tan complejo, acoplado o sin pruebas que resulta más costoso entenderlo y modificarlo que reescribirlo desde cero.

17
Q

¿Qué significa el acrónimo SOLID en diseño orientado a objetos?

A

Cinco principios: SRP OCP LSP ISP y DIP para crear sistemas robustos mantenibles y extensibles

18
Q

¿Qué busca mejorar el uso de los principios SOLID en el diseño del software?

A

La mantenibilidad extensibilidad reutilización y reducción del acoplamiento entre módulos

19
Q

¿Qué principio de SOLID dice que una clase debe tener una sola razón para cambiar?

A

SRP - Principio de Responsabilidad Única

20
Q

¿Qué principio de SOLID promueve que el código pueda extenderse sin modificar el existente?

A

OCP - Principio de Abierto Cerrado

21
Q

¿Qué principio de SOLID dice que una clase derivada debe poder reemplazar a su clase base sin romper el sistema?

A

LSP - Principio de Sustitución de Liskov

22
Q

¿Qué principio de SOLID sugiere que los clientes no deben depender de interfaces que no utilizan?

A

ISP - Principio de Segregación de Interfaces

23
Q

¿Qué principio de SOLID propone que las clases deben depender de abstracciones no de clases concretas?

A

DIP - Principio de Inversión de Dependencias

24
Q

¿Cómo ayuda SRP durante la refactorización?

A

Permite dividir clases grandes en varias clases más específicas y manejables

25
¿Cómo ayuda aplicar OCP al momento de agregar nueva funcionalidad?
Permite extender el comportamiento sin modificar el código existente reduciendo el riesgo de errores
26
¿Por qué violar el principio LSP puede romper el polimorfismo?
Porque una subclase puede alterar el comportamiento esperado del padre generando fallos sutiles
27
¿Cómo se relaciona ISP con la cohesión?
Ayuda a mantener interfaces pequeñas y específicas lo que aumenta la cohesión del sistema
28
¿Cómo mejora DIP la flexibilidad de la arquitectura?
Permite cambiar implementaciones sin afectar a los consumidores gracias al uso de abstracciones