Back home

Patrones de diseño por tutoriales: el poder de la programación orientada a objetos (parte 3)

Patrón de adaptador en Swift Patrón de adaptador Swift

Patrones de diseño por tutoriales: el poder de la programación orientada a objetos (parte 3)

Requisitos previos: esta serie de tutoriales requiere un nivel intermedio de experiencia en programación orientada a objetos. Debe tener conocimientos básicos sobre clase, objeto, constructor, herencia, valor y tipo de referencia. Un nivel intermedio adquirirá conocimientos y los expertos los perfeccionarán leyendo esta serie de principio a fin. Requisito previo: esta serie de tutoriales requiere experiencia intermedia en programación orientada a objetos. Debe tener conocimientos básicos de clases, objetos, constructores, herencia, valores y tipos de referencia. Los usuarios intermedios obtendrán conocimientos, mientras que los expertos mejorarán sus conocimientos leyendo esta serie de principio a fin.

¿Qué es un adaptador?

¿Qué es un adaptador?

Un adaptador es un dispositivo físico que permite adaptar un hardware o interfaz electrónica a otro hardware o interfaz electrónica sin pérdida de funcionalidad. Un adaptador es un dispositivo físico que permite adaptar un hardware o interfaz electrónica a otro hardware o interfaz electrónica sin pérdida de funcionalidad.

Los adaptadores se utilizan cuando tienes una forma de entrada y quieres acceder a algo que no puede aceptar tu forma de entrada. Los adaptadores se utilizan cuando tienes una forma de entrada y quieres acceder a algo que no puede tomar la forma de tu entrada.

Ahora es el momento de comprender el patrón del adaptador respondiendo las siguientes preguntas sencillas. Ahora, comprenda el patrón del adaptador respondiendo las sencillas preguntas siguientes.

  1. ¿Qué es el patrón Adaptador en programación orientada a objetos? ¿Qué es el patrón adaptador en programación orientada a objetos?

  2. ¿Qué problema resuelve? ¿Qué problema soluciona?

  3. ¿Cómo podemos usarlo en programación? ¿Cómo lo usamos en programación?

¿Qué es el patrón Adaptador en la programación orientada a objetos?

¿Qué es el patrón adaptador en programación orientada a objetos?

En el patrón del adaptador, definimos una clase que toma el tipo existente como entrada y nos proporciona el tipo requerido o la funcionalidad/propiedades requeridas para acceder. En el patrón Adaptador, definimos una clase que acepta un tipo existente como entrada y nos proporciona el tipo requerido o la funcionalidad/propiedades requeridas para acceder.

¿Qué problema resuelve?

¿Qué problema soluciona?

Ayuda a convertir tipos de datos existentes a otra forma de datos. Ayuda a convertir tipos de datos existentes en otra forma de datos.

Esto es bastante útil cuando usamos código de marcos o bibliotecas de terceros y solo acepta tipos restringidos. Esto es muy útil cuando usamos código de un framework o biblioteca de terceros y solo acepta tipos restringidos.

¿Cómo podemos usarlo en programación?

¿Cómo lo usamos en programación?

Entendamos esto con el siguiente ejemplo. Entendamos esto a través del siguiente ejemplo.

Tenemos clases como Point, LineSegment y DrawingPad. Tenemos clases Point, LineSegment y DrawingPad.

¿Recuerda nuestros viejos tiempos escolares de gráficos por computadora usando lenguaje C? ¿Recuerda los días en que usábamos el lenguaje C para hacer gráficos por computadora? Esa vez, solo para dibujar una línea en la pantalla, tenemos que calcular todos los puntos de la línea entre dos puntos dados. Para calcular puntos de línea, existen varios algoritmos básicos disponibles, como el algoritmo de dibujo de líneas simple, el algoritmo DDA, el algoritmo de líneas de Bresenham, etc. Para dibujar una línea en la pantalla, necesitamos contar todos los puntos entre dos puntos de esta línea. Para calcular los puntos de una línea recta, existen muchos algoritmos básicos que se pueden utilizar, como el algoritmo de dibujo de línea recta simple, el algoritmo DDA, el algoritmo de línea recta de Bresenham, etc. Mantendremos nuestro código de ejemplo limpio y fácil de entender para el patrón del adaptador sin escribir estos complejos algoritmos aquí. Para el patrón del adaptador, mantendremos el código de ejemplo simple y fácil de entender sin escribir algoritmos tan complejos aquí.

// Hitendra Solanki
// Adapter design pattern Playground example
import Foundation

class Point {
    var x: Int
    var y: Int
    
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

class LineSegment {
    var startPoint: Point
    var endPoint:   Point
    
    init(startPoint: Point, endPoint: Point) {
        self.startPoint = startPoint
        self.endPoint = endPoint
    }
}

//Mark:- DrawingPad
//  This is just to make example more interesting
//  We are just printing the point on Console to make it simple
class DrawingPad {
    //Draw Single point, main drawing method
    func draw(point: Point) {
        print(".")
    }
    
