Temario de listas educación Flashcards
¿Qué son los principios GRASP?
Son un conjunto de pautas generales para asignar responsabilidades a las clases en un diseño de software, con el objetivo de crear sistemas más mantenibles, reutilizables y fáciles de entender.
¿Cuál es el objetivo principal de los principios GRASP?
Mejorar la cohesión y el acoplamiento de las clases, lo que se traduce en un diseño más robusto y flexible.
¿Qué significa el acrónimo GRASP?
- General: Los principios son aplicables a una amplia gama de sistemas de software.
- Responsibility: Se refiere a la tarea o función que realiza una clase.
- Assignment: Indica cómo se asignan esas tareas a las clases.
- Software: Obviamente, se refiere al ámbito del desarrollo de software.
- Patterns: Son patrones o principios generales que se pueden aplicar repetidamente.
¿Qué son los principios SOLID?
Son cinco principios básicos de la programación orientada a objetos que buscan crear software más mantenible, flexible y extensible
¿Cómo se aplican los principios SOLID en un proyecto real?
Identificando las responsabilidades de cada clase, creando interfaces claras, utilizando herencia y polimorfismo de manera adecuada, y evitando acoplamientos innecesarios.
Principio de Responsabilidad Única (SRP)
Un concepto fundamental en la programación orientada a objetos que establece que una clase debe tener una única razón para cambiar. En otras palabras, una clase debe tener una sola responsabilidad bien definida.
¿Por qué es importante el SRP?
- Mantenibilidad: Al tener clases con responsabilidades bien delimitadas, es más fácil modificar el código sin afectar otras partes del sistema.
- Reutilización: Clases con una única responsabilidad son más fáciles de reutilizar en diferentes contextos.
- Pruebas: Las clases con una sola responsabilidad son más fáciles de probar de forma aislada.
- Comprensión: Un código más simple y enfocado es más fácil de entender y mantener.
Principio Abierto-Cerrado (OCP)
El Principio Abierto-Cerrado (OCP, por sus siglas en inglés) es uno de los cinco principios SOLID de la programación orientada a objetos. Establece que una entidad de software (como una clase o un módulo) debe estar abierta a extensiones pero cerrada a modificaciones.
* Abierta a extensiones: Significa que podemos añadir nuevas funcionalidades a una clase o módulo sin modificar su código existente. Por ejemplo, podemos crear subclases que hereden de una clase base y añadan nuevo comportamiento.
* Cerrada a modificaciones: Significa que una vez que una clase ha sido desarrollada y probada, no deberíamos tener que modificarla para añadir nuevas características.
¿Por qué es importante el OCP?
- Mantenibilidad: Al evitar modificar el código existente, se reduce el riesgo de introducir errores y se facilita la evolución del software a largo plazo.
- Reutilización: Las clases diseñadas siguiendo el OCP son más propensas a ser reutilizadas en diferentes partes de la aplicación.
- Flexibilidad: Los sistemas diseñados siguiendo el OCP se adaptan mejor a los cambios en los requisitos.
¿Cómo se aplica el OCP?
- Herencia: Creando clases hijas que heredan de una clase base y añaden nuevo comportamiento.
- Composición: Utilizando objetos de otras clases para agregar nuevas funcionalidades a una clase.
- Interfaces: Definiendo interfaces que especifican el comportamiento de un objeto, permitiendo que diferentes clases implementen esa interfaz de manera diferente.
Principio de Sustitución de Liskov (LSP)
El LSP es uno de los cinco principios SOLID de la programación orientada a objetos. En términos sencillos, establece que un objeto de una subclase debe poder reemplazar a un objeto de su clase base sin que se altere el correcto funcionamiento del programa.
¿Por qué es importante el LSP?
- Mantenibilidad: Facilita la modificación y ampliación del código, ya que permite sustituir objetos de una clase por otros de sus subclases sin la necesidad de grandes refactorizaciones.
- Reutilización: Fomenta la creación de código más genérico y reutilizable.
- Corrección: Garantiza que el comportamiento del programa sea predecible y correcto, evitando errores inesperados.
Violaciones del LSP
Una violación del LSP ocurre cuando una subclase no puede reemplazar completamente a su clase base sin alterar el comportamiento esperado del programa. Por ejemplo, si agregamos un método nadar() a la clase Canario y no a la clase Ave, estaríamos violando el LSP, ya que no todos los aves pueden nadar.
Principio de Segregación de Interfaz (ISP)
El Principio de Segregación de Interfaz (ISP) es uno de los cinco principios SOLID de la programación orientada a objetos. Establece que las interfaces deben ser específicas y enfocarse en los requerimientos de los clientes que las utilizan. En otras palabras, las interfaces deben ser lo más pequeñas y cohesivas posible, evitando incluir métodos que no son necesarios para todos los clientes.
¿Por qué es importante el ISP?
- Acoplamiento reducido: Al dividir las interfaces en partes más pequeñas, se reduce el acoplamiento entre las clases, lo que facilita los cambios y la mantenibilidad del código.
- Mayor cohesión: Las interfaces se vuelven más cohesivas, ya que cada una se enfoca en un conjunto específico de responsabilidades.
- Flexibilidad: Permite que las clases implementen solo las interfaces que realmente necesitan, evitando la implementación de métodos innecesarios.
Beneficios de aplicar el ISP
- Código más limpio y mantenible: Al dividir las interfaces en partes más pequeñas, el código se vuelve más fácil de entender y modificar.
- Menor riesgo de errores: Al evitar la implementación de métodos innecesarios, se reduce el riesgo de introducir errores en el código.
- Mayor flexibilidad: Permite agregar nuevas funcionalidades sin afectar a las clases existentes.
Principio de Inversión de Dependencia (DIP)
El Principio de Inversión de Dependencia (DIP) es uno de los cinco principios SOLID de la programación orientada a objetos. Establece que:
- Los módulos de alto nivel no deben depender de módulos de bajo nivel. Ambos deben depender de abstracciones.
- Las abstracciones no deben depender de detalles. Los detalles (implementaciones concretas) deben depender de abstracciones.
En términos más simples, el DIP sugiere que las clases de alto nivel, que contienen la lógica principal de una aplicación, no deben estar acopladas a las implementaciones concretas de las clases de bajo nivel, que suelen ser detalles de implementación. En su lugar, ambas deben depender de abstracciones como interfaces.
¿Por qué es importante el DIP?
- Desacoplamiento: Reduce el acoplamiento entre las diferentes partes de una aplicación, haciendo que sea más fácil de mantener y modificar.
- Reutilización: Facilita la reutilización de código, ya que las clases de alto nivel no están vinculadas a una implementación específica.
- Testabilidad: Permite realizar pruebas unitarias de forma más aislada, ya que se pueden inyectar fácilmente implementaciones simuladas de las dependencias.
- Flexibilidad: Hace que el sistema sea más flexible, ya que se pueden cambiar las implementaciones de las dependencias sin afectar a las clases de alto nivel.
Cómo aplicar el DIP
- Identificar las dependencias: Analiza tu código y encuentra las dependencias entre las clases.
- Crear abstracciones: Define interfaces o clases abstractas para representar las dependencias.
- Inyectar dependencias: Utiliza inyección de dependencias para proporcionar las implementaciones concretas a las clases que las necesitan.
En resumen, el DIP es un principio fundamental para construir sistemas de software más mantenibles, flexibles y testables. Al seguir este principio, se reduce el acoplamiento entre las diferentes partes de una aplicación, lo que facilita la evolución del software a lo largo del tiempo.
¿Qué significa YAGNI (You Aren’t Gonna Need It)?
YAGNI es un acrónimo que significa “You Aren’t Gonna Need It” (en español, “No lo vas a necesitar”). Es un principio de desarrollo de software que sugiere que no se deben implementar características o funcionalidades hasta que sean realmente necesarias.
¿Cuál es el objetivo principal de YAGNI?
El objetivo principal de YAGNI es evitar la sobre ingeniería y el desarrollo de código innecesario. Al enfocarse solo en las funcionalidades requeridas en el momento presente, se reduce la complejidad del proyecto, se ahorra tiempo y se mejora la mantenibilidad del código.
¿Por qué es importante seguir el principio YAGNI?
- Evita la acumulación de código técnico.
- Reduce el tiempo de desarrollo.
- Mejora la calidad del código.
- Facilita la comprensión y el mantenimiento del proyecto.
¿Cuál es la relación entre YAGNI y otros principios como KISS?
YAGNI está estrechamente relacionado con el principio KISS (Keep It Simple, Stupid). Ambos principios promueven la simplicidad y la eliminación de elementos innecesarios. KISS se enfoca en la solución más sencilla posible, mientras que YAGNI se centra en implementar solo lo estrictamente necesario.
¿Cómo se aplica YAGNI en la práctica?
- Priorizar las funcionalidades según las necesidades del usuario.
- Evitar la especulación sobre futuras necesidades.
- Realizar un análisis exhaustivo de los requisitos antes de comenzar a desarrollar.
- Revisar regularmente el código para eliminar partes innecesarias.