




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Un libro para saber diseñar software y utilizar los patrones de diseño
Tipo: Esquemas y mapas conceptuales
1 / 193
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































GUÍA COMPLETA
Software Design Guía completa
- Rigidez: el software se vuelve difícil de cambiar incluso en tareas
- Fragilidad: muy relacionado con la rigidez, la fragilidad es la tendencia
- Inmovilidad o poca reutilización: cuando resulta imposible reutilizar
- Viscosidad: la viscosidad en el ámbito del diseño se da cuando
Software Design Índice
PRINCIPIOS Y PATRONES DEL DESARROLLO DE SOFTWARE 13 ● I : Interface segregation. ● D : Dependency inversion. Aplicar estos principios facilitará mucho el trabajo, tanto propio como ajeno (es muy probable que nuestro código lo acaben leyendo muchos otros desarrolladores a lo largo de su ciclo de vida). Algunas de las ventajas de aplicarlo son: ● Facilitar el mantenimiento del código. ● Reducir la complejidad de añadir nuevas funcionalidades. ● Aumentar la reusabilidad de piezas y componentes. ● Mejorar la calidad del código y su comprensión.
El principio de responsabilidad única o single responsibility establece que un módulo de software debe tener una y solo una razón para cambiar. Esta razón para cambiar es lo que se entiende por responsabilidad. “Reúna las cosas que cambian por las mismas razones. Separe las cosas que cambian por diferentes razones.”
PRINCIPIOS Y PATRONES DEL DESARROLLO DE SOFTWARE 14 Este principio está estrechamente relacionado con los conceptos de acoplamiento y cohesión. Queremos aumentar la cohesión entre las cosas que cambian por las mismas razones y disminuir el acoplamiento entre las cosas que cambian por diferentes razones. Este principio trata sobre limitar el impacto de un cambio. Si existe más de una razón para cambiar una clase, probablemente tenga más de una responsabilidad. Otro posible “mal olor” es que tenga diferentes comportamientos dependiendo de su estado. Tener más de una responsabilidad también hace que el código sea difícil de leer, testear y mantener. Es decir, hace que el código sea menos flexible. Entre las ventajas de aplicar este principio encontramos que, si se necesita hacer algún cambio, éste será fácil de detectar ya que estará aislado en una clase claramente definida y comprensible. Minimizando los efectos colaterales en otras clases. Algunos ejemplos que encontramos en la vida real son: Si cambia la forma en que se compra un artículo, no tendremos que modificar el código responsable de almacenarlo. Si cambia la base de datos, no habrá que arreglar cada pedazo de código donde se utiliza. Para más detalle, ver el artículo [S.O.L.I.D.] Single responsibility principle / Principio de Responsabilidad Única en Adictos al Trabajo.
PRINCIPIOS Y PATRONES DEL DESARROLLO DE SOFTWARE 16 debería verse afectado y tener que modificarse. Y esa es realmente la esencia de este principio. Debería ser fácil cambiar el comportamiento de un módulo sin cambiar el código fuente de ese módulo. Esto no significa que nunca cambiará el código fuente. Lo que significa es que debemos esforzarnos por lograr que nuestro código esté estructurado de forma que, cuando el comportamiento cambie de la manera esperada, no debamos hacer cambios radicales en todos los módulos del sistema. Idealmente, podremos agregar el nuevo comportamiento, añadiendo código nuevo y cambiando poco o nada del código antiguo. La forma de implementar este principio en el mundo práctico, es a través del polimorfismo, ya sea por interfaces o clases abstractas. Para más detalle, ver el artículo [S.O.L.I.D.] Open-Closed Principle / Principio Abierto-Cerrado en Adictos al Trabajo.
PRINCIPIOS Y PATRONES DEL DESARROLLO DE SOFTWARE 17
“Si se ve como un pato, hace cuac como un pato, pero necesita baterías, probablemente tengas la abstracción incorrecta.” La sustitución de Liskov nos dice que los objetos de un programa deberían ser reemplazables por instancias de sus subtipos sin alterar el correcto funcionamiento del programa. Básicamente, si en alguna parte de nuestro código estamos usando una clase, y esta clase es extendida, tenemos que poder utilizar cualquiera de las clases hijas y que el programa siga siendo válido. Esto nos obliga a asegurarnos de que cuando extendemos una clase no estamos alterando el comportamiento de la clase padre. Este principio nos ayuda a utilizar la herencia de forma correcta y nos muestra que no se debe mapear automáticamente el mundo real en un modelo orientado a objetos, ya que no existe una equivalencia unívoca entre ambos modelos. Para más detalle, ver el artículo [S.O.L.I.D.] Liskov substitution en Adictos al Trabajo.
PRINCIPIOS Y PATRONES DEL DESARROLLO DE SOFTWARE 19 Para más detalle, ver el artículo [S.O.L.I.D.] Interface Segregation Principle / Principio de segregación de interfaz en Adictos al Trabajo.
El principio de inversión de dependencia nos dice que las entidades de software deben depender de abstracciones, no de implementaciones. A su vez, los módulos de alto nivel no deberían depender de los de bajo nivel. Ambos deberían depender de abstracciones.
PRINCIPIOS Y PATRONES DEL DESARROLLO DE SOFTWARE 20 Mediante este principio ocultamos los detalles de implementación, ganando en flexibilidad. Cuando estamos haciendo tests, podemos reemplazar dependencias reales por objetos mockeados. Gracias a esta flexibilidad, vamos a poder sustituir componentes sin que los clientes que los consumen se vean afectados ya que dependen de la abstracción y no de la implementación concreta. Lo que se pretende es que no existan dependencias directas entre módulos, sino que dependan de abstracciones. De esta forma, nuestros módulos pueden ser más fácilmente reutilizables. Es fundamental que la abstracción se defina en base a las necesidades del módulo o cliente y no en las capacidades de la implementación, de lo contrario, la abstracción estaría bastante acoplada a la implementación teniendo así menos flexibilidad. Para más detalle, ver el artículo [S.O.L.I.D.] Dependency inversion principle / Principio de inversión de dependencias en Adictos al Trabajo.