Patrones y Principios de Diseño
Patrones y Principios de Diseño
Patrones y Principios de Diseño
SOFTWARE
APUNTES 2 CURSO GRADO EN INGENIERA INFORMTICA
UDC (UNIVERSIDAD DE LA CORUA)
(AO 2016-2017)
COMPILANDO-ES
http://www.compilando-es.blogspot.es.com/
& UDC
TEMA 1: PRINCIPIOS
DISEO MALOLIENTE
El objetivo de seguir unos principios y patrones de diseo de software es evitar el cdigo
maloliente, es decir, aquel que es ilegible y que un pequeo cambio en una parte de la
implementacin causa la rotura de todo el software.
Un cdigo es maloliente cuando existe cdigo igual duplicado, cuando existe la llamada clase Dios
(una clase grande que hace practicamente todo ella sola), existen clases perezosas (hacen muy poco
cada una), clases de datos (solo aportan datos a la clase Dios), existe envidia (una clase usa los
mtodos de otras constantemente), intimidad inapropiada (parte de su implementacin est en otras
clases), rechace del legado (sobrescribir un mtodo que no concuerde con la clase madre), mtodos
demasiado grandes, muchas secuencias switch, muchos parmetros en el mtodo, grandes cmulos
de datos (que podrian estar en otro tipo de clases)
Las principales consecuencias son la rigidez ante los cambios, la fragilidad (los cambios causan
ruptura de cdigo), inmobilidad (muy dificil separar el sistema en componentes), viscosidad y
complejidad innecesaria (hacer un acto de sobreengenieria, haciendo las cosas mucho ms dificiles
de lo que realmente son), repeticin continua (de cdigo y estructuras) y opacidad (dificil de leer y
comprender).
PRINCIPIOS DE DISEO
Guia que hace ms sencillo al programador desarrollar el cdigo, cambiarlo y extenderlo.
PRINCIPIOS SOLID:
5 principios bsicos para simplificar y mejorar un cdigo:
RESPONSABILIDAD NICA: Cada objeto debe tener una nica responsabilidad dentro
del cdigo. Por ejemplo, si un rectngulo tiene una aplicacin geomtrica y otra grfica,
separar entre rectngulo geomtrico y rectngulo grfico.
ABIERTO CERRADO: Una entidad (clase) debe ser abierta en cuanto a permitir su
extensin, pero cerrada frente a modificaciones. Es decir, queremos modificar las cosas sin
necesidad de tocar el de otras clases. Por ejemplo, en una empresa existen 3 tipos de
trabajadores segn la forma de su salario. Cuando queremos introducir otro tipo de salario,
unicamente deberiamos crear una nueva clase sin modificar el resto de clases, en este caso
se haria con una clase madre Trabajador y 4 clases que la heredan y sobrescriben sueldo().
SUSTITUCIN DE LISKOV: Las clases derivadas (hijas) pueden ser sustituibles por la
base (madre). Es decir, aquellos mtodos que utilicen referencias a clases base deberian
funcionar al usar clases derivadas sin saberlo. Por ejemplo, el caso anterior de Trabajador, si
este tiene un mtodo getNombre() podr ser utilizado por los diferentes tipos de sueldo sin
que el cliente lo sepa.
http://www.compilando-es.blogspot.es.com/
& UDC
http://www.compilando-es.blogspot.es.com/
& UDC
TIPOS DE HERENCIA:
ADECUADOS:
NO ADECUADOS:
http://www.compilando-es.blogspot.es.com/
& UDC
TEMA 2: PATRONES
Un patrn de diseo es una solucin general y reusable a un problema recurrente dentro de un
determinado contexto.
TIPOS DE PATRONES:
-
ANTIPATRONES:
Representan aquellas soluciones recurrentes a un problema que obtienen consecuencias negativas,
como el antipatrn Clase Dios.
PATRONES DE DISEO BSICOS:
PRINCIPIO FAVORECE LA INMUTABILIDAD: Las clases deben ser inmutables a no
ser que haya una buena razn para hacerlas mutables
INSTANCIA NICA: Cada clase tiene una nica instancia y proporciona un punto global de
acceso a ella.
Definimos un atributo como la propia instancia y hacemos que el constructor sea privado.
PRINCIPIO ENCAPSULA LO QUE VARA: Identifica los aspectos del cdigo que
varan y separalos del resto que permanecen estables.
http://www.compilando-es.blogspot.es.com/
& UDC
PATRN OBSERVADOR: Permite definir una dependencia UNO A MUCHOS entre varios
objetos, de manera que cuando el objeto cambie de estado sea notificado y actualizado
automticamente.
http://www.compilando-es.blogspot.es.com/
& UDC
http://www.compilando-es.blogspot.es.com/
& UDC
MEDIANTE COMPOSICIN
ADAPTADOR POR HERENCIA MLTIPLE: Adapta las clases. Solo permite adaptar a su
clase, no a sus subclases. Permite que el adaptador sobrescriba parte del comportamiento de
la clase original, pero solo se puede usar si Objetivo es interfaz y no clase abstracta.
ADAPTADOR POR COMPOSICIN: Adapta los objetos. Permite adaptar clases y
subclases. Es ms compleja y solo funciona si Objetivo es una clase abstracta, no interfaz.
EJEMPLO: Vector vs Pila
http://www.compilando-es.blogspot.es.com/
& UDC
EJEMPLO:
http://www.compilando-es.blogspot.es.com/
& UDC
MTODO FACTORA: Define una interfaz para crear un objeto (constructor) permitiendo
que las clases decidan que objeto crear.
http://www.compilando-es.blogspot.es.com/
& UDC
PATRN MTODO PLANTILLA: Define el esqueleto del algoritmo en una operacin pero
difiriendolo de sus subclases.
http://www.compilando-es.blogspot.es.com/
& UDC