SlideShare ist ein Scribd-Unternehmen logo
1 von 17
UNIVERSIDAD NACIONAL DE
TRUJILLO
FACULTAD DE CIENCIAS FÍSICAS Y MATEMÁTICAS
ESCUELA ACADÉMICA PROFESIONAL DE ING. INFORMÁTICA

TEMA:
PATRONES DE DISEÑO SOFTWARE ESTRUCTURALES
PROXY
CURSO:
TOPICOS EN SOFTWARE
PROFESOR:
DIAZ PULIDO ARTURO
INTEGRANTES:
ABANTO VERA ANGELICA MARIA
CASTILLO FARFAN GEORGE
IDROGO ZAVALETA ALEX JAIME

TRUJILLO – PERÚ
2014
1

ARQUITECTURA EN PIPELINE

INDICE

DEDICATORIA ............................................................................................... 2
INTRODUCCIÓN............................................................................................ 3
MARCO TEÓRICO ........................................................................................ 4
CAPITULO I: PATRON PROXY ............................................................................................................. 4
CAPITULO II: CARACTERISTICAS ..................................................................................................... 6
CAPITULO III: APLICABILIDAD ......................................................................................................... 6
CAPITULO IV: CONSECUENCIAS ....................................................................................................... 7
CAPITULO V: VENTAJAS Y DESVENTAJAS ..................................................................................... 8

CÓDIGO ........................................................................................................... 9
CONCLUSIONES .......................................................................................... 10
REFERENCIA BIBLIOGRAFICA ............................................................. 16
2

ARQUITECTURA EN PIPELINE

DEDICATORIA

Con mucho cariño y estima dedicamos este trabajo a las
personas quienes luchan diariamente por ver de nosotros
personas dignas en la sociedad y en el sendero de la
vida.
El presente trabajo lo dedicamos a usted profesor Arturo
días Pulido por el esfuerzo que realiza con la Institución
de formarnos profesionalmente y ser futuros Ingenieros
Informáticos de capacidad competitiva.

Abanto Vera Angélica María
Castillo Farfán George
Idrogo Zavaleta Alex Jaime
3

ARQUITECTURA EN PIPELINE

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 Erich 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 que este
debe de realizar. Asimismo se muestra el código de ejemplo implementando el patrón estructural.
4

ARQUITECTURA EN PIPELINE

MARCO TEÓRICO
CAPITULO I:
EL PATRÓN PROXY
Este patrón consiste en interponer un intermediario (Proxy) entre un objeto y los demás que lo
utilizan. Se diferencia del patrón Adaptador en que el objeto "adaptado" solamente puede ser
manipulado a través del objeto Proxy.
Se suele utilizar para implementar comportamientos "vagos" (lazy). Por ejemplo, si tenemos
muchos objetos imagen en un documento, se tardaría mucho tiempo en abrir el documento al cargar
las imágenes de disco. Para evitarlo podemos sustituir los objetos imagen por objetos proxy Imagen,
con el mismo interfaz, pero que solamente cargan la imagen cuando se va a visualizar.
Debemos insistir en dos aspectos que caracterizan el patrón Proxy:
El objeto Apoderado tiene el mismo interfaz que el objeto "Protegido". Para facilitar esto se
puede derivar el objeto Apoderado de la misma clase padre que el objeto "Protegido", pero
no es absolutamente necesario.
El objeto "Protegido" solamente puede ser manipulado por su correspondiente Apoderado.
Un ejemplo típico de aplicación del patrón proxy es el de un editor de documentos. El editor podrá
incluir imágenes y dibujos complejos, y se plantea el problema de recuperar todos estos costosos
objetos cada vez que se abre el documento. La aplicación del patrón proxy soluciona el problema
definiendo un "representante", que ocupe su lugar, hasta que sea necesario cargarlos.
PROPOSITO
Proporcionar un representante o sustituto de otro objeto para controlar el acceso a éste.
MOTIVACIÓN
Retrasar el coste de crear e inicializar un objeto hasta que es realmente necesario. Por
ejemplo, no abrir las imágenes de un documento hasta que no son visibles.
Solución:
5

ARQUITECTURA EN PIPELINE

ESTRUCTURA
6

ARQUITECTURA EN PIPELINE

CAPITULO II:
CARACTERISTICAS


Proporciona soluciones concretas en la creación de objetos pesados.



Proporciona soluciones técnicas para la utilización de las cargas de objetos de gran tamaño.



Se utilizan en situaciones frecuentes.



Favorece la reutilización de código.

