
¿Que son los Wrapper's?
Son clases que generalmente se usa para describir una clase que contiene una instancia de otra clase, pero que no expone directamente esa instancia. El objetivo principal de la envoltura es proporcionar una forma "diferente" de usar el objeto envuelto (quizás la envoltura proporcione una interfaz más simple o agregue alguna funcionalidad).
La palabra 'envoltorio' también se puede usar para 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 envuelto. Este es el patrón 'Adaptador'. El contenedor es el adaptador.
¿Dónde pueden ser usados los Wrapper's?
En ocasiones es muy conveniente poder tratar los datos primitivos (int, boolean, etc.) como objetos. Por ejemplo, los contenedores definidos por el API en el package java.util (Arrays dinámicos, listas enlazadas, colecciones, conjuntos, etc.) utilizan como unidad de almacenamiento la clase Object. Dado que Object es la raíz de toda la jerarquía de objetos en Java, estos contenedores pueden almacenar cualquier tipo de objetos. Pero los datos primitivos no son objetos, con lo que quedan en principio excluidos de estas posibilidades.
Para resolver esta situación el API de Java incorpora las clases envoltorio (wrapper class), que no son más que dotar a los datos primitivos con un envoltorio que permita tratarlos como objetos. Por ejemplo podríamos definir una clase envoltorio para los enteros, de forma bastante sencilla, con:
public class Entero {
private int valor;
Entero(int valor) {this.valor = valor;}int intValue() {return valor;}}
La API de Java hace innecesario esta tarea al proporcionar un conjunto completo de clases envoltorio para todos los tipos primitivos. Adicionalmente a la funcionalidad básica que se muestra en el ejemplo las clases envoltorio proporcionan métodos de utilidad para la manipulación de datos primitivos (conversiones de / hacia datos primitivos, conversiones a String, etc.)
¿Ventajas de los Wrapper's?
Los Wrappers son ampliamente utilizados, y han llegado a formar parte de las herramientas de programación por las siguientes razones:
- Le permite configurar de forma programática las condiciones de entorno para el programa que se llama, de modo que siempre estarán en un formato que haga feliz al programa envuelto.
- De hecho, le permite enmascarar la llamada del programa envuelto, si lo desea, desde los ojos del usuario.
Tipos de clases envoltura
Las clases envoltorio existentes son:
Las clases envoltorio existentes son:
![]() | Byte para byte. |
![]() | Short para short. |
![]() | Integer para int. |
![]() | Long para long. |
![]() | Boolean para boolean |
![]() | Float para float. |
![]() | Double para double y |
![]() | Character para char. |
Casos de uso de las clases envoltura
Observese que las clases envoltorio tienen siempre la primera letra en mayúsculas.
Las clases envoltura se usan como cualquier otra:
Integer i = new Integer(5);
int x = i.intValue();
Hay que tener en cuenta que las operaciones aritméticas habituales (suma, resta, multiplicación ...) están definidas solo para los datos primitivos(byte, short, int, long, float, double, boolean, char) por lo que las clases envoltura no sirven para este fin.
Construccion de wrapper's
Las clases envoltorio se construyen de la siguiente manera:
- Byte nombreVariable=new Byte(parametros);
- Short nombreVariable=new Short(parametros);
- Integer nombreVariabe=new Integer(parametros);
- Long nombreVariable=new Long(parametros);
- Float nombreVariable=new Float(parametros);
- Double ombreVariable=new Double(parametros);
- Character nombreVariable=new Character(parametros);
- Boolean nombreVariable=new Boolean(parametros);
Los Constructores de las clases Wrapper
Todas las clases wrapper excepto Character proveen de 2 constructores: uno que coge un primitivo del tipo que está siendo construido, y otro que recoge un String como representación del tipo que está siendo construido:
1
2
3
| Integer i1 = new Integer( 42 ); Integer i2 = new Integer ( "42" ); |
o:
1
2
3
| Float f1 = new Float( 3 .14f); Float f2 = new Float ( "3.14f" ); |
Los constructores para las clase Boolean coge o un valor booleano, ya sea true o false, o una String. Si la String (sin importar mayusculas o minusculas) es “true” el Boolean será true, y cualquier otro valor será false:
1
2
3
| Boolean b = new Boolean ( "false" ); if (b) // No compilará si usamos Java 1.4 o anterior |
Jerarquia de la clase contenedora segun la API de java

