Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Abstracción:
Se crean interfaces y capas de abstracción para separar la
implementación de los detalles internos, lo que permite
cambiar o mejorar componentes sin afectar al resto del
sistema.
Cohesión:
Los módulos deben tener una única responsabilidad y
estar cohesionados, es decir, deben estar compuestos
por elementos que trabajen juntos para lograr un
objetivo común.
Baja dependencia:
Se busca minimizar las dependencias entre los módulos
para reducir el acoplamiento y permitir cambios y
actualizaciones sin afectar a otras partes del sistema.
Flexibilidad:
El diseño debe ser flexible para adaptarse a posibles
cambios futuros o requisitos adicionales sin tener que
rehacer todo el sistema.
Reutilización de código:
Reutilización de código: Se fomenta el uso de
componentes y bibliotecas existentes en lugar de
reinventar la rueda. Esto permite ahorrar tiempo y
esfuerzo al aprovechar soluciones probadas y confiables.
Separación de intereses:
Los diferentes aspectos del software, como la interfaz de
usuario, la lógica de negocio y el almacenamiento de datos,
se separan en capas o componentes distintos. Esto facilita la
comprensión, el mantenimiento y la evolución del sistema.
Pruebas y validación:
El diseño de software debe tener en cuenta los requisitos de
pruebas desde el principio. Se deben diseñar componentes
y módulos que sean fáciles de probar y validar, lo que ayuda
a garantizar la calidad y la detección temprana de errores.
Documentación:
Es esencial documentar el diseño del software, incluyendo diagramas,
descripciones de módulos, interfaces y dependencias. Esto facilita la
colaboración entre los miembros del equipo de desarrollo y ayuda a
comprender el funcionamiento del sistema en el futuro.
Patrones de diseño:
Los patrones de diseño son soluciones probadas y reconocidas para
problemas comunes en el diseño de software. Estos patrones, como
el patrón de diseño MVC (Modelo-Vista-Controlador) o el patrón de
diseño Observer, proporcionan guías y abstracciones para resolver
desafíos de diseño específicos.
Ejemplos:
Diseño de una aplicación de gestión de tareas: En este caso, se podrían
diseñar módulos para la creación, actualización y eliminación de tareas,
así como un módulo de visualización de tareas pendientes. Cada uno de
estos módulos tendría su propia interfaz y funciones específicas para
realizar las operaciones correspondientes.