    //Draw multiple points
    func draw(points: [Point]) {
        points.forEach { (point) in
            self.draw(point: point)
        }
    }
}



func main(){
    let drawingPad = DrawingPad()
    
    let point1 = Point(x: 10, y: 10)
    
    drawingPad.draw(point: point1)
}

//call main function to execute code
main()


// AdapterPattern_intro.swift 

En el ejemplo anterior

En el ejemplo anterior

Línea 6, clase Punto representa un solo punto. Línea 6, clase Punto representa un punto.

Línea 16, clase LineSegment representa un segmento de línea. Línea 16, clase LineSegment representa un segmento de línea.

Línea 29, claseDrawingPad representa un lienzo para dibujar. DrawingPad puede dibujar uno o varios puntos en un lienzo. Línea 29, clase DrawingPad representa un lienzo utilizado para dibujar. DrawingPad puede dibujar uno o varios puntos en el lienzo.

Podemos dibujar un punto en este ejemplo, pero no podemos dibujar un segmento de línea directamente en el lienzo usando una instancia del panel de dibujo. Aquí el patrón adaptador viene al rescate, gracias al patrón adaptador. Podemos dibujar un punto en este ejemplo, pero no podemos dibujar un segmento de línea directamente en el lienzo usando una instancia de mesa de trabajo. Aquí entra en juego el patrón adaptador, gracias al patrón adaptador.

// Hitendra Solanki
// Adapter design pattern Playground example
import Foundation

class Point {
    var x: Int
    var y: Int
    
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

class LineSegment {
    var startPoint: Point
    var endPoint:   Point
    
    init(startPoint: Point, endPoint: Point) {
        self.startPoint = startPoint
        self.endPoint = endPoint
    }
}

//Mark:- DrawingPad
//  This is just to make example more interesting
//  We are just printing the point on Console to make it simple
class DrawingPad {
    //Draw Single point, main drawing method
    func draw(point: Point) {
        print(".")
    }
    
    //Draw multiple points
    func draw(points: [Point]) {
        points.forEach { (point) in
            self.draw(point: point)
        }
    }
}

//Mark: LineSegmentToPointAdapter
//  This is responsible to generate all points exists on LineSegment
class LineSegmentToPointAdapter {
    var lineSegment: LineSegment
    init(lineSegment: LineSegment) {
        self.lineSegment = lineSegment
    }
    func points() -> Array<Point> {
        //To make things simple, without complex line drawing algorithms,
        //This will only work for points like below
        //(10,10) to (20,20)
        //(34,34) to (89,89)
        //(x,y) to (p,q) where y=x and q=p i.e. (x,x) to (p,p) just to make it simple for this demo
        
        var points: Array<Point> = []
        let zipXY = zip(
            (self.lineSegment.startPoint.x...self.lineSegment.endPoint.x),
            (self.lineSegment.startPoint.y...self.lineSegment.endPoint.y)
        )
        for (x,y) in zipXY {
            let newPoint = Point(x: x, y: y)
            points.append(newPoint)
        }
        return points
    }
    
}




func main(){
    let drawingPad = DrawingPad()
    
    //Remeber: (x,y) to (p,q) where y=x and q=p => (x,x) to (p,p) for our points logic to work
    
    //create lineSegment
    let startPoint = Point(x: 2, y: 2)
    let endPoint = Point(x: 10, y: 10)
    let lineSegment = LineSegment(startPoint: startPoint, endPoint: endPoint)
    
    //create adapter
    let adapter = LineSegmentToPointAdapter(lineSegment: lineSegment)
    
    //get points from adapter to draw
    let points = adapter.points()
    
    drawingPad.draw(points: points) //it will draw total 9 dots on console
}

//call main function to execute code
main()

//AdapterPattern_simpleSolution.swift

Line45, clase LineSegmentToPointAdapter representa un adaptador que es el concepto central de este artículo. Toma el tipo LineSegment existente como entrada y nos proporciona una matriz de puntos en nuestro caso. Line45, clase Linesegmenttopadapter representa un adaptador, que es el concepto central de este artículo. Toma como entrada un tipo LineSegment existente y nos proporciona una matriz de puntos en este caso.

###Conclusión Conclusión

  1. Un adaptador es cualquier clase que toma un objeto como parámetro en el constructor. Un adaptador es cualquier clase que acepta un objeto como parámetro en su constructor.

  2. Una clase de adaptador tiene propiedades/métodos que podemos usar como el tipo requerido. La clase de adaptador tiene propiedades/métodos que se pueden utilizar como el tipo requerido.

  3. Un adaptador también puede actuar directamente sobre un tipo requerido, eso depende de la implementación. Los adaptadores también pueden reproducir directamente el tipo requerido, según la implementación.Esta es solo una implementación simple del patrón de adaptador en programación orientada a objetos usando Swift. Pero espera, hay algo más y avanza en este patrón. Esta es solo una implementación simple del patrón Adaptador en programación orientada a objetos usando Swift. Pero espera, hay muchas más cosas y progresión en este modo.

El patrón de diseño del adaptador es más potente con…. El patrón de diseño del adaptador es aún más poderoso…

Más contenido próximamente… Más próximamente…

Haga clic para ver el texto original: https://medium.com/flawless-app-stories/adapter-pattern-design-patterns-by-tutorials-the-power-of-oop-part-3-112a956c1101