PDF de programación - Reutilización del Software - Patrones de Diseño

Imágen de pdf Reutilización del Software - Patrones de Diseño

Reutilización del Software - Patrones de Diseñográfica de visualizaciones

Publicado el 16 de Abril del 2017
1.561 visualizaciones desde el 16 de Abril del 2017
4,5 MB
82 paginas
Creado hace 17a (09/05/2006)
Reutilización del Software

Patrones de Diseño

1

Introducción

• El diseño OO es difícil y el diseño de software
orientado a objetos reutilizable lo es aún más.

• Los diseñadores expertos no resuelven los
problemas desde sus principios; reutilizan
soluciones que han funcionado en el pasado.
– Se encuentran patrones de clases y objetos de
comunicación recurrentes en muchos sistemas
orientados a objetos.

– Estos patrones resuelven problemas de diseño
específicos y hacen el diseño flexible y reusable.

2

Definición de un patrón

Alexander(arquitecto/urbanista)
Cada patrón describe un problema que

ocurre una y otra vez en nuestro
entorno y describe también el núcleo de
la solución al problema, de forma que
puede utilizarse un millón de veces sin
tener que hacer dos veces lo mismo.

3

Definición de un patrón de diseño

[Gamma]
Un patrón de diseño es una descripción

de clases y objetos comunicándose
entre sí adaptada para resolver un
problema de diseño general en un
contexto particular.

4

Introducción

• Es un tema importante en el desarrollo de

software actual: permite capturar la experiencia

• Busca ayudar a la comunidad de desarrolladores

de software a resolver problemas comunes,
creando un cuerpo literario de base
– Crea un lenguaje común para comunicar ideas y

experiencia acerca de los problemas y sus soluciones
• El uso de patrones ayuda a obtener un software

de calidad (reutilización y extensibilidad)

5

Elementos de un patrón

• Nombre: describe el problema de diseño.
• El problema: describe cuándo aplicar el

patrón.

• La solución: describe los elementos que

componen el diseño, sus relaciones,
responsabilidades y colaboración.

6

Más información en...

• Desing Patterns. E. Gamma, R. Helm, R.

Johnson, and J. Vlissides. Design Patterns.
Addison Wesley, 1995.

• Patterns Home Page: http://hillside.net/patterns/

• Thinking in patterns with java

http://www.mindview.net/Books/TIPatterns/

7

Clasificación de los patrones

• Según su propósito:

– De creación: conciernen al proceso de creación

de objetos.

– De estructura: tratan la composición de clases

y/o objetos.

– De comportamiento: caracterizan las formas en
las que interactúan y reparten responsabilidades
las distintas clases u objetos.

8

Clasificación de los patrones
GoF (gang of Four) [Gamma]

Propósito

Ámbito

Clase

Objeto

Creación

Estructural

Comportamiento

Factory Method Adapter
Adapter
Bridge

Abstract Factory
Builder

Prototype
Singleton

Interpreter
Template Method
Chain of Responsability
Command
Iterator
Mediator
Memento
Observer
Strategy
Visitor

State

Composite
Decorator
Facade
Flyweight

Proxy

Además: PATRONES DE DISEÑO FUNDAMENTALES

9

Patrones de diseño fundamentales

Son patrones que no aparecen la tabla definida

por Gamma, pero se utilizan habitualmente:

• DELEGATION
• INTERFACE
• MARKER INTERFACE

10

Patrón DELEGATION

Utilidad:

Cuando se quiere extender y reutilizar la
funcionalidad de una clase SIN UTILIZAR LA
HERENCIA

Ventajas:

• En vez de herencia múltiple
• Cuando una clase que hereda de otra quiere

ocultar algunos de los métodos heredados

• Compartir código que NO se puede heredar

11

Patrón DELEGATION
El problema

Clase A
a1()
….

Clase B
b1(),b2()
….

Clase C

a1(), b1(), b2()

….

- El lenguaje utilizado NO PERMITE HERENCIA MÚLTIPLE
- La clase C no desea TODOS los métodos de B

12

Patrón DELEGATION
La solución

Clase A
a1()
….

Clase C
a1(), b1()

….

Clase B
b1(), b2()
….

usa

El método b1() habrá que

añadirlo a C

NO USAR HERENCIA

SINO LA RELACIÓN “USA”

13

Patrón DELEGATION
Implementación

class C extends A {

B objB;
C ( ) { // En la constructora se puede crear obj. de B

objB=new B();

}
void b1( ) { objB.b1( );}
….

14

Patrón INTERFACE
Utilidad y Ventajas

Utilidad

Definir un comportamiento independiente de
donde vaya a ser utilizado

Ventajas

Desacople entre comportamiento y clase.
Realización de clases “Utilities”

15

Patrón INTERFACE
El problema

Utilities

void imprimirEstructura (????? o) {

o.irAlPrimero();
while (o.tieneElems() );

imprimir (o.obtenerSiguiente() );

}

Todos los objeto o, tienen que implementar:

irAlPrimero(), tieneElems(), obtenerSiguiente().

Problema: De qué tipo son los objetos o?

16

Patrón INTERFACE
La solución

Clase Utilities

ImprimirEstructura(Recorrible o)

….

usa

Interfaz Recorrible

irAlPrimero(),
tieneElems(),
obtenerSiguiente().

implementa

Clase A
irAlPrimero(),
tieneElems(),
obtenerSiguiente().

Solución: Definir los parámetros de un tipo Interfaz.
Todas las clases(instancias) que quieran utilizar ese comportamiento
deberán implementar dicho interfaz

17

Patrón INTERFACE
Implementación

class MiClase<T> implements Recorrible<T> {

Vector<T> v=new Vector<T>();
int pos;
void irAlPrimero() { pos=0;}
boolean tieneElems() {v.lenght < pos;}
T obtenerSiguiente() {
T o=v.elementAt(pos); pos++;
return o; }

}
}

