monografia patrones de diseño proxy (3.0)

12
Patrones de diseño proxy [Escriba el subtítulo del documento] Alumnos: ARELLANO TEJADA, PABLO CESAR HERNANDEZ VALDERRAMA, SERGIO R. TORRES GONZALES, MARCO ANTONIO. Curso: TÓPICOS ESPECIALES EN INGENIERIA DE SOFTWARE. 2014

Upload: finger10

Post on 04-Jul-2015

351 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy [Escriba el subtítulo del documento]

Alumnos:

ARELLANO TEJADA, PABLO CESAR

HERNANDEZ VALDERRAMA, SERGIO R.

TORRES GONZALES, MARCO ANTONIO.

Curso:

TÓPICOS ESPECIALES EN INGENIERIA DE SOFTWARE.

2014

Page 2: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

1 Universidad Nacional de Trujillo – Escuela de informática.

DEDICATORIA

Principalmente dedicamos este trabajo a nuestros padres puesto

que nos brindaron apoyo y fortaleza en el desarrollo y transcurso

de este, ayudándonos a concluir satisfactoriamente nuestro

proyecto.

Dedicamos a Dios puesto que nos brinda sabiduría, amor y

paciencia, nos ayuda en los momentos más difíciles brindándonos

valores que nos fortalezcan no solo como trabajo de grupo, si no

como personas.

También dedicamos a nuestro Profesor del curso quien nos dio

su sabiduría para la elaboración total de nuestra monografía

asiendo así posible el desarrollo totalmente de este.

Page 3: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

2 Universidad Nacional de Trujillo – Escuela de informática.

Índice

1. INTRODUCCIÓN .................................................................................... 3

2. MARCO TEÓRICO. ................................................................................. 4

3. DEFINICIONES ....................................................................................... 5

4. MOTIVACION ......................................................................................... 5

5. USOS DEL PATRÓN PROXY ................................................................... 6

6. ESTRUCTURA DE LA SOLUCION (DIAGRAMA DE CLASES) ..................... 6

7. PARTICIPANTES .................................................................................... 7

8. COLABORACIONES (DIAGRAMA DE SECUENCIA) .................................. 7

10. CONCLUSIONES FINALES ................................................................. 10

11. BIBLIOGRAFIA .................................................................................. 11

Page 4: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

3 Universidad Nacional de Trujillo – Escuela de informática.

1. INTRODUCCIÓN

El presente documento aborda uno de los patrones estructurales del grupo de los cuatro

(GOF), el patrón Proxy, el cual según Eric Gamma su propósito es proporcionar un

sustituto de un determinado objeto para controlar el acceso a dicho objeto.

También esta investigación presenta la problemática a la cual es aplicable y la solución

que propone el patrón estructural Proxy incluyendo diagramas de clases y abordamos la

responsabilidad de que este debe de realizar. Asimismo se muestra el código de ejemplo

implementando el patrón estructural.

Page 5: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

4 Universidad Nacional de Trujillo – Escuela de informática.

2. MARCO TEÓRICO.

Los patrones de diseño son la base para la búsqueda de soluciones a problemas

comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción

o interfaces.

Un patrón de diseño resulta ser una solución a un problema de diseño. Para que una

solución sea considerada un patrón debe poseer ciertas características. Una de ellas es

que debe haber comprobado su efectividad resolviendo problemas similares en

ocasiones anteriores. Otra es que debe ser reutilizable, lo que significa que es aplicable

a diferentes problemas de diseño en distintas circunstancias.

Los patrones de diseño pretenden:

Proporcionar catálogos de elementos reusables en el diseño de sistemas software.

Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos y

solucionados anteriormente.

Formalizar un vocabulario común entre diseñadores.

Estandarizar el modo en que se realiza el diseño

2.1 Principales Patrones GoF (Gang Of Four)

2.1.1 Patrones creacionales

Corresponden a patrones de diseño software que solucionan problemas de

