Diapositivas de U-tad sobre Diseño de Software Patrones de diseño. El Pdf, un material de Informática para Universidad, explica el Patrón Adapter, un diseño estructural que permite la cooperación entre clases con interfaces incompatibles, ilustrando las aproximaciones Object Adapter y Class Adapter con diagramas y ejemplos.
Ver más16 páginas


Visualiza gratis el PDF completo
Regístrate para acceder al documento completo y transformarlo con la IA.
Patrón Adapter Java Design Patterns Profesor: Javier Fernández francisco.carrera@ext.live.u-tad.com U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITALDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Patrón Adapter (Adaptador) - Patrón estructural. · Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permite que cooperen clases que de otra manera no podrían por tener interfaces incompatibles. · Usos: · Permite adaptar una clase/interfaz de destino al requisito del cliente. · Se quiere reutilizar una clase pero su interfaz no concuerda con nuestras necesidades. El patrón Adapter es muy común en el código Java. Se utiliza muy a menudo en sistemas basados en algún código heredado (legacy). En estos casos, los adaptadores crean código heredado con clases modernas
Adapter (Converts requests to be compatible) Adaptee (External Incompatible Client (Original form of request ) I Fuente: https://images.google.es/ Client needs to get the service from Adaptee, which is incompatible & cannot interact directly Figure 1-Adapter Pattern ConceptDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Ejemplo · Aplicación de gestión de datos de bolsa. Se reciben datos en XML pero hemos de tratarlos en JSON · Podrías cambiar la biblioteca para que funcione con XML. Sin embargo, esto podría descomponer parte del código existente que depende de la biblioteca. Y, lo que es peor, podrías no tener siquiera acceso al código fuente de la biblioteca, lo que hace imposible esta solución.
Aplicación Clases Centrales Proveedor de Información de Bolsa XML XML JSON Biblioteca de Análisis Fuente: https://refactoring.guru/es/design-patterns/adapterDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Solución · Crear un adaptador que convierte la interfaz de un objeto de forma que otro pueda comprenderlo. · Un adaptador envuelve uno de los objetos para esconder la complejidad de la conversión que tiene lugar por detrás. El objeto envuelto ni siquiera es consciente de la existencia del adaptador. · ¿ Cómo? · El adaptador obtiene una interfaz compatible con uno de los objetos existentes. · Utilizando esta interfaz, el objeto existente puede invocar con seguridad los métodos del adaptador. Al recibir una llamada, el adaptador pasa la solicitud al segundo objeto, pero en un formato y orden que ese segundo objeto espera.
Aplicación Clases Centrales Proveedor de Información de Bolsa XML XML JSON Biblioteca de Análisis Application Clases Centrales Proveedor de Información de Bolsa XML XML XML Adaptador XML a JSON JSON > JSON Biblioteca de Análisis Fuente: https://refactoring.guru/es/design-patterns/adapterDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Estructura y componentes Adapter o Target Define la interfaz específica al dominio que utiliza el cliente. ConcreteAdapter Adapta la interfaz del objeto adaptado (Adaptee) a la definida por el Adapter. ▪ Adaptee Define una interfaz existente que necesita adaptarse. Esta clase no implementa el método de la interfaz Adapter, pero tiene un método que llama (consume) la clase Cliente. Client Clase que colabora con los objetos que implementan la interfaz definida por el Adapter. El cliente llama (consume) a un método de otra clase a través del adaptador.
<< interface>> Adapter Client +operation() ConcreteAdapter Adaptee -adaptee +operation() +adaptedOperation ()Diseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
¿Cuál es el concepto abstracto? La interfaz no concuerda por lo que el cliente no puede utilizar dicho objeto Cliente necesita utilizar un objeto con una interfaz concreta Clase Creamos una clase adaptador que implemente la interfaz que espera el cliente y "envuelva" al objeto adaptado para que pueda hacer uso de él. Adaptador ClaseDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
▪ Dos aproximaciones a este patrón. " Adapter Design Pattern - Object Adapter (Composición) Adapter Design Pattern - Class Adapter (Herencia)
(Interface» Target Adaptee unter face» Target Adaptee Client adaptee operation 0) specific Operation0) operation 0 specific Operation0) Object Adapter Class Adapter Adapter Adapter Sample Class Diagram operation ()- adaptee. specificOperation0; Sample Class Diagram operation ! specificOperation0); ClientDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Estructura de Adapter (adaptador de objetos) Z O CURSO PRÁCTICO DE OO PATRONES DE DISEÑO DDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
EJEMPLODiseño de software - Patrón Adapter
Ejemplo de Class Adapter (Herencia) U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL / ** * SquarePegs are not compatible with RoundHoles (they were implemented by * previous development team). But we have to integrate them into our program. */ public class SquarePeg { private double width; public SquarePeg(double width) { this.width = width; } public double getWidth() { return width; } public double getSquare() { double result; result = Math.pow(this.width, 2); return result; } } package refactoring_guru.adapter.example.round; / ** * RoundPegs are compatible with RoundHoles. */ public class RoundPeg { private double radius; public RoundPeg() {} public RoundPeg(double radius) { this. radius = radius; } public double getRadius() { return radius; } }Diseño de software - Patrón Adapter Ejemplo de Class Adapter (Herencia) U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL package refactoring_guru.adapter.example.round; / ** * RoundHoles are compatible with RoundPegs. * public class RoundHole { private double radius; public RoundHole(double radius) { this.radius = radius; } public double getRadius() { return radius; } public boolean fits(RoundPeg peg) { boolean result; result = (this.getRadius() >= peg.getRadius()); return result; } }Diseño de software - Patrón Adapter · Ejemplo de Class Adapter (Herencia) U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL / ** * Adapter allows fitting square pegs into round holes. */ public class SquarePegAdapter extends RoundPeg { private SquarePeg peg; public SquarePegAdapter(SquarePeg peg) { this.peg = peg; } @Override public double getRadius() { double result; // Calculate a minimum circle radius, which can fit this peg. result = (Math.sqrt(Math.pow((peg.getWidth() / 2), 2) * 2)); return result; } } / ** * Somewhere in client code ... */ public class Demo { public static void main(String[] args) { // Round fits round, no surprise. RoundHole hole = new RoundHole(5); RoundPeg rpeg = new RoundPeg(5); if (hole.fits(rpeg)) { System. out. println("Round peg r5 fits round hole r5."); } SquarePeg smallSqPeg = new SquarePeg(2); SquarePeg largeSqPeg = new SquarePeg(20); // hole. fits(smallSqPeg); // Won't compile. // Adapter solves the problem. SquarePegAdapter smallSqPegAdapter = new SquarePegAdapter(smallSqPeg); SquarePegAdapter largeSqPegAdapter = new SquarePegAdapter(largeSqPeg); if (hole.fits(smallSqPegAdapter)) { System.out.println("Square peg w2 fits round hole r5."); } if ( !hole.fits(largeSqPegAdapter)) { System.out.println("Square peg w20 does not fit into round hole r5."); } } }Diseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Ejercicio 41. Class AdapterDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Ejercicio 42. Object AdapterDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Ejercicio 43. Comparación diagramas UMLDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Ejercicio 44. Object Adapter + Strategy