CAPITULO III:
APLICABILIDAD
El patrón proxy se usa cuando se necesita una referencia a in objeto más flexible o sofisticado que
un puntero. Algunas situaciones comunes de aplicación son:
Proxy remoto:Representa un objeto en otro espacio de direcciones.
Proxy virtual: Crea objetos costosos por encargo (como la clase ImageProxy en el ejemplo
de motivación).
Proxy de protección:Controla el acceso a un objeto.
Referencia inteligente: Sustituto de un puntero que lleva a cabo operaciones adicionales
cuando se accede a un objeto (ej. contar el número de referencias, cargar un objeto
persistente en memoria, bloquear el objeto para impedir acceso concurrente,...).
PARTICIPANTES
La clase Proxy:Mantiene una referencia al objeto real (en el siguiente ejemplo se le
denomina _sujetoReal) y proporciona una interfaz idéntica al sujeto (la clase Sujeto). Además
controla el acceso a dicho objeto real y puede ser el responsable de su creación y borrado. También
tiene otras responsabilidades que dependen del tipo de proxy:
7

ARQUITECTURA EN PIPELINE

Proxy (ImageProxy):
 Mantiene una referencia al objeto real.
 Proporciona una interfaz idéntica a la del objeto real.
 Controla el acceso al objeto real, y puede ser responsable de crearlo y borrarlo
 Otras responsabilidades dependen del tipo de proxy:
-

Proxies remotos: codifican las peticiones, y las envían al objeto real.

-

Proxies virtuales: pueden guardar información del objeto real (caché).

-

Proxies de protección: comprueban que el cliente tiene los permisos necesarios
para realizar la petición.

Subject (Graphic): Define una interfaz común para el proxy y el objeto real, de tal modo
que se puedan usar de manera indistinta.
RealSubject (Image): Clase del objeto real que el proxy representa.

CAPITULO IV:
CONSECUENCIAS
El patrón de diseño proxy introduce cierto rango de desvió sobre el acceso de un objeto, los usos de
este desvió dependen del tipo de proxy.
Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de
direcciones.
Un proxy virtual puede realizar optimizaciones, como la creación de objetos bajo demanda.
Los proxies de protección y las referencias inteligentes permiten realizar tareas de
mantenimiento adicionales al acceder a un objeto.
Optimización copy-on-write
Copiar un objeto grande puede ser costoso.
Si la copia no se modifica, no es necesario incurrir en dicho gasto.
El sujeto mantiene un número de referencias, y sólo cuando se realiza una operación que
modifica el objeto, éste se copia.
8

ARQUITECTURA EN PIPELINE

CAPITULO V:
VENTAJAS Y DESVENTAJAS PROXY
Ventajas:
 Mantiene una referencia que permite al proxy acceder al objeto real.
 Proporciona una interfaz igual que la del sujeto real.
 Controla el acceso al sujeto real, y puede ser responsable de crearlo y borrarlo.
Otras responsabilidades, depende del tipo de proxy:
Proxy remoto  codifica peticiones y se las manda al sujeto.
Proxy virtual  guarda información adicional sobre el sujeto, para retardar el acceso
al mismo.
Proxy de protección  comprueba.
 Copiar un objeto grande puede ser costoso, si la copia no se modifica, no ay necesidad de
incurrir en dicho gasto.
 El sujeto mantiene una cuenta de referencias, solo cuando se hace objeto.
 Una operación que modifica el objeto, se copia realmente ejemplo:
Clase String.
Desventajas:
 Introduce un nivel de induración adicional, que tiene muchos posibles usos.
 Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de
direcciones.
 Un proxy virtual puede optimizarsarse, como crear objetos de bajo demanda.
 Tanto los proxy de protección, como las referencias inteligentes permiten realizar tareas de
un mantenimiento adicionales cuando se accede a un objeto.
9

ARQUITECTURA EN PIPELINE

CÓDIGO

CLIENTE:
packagepatronproxy;
importjavax.swing.JFrame;
importjava.awt.Image;
importjava.awt.Graphics;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjavax.swing.DefaultListModel;
importjavax.swing.JFileChooser;
importjavax.swing.filechooser.FileNameExtensionFilter;
public class Cliente extends javax.swing.JFrame {
privateImage imagen=null;
10

ARQUITECTURA EN PIPELINE

private Imagen miImagen = new ImagenProxy("Imagen1.jpg");
public Cliente() {
initComponents();
}

public void paint(Graphics g){
imagen=miImagen.obtenerImagen();
g.drawImage(imagen,110,90, 600,330,this);
}
private void btnCargarActionPerformed(java.awt.event.ActionEventevt) {
// TODO add your handling code here:
JFileChooserfc = new JFileChooser();
fc.setFileFilter(new FileNameExtensionFilter("Archivos de texto","jpg","png","jpeg","bmp"));
intopcion = fc.showDialog(this, "Abrir");
if (opcion == JFileChooser.APPROVE_OPTION) {
//obtenemos ruta de la imagen
String filepath = fc.getSelectedFile().toString();
intpos = filepath.lastIndexOf(System.getProperty("file.separator"));
StringnomFich = null;
if (pos> 0) nomFich = filepath.substring(pos + 1 ) ;
//agregamos al jlist "list" la nueva imagen
DefaultListModellistModel = new DefaultListModel();
for(inti=0 ; i<this.list.getModel().getSize() ; i++ ){
listModel.addElement(this.list.getModel().getElementAt(i));
}
listModel.addElement(nomFich);
11

ARQUITECTURA EN PIPELINE

this.list.setModel(listModel);
//------------------------------------------}
}
private void listMouseClicked(java.awt.event.MouseEventevt) {
// TODO add your handling code here:
if (evt.getClickCount() == 2) {
int index = list.locationToIndex(evt.getPoint());
String seleccionaImagen= list.getSelectedValue().toString();
miImagen = new ImagenProxy(seleccionaImagen);
repaint();
}
}
public static void main(String args[]) {
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
try {
for
(javax.swing.UIManager.LookAndFeelInfoinfo
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (InstantiationException ex) {

:
12

ARQUITECTURA EN PIPELINE

java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
}
//</editor-fold>
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
newCliente().setVisible(true);
}
});
}
// Variables declaration - do not modify
privatejavax.swing.JButtonbtnCargar;
privatejavax.swing.ButtonGroup buttonGroup1;
private javax.swing.JLabel jLabel2;
privatejavax.swing.JScrollPane jScrollPane1;
privatejavax.swing.JList list;
// End of variables declaration
}

IMAGEN
13

ARQUITECTURA EN PIPELINE

packagepatronproxy;

//Interfaz que define el objeto (Subject)

importjava.awt.Image;

public interface Imagen {
publicImageobtenerImagen();
}

IMAGENPROXY
packagepatronproxy;
//Esta clase es la clase encargada de crear el objeto sustituto
//que se encarga de controlar el acceso al objeto real (Proxy)
importjava.awt.Image;
public class ImagenProxy implements Imagen {
private Imagen imagen=null;
private String nombreImagen;
public ImagenProxy(String nombreImagen){
this.nombreImagen= nombreImagen;
}
public Image obtenerImagen() {
if(imagen == null)imagen=new ImagenReal(nombreImagen);
return imagen.obtenerImagen();
}}

IMAGEN REAL
packagepatronproxy;
14

ARQUITECTURA EN PIPELINE

//Este es el objeto real (SubjectReal)
importjava.awt.Image;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjavax.imageio.ImageIO;

public class ImagenReal implements Imagen {
privateBufferedImageimagen;
publicImagenReal(String nombreImagen){
cargarImagen(nombreImagen);
}
publicImageobtenerImagen() {
return (Image)imagen;
}
public void cargarImagen(String nombre){
try{
imagen = ImageIO.read(getClass().getClassLoader().getResource("Imagenes"+ nombre));
}catch(IOException e){
System.out.println("Error intentando cargar la imagen");
}
}
}

PATRONES PROXY
packagepatronproxy;
15

ARQUITECTURA EN PIPELINE

importjavax.swing.JOptionPane;
importorg.jvnet.substance.SubstanceLookAndFeel;
importorg.jvnet.substance.watermark.SubstanceImageWatermark;

public class Patronproxy {
public static void main(String[] args) {
// TODO codeapplicationlogichere

try {

Cliente.setDefaultLookAndFeelDecorated(true);
SubstanceLookAndFeel.setSkin("org.jvnet.substance.skin.MagmaSkin");
SubstanceLookAndFeel.setCurrentTheme("org.jvnet.substance.theme.SubstanceLightAquaTheme")
;
SubstanceLookAndFeel.setImageWatermarkOpacity(new Float(1));
Cliente c = new Cliente();
c.setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Ocurrio un
error..."+e.getMessage(),"Mensaje",JOptionPane.ERROR);
}
}
}

CONCLUSIONES
Con el estudio del patrón Proxy hemos concluido que:
16

ARQUITECTURA EN PIPELINE

 Se debe 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 éste.

REFERENCIA BIBLIOGRAFICA
http://www.ciberaula.com/articulo/patron_proxy/
http://patronesdediseno.blogspot.com/2009/05/patron-proxy.html
http://es.wikipedia.org/wiki/Proxy
http://arantxa.ii.uam.es/~eguerra/docencia/0708/11%20Proxy.pdf
http://modelosprogramacion.blogspot.com/2009/05/proxy.html
http://www.slideshare.net/maitin30/patron-de-diseo-proxy

Weitere ähnliche Inhalte

Was ist angesagt?

Diagrama de componentes
Diagrama de componentesDiagrama de componentes
Diagrama de componentes
uitron
 
Sesion 7 2 diseño diagramas de despliegue
Sesion 7 2 diseño   diagramas de despliegueSesion 7 2 diseño   diagramas de despliegue
Sesion 7 2 diseño diagramas de despliegue
Julio Pari
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresql
Cesar Martinez
 
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A ObjetosMetodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
hector_h30
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
2008PA2Info3
 
Diagrama de actividades uml
Diagrama de actividades umlDiagrama de actividades uml
Diagrama de actividades uml
camiloan40
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
Isabel
 

Was ist angesagt? (20)

Los 13 diagramas UML y sus componentes
Los 13 diagramas UML y sus componentesLos 13 diagramas UML y sus componentes
Los 13 diagramas UML y sus componentes
 
El servicio http
El servicio httpEl servicio http
El servicio http
 
Patrones GOF
Patrones GOFPatrones GOF
Patrones GOF
 
Diagrama de componentes
Diagrama de componentesDiagrama de componentes
Diagrama de componentes
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Sesion 7 2 diseño diagramas de despliegue
Sesion 7 2 diseño   diagramas de despliegueSesion 7 2 diseño   diagramas de despliegue
Sesion 7 2 diseño diagramas de despliegue
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
DIAGRAMAS DE CLASE
DIAGRAMAS DE CLASEDIAGRAMAS DE CLASE
DIAGRAMAS DE CLASE
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresql
 
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A ObjetosMetodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
 
Sistema distribuido
Sistema distribuidoSistema distribuido
Sistema distribuido
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
 
PROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTEPROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTE
 
POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y Polimorfismo
 
Diagrama de actividades uml
Diagrama de actividades umlDiagrama de actividades uml
Diagrama de actividades uml
 
Introducción a los patrones de diseño
Introducción a los patrones de diseñoIntroducción a los patrones de diseño
Introducción a los patrones de diseño
 
Base de datos orientada a objetos
Base de datos orientada a objetosBase de datos orientada a objetos
Base de datos orientada a objetos
 
Qué es la poo
Qué es la pooQué es la poo
Qué es la poo
 
4 unidad polimorfismo
4 unidad polimorfismo4 unidad polimorfismo
4 unidad polimorfismo
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 

Andere mochten auch

Exposicion de patrón de diseño fachada
Exposicion de patrón de diseño fachadaExposicion de patrón de diseño fachada
Exposicion de patrón de diseño fachada
joseph929
 
Buider Patron de Diseño
Buider Patron de DiseñoBuider Patron de Diseño
Buider Patron de Diseño
Mario Cabrera
 
Monografia patrones de diseño proxy (3.0)
Monografia   patrones de diseño proxy (3.0)Monografia   patrones de diseño proxy (3.0)
Monografia patrones de diseño proxy (3.0)
finger10
 
Jerarquia de proxys sibling ing freddy alfonso beltran
Jerarquia de proxys sibling ing freddy alfonso beltranJerarquia de proxys sibling ing freddy alfonso beltran
Jerarquia de proxys sibling ing freddy alfonso beltran
beppo
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
kaolong
 
1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño
landeta_p
 
Parte 2 planeacion estrategica
Parte 2 planeacion estrategicaParte 2 planeacion estrategica
Parte 2 planeacion estrategica
parragloria
 
La Vida de las Empresas en el Mundo del Riesgo
La Vida de las Empresas en el Mundo del RiesgoLa Vida de las Empresas en el Mundo del Riesgo
La Vida de las Empresas en el Mundo del Riesgo
Ramiro Iván Díaz Guevara
 
Pino edison perifericos
Pino edison perifericosPino edison perifericos
Pino edison perifericos
Edison Geovany
 
5. argumentaciones jurídicas
5.  argumentaciones jurídicas5.  argumentaciones jurídicas
5. argumentaciones jurídicas
psoegijon
 

Andere mochten auch (20)

Patrones de diseño Proxy
Patrones  de diseño ProxyPatrones  de diseño Proxy
Patrones de diseño Proxy
 
Patron de diseño proxy
Patron de diseño proxyPatron de diseño proxy
Patron de diseño proxy
 
Patron builder
Patron builderPatron builder
Patron builder
 
Facade
FacadeFacade
Facade
 
Patrones de Diseño de Software: Proxy
Patrones de Diseño de Software: ProxyPatrones de Diseño de Software: Proxy
Patrones de Diseño de Software: Proxy
 
Exposicion de patrón de diseño fachada
Exposicion de patrón de diseño fachadaExposicion de patrón de diseño fachada
Exposicion de patrón de diseño fachada
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2
 
Buider Patron de Diseño
Buider Patron de DiseñoBuider Patron de Diseño
Buider Patron de Diseño
 
Monografia patrones de diseño proxy (3.0)
Monografia   patrones de diseño proxy (3.0)Monografia   patrones de diseño proxy (3.0)
Monografia patrones de diseño proxy (3.0)
 
Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)
 
Jerarquia de proxys sibling ing freddy alfonso beltran
Jerarquia de proxys sibling ing freddy alfonso beltranJerarquia de proxys sibling ing freddy alfonso beltran
Jerarquia de proxys sibling ing freddy alfonso beltran
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
PHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseñoPHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseño
 
1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño
 
Parte 2 planeacion estrategica
Parte 2 planeacion estrategicaParte 2 planeacion estrategica
Parte 2 planeacion estrategica
 
La Vida de las Empresas en el Mundo del Riesgo
La Vida de las Empresas en el Mundo del RiesgoLa Vida de las Empresas en el Mundo del Riesgo
La Vida de las Empresas en el Mundo del Riesgo
 
Pino edison perifericos
Pino edison perifericosPino edison perifericos
Pino edison perifericos
 
Ubuntu.pptx lalo expo
Ubuntu.pptx lalo expoUbuntu.pptx lalo expo
Ubuntu.pptx lalo expo
 
5. argumentaciones jurídicas
5.  argumentaciones jurídicas5.  argumentaciones jurídicas
5. argumentaciones jurídicas
 
Guias adolecente y joven
Guias adolecente y jovenGuias adolecente y joven
Guias adolecente y joven
 

Ähnlich wie Patrones proxy

Anon metodologia de la programacion orientada a objetos con c++
Anon   metodologia de la programacion orientada a objetos con c++Anon   metodologia de la programacion orientada a objetos con c++
Anon metodologia de la programacion orientada a objetos con c++
ratasquerosaXX
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prev
jtk1
 
Propuestas de proyectos fin de estudios curso 2013
Propuestas de proyectos fin de estudios curso 2013Propuestas de proyectos fin de estudios curso 2013
Propuestas de proyectos fin de estudios curso 2013
Amador Aparicio
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
kaolong
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
mi casa
 

Ähnlich wie Patrones proxy (20)

Informe patron proxy
Informe patron proxyInforme patron proxy
Informe patron proxy
 
Cliente/Servidor
Cliente/ServidorCliente/Servidor
Cliente/Servidor
 
Proxy observer patrones
Proxy observer patronesProxy observer patrones
Proxy observer patrones
 
Anon metodologia de la programacion orientada a objetos con c++
Anon   metodologia de la programacion orientada a objetos con c++Anon   metodologia de la programacion orientada a objetos con c++
Anon metodologia de la programacion orientada a objetos con c++
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prev
 
Enclausulamiento java
Enclausulamiento javaEnclausulamiento java
Enclausulamiento java
 
Patrones de Diseño: Prototype
Patrones de Diseño: PrototypePatrones de Diseño: Prototype
Patrones de Diseño: Prototype
 
Propuestas de proyectos fin de estudios curso 2013
Propuestas de proyectos fin de estudios curso 2013Propuestas de proyectos fin de estudios curso 2013
Propuestas de proyectos fin de estudios curso 2013
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
 
Lab Tr5 Multicapa
Lab Tr5 MulticapaLab Tr5 Multicapa
Lab Tr5 Multicapa
 
4.1, 4.2
4.1, 4.24.1, 4.2
4.1, 4.2
 
Construyendo un Detector de Objetos con Azure Custom Vision .NET SDK
Construyendo un Detector de Objetos con Azure Custom Vision .NET SDKConstruyendo un Detector de Objetos con Azure Custom Vision .NET SDK
Construyendo un Detector de Objetos con Azure Custom Vision .NET SDK
 
Tema 2. bases de datos orientadas a objetos
Tema 2. bases de datos orientadas a objetosTema 2. bases de datos orientadas a objetos
Tema 2. bases de datos orientadas a objetos
 
Repositorio
RepositorioRepositorio
Repositorio
 
Desarrollo aplicaciones
Desarrollo aplicacionesDesarrollo aplicaciones
Desarrollo aplicaciones
 
DROPBOX
DROPBOXDROPBOX
DROPBOX
 
Basededatos.pdf
Basededatos.pdfBasededatos.pdf
Basededatos.pdf
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
UDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasUDA-Componentes RUP. Migas
UDA-Componentes RUP. Migas
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 

Patrones proxy

  • 1. UNIVERSIDAD NACIONAL DE TRUJILLO FACULTAD DE CIENCIAS FÍSICAS Y MATEMÁTICAS ESCUELA ACADÉMICA PROFESIONAL DE ING. INFORMÁTICA TEMA: PATRONES DE DISEÑO SOFTWARE ESTRUCTURALES PROXY CURSO: TOPICOS EN SOFTWARE PROFESOR: DIAZ PULIDO ARTURO INTEGRANTES: ABANTO VERA ANGELICA MARIA CASTILLO FARFAN GEORGE IDROGO ZAVALETA ALEX JAIME TRUJILLO – PERÚ 2014
  • 2. 1 ARQUITECTURA EN PIPELINE INDICE DEDICATORIA ............................................................................................... 2 INTRODUCCIÓN............................................................................................ 3 MARCO TEÓRICO ........................................................................................ 4 CAPITULO I: PATRON PROXY ............................................................................................................. 4 CAPITULO II: CARACTERISTICAS ..................................................................................................... 6 CAPITULO III: APLICABILIDAD ......................................................................................................... 6 CAPITULO IV: CONSECUENCIAS ....................................................................................................... 7 CAPITULO V: VENTAJAS Y DESVENTAJAS ..................................................................................... 8 CÓDIGO ........................................................................................................... 9 CONCLUSIONES .......................................................................................... 10 REFERENCIA BIBLIOGRAFICA ............................................................. 16
  • 3. 2 ARQUITECTURA EN PIPELINE DEDICATORIA Con mucho cariño y estima dedicamos este trabajo a las personas quienes luchan diariamente por ver de nosotros personas dignas en la sociedad y en el sendero de la vida. El presente trabajo lo dedicamos a usted profesor Arturo días Pulido por el esfuerzo que realiza con la Institución de formarnos profesionalmente y ser futuros Ingenieros Informáticos de capacidad competitiva. Abanto Vera Angélica María Castillo Farfán George Idrogo Zavaleta Alex Jaime
  • 4. 3 ARQUITECTURA EN PIPELINE 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 Erich 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 que este debe de realizar. Asimismo se muestra el código de ejemplo implementando el patrón estructural.
  • 5. 4 ARQUITECTURA EN PIPELINE MARCO TEÓRICO CAPITULO I: EL PATRÓN PROXY Este patrón consiste en interponer un intermediario (Proxy) entre un objeto y los demás que lo utilizan. Se diferencia del patrón Adaptador en que el objeto "adaptado" solamente puede ser manipulado a través del objeto Proxy. Se suele utilizar para implementar comportamientos "vagos" (lazy). Por ejemplo, si tenemos muchos objetos imagen en un documento, se tardaría mucho tiempo en abrir el documento al cargar las imágenes de disco. Para evitarlo podemos sustituir los objetos imagen por objetos proxy Imagen, con el mismo interfaz, pero que solamente cargan la imagen cuando se va a visualizar. Debemos insistir en dos aspectos que caracterizan el patrón Proxy: El objeto Apoderado tiene el mismo interfaz que el objeto "Protegido". Para facilitar esto se puede derivar el objeto Apoderado de la misma clase padre que el objeto "Protegido", pero no es absolutamente necesario. El objeto "Protegido" solamente puede ser manipulado por su correspondiente Apoderado. Un ejemplo típico de aplicación del patrón proxy es el de un editor de documentos. El editor podrá incluir imágenes y dibujos complejos, y se plantea el problema de recuperar todos estos costosos objetos cada vez que se abre el documento. La aplicación del patrón proxy soluciona el problema definiendo un "representante", que ocupe su lugar, hasta que sea necesario cargarlos. PROPOSITO Proporcionar un representante o sustituto de otro objeto para controlar el acceso a éste. MOTIVACIÓN Retrasar el coste de crear e inicializar un objeto hasta que es realmente necesario. Por ejemplo, no abrir las imágenes de un documento hasta que no son visibles. Solución:
  • 7. 6 ARQUITECTURA EN PIPELINE CAPITULO II: CARACTERISTICAS  Proporciona soluciones concretas en la creación de objetos pesados.  Proporciona soluciones técnicas para la utilización de las cargas de objetos de gran tamaño.  Se utilizan en situaciones frecuentes.  Favorece la reutilización de código. CAPITULO III: APLICABILIDAD El patrón proxy se usa cuando se necesita una referencia a in objeto más flexible o sofisticado que un puntero. Algunas situaciones comunes de aplicación son: Proxy remoto:Representa un objeto en otro espacio de direcciones. Proxy virtual: Crea objetos costosos por encargo (como la clase ImageProxy en el ejemplo de motivación). Proxy de protección:Controla el acceso a un objeto. Referencia inteligente: Sustituto de un puntero que lleva a cabo operaciones adicionales cuando se accede a un objeto (ej. contar el número de referencias, cargar un objeto persistente en memoria, bloquear el objeto para impedir acceso concurrente,...). PARTICIPANTES La clase Proxy:Mantiene una referencia al objeto real (en el siguiente ejemplo se le denomina _sujetoReal) y proporciona una interfaz idéntica al sujeto (la clase Sujeto). Además controla el acceso a dicho objeto real y puede ser el responsable de su creación y borrado. También tiene otras responsabilidades que dependen del tipo de proxy:
  • 8. 7 ARQUITECTURA EN PIPELINE Proxy (ImageProxy):  Mantiene una referencia al objeto real.  Proporciona una interfaz idéntica a la del objeto real.  Controla el acceso al objeto real, y puede ser responsable de crearlo y borrarlo  Otras responsabilidades dependen del tipo de proxy: - Proxies remotos: codifican las peticiones, y las envían al objeto real. - Proxies virtuales: pueden guardar información del objeto real (caché). - Proxies de protección: comprueban que el cliente tiene los permisos necesarios para realizar la petición. Subject (Graphic): Define una interfaz común para el proxy y el objeto real, de tal modo que se puedan usar de manera indistinta. RealSubject (Image): Clase del objeto real que el proxy representa. CAPITULO IV: CONSECUENCIAS El patrón de diseño proxy introduce cierto rango de desvió sobre el acceso de un objeto, los usos de este desvió dependen del tipo de proxy. Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de direcciones. Un proxy virtual puede realizar optimizaciones, como la creación de objetos bajo demanda. Los proxies de protección y las referencias inteligentes permiten realizar tareas de mantenimiento adicionales al acceder a un objeto. Optimización copy-on-write Copiar un objeto grande puede ser costoso. Si la copia no se modifica, no es necesario incurrir en dicho gasto. El sujeto mantiene un número de referencias, y sólo cuando se realiza una operación que modifica el objeto, éste se copia.
  • 9. 8 ARQUITECTURA EN PIPELINE CAPITULO V: VENTAJAS Y DESVENTAJAS PROXY Ventajas:  Mantiene una referencia que permite al proxy acceder al objeto real.  Proporciona una interfaz igual que la del sujeto real.  Controla el acceso al sujeto real, y puede ser responsable de crearlo y borrarlo. Otras responsabilidades, depende del tipo de proxy: Proxy remoto  codifica peticiones y se las manda al sujeto. Proxy virtual  guarda información adicional sobre el sujeto, para retardar el acceso al mismo. Proxy de protección  comprueba.  Copiar un objeto grande puede ser costoso, si la copia no se modifica, no ay necesidad de incurrir en dicho gasto.  El sujeto mantiene una cuenta de referencias, solo cuando se hace objeto.  Una operación que modifica el objeto, se copia realmente ejemplo: Clase String. Desventajas:  Introduce un nivel de induración adicional, que tiene muchos posibles usos.  Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de direcciones.  Un proxy virtual puede optimizarsarse, como crear objetos de bajo demanda.  Tanto los proxy de protección, como las referencias inteligentes permiten realizar tareas de un mantenimiento adicionales cuando se accede a un objeto.
  • 11. 10 ARQUITECTURA EN PIPELINE private Imagen miImagen = new ImagenProxy("Imagen1.jpg"); public Cliente() { initComponents(); } public void paint(Graphics g){ imagen=miImagen.obtenerImagen(); g.drawImage(imagen,110,90, 600,330,this); } private void btnCargarActionPerformed(java.awt.event.ActionEventevt) { // TODO add your handling code here: JFileChooserfc = new JFileChooser(); fc.setFileFilter(new FileNameExtensionFilter("Archivos de texto","jpg","png","jpeg","bmp")); intopcion = fc.showDialog(this, "Abrir"); if (opcion == JFileChooser.APPROVE_OPTION) { //obtenemos ruta de la imagen String filepath = fc.getSelectedFile().toString(); intpos = filepath.lastIndexOf(System.getProperty("file.separator")); StringnomFich = null; if (pos> 0) nomFich = filepath.substring(pos + 1 ) ; //agregamos al jlist "list" la nueva imagen DefaultListModellistModel = new DefaultListModel(); for(inti=0 ; i<this.list.getModel().getSize() ; i++ ){ listModel.addElement(this.list.getModel().getElementAt(i)); } listModel.addElement(nomFich);
  • 12. 11 ARQUITECTURA EN PIPELINE this.list.setModel(listModel); //------------------------------------------} } private void listMouseClicked(java.awt.event.MouseEventevt) { // TODO add your handling code here: if (evt.getClickCount() == 2) { int index = list.locationToIndex(evt.getPoint()); String seleccionaImagen= list.getSelectedValue().toString(); miImagen = new ImagenProxy(seleccionaImagen); repaint(); } } public static void main(String args[]) { //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> try { for (javax.swing.UIManager.LookAndFeelInfoinfo javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { :
  • 13. 12 ARQUITECTURA EN PIPELINE java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> java.awt.EventQueue.invokeLater(new Runnable() { public void run() { JFrame.setDefaultLookAndFeelDecorated(true); newCliente().setVisible(true); } }); } // Variables declaration - do not modify privatejavax.swing.JButtonbtnCargar; privatejavax.swing.ButtonGroup buttonGroup1; private javax.swing.JLabel jLabel2; privatejavax.swing.JScrollPane jScrollPane1; privatejavax.swing.JList list; // End of variables declaration } IMAGEN
  • 14. 13 ARQUITECTURA EN PIPELINE packagepatronproxy; //Interfaz que define el objeto (Subject) importjava.awt.Image; public interface Imagen { publicImageobtenerImagen(); } IMAGENPROXY packagepatronproxy; //Esta clase es la clase encargada de crear el objeto sustituto //que se encarga de controlar el acceso al objeto real (Proxy) importjava.awt.Image; public class ImagenProxy implements Imagen { private Imagen imagen=null; private String nombreImagen; public ImagenProxy(String nombreImagen){ this.nombreImagen= nombreImagen; } public Image obtenerImagen() { if(imagen == null)imagen=new ImagenReal(nombreImagen); return imagen.obtenerImagen(); }} IMAGEN REAL packagepatronproxy;
  • 15. 14 ARQUITECTURA EN PIPELINE //Este es el objeto real (SubjectReal) importjava.awt.Image; importjava.awt.image.BufferedImage; importjava.io.IOException; importjavax.imageio.ImageIO; public class ImagenReal implements Imagen { privateBufferedImageimagen; publicImagenReal(String nombreImagen){ cargarImagen(nombreImagen); } publicImageobtenerImagen() { return (Image)imagen; } public void cargarImagen(String nombre){ try{ imagen = ImageIO.read(getClass().getClassLoader().getResource("Imagenes"+ nombre)); }catch(IOException e){ System.out.println("Error intentando cargar la imagen"); } } } PATRONES PROXY packagepatronproxy;
  • 16. 15 ARQUITECTURA EN PIPELINE importjavax.swing.JOptionPane; importorg.jvnet.substance.SubstanceLookAndFeel; importorg.jvnet.substance.watermark.SubstanceImageWatermark; public class Patronproxy { public static void main(String[] args) { // TODO codeapplicationlogichere try { Cliente.setDefaultLookAndFeelDecorated(true); SubstanceLookAndFeel.setSkin("org.jvnet.substance.skin.MagmaSkin"); SubstanceLookAndFeel.setCurrentTheme("org.jvnet.substance.theme.SubstanceLightAquaTheme") ; SubstanceLookAndFeel.setImageWatermarkOpacity(new Float(1)); Cliente c = new Cliente(); c.setVisible(true); } catch (Exception e) { JOptionPane.showMessageDialog(null,"Ocurrio un error..."+e.getMessage(),"Mensaje",JOptionPane.ERROR); } } } CONCLUSIONES Con el estudio del patrón Proxy hemos concluido que:
  • 17. 16 ARQUITECTURA EN PIPELINE  Se debe 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 éste. REFERENCIA BIBLIOGRAFICA http://www.ciberaula.com/articulo/patron_proxy/ http://patronesdediseno.blogspot.com/2009/05/patron-proxy.html http://es.wikipedia.org/wiki/Proxy http://arantxa.ii.uam.es/~eguerra/docencia/0708/11%20Proxy.pdf http://modelosprogramacion.blogspot.com/2009/05/proxy.html http://www.slideshare.net/maitin30/patron-de-diseo-proxy