¿Qué es una clase de envoltura?
¿Cómo son útiles esas clases?
design-patterns
wrapper
Bhaskar
fuente
fuente
Justo como suena: una clase que "envuelve" la funcionalidad de otra clase o API en una API más simple o simplemente diferente.
Ver: patrón de adaptador , patrón de fachada
fuente
Las clases de envoltura proporcionan una forma de usar tipos primitivos como objetos. Para cada primitiva, tenemos una clase de contenedor como,
Integer y Byte son las clases de contenedor de primitivo int y byte. Hay tiempos / restricciones cuando necesita usar las primitivas como objetos, por lo que las clases de contenedor proporcionan un mecanismo llamado boxing / unboxing.
El siguiente ejemplo puede entender bien el concepto como
así es como podemos usar el tipo de clase wrapper para convertir también a otros tipos primitivos. Este tipo de conversión se usa cuando necesita convertir un tipo primitivo en objeto y usarlos para obtener otras primitivas también. Aunque para este enfoque, necesita escribir un código grande. Sin embargo, se puede lograr lo mismo con la técnica de conversión simple, ya que el fragmento de código se puede lograr de la siguiente manera
Aunque el valor doble se convierte explícitamente en un valor entero también llamado como downcasting.
fuente
Una clase contenedora no necesariamente necesita ajustar otra clase. Podría ser una funcionalidad de ajuste de clase de API en, por ejemplo, un archivo dll.
Por ejemplo, podría ser muy útil crear una clase dll wrapper, que se encarga de toda la inicialización y limpieza de dll y crear métodos de clase que envuelvan punteros de función creados a partir de, por ejemplo
GetProcAddress()
.Salud !
fuente
Una clase de contenedor es una clase que "se ajusta" a otra cosa, como su nombre.
La definición más formal de la misma sería una clase que implementa el Patrón Adaptador . Esto le permite modificar un conjunto de API en una forma más utilizable y legible. Por ejemplo, en C #, si desea utilizar la API nativa de Windows, es útil incluirla en una clase que cumpla con las pautas de diseño de .NET.
fuente
Hay varios patrones de diseño que se pueden llamar clases de envoltura.
Véase mi respuesta a " ¿Cómo difieren los patrones Proxy, Decorator, adaptador, y el puente? "
fuente
También podría ser valioso tener en cuenta que en algunos entornos, gran parte de lo que podrían hacer las clases de contenedor es ser reemplazado por aspectos.
EDITAR:
En general, una envoltura se expandirá sobre lo que hace la envoltura, sin preocuparse por la implementación de la envoltura, de lo contrario no hay ningún punto de envoltura versus extender la clase envuelta. Un ejemplo típico es agregar información de temporización o funcionalidad de registro en alguna otra interfaz de servicio, en lugar de agregarla a cada implementación de esa interfaz.
Esto termina siendo un ejemplo típico para la programación de Aspect. En lugar de pasar por una interfaz función por función y agregar el registro repetitivo, en la programación de aspectos, define un punto de corte, que es una especie de expresión regular para los métodos, y luego declara los métodos que desea ejecutar antes, después o alrededor de todos los métodos coincidentes El punto de corte. Probablemente sea justo decir que la programación de aspectos es un tipo de uso del patrón Decorator, para el que también se pueden usar las clases wrapper, pero que ambas tecnologías tienen otros usos.
fuente
La clase Wrapper es una clase que ajusta la otra clase y proporciona la abstracción entre el cliente y la clase original que se está envolviendo.
fuente
Una clase contenedora suele ser una clase que tiene un objeto como propiedad privada. el contenedor implementa la API de ese objeto privado y, por lo tanto, se puede pasar como un argumento donde lo haría el objeto privado.
supongamos que tiene una colección y desea utilizar algún tipo de traducción cuando se le agregan objetos: escribe una clase de contenedor que tiene todos los métodos de la colección. cuando se llama a add (), el contenedor traduce los argumentos en lugar de simplemente pasarlos a la colección privada.
el contenedor se puede usar en cualquier lugar donde se pueda usar una colección, y el objeto privado aún puede tener otros objetos que se refieran a él y lo lean.
fuente
Una clase contenedora es una clase que se utiliza para ajustar otra clase para agregar una capa de indirección y abstracción entre el cliente y la clase original que se está ajustando.
fuente
La clase de contenedor es un contenedor alrededor de un tipo de datos primitivo. Representa los tipos de datos primitivos en sus instancias de clase correspondientes, por ejemplo, un tipo de datos booleanos se puede representar como una instancia de clase booleana. Todas las clases de contenedor primitivas en Java son inmutables, es decir, una vez asignado un valor a una instancia de clase de contenedor no se puede cambiar más.
fuente
La programación Java proporciona una clase de contenedor para cada tipo de datos primitivos, para convertir un tipo de datos primitivos para que se corresponda con el objeto de la clase de contenedor.
fuente
Hacer una clase de envoltura de bienestar no es un trabajo fácil. Comprender una clase de contenedor como está diseñado por otros tampoco es un trabajo fácil. Porque es idea, no código. Solo cuando entiendes la idea, puedes entender el envoltorio.
fuente
Las clases de envoltura surgieron para satisfacer una necesidad básica de los programadores, es decir, usar valores primitivos donde solo se permiten objetos. Como su nombre sugiere, las clases de envoltura se ajustan a un valor primitivo y mantienen el valor en un objeto. Por lo tanto, todos aquellos lugares donde no se permitían las primitivas, como genéricos, hashmap-keys, Arraylists, etc., los programadores ahora tienen la opción de proporcionar estos valores primitivos como sus tipos de contenedor correspondientes.
Además, estos tipos de contenedor tienen varios métodos de utilidad para convertir de tipo primitivo a tipos de contenedor y viceversa correspondientes, y también de cadenas a tipos de contenedor y viceversa.
Escribí un artículo detallado sobre clases de envoltura en mi blog que explica en profundidad el concepto de tipos de envoltura: http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Divulgación: Este blog es de mi propiedad)
fuente
Actualmente utilicé una clase de contenedor para mi proyecto y los principales beneficios que obtengo (solo un beneficio único para ampliar la explicación del tema):
Manejo de excepciones: mi clase principal, que envuelve otra clase, tiene métodos que arrojan excepciones si ocurre alguna, así que creé una clase de contenedor que maneja las excepciones y las registra inmediatamente. Entonces, en mi ámbito principal, no hay manejo de excepciones. Solo llamo un método y hago algo.
Uso fácil: puedo iniciar fácilmente el objeto. Normalmente, la fase de inicio se compone de muchos pasos.
Legibilidad del código: cuando otro programador abre mi código, el código parecerá muy claro y fácil de manipular.
Ocultar los detalles: si está generando una clase que otro programador va a utilizar, puede ajustar los detalles como "manejo de errores, manejo de excepciones, mensajes de registro y etc." para que el programador no tenga que manejar el caos, simplemente usa los métodos.
fuente
Una clase contenedora es una clase que tiene el único propósito de mantener algo y agregarle alguna funcionalidad. En Java, dado que las primitivas (como ints, floats, chars ...) no son objetos, por lo que si desea tratarlos como uno, debe usar una clase wrapper. Supongamos que desea crear un Vector de entradas, el problema es que un Vector solo contiene Objetos, no primitivos. Entonces, lo que harás es poner todas las entradas en un contenedor entero y usarlas. Ejemplo:
fuente
un contenedor es una clase que se usa para comunicarse entre dos aplicaciones diferentes entre plataformas diferentes
fuente