creación de instancias. Nos ayudan a encapsular y abstraer dicha creación:

Object Pool (no pertenece a los patrones especificados por GoF):

Abstract Factory (fábrica abstracta)

Builder (constructor virtual)

Factory Method (método de fabricación)

Prototype (prototipo)

Singleton (instancia única)

2.1.2 Patrones estructurales

Son los patrones de diseño software que solucionan problemas de composición

(agregación) de clases y objetos:

Adapter o Wrapper (Adaptador o Envoltorio)

Bridge (Puente)

Composite (Objeto compuesto)

Page 6: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

5 Universidad Nacional de Trujillo – Escuela de informática.

Decorator (Decorador)

Facade (Fachada)

Flyweight (Peso ligero)

Proxy: Mantiene un representante de un objeto.

Módulo: Agrupa varios elementos relacionados, como clases, singletons, y métodos,

utilizados globalmente, en una entidad única.

3. DEFINICIONES

Nombre: Patrón Proxy

El patrón Proxy está clasificado dentro de los Patrones Estructurales, es también

conocido como, Embajador, Apoderado (surrogante). Veamos primero su definición:

Un proxy fuerza a que un método de un objeto RealSubject sea indirectamente

ejecutado a través de un objeto Proxy, el cual actúa como delegado o sustituto del objeto

RealSubject. Los objetos Proxy son usualmente declarados sin que el Cliente sepa de

qué se trata de un Objeto Proxy.

Se requiere que las llamadas a métodos de un objeto ocurran indirectamente a través de

un objeto original, delegando luego las llamadas a los métodos de los objetos

respectivos.

El objeto proxy, comparte la misma interfaz o superclase que el objeto delegado.

4. MOTIVACION

Una razón para controlar el acceso a un objeto es retrasar todo el costo de su creación

e inicialización hasta que sea realmente necesario usarlo. Pensemos en un editor de

documentos que puede insertar objetos gráficos en un documento. Algunos de estos

objetos gráficos, como grandes imágenes raster, pueden ser costosos de crear. Sin

embargo abrir un documento debería ser una operación que se efectuase rápidamente,

por lo que debería evitar crear todos los objetos costosos a la vez en cuanto se abra el

documento. Por otro lado, tampoco es necesario, ya que no todos esos objetos serán

visibles al documento al mismo tiempo.

.

Page 7: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

6 Universidad Nacional de Trujillo – Escuela de informática.

5. USOS DEL PATRÓN PROXY

Control de Acceso: El patrón puede ser usado para controlar el acceso a los

métodos del RealSubject. La lógica del control de acceso se delegará en el

proxy, de esta forma quedará más limpio el RealSubject (en términos de

código).

Acceso a objetos remotos: Representación de un objeto remoto de forma

local, es decir, el Proxy resuelve y enmascara la forma en cómo conectarse al

objeto remoto. Ejemplos de implementación de este patrón los pueden

encontrar en EJB y RMI.

Proxy Virtual: Crea objetos costosos bajo demanda. Por ejemplo, al iniciar

una aplicación se pueden instanciar con este patrón todos los iconos de dicha

aplicación, pero sólo cuando éste sea solicitado realmente ira a buscarlo al

disco y presentado al usuario.

Proxy de Referencia Inteligente: Sustituto de una referencia que hace

operaciones adicionales cuando se accede a un objeto, como por ejemplo,

controlar concurrencia, contar número de instancias, cargar un objeto en

memoria, manejo de cache)

6. ESTRUCTURA DE LA SOLUCION (DIAGRAMA DE CLASES)

Un proxy fuerza a que un método de un objeto RealSubject sea indirectamente

ejecutado a través de un objeto Proxy, el cual actúa como delegado o sustituto del objeto

RealSubject. Los objetos Proxy son usualmente declarados sin que el Cliente sepa que

se trata de un Objeto Proxy.

Diagrama de clases de cómo se implementa este patrón.

Page 8: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

