Explorando el código, creando soluciones, y compartiendo conocimientos en el fascinante mundo del desarrollo de software.

domingo, 25 de febrero de 2024

Principios SOLID en el Diseño de Software en Java

Principios SOLID en el Diseño de Software en Java

Principios SOLID en el Diseño de Software en Java

Los principios SOLID son un conjunto de cinco principios de diseño de software orientado a objetos que facilitan la creación de sistemas flexibles, mantenibles y escalables. A continuación, se describen estos principios y cómo se pueden aplicar en Java:

1. Principio de Responsabilidad Única (Single Responsibility Principle - SRP)

Este principio establece que una clase debe tener una sola razón para cambiar, es decir, una única responsabilidad. Aquí hay un ejemplo en Java:

// Clase original violando SRP public class ManejadorArchivos { public void leerArchivo(String ruta) { // Lógica de lectura de archivo } public void procesarDatos() { // Lógica de procesamiento de datos } }

Refactorización para cumplir con SRP:

// Clase refactorizada aplicando SRP public class LectorArchivos { public void leerArchivo(String ruta) { // Lógica de lectura de archivo } } public class ProcesadorDatos { public void procesarDatos() { // Lógica de procesamiento de datos } }

2. Principio de Abierto/Cerrado (Open/Closed Principle - OCP)

Este principio establece que una clase debe estar abierta para la extensión pero cerrada para la modificación. Aquí hay un ejemplo:

// Clase original violando OCP public class Calculadora { public int sumar(int a, int b) { return a + b; } }

Refactorización para cumplir con OCP:

// Interfaz para extensión public interface Operacion { int aplicar(int a, int b); } // Clase extiende la interfaz public class Suma implements Operacion { @Override public int aplicar(int a, int b) { return a + b; } } // Clase que utiliza la interfaz sin modificaciones public class Calculadora { public int calcular(Operacion operacion, int a, int b) { return operacion.aplicar(a, b); } }

3. Principio de Sustitución de Liskov (Liskov Substitution Principle - LSP)

Este principio establece que los objetos de una clase base deben poder ser sustituidos por objetos de sus clases derivadas sin afectar la corrección del programa. Aquí hay un ejemplo:

// Clase base public class Figura { public int calcularArea() { return 0; } } // Clase derivada public class Cuadrado extends Figura { private int lado; public Cuadrado(int lado) { this.lado = lado; } @Override public int calcularArea() { return lado * lado; } }

4. Principio de Segregación de Interfaces (Interface Segregation Principle - ISP)

Este principio establece que una clase no debe estar obligada a implementar interfaces que no utiliza. Aquí hay un ejemplo:

// Interfaz original violando ISP public interface Trabajador { void trabajar(); void descansar(); } // Refactorización aplicando ISP public interface Trabajador { void trabajar(); } public interface Descanso { void descansar(); }

5. Principio de Inversión de Dependencias (Dependency Inversion Principle - DIP)

Este principio establece que las dependencias deben estar dirigidas hacia abstracciones, no hacia implementaciones concretas. Aquí hay un ejemplo:

// Clase original violando DIP public class Reporte { private BaseDeDatos baseDeDatos; public Reporte(BaseDeDatos baseDeDatos) { this.baseDeDatos = baseDeDatos; } public void generar() { // Lógica para generar el reporte utilizando baseDeDatos } }

Refactorización aplicando DIP:

// Abstracción public interface AlmacenDatos { void guardarDatos(String datos); } // Implementación concreta public class BaseDeDatos implements AlmacenDatos { @Override public void guardarDatos(String datos) { // Lógica para guardar datos en la base de datos } } // Clase que depende de la abstracción, no de la implementación concreta public class Reporte { private AlmacenDatos almacenDatos; public Reporte(AlmacenDatos almacenDatos) { this.almacenDatos = almacenDatos; } public void generar() { // Lógica para generar el reporte utilizando almacenDatos } }

Conclusión

La aplicación de los principios SOLID en el diseño de software en Java conduce a un código más mantenible, flexible y escalable. Estos principios proporcionan una guía valiosa para la creación de sistemas orientados a objetos sólidos y robustos, mejorando la calidad del software y facilitando futuras modificaciones y extensiones.


Navegación entre lecciones



© 2024 Programar desde Cero


No hay comentarios:

Publicar un comentario

Java Iniciación en Java Hola mundo en Java Sintaxis básica de Java Orientación a objetos en Java Manejo de excepciones en Java Java desde Cero Colecciones en Java Manejo de Archivos en Java Entrada/Salida en Java Hilos y concurrencia en Java Programación Funcional en Java Programación Orientada a Objetos (OOP) en Java Manejo de fechas y tiempos Persistencia de datos en Java Desarrollo Web en Java Manejo de dependencias Gradle Maven JUnit Git Java Desarrollo de servicios web en Java Patrones de Diseño en Java Principios Básicos de Seguridad en Java Principios SOLID en Java Frameworks populares en Java Ciclo de vida de una aplicación Java Desarrollo Ágil Base de Datos en Java Hola mundo en COBOL Estructura básica de COBOL Sintaxis Básica de COBOL Manipulación de archivos en COBOL Búsqueda en Archivos Secuenciales COBOL Ordenación y Combinación de Archivos COBOL Manejo de Errores en COBOL Subprogramas y Modularidad en COBOL Archivos Indexados en COBOL Clasificación y Fusión de Archivos en COBOL Lectura y Escritura de Archivos Secuenciales COBOL IDE Desarrollo de Software Programación Java Plugin Eclipse Desarrollo Integrado Eclipse IDE Java Development Desarrollo de Aplicaciones Programación en Eclipse Desarrollo Ágil Java EE Desarrollo Web Desarrollo Móvil Eclipse Marketplace Eclipse Plugins JavaFX Desarrollo GUI Git Control de Versiones GitHub Git Bash Git Commands Git Workflow Branching Merging Repositorios Commit Git Branch Git Pull Git Push Git Clone Git Merge Conflictos en Git Git Log Git Tag Git Remote Visual Studio Code IDE Desarrollo de Software Extensiones Editor de Código Programación Configuración VSC Snippets Depuración Control de Versiones Integración Git Atajos de Teclado Temas Productividad Extensiones VSC Lenguajes de Programación