¿Dónde y cómo se usa el término WRAPPER en programación, qué ayuda a hacer?

83

Me encuentro con desarrolladores de software que utilizan el término de creación de Wrappers de otras clases o API o incluso algunos códigos, este es un término utilizado por programadores de software con experiencia.

Así que alguna idea de qué quieren decir con eso;

por ejemplo, una simple pregunta; tenemos dos tipos de técnicas de clasificación de matrices, creemos un contenedor para ello

El anterior es un ejemplo muy simple.

Basit Anwer
fuente

Respuestas:

132

El término 'envoltorio' se usa mucho. Generalmente se usa para describir una clase que contiene una instancia de otra clase, pero que no expone directamente esa instancia. El propósito principal del contenedor es proporcionar una forma 'diferente' de usar el objeto empaquetado (quizás el contenedor proporcione una interfaz más simple o agregue alguna funcionalidad).

La palabra "envoltorio" también se puede utilizar al describir patrones de diseño clásicos.

Envolver un objeto para proporcionarle una interfaz simplificada a menudo se describe como el patrón 'Fachada'. La envoltura es la fachada.

A veces puede tener una clase que se adapte a una interfaz específica, pero no puede cambiar el código para que se ajuste a esa interfaz. Puede crear un contenedor para esa clase que implementa la interfaz, pero que dirige la mayoría de las llamadas al objeto empaquetado. Este es el patrón 'Adaptador'. La envoltura es el adaptador.

La instancia que describe, donde tiene dos clases que pueden hacer la clasificación de matrices usando diferentes algoritmos suena como el patrón 'Estrategia', donde proporciona una forma de realizar una operación en algún objeto, pero el algoritmo utilizado para esa operación puede ser diferente dependiendo sobre la estructura de ese objeto.

Por ejemplo, uno de sus algoritmos de ordenación puede ser excelente para matrices de longitud inferior a 100, pero el rendimiento podría ser un problema para él. El otro algoritmo podría ser bueno para matrices más grandes. Puede crear un 'contenedor' para los dos algoritmos que admita la operación de ordenación, pero decide qué algoritmo utilizar en función de la longitud de la matriz.

La gran mayoría de envoltorios existen para ocultar algún tipo de complejidad.