7 Universidad Nacional de Trujillo – Escuela de informática.

7. PARTICIPANTES

7.1SUBJECT (Graphic):

Interfaz o clase abstracta que proporciona un acceso común al objeto real y su

representante (proxy), de modo que pueda usarse, proxy en cualquier sitio en él se

espere un RealSubject.

7.2 PROXY (ImageProxy):

Mantiene una referencia al objeto real.

Controla la creación y acceso a las operaciones del objeto real.

7.3 REALSUBJECT (Image):

Define el objeto real representado por el proxy.

8. COLABORACIONES (DIAGRAMA DE SECUENCIA)

El siguiente diagrama de clases que se muestra es cuando se necesita el Objeto

Real y este es instanciado para que se muestre el cliente. Por lo tanto el Proxy

instancia al RealSubject.

Page 9: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

8 Universidad Nacional de Trujillo – Escuela de informática.

9. IMPLEMENTACION (EJEMPLO)

Partamos con la interfaz que deben cumplir tanto RealSubject como el

SubjectProxy.java

public interface Subject {

void doOperation(String username);

}

Veamos la implementación del RealSubject.java

public classSubjectRealimplements Subject {

@Override

public void doOperation(String username) {

System.out.println("doOperation Real");

}

}

Finalmente la implementación del SubjectProxy.java

Page 10: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

9 Universidad Nacional de Trujillo – Escuela de informática.

public classSubjectProxyimplements Subject {

private finalSubject _subjectReal;

private boolean_connected= false;

public SubjectProxy() {

_subjectReal= new SubjectReal();

}

@Override

public voiddoOperation(String username) {

// Control de Acceso simple

if (!username.isEmpty() && "admin".equals(username)) {

System.out.println("doOperacion proxied");

if(_connected) {

_subjectReal.doOperation(username);

}

else {

connectToRemote();

_subjectReal.doOperation(username);

}

}

else {

System.out.println("Access Denied");

}

}

private voidconnectToRemote() {

System.out.println("Connecting to remote");

_connected= true;

}

}

Nuestro cliente (quien consumirá a Subject) será SubjectTest.java

publicclassSubjectTest {

public static voidmain(String[] args) {

Subject subjectProxied = new SubjectProxy();

subjectProxied.doOperation("admin");

}

}

Page 11: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

10 Universidad Nacional de Trujillo – Escuela de informática.

Esto imprimirá lo siguiente en la consola:

La explicación al Access Denied está dada porque el patrón Proxy se utilizó como

control de acceso al método doOperation. Sólo si el username es admin se ejecutará

dicho método

Veamos el Segundo Test

publicclassSubjectTest {

public static voidmain(String[] args) {

Subject subjectProxied = new SubjectProxy();

subjectProxied.doOperation("admin");

}

}

imprimirá lo siguiente en consola:

10. CONCLUSIONES FINALES

Se debe de implementar el patrón proxy cuando haya objetos que tomen mucho

tiempo en cargarse, por ejemplo cargar una imagen que consume demasiada

memoria.

El patrón Proxy proporciona un representante o sustituto de otro objeto para controlar

el acceso a este.

Los patrones de diseño describen la solución a problemas que se repiten una y otra

vez en nuestros sistemas, de forma que se puede usar esa solución siempre que

haga falta.

Page 12: Monografia   patrones de diseño proxy (3.0)

Patrones de diseño proxy 2014

11 Universidad Nacional de Trujillo – Escuela de informática.

11. BIBLIOGRAFIA

Ian Sommerville, Ingeniería del Software,septima edición, Pearson 2005.

Roger Pressman, Ingeniería del Software un enfoque práctico,quinta edición, Mc

Graw Hill 2002.

http://www.slideshare.net/urumisama/soa-3244791

http://arantxa.ii.uam.es/~eguerra/docencia/0809/12%20Proxy.pdf

http://wikipedia.org/wiki/Proxy_(patron_de_diseño)