18

Patrón INTERFACE
Ejemplo

// Estructuras de datos, algoritmos y predicados JGL

Array queue = new Array( );
queue.add( ...);

Counting.countIf(queue, new MayorEdad());

Uso de
countIf

class MayorEdad implements UnaryPredicate {

public boolean execute (Object o1)
{ ...... } }

Definición: Counting.countIf(Container,UnaryPredicate);

19

Patrón MARKER INTERFACE
Utilidad y Ventajas

• Utilidad

– Sirve para indicar atributos semánticos de

una clase.

• Ventajas:

– Se puede preguntar si un objeto pertenece

a una clase de un determinado tipo o no.

– Habitualmente se utiliza en clases de

utilidades que tienen que determinar algo
sobre objetos sin asumir que son
instancias de una determinada clase o no.

20

Patrón MARKER INTERFACE

Clase Utilidad

operacion(Object o)

….

usa

Interfaz Marker

Clase Marcada

Clase NoMarcada

m1()….

nm1()….

Dentro del código del método operacion(Object o) de la
clase Utilidad podemos preguntar si el objeto o es de una
clase Marker:

if (o instanceof Marker) {...}

else {...}

21

Patrón MARKER INTERFACE
Ejemplo

En Java hay clases “serializables”,
“cloneables”, etc. Para ello, basta con
que implementen las interfaces
Serializable, Cloneable, etc.

22

Clasificación de los patrones
GoF (gang of Four) [Gamma]

Propósito

Ámbito

Clase

Objeto

Creación

Estructural

Comportamiento

Factory Method Adapter
Adapter
Bridge

Abstract Factory
Builder

Prototype
Singleton

Composite
Decorator
Facade
Flyweight

Proxy

Interpreter
Template Method
Chain of Responsability
Command
Iterator
Mediator
Memento
Observer
Strategy
Visitor

State

23

Patrón SINGLETON

• Utilidad

– Asegurar que una clase tiene una sola instancia y

proporcionar un punto de acceso global a ella

• Ventajas

– Es necesario cuando hay clases que tienen que

gestionar de manera centralizada un recurso

– Una variable global no garantiza que sólo se instancie

una vez

24

Patrón SINGLETON
La solución

– El constructor de la clase DEBE SER PRIVADO
– Se proporciona un método ESTÁTICO en la clase que devuelve
LA ÚNICA INSTANCIA DE LA CLASE:

getInstance()

Clase CSingleton
- CSingleton laInstancia
….
- CSingleton ()
+ getInstance ()

Atributos

Métodos

Método
static

- indica que es private

+ indica que es public

25

Patrón SINGLETON
Implementación

public class CSingleton {

private static CSingleton laInstancia = new CSingleton();
private CSingleton() {}
public static CSingleton getInstance() {

return laInstancia;

}
………………………….

}

26

Patrón SINGLETON
Inconvenientes

Se podría obtener una nueva instancia usando el esquema anterior:

public class MiCSingleton extends CSingleton

implements Cloneable {}

MiCSingleton mcs = new MiCSingleton();
MiCSingleton mcsCopia = mcs.clone();

Para solucionarlo: definir CSingleton como final
public final class CSingleton {...}

27

public final class Facultad implements Serializable {

private Vector listaProfesores;
private Vector listaEstudiantes;
private Vector listaAsigs;
private Vector listaMatrs;
private static Facultad laFacultad=new Facultad();
private Facultad()
{ listaProfesores = new Vector(); // Sólo hay UNA instancia

PATRÓN
SINGLETON

// EL CONSTRUCTOR ES PRIVADO

EJEMPLO DE

listaEstudiantes= new Vector(); // y se guarda en laFacultad
listaAsigs = new Vector();
listaMatrs = new Vector(); }

public static Facultad getInstance() {return laFacultad;}
public Vector obtListaProfesores()

{return listaProfesores;}

public void anadirProfesor(Profesor p)

{listaProfesores.addElement(p); }

28

Patrón FACTORY METHOD

Utilidad

Separar la clase que crea los objetos, de la
jerarquía de objetos a instanciar

Ventajas

– Centralización de la creación de objetos
– Facilita la escalabilidad del sistema
– El usuario se abstrae de la instancia a crear

29

Patrón FACTORY METHOD
El problema

Clase A

oper1()
oper2()
...

Clase A’
oper1()
oper2()
...

Clase A’’
oper1()
oper2()
...

Programa1

If (tipo==1)
create A’
else
create A’’

Programa2

If (tipo==1)
create A’
else
create A’’

Problema: Qué sucede si queremos añadir A’’’?

30

Patrón FACTORY METHOD
Una primera solución

Clase A
oper1()
oper2()
static A create(tipo)

Clase A’
oper1()
oper2()
...

Clase A’’
oper1()
oper2()
...

Programa1

A.create(1);

Programa2

A.create(2)

Solución: Hay que recompilar todas las clases que heredan de A

Puede que no tengamos acceso al código de A

31

Patrón FACTORY METHOD
La solución final

Interfaz A

oper1()
oper2()
...

Clase CFactory
A create(tipo)

….

Clase A1
oper1()
oper2()
...

Clase A2
oper1()
oper2()
...

Solución: Separar el creador de las instancias de la propia clase

las instancias se crean en una clase CFactory

32

Patrón FACTORY METHOD

class Aplicación {

...
A newA(...) {
A miA;
CFactory fact= new CFactory();
...
miA = fact.create(“TIPO 2”);
...
return miA;

}

• No se crean las instancias direct
  • Links de descarga
http://lwp-l.com/pdf2999

Comentarios de: Reutilización del Software - Patrones de Diseño (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad