Está en la página 1de 17

UNIVERSIDAD NACIONAL DE TRUJILLO

FACULTAD DE CIENCIAS FSICAS Y MATEMTICAS


ESCUELA ACADMICA PROFESIONAL DE ING. INFORMTICA

TEMA: PATRONES DE DISEO 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

ARQUITECTURA EN PIPELINE

INDICE

DEDICATORIA ............................................................................................... 2 INTRODUCCIN............................................................................................ 3 MARCO TERICO ........................................................................................ 4


CAPITULO I: PATRON PROXY ............................................................................................................. 4 CAPITULO II: CARACTERISTICAS ..................................................................................................... 6 CAPITULO III: APLICABILIDAD ......................................................................................................... 6 CAPITULO IV: CONSECUENCIAS ....................................................................................................... 7 CAPITULO V: VENTAJAS Y DESVENTAJAS ..................................................................................... 8

CDIGO ........................................................................................................... 9 CONCLUSIONES .......................................................................................... 10 REFERENCIA BIBLIOGRAFICA ............................................................. 16

ARQUITECTURA EN PIPELINE

DEDICATORIA

Con mucho cario 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 das Pulido por el esfuerzo que realiza con la Institucin de formarnos profesionalmente y ser futuros Ingenieros Informticos de capacidad competitiva.

Abanto Vera Anglica Mara Castillo Farfn George Idrogo Zavaleta Alex Jaime

ARQUITECTURA EN PIPELINE

INTRODUCCIN
El presente documento aborda uno de los patrones estructurales del grupo de los cuatro (GOF), el patrn Proxy, el cual segn Erich Gamma su propsito es proporcionar un sustituto de un determinado objeto para controlar el acceso a dicho objeto. Tambin esta investigacin presenta la problemtica a la cual es aplicable y la solucin que propone el patrn estructural Proxy incluyendo diagramas de clases y abordamos la responsabilidad que este debe de realizar. Asimismo se muestra el cdigo de ejemplo implementando el patrn estructural.

ARQUITECTURA EN PIPELINE

MARCO TERICO
CAPITULO I: EL PATRN PROXY Este patrn consiste en interponer un intermediario (Proxy) entre un objeto y los dems que lo utilizan. Se diferencia del patrn Adaptador en que el objeto "adaptado" solamente puede ser manipulado a travs del objeto Proxy. Se suele utilizar para implementar comportamientos "vagos" (lazy). Por ejemplo, si tenemos muchos objetos imagen en un documento, se tardara mucho tiempo en abrir el documento al cargar las imgenes 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 patrn 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 tpico de aplicacin del patrn proxy es el de un editor de documentos. El editor podr incluir imgenes y dibujos complejos, y se plantea el problema de recuperar todos estos costosos objetos cada vez que se abre el documento. La aplicacin del patrn 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.

MOTIVACIN Retrasar el coste de crear e inicializar un objeto hasta que es realmente necesario. Por ejemplo, no abrir las imgenes de un documento hasta que no son visibles. Solucin:

ARQUITECTURA EN PIPELINE

ESTRUCTURA

ARQUITECTURA EN PIPELINE

CAPITULO II: CARACTERISTICAS Proporciona soluciones concretas en la creacin de objetos pesados. Proporciona soluciones tcnicas para la utilizacin de las cargas de objetos de gran tamao. Se utilizan en situaciones frecuentes. Favorece la reutilizacin de cdigo.

CAPITULO III: APLICABILIDAD El patrn proxy se usa cuando se necesita una referencia a in objeto ms flexible o sofisticado que un puntero. Algunas situaciones comunes de aplicacin 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 motivacin). Proxy de proteccin: 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 nmero 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 idntica al sujeto (la clase Sujeto). Adems controla el acceso a dicho objeto real y puede ser el responsable de su creacin y borrado. Tambin tiene otras responsabilidades que dependen del tipo de proxy:

ARQUITECTURA EN PIPELINE

Proxy (ImageProxy): Mantiene una referencia al objeto real. Proporciona una interfaz idntica 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 envan al objeto real. Proxies virtuales: pueden guardar informacin del objeto real (cach). Proxies de proteccin: comprueban que el cliente tiene los permisos necesarios para realizar la peticin.

Subject (Graphic): Define una interfaz comn 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 patrn de diseo 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 creacin de objetos bajo demanda. Los proxies de proteccin y las referencias inteligentes permiten realizar tareas de mantenimiento adicionales al acceder a un objeto. Optimizacin 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 nmero de referencias, y slo cuando se realiza una operacin que modifica el objeto, ste se copia.

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 informacin adicional sobre el sujeto, para retardar el acceso al mismo. Proxy de proteccin 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 operacin que modifica el objeto, se copia realmente ejemplo: Clase String . Desventajas: Introduce un nivel de induracin 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 proteccin, como las referencias inteligentes permiten realizar tareas de un mantenimiento adicionales cuando se accede a un objeto.

ARQUITECTURA EN PIPELINE

CDIGO

CLIENTE:
package patronproxy; import javax.swing.JFrame; import java.awt.Image; import java.awt.Graphics; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.swing.DefaultListModel; import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; public class Cliente extends javax.swing.JFrame { private Image 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.ActionEvent evt) { // TODO add your handling code here: JFileChooser fc = new JFileChooser(); fc.setFileFilter(new FileNameExtensionFilter("Archivos de texto","jpg","png","jpeg","bmp")); int opcion = fc.showDialog(this, "Abrir"); if (opcion == JFileChooser.APPROVE_OPTION) { //obtenemos ruta de la imagen String filepath = fc.getSelectedFile().toString(); int pos = filepath.lastIndexOf(System.getProperty("file.separator")); String nomFich = null; if (pos > 0) nomFich = filepath.substring(pos + 1 ) ; //agregamos al jlist "list" la nueva imagen DefaultListModel listModel = new DefaultListModel(); for(int i=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.MouseEvent evt) { // 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.LookAndFeelInfo javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { info :

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); new Cliente().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton btnCargar; private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JLabel jLabel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JList list; // End of variables declaration }

13

ARQUITECTURA EN PIPELINE

IMAGEN
package patronproxy;

//Interfaz que define el objeto (Subject)

import java.awt.Image;

public interface Imagen { public Image obtenerImagen(); }

IMAGENPROXY
package patronproxy; //Esta clase es la clase encargada de crear el objeto sustituto //que se encarga de controlar el acceso al objeto real (Proxy) import java.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(); }}

14

ARQUITECTURA EN PIPELINE

IMAGEN REAL package patronproxy; //Este es el objeto real (SubjectReal) import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO;

public class ImagenReal implements Imagen { private BufferedImage imagen; public ImagenReal(String nombreImagen){ cargarImagen(nombreImagen); } public Image obtenerImagen() { 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"); } } }

15

ARQUITECTURA EN PIPELINE

PATRONES PROXY package patronproxy; import javax.swing.JOptionPane; import org.jvnet.substance.SubstanceLookAndFeel; import org.jvnet.substance.watermark.SubstanceImageWatermark;

public class Patronproxy { public static void main(String[] args) { // TODO code application logic here

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); } } }

16

ARQUITECTURA EN PIPELINE

CONCLUSIONES Con el estudio del patrn Proxy hemos concluido que: Se debe implementar el patrn proxy cuando haya objetos que tomen mucho tiempo en cargarse, por ejemplo cargar una imagen que consume demasiada memoria. El patrn 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