Como se explica en la tabla anterior, todas las clases contenedoras (excepto el carácter) toman String como constructor de argumentos. Tenga en cuenta que podríamos obtener NumberFormatException si intentamos asignar un argumento inválido en el constructor.
Metodos mas comunes de las clases de envoltura
Los métodos más comunes de la clase contenedora Integer se resumen en la tabla a continuación. Métodos similares para las otras clases de envoltura se encuentran en la documentación de la API de Java.
Método | Propósito |
---|---|
parseInt (s) |
devuelve un valor entero decimal con signo equivalente a una cadena s
|
toString (i) | devuelve un nuevo objeto String que representa el entero i |
byteValue () | devuelve el valor de este entero como un byte |
doubleValue () | devuelve el valor de este entero como un doble |
floatValue () | devuelve el valor de este entero como un flotador |
intValue () | devuelve el valor de este entero como un int |
shortValue () | devuelve el valor de este entero como un corto |
longValue () | devuelve el valor de este entero como un largo |
int compareTo (int i) | Compara el valor numérico del objeto invocado con el de i. Devuelve 0 si los valores son iguales. Devuelve un valor negativo si el objeto invocado tiene un valor inferior. Devuelve un valor positivo si el objeto invocado tiene un valor mayor. |
static int compare (int num1, int num2) | Compara los valores de num1 y num2. Devuelve 0 si los valores son iguales. Devuelve un valor negativo si num1 es menor que num2. Devuelve un valor positivo si num1 es mayor que num2. |
boolean equals (Object intObj) | Devuelve verdadero si el objeto entero que invoca es equivalente a intObj. De lo contrario, devuelve falso. |

