Diseño de Software: Patrones de Diseño Adapter en U-tad

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ás

16 páginas

Diseño de Software
Patrones de diseño
Profesor: Javier Fernández
francisco.carrera@ext.live.u-tad.com
Patrón Adapter
Diseño de software Patrón Adapter
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 digo Java. Se utiliza muy a menudo en sistemas basados en
algún digo heredado (legacy). En estos casos, los adaptadores crean digo heredado con clases
modernas
Fuente: https://images.google.es/

Visualiza gratis el PDF completo

Regístrate para acceder al documento completo y transformarlo con la IA.

Vista previa

Diseño de Software

Patrones de diseño

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 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

Concepto del Patrón Adapter

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 de Patrón Adapter

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 de gestión de datos de bolsa

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 con Adaptador

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.

Diagrama de la solución con Adaptador

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 del Patrón Adapter

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.

Diagrama UML de componentes

<< 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

Concepto abstracto del Patrón Adapter

¿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

Aproximaciones al Patrón Adapter

▪ Dos aproximaciones a este patrón. " Adapter Design Pattern - Object Adapter (Composición) Adapter Design Pattern - Class Adapter (Herencia)

Diagramas de aproximaciones

(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)

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

EJEMPLO

EJEMPLODiseño de software - Patrón Adapter

Ejemplo de Class Adapter (Herencia)

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 Adapter

Ejercicio 41. Class AdapterDiseño de software - Patrón Adapter U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL

Ejercicio 42. Object Adapter

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 UML

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

Ejercicio 44. Object Adapter + Strategy

¿Non has encontrado lo que buscabas?

Explora otros temas en la Algor library o crea directamente tus materiales con la IA.