Alex Humphrey
fuente
5
oh, lo tengo ... Gracias :) una respuesta muy detallada, resolvió mis problemas de envoltura allí :)
Basit Anwer
En python existe el paquete xdress github.com/xdress/xdress . Dice que es un generador de envoltura. En este contexto, ¿qué significa eso? ¿Crea un ejecutable en C (que de hecho proporcionaría una forma 'diferente' (en C) de usar el objeto envuelto (en Python), o me estoy confundiendo?
75

Explicación simple por analogía: ¿Qué es envoltura?

Código no utilizado para explicar.

Ejemplo 1: un Ipad "envuelve" un Iphone

¿Qué hace el ipad que no hace el iphone?

¿No son básicamente lo mismo, excepto que uno tiene una pantalla más grande?

El Ipad "envuelve" el iPhone: lo que significa que usted tiene todos los beneficios del iPhone DENTRO del propio iPad, Y tiene los beneficios de una pantalla más grande, etc. Pero fundamentalmente, dentro del iPad, se encuentra un Iphone.

Entonces, ¿qué es diferente? Lo único que es diferente es el exterior: tienes una pantalla más grande y quizás no puedas hacer llamadas telefónicas en el Ipad.

Un iphone es lo único dentro de un ipad.  El Ipad envuelve literalmente el Iphone.  Excepto que no puede hacer llamadas con un Ipad porque la capacidad de hacer llamadas telefónicas no ha sido "expuesta".  Apple quiere que compre productos x2, no solo uno: P

Es literalmente lo mismo con los "objetos".

............. el interior tiene todas las cosas buenas que son iguales, pero un exterior diferente. Un envoltorio diferente.

"Los envoltorios pueden exponer características diferentes a las del objeto subyacente" ... está bien, pero ¿qué significa esto?

A veces, la envoltura puede limitar las cosas a las que puede acceder dentro. Por ejemplo, el ipad puede limitar su capacidad para realizar llamadas telefónicas, aunque el Iphone enterrado en él tiene esa capacidad.

Ejemplo 2: automóvil automático que actúa como envoltorio de un automóvil manual

Piense en un automóvil automático y un automóvil manual. Detrás de escena, en un automóvil automático, hay algún mecanismo de ingeniería que cambia automáticamente las marchas por usted, pero fundamentalmente, debajo de la superficie, el automóvil sigue siendo un automóvil manual. En otras palabras, las características automáticas del automóvil "envuelven" la funcionalidad manual del automóvil. Si desea cambiar manualmente las marchas usted mismo en un automóvil automático, simplemente no puede hacerlo. La capacidad de cambiar de marcha "no está expuesta" en el automóvil automático. Pero está expuesto en un automóvil manual. De acuerdo, la analogía es un poco tensa, pero espero que veas a qué me refiero.

Pero, ¿cuál es el propósito de una envoltura?

Escribirías una clase de envoltura si quisieras simplificar las cosas. Crearía un 'contenedor' fácil de usar y dejaría todos los bits complicados dentro del contenedor, asegurándose de que esos bits complicados no queden 'expuestos'.

Por ejemplo, podría tener un contenedor .net, que debajo, realiza llamadas COM. Si no tuviera un contenedor, se vería obligado a realizar esas llamadas COM usted mismo. Afortunadamente, con la envoltura, solo haría las llamadas al código de envoltura .net, que a su vez haría esas llamadas COM. Y eso debería simplificar las cosas para usted.

BKSpurgeon
fuente
8
Me gusta este tipo de explicación al explicar jergas tecnológicas. ¿Conoce algún sitio que lo haga específicamente? Gracias.
viggy28
2
esto tiene mucho sentido.
L. Dai
10

Es solo que escribe un código fácil de usar para ocultar las complejidades del código subyacente. Es especialmente útil cuando necesita llamar a alguna API de bajo nivel desde un lenguaje de nivel superior y desea mantener oculto todo el código "feo".

Editar: puede encontrar más sobre esto en estos dos artículos de la wiki: biblioteca y función

Hans Olsson
fuente
4

Un Wrapper es un código que se crea para llamar internamente a alguna API sin cambiar la API real.

Un ejemplo de esto es el lanzamiento de Facebook de su SDK C # de Facebook . El SDK es en realidad un contenedor, ya que solo le permite llamar a su plataforma subyacente sin proporcionarle métodos y clases específicos. Por otro lado, Facebook Developer Toolkit es su API completa.

Carlos Muñoz
fuente
Necesito escribir un programa C # que cree un archivo de script (el lenguaje de script es específico de un dispositivo de hardware y se llama CoraScript). Hay alrededor de 50 comandos en CoraScript, por ejemplo, uno que se conecta a un dispositivo, uno que envía archivos a ese dispositivo, le dice que ejecute una aplicación en su memoria Flash, etc. En lugar de codificar manualmente un CoraScript, Me gusta crear una biblioteca C # que generará dicho script. ¿Esta biblioteca de C # se llamaría wrapper librarypara el lenguaje de secuencias de comandos CoraScript?
Minh Tran
El intérprete de línea de comandos para ese lenguaje de secuencias de comandos es una aplicación de consola. Mientras esa aplicación se ejecuta, toma comandos CoraScript, los ejecuta y devuelve la salida de ese comando (por ejemplo, el Connect localhostcomando CoraScript devolvería la cadena +connect,"coralib3.dll version 1,8,11"para indicar que el comando se ejecutó correctamente).
Minh Tran
2

Hay muchos ejemplos de "envoltorios" y el término a veces se usa indistintamente. A continuación se muestran algunos ejemplos que me vienen a la mente:

Contenedor de DLL

En el pasado, he creado un contenedor COM alrededor de una DLL .NET para usar las características avanzadas de .NET en aplicaciones más antiguas que entienden COM pero no entienden .NET.

Contenedor de objetos (Java)

En Java, hay una clase proporcionada en el java.langpaquete para proporcionar métodos de objeto para los ocho tipos primitivos. Todas las clases contenedoras primitivas en Java son inmutables. Por lo tanto, las Wrapperclases se utilizan para representar valores primitivos cuando Objectse requiere an .


fuente
1

Función de envoltura, una función cuyo propósito principal es llamar a una segunda función

Shahid Malik
fuente
-1

Digamos que desea agregar algunas funcionalidades más a su código, pero no puede cambiar el código. Ahí es donde ayuda la envoltura. Puede usar un contenedor para obtener la salida sin cambiar el código original.

León
fuente