Br. Gomez, Maria C.I.: 22.970.554
Br. Gonzalez, Juan C.I.: 20.647.846
Los Wrappers o envoltorios son clases que permiten extender las posibilidades del uso de datos primitivos haciendo que líneas de código escritas en un lenguaje particular puedan ser instanciadas en un lenguaje diferente sin ningún problema, principalmente esa es la esencia de los wrappers. Además tienen como objetivo convertir datos primitivos en objetos, estos a su vez al momento de ser objetos no pueden volver a convertirse en datos primitivos, la manera en que se diferencian estos es que los datos primitivos comienzan con letra minúscula y las clases wrappers con letra mayúscula. Los tipos de datos primitivos no pueden ser tratados como objetos es por ello el uso de los wrappers, al momento de ser tratado como objeto ya se puede a través de ellos invocar métodos y extender sus funcionalidades. Como lo mencionan anteriormente existen paquetes en Java por ejemplo que facilitan el uso de wrappers puesto que contienen estas clases de datos primitivos ya convertidos en objetos y además los métodos que se pueden invocar a partir de ellos. Con ese paquete que proporciona Java cada uno de los tipos de datos primitivos posee una clase determinada en la biblioteca de Java y ademas la clase Wrapper proporciona el uso de muchos métodos al utilizar colecciones como clasificación, búsqueda, entre otros.
ReplyDeleteA veces cuando utilizamos la clase mysqli se hace bastante complicado el escribir todas las instrucciones para hacer una simple consulta. Es por ello que existen números wrappers o envoltorios, que nos permiten utilizar la clase mysqli, de una forma mucho más sencilla. Al ser clases ya definidas en la API de Java sirven para 2 propósitos primarios como lo son el proveer un mecanismo de “envolver” valores primitivos en un objeto para que estos primitivos puedan ser incluidos en actividades que estén reservadas para objetos, o ser retornadas desde un método con un valor de retorno que sea un objeto y también proveer un surtido de funciones de utilidad a los primitivos. La mayoría de estas funciones están relacionadas con varias conversiones como lo es convertir primitivos desde o de un objeto String. Los strings, en Javascript son valores primitivos, al igual que los números y booleanos, y por tanto, no son objetos, pero quizas nos preguntemos, ¿Por qué entonces tienen propiedades, como los objetos?; bueno es que cada vez que intentamos referirnos a una propiedad del string s, JavaScript convierte el valor real de dicho string en un objeto, como si lo hubiésemos declarado con el constructuor new String(s). Dicho objeto, hereda métodos, y es usado para resolver las referencias a sus propiedades (métodos). Una vez que el valor de la propiedad (método) ha sido resuelto, el nuevo objeto es declarado.Es por esto que los números y booleanos, tienen métodos por la misma razón que las cadenas; un objeto temporal se crea cuando los declaras, usando los constructores Number() o Boolean(), y el método que invoquemos, es resuelto usando dicho objeto temporal. A estos objetos temporales que envuelven a los valores primitivos, son llamados Wrapper Objects. No hay wrapper objects para null ni undefined: cada vez que intentemos acceder a una propiedad o método de éstos, nos devolverá un TypeError.
ReplyDeleteComo su nombre lo indica, una clase contenedora envuelve (encierra) alrededor de un tipo de datos y le da una apariencia de objeto. Donde sea que se requiera el tipo de datos como un objeto, se puede usar este objeto.
ReplyDeleteLas clases Wrapper incluyen métodos para desenvolver el objeto y devolver el tipo de datos. Se podría comparar con un chocolate. El fabricante envuelve el chocolate con papel de aluminio para evitar la contaminación. El usuario toma el chocolate, lo saca, y lo come.
Hablando un poco en el punto sobre los wrapper en java y su desarrollo, en mi opinión las clases Wrapper están diseñadas para agregar más funcionalidades a los tipos primitivos, de modo que sean compatibles con el código genérico, como la Collection Framework, y muchos otros beneficios. No están destinados a reemplazar los tipos primitivos.
Por lo tanto, se debe usar envoltorios solo cuando sea necesario, como cuando se trata de genéricos, ya que crear un objeto agrega importantes gastos generales a su programa. Entonces, en casos normales, se debe usar primitivas
Esto me provoco comer chocolates.!
DeleteSe debe de tener cuidado y no confundir los Wrappers con el encapsulamiento lo cual no es lo mismo ,el encapsulamiento consiste en permitir la visibilidad de atributos y/o métodos, en una clase determinada y los Wrappers son clases que generalmente se usa para describir una clase que contiene una instancia de otra clase, o sea ellos proveen un mecanismo de “envolver” valores primitivos en un objeto para que estos primitivos puedan ser incluidos en actividades que estén reservadas para objetos y también, proveen funciones de utilidad a los primitivos. Estas funciones estarían relacionadas con varias conversiones como convertir primitivos desde o de un objeto String, y convertir primitivos y objetos String a una base diferente. Esto es útil cuando se leen valores desde el teclado, desde un archivo de texto, etc. Claro teniendo en cuenta que al implementar un objeto “inmutable”” ya que una vez convertidos no podrán ser cambiados de nuevo a datos primitivos. Esto tiene algunas ventajas desde el punto de vista de la eficiencia. Pero algunos inconvenientes desde el punto de vista de la funcionalidad.
ReplyDeleteMUCHAS GRACIAS. Por un momento llegue a confundir exactamente con el termino de encapsulamiento, puesto que veia la explicación de los envoltorios de datos primitivos de clase de esa manera, por eso es que como dices hay que tener cuidado con la confusion de terminos y en si los usos que tienen el encapsulamiento y el de wrappers, y pues me parece bastante interesante el uso que se le puede dar a las clases y a esos datos primitivos para tratarlos como objetos en otras clases o en otros programas inclusive. Lo que si queda a meditar al respecto, es el tema final que mencionas, que me deja la interrogante de ¿Es mejor la eficiencia o la funcionalidad?
DeleteEn el mundo de la información el termino Wrapper's se le conoce como contenedor el cual es la información en donde pretende enmarcar los datos principales o un programa que configura otro programa para que pueda ejecutarse correctamente. Des el punto de vista de la ingeniería de software, un contenedor se define como una entidad que encapsula y oculta la complejidad subyacente de otra entidad mediante interfaces bien definidas. Como destacan en este blog a wrappers también se le conoce como clases envolventes los cuales en Java estas clases utilizan datos primitivos entonces estos tipos de datos no son objetos pero en ocasiones es necesarios tratarlos como tales. Además un patrón de envoltura es una clase con una interfaz especial que permite que las clases incompatibles funcionen juntas. Investigando un poco más encontré que Wrapper's permite ejecutar una aplicación Java como un Servicio de Windows o como proceso Demonio (UNIX), ¿Cómo se logra esto? Por medio de Java Service Wrapper el cual permite instalar una aplicación Java como un servicio de Windows. De la misma manera, la secuencia de comandos incluidos con el Wrapper también hacen que sea muy fácil de instalar una aplicación Java como un proceso Demonio en sistemas UNIX. El Wrapper maneja correctamente "los registros de datos" de los usuarios en sistemas Windows, dependencias de servicio y tiene la capacidad para ejecutar los servicios que interactúen con el escritorio.
ReplyDeleteLos Wrappers, también conocidos como envoltorios o contenedores, de cierta forma buscan encapsular u ocultar la complejidad de otra entidad mediante una interfaz que este bien definida. Como se menciono con anterioridad los envoltorios permiten darle al objeto una especie de estilo-fachada diferente que le proporcione a la interfaz simplicidad o agregar alguna funcionalidad sin que este cambie su código para adaptarse a ella. Son considerados una herramienta de gran utilidad ya que proveen diferentes funcionalidades como por ejemplo: permiten realizar conversiones en los tipos primitivos. Pero cabe destacar que existe una clase envolvente para cada tipo primitivo la cual es nombrada de la misma forma que su dato primitivo sólo que comienza con letra mayúscula. Una de las principales funcionalidades que poseen los envoltorios es que logran tener actividades o comportamientos que son reservados solamente para los objetos, por lo tanto considero que estos permiten configurar las condiciones del entorno del programa, buscando que este sea eficiente.
ReplyDeleteCiertamente los wrappers (envoltorios) son estructuras bastante interesantes, son flexibles, fáciles, simples de validar, y se pueden usar para adaptar una clase u objeto existente para que tenga una interfaz diferente. Se les cataloga interesantes sobre todo por la gran ventaja que ofrecen al actuar como firewalls, permitiendo que tengan acceso al sistema sólo ciertos nombres de dominio confiables. Además de eso, permite crear callejones sin salida para atrapar piratas o los comúnmente llamados HACKERS.
ReplyDeleteEstos envoltorios son ampliamente utilizados como herramienta de seguridad, pues la seguridad lógica valga la redundancia se enfoca en un solo programa. Estos programas nacieron por la necesidad de modificar el comportamiento del sistema operativo sin tener que modificar su funcionamiento.
Entonces, básicamente, de acuerdo a este post un Wrappers es una función que simplemente se utiliza para llamar a otra función o funciones múltiples, es decir, es una capa, porción de código, cosas que encapsulan la lógica interna de la tarea o proceso final. OJO, como expreso Maria Jose, no se debe confundir con encapsulamiento. En general, los wrappers son útiles al proporcionar un nivel de abstracción de la implementación de la clase o componente subyacente por tanto esta funcionalidad trata de que se “vean y se sientan” como el tipo original y pueden implementar, manteniendo definitivamente el estado de la instancia envuelta. Ejemplo, supongamos que estamos invitados a una fiesta de cumpleaños. Queremos darle un regalo a un amigo, pero es su cumpleaños, así que no puedes entregarle el regalo así como así. Para hacer el regalo compatible con el evento que es la fiesta de cumpleaños, envuelve el regalo en papel decorativo, ocultando el regalo, pero haciendo que siga siendo un regalo. Ahora bien, si se tiene algún tipo de código que cuando está desnudo no es apropiado para la ocasión (entorno) aquí es cuando se usa un contenedor para hacerlo “mágicamente” apropiado, como si estuviéramos envolviendo el regalo para que sea apropiado.
ReplyDeleteEl patrón Wrapper, comúnmente conocido como envoltorio es un patrón estructural. Los patrones ordenados nos permiten especificar la forma como se organizan las clases y los objetos para alcanzar una solución. Este patrón permite cambiar la interfaz de acceso a un objeto a otra interfaz solicitada. De ésta forma, dos interfaces incompatibles pueden ayudar entre sí, cuando se habla del diseño de patrones de software, se puede apreciar que el patrón Wrapper es bastante elemental y que su utilidad se encuentra en la migración de aplicaciones de una plataforma a otra, a fin de lleva la semántica de una plataforma a la sintaxis y semántica de otra, reutilizando el trabajo ya desarrollado en la aplicación original.
ReplyDeleteCon este razonamiento y la verificación efectuada, surgen diferentes interrogantes que es significativo resolver y para lo cual pueden plantearse pequeños proyectos de investigación factibles de realizar que sirven de beneficios en cualquier proyecto que tengamos en mente.
Dada la información del post se puede decir entonces que los Wrappers son clases diseñadas para ser un complemento de los tipos primitivos. En efecto, los tipos primitivos son los únicos elementos que no son objetos. Esto tiene algunas ventajas desde el punto de vista de la eficiencia, pero algunos inconvenientes desde el punto de vista de la funcionalidad.
ReplyDeletePor ejemplo, los tipos primitivos siempre se pasan como argumento a los métodos por valor, mientras que los objetos se pasan por referencia. No hay forma de modificar en un método un argumento de tipo primitivo y que esa modificación se trasmita al entorno que hizo la llamada.
Una forma de conseguir esto es utilizar un Wrapper, esto es un objeto cuya variable miembro es el tipo primitivo que se quiere modificar. Las clases Wrapper también proporcionan métodos para realizar otras tareas con los tipos primitivos, tales como conversión con cadenas de caracteres en uno y otro sentido. Existe una clase Wrapper para cada uno de los tipos primitivos numéricos, esto es, existen las clases Byte, Short, Integer, Long, Float y Double (Los nombres empiezan por mayúscula, siguiendo la nomenclatura típica de Java).
En conclusión las clases Wrapper nos permiten acceder y gestionar todos nuestros tipos de datos primitivos como objetos encapsulados, dejándonos todas sus utilidades pero tratarlos como objetos. Las clases wrappers son clases ya definidas en la API de java para envolver los datos primitivos y poder tratarlos como objetos. Por cada dato primitivo, existe una clase wrapper asociada a cada una de esos datos.
ReplyDeleteJava provee clases para brindar la funcionalidad que los tipos de datos primitivos (int, double, char, etc) no pueden proveer justamente por ser solo tipos de datos primitivos. A estas clases se las suele denominar wrappers envoltorios y permiten, entre otras cosas, realizar conversiones entre cadenas y números, obtener expresiones numéricas en diferentes bases,etc.
Las clases Wrapper también proporcionan métodos para realizar otras tareas con lo tipos primitivos, tales como conversión con cadenas de caracteres en uno y otro sentido. tipos de datos primitivos (int, double, char, etc) no pueden proveer justamente por ser solo tipos de datos primitivos. estas clases son muy importante en el desarrollo de diseños es como un a herramienta base estoy de acuerdo con lo que todos dicen
ReplyDeleteCoincido con mi compañera Andreina en cuanto a que este tipo de clase debe ser implementada solo y únicamente cuando sea necesario. Tengo entendido según varias fuentes consultadas que aunque si bien se utilizan como una “fachada” para envolver los tipos de datos primitivos y que sean vistos como objetos, estas clases instauran objetos inmutables lo que quiere decir que en el momento en que sean “convertidos” los datos primitivos estos no podrán volver a convertirse a su condición original. Sin embargo se posee el beneficio de que se pueden utilizar los métodos que ya se encuentran establecidos para este tipo de clases, siendo estas muy útiles para cuando se reciben datos ingresados por teclado; además de que como se ha mencionado estas le amplían el rango de funcionalidades a las variable de tipo primitivo y para que de este modo puedan ser contenidos en aquellas actividades donde se requieran.
ReplyDeleteHaciendo referencia a la traducción, es una clase que "envuelve" o "encierra" un tipo de dato y le da una apariencia de objeto para que donde sea se requiera el tipo de datos como un objeto se pueda usar. Se puede comparar con un chocolate en el que el fabricante lo envuelve con papel de aluminio para evitar la contaminación. La persona que vaya a comerse el chocolate tiene que saber abrir el envoltorio por más trivial que parezca, es por eso que las clases wrappers incluyen métodos para desenvolver el objeto y devolver el tipo de datos.
ReplyDeleteLos tipos de datos primitivos no son objetos pero para que sean tratados como tales se usan las llamadas wrapper class. Estas implementan objetos “inmutables” ya que una vez convertidos no podrán ser cambiados de nuevo a datos primitivos.
ReplyDeleteEstas clases llamadas Wrapper tienen la ventaja de que se puede hacer uso de los métodos existentes para estas clases y para convertir cadenas de caracteres (texto) en números. Esto es útil cuando se leen valores desde el teclado, desde un archivo de texto, etc.