web-dev-qa-db-fra.com

Qu'est-ce qu'une classe wrapper?

Qu'est-ce qu'une classe wrapper?
Comment de telles classes sont-elles utiles?

212
Bhaskar

En général, une classe wrapper est une classe qui "encapsule" ou "encapsule" la fonctionnalité d'une autre classe ou d'un autre composant. Celles-ci sont utiles en fournissant un niveau d'abstraction de la mise en œuvre de la classe ou du composant sous-jacent; Par exemple, les classes wrapper qui encapsulent des composants COM peuvent gérer le processus d'appel du composant COM sans déranger le code appelant. Ils peuvent également simplifier l'utilisation de l'objet sous-jacent en réduisant le nombre de points d'interface impliqués; fréquemment, cela permet une utilisation plus sécurisée des composants sous-jacents.

165
Paul Sonier

Voici à quoi cela ressemble: une classe qui "encapsule" la fonctionnalité d’une autre classe ou d’une autre API dans une API plus simple ou simplement différente.

Voir: modèle d’adaptateur , modèle de façade

67
Shog9

Les classes wrapper fournissent un moyen d'utiliser des types primitifs en tant qu'objets. Pour chaque primitive, nous avons une classe de wrapper telle que,

int Integer
byte Byte 

Integer et Byte sont les classes wrapper de primitive int et byte. Il y a des moments/restrictions lorsque vous devez utiliser les primitives comme objets. Les classes wrapper fournissent donc un mécanisme appelé boxing/unboxing.

Le concept peut être bien compris par l'exemple suivant

double d = 135.0 d;
Double doubleWrapper = new Double(d);

int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();

c'est donc ainsi que nous pouvons utiliser le type de classe wrapper pour convertir d'autres types primitifs. Ce type de conversion est utilisé lorsque vous devez convertir un type primitif en objet et les utiliser pour obtenir d'autres primitives également. Cependant, pour cette approche, vous devez écrire un gros code. Cependant, la même technique peut être obtenue avec la technique de casting simple, car l'extrait de code peut être obtenu comme indiqué ci-dessous.

double d = 135.0;
int integerValue = (int) d ;

Bien que la valeur double soit explicitement convertie en valeur entière, elle est également appelée "downcasting".

40
SBTec

Une classe wrapper n'a pas nécessairement besoin d'envelopper une autre classe. Il peut s’agir d’une fonctionnalité d’encapsulation de classe d’API, par exemple. un fichier dll.

Par exemple, il peut être très utile de créer une classe wrapper dll, qui s’occupe de l’initialisation et du nettoyage des dll et de créer des méthodes de classe qui encapsulent les pointeurs de fonctions créés, par exemple. GetProcAddress().

À votre santé !

17
ralphtheninja

Une classe wrapper est une classe qui "enveloppe" quelque chose d'autre, tout comme son nom.

La définition la plus formelle serait une classe qui implémente le Adapter Pattern . Cela vous permet de modifier un ensemble d'API dans un format plus utilisable et lisible. Par exemple, en C #, si vous souhaitez utiliser l'API Windows native, il est utile de l'envelopper dans une classe conforme aux consignes de conception .NET.

8
Reed Copsey

Plusieurs modèles de conception peuvent être appelés classes wrapper.

Voir ma réponse à " En quoi les modèles de proxy, de décorateur, d'adaptateur et de pont diffèrent-ils? "

8
Bill Karwin

Il peut également être utile de noter que dans certains environnements, une grande partie de ce que les classes wrapper peuvent faire est remplacée par des aspects.

MODIFIER:

En général, un wrapper va développer ce que fait le wrappee, sans se soucier de son implémentation, sinon il n'y a aucun intérêt à envelopper plutôt qu'à étendre la classe wrappée. Un exemple typique consiste à ajouter des informations de synchronisation ou des fonctionnalités de journalisation autour d'une autre interface de service, par opposition à l'ajouter à chaque implémentation de cette interface.

Cela finit par être un exemple typique de la programmation Aspect. Plutôt que de passer par une fonction d’interface par fonction et d’ajouter la journalisation, vous définissez dans la programmation des aspects un pointcut, qui est une sorte d’expression régulière pour les méthodes, puis vous déclarez les méthodes que vous souhaitez exécuter avant, après ou autour de toutes les méthodes correspondantes. le point coupé. Il est probablement juste de dire que la programmation d'aspect est une sorte d'utilisation du motif Decorator, pour lequel les classes wrapper peuvent également être utilisées, mais les deux technologies ont d'autres utilisations.

7
Jherico

La classe wrapper est une classe qui encapsule l'autre classe et fournit l'abstraction entre le client et la classe d'origine en cours d'encapsulation.

7
Rakesh verma

une classe wrapper est généralement une classe qui a un objet en tant que propriété privée. l'encapsuleur implémente l'API de cet objet privé et peut donc être passé sous forme d'argument comme le ferait l'objet privé.

supposons que vous avez une collection et que vous souhaitez utiliser une sorte de traduction lorsque des objets y sont ajoutés. Vous écrivez une classe wrapper contenant toutes les méthodes de la collection. Lorsque add () est appelé, le wrapper traduit les arguments au lieu de les transmettre à la collection privée.

le wrapper peut être utilisé n'importe où une collection peut être utilisée, et l'objet privé peut toujours avoir d'autres objets s'y référant et le lisant.

5
Amir Arad

La programmation Java fournit une classe wrapper pour chaque type de données primitif, afin de convertir un type de données primitif en objet correspondant de la classe wrapper.

3
THOSEEF PASHA

Une classe wrapper est une classe utilisée pour envelopper une autre classe afin d'ajouter une couche d'indirection et d'abstraction entre le client et la classe d'origine en cours d'encapsulation.

3
Andrew Hare

La classe wrapper est un wrapper autour d'un type de données primitif. Il représente des types de données primitifs dans leurs instances de classe correspondantes, par exemple. un type de données booléen peut être représenté sous la forme d'une instance de classe booléenne. Toutes les classes wrapper primitives dans Java sont immuables, c'est-à-dire qu'une fois affectée une valeur à une instance de classe wrapper, elle ne peut plus être modifiée.

3
David

Faire un cours de classe bien-être n’est pas une tâche facile. Comprendre comment une classe de wrapper est conçue par d'autres n'est également pas une tâche facile. Parce que c'est une idée, pas du code. Ce n'est que lorsque vous comprenez l'idée que vous comprenez wrapper.

1
Tony

J'ai actuellement utilisé une classe wrapper pour mon projet et les principaux avantages dont je bénéficie (un seul avantage pour élargir l'explication du sujet):

Gestion des exceptions: Ma classe principale, qu'une autre classe encapsule, a des méthodes qui lèvent des exceptions, le cas échéant. J'ai donc créé une classe wrapper qui gère les exceptions et les enregistre immédiatement. Donc, dans mon domaine principal, il n'y a pas de traitement des exceptions. Je viens d'appeler une méthode et faire quelque chose.

Utilisation facile: je peux facilement initier l'objet. La phase initiale est généralement constituée de nombreuses étapes.

Lisibilité du code: quand un autre programmeur ouvre mon code, le code semblera très clair et facile à manipuler.

Masquer les détails: si vous générez une classe qu'un autre programmeur va utiliser, vous pouvez alors envelopper les détails tels que "traitement des erreurs, traitement des exceptions, journalisation des messages, etc." afin que le programmeur ne soit pas obligé de le gérer. le chaos, utilise simplement les méthodes.

0
Bahadir Tasdemir

Les classes wrappers ont été créées pour répondre à un besoin fondamental des programmeurs, à savoir utiliser des valeurs primitives là où seuls les objets sont autorisés. Comme leur nom l'indique, les classes wrapper encapsulent une valeur primitive et la conservent dans un objet. Ainsi, tous les endroits où les primitives n'étaient pas autorisées - tels que génériques, hashmap-keys, Arraylists, etc. - les programmeurs ont maintenant la possibilité de fournir ces valeurs primitives comme types de wrapper correspondants.

De plus, ces types de wrapper ont un certain nombre de méthodes utilitaires permettant de convertir un type primitif en types de wrapper et arrière correspondants, ainsi que de Strings en types de cache et arrière.

J'ai écrit un article détaillé sur les classes de wrapper dans un blog qui explique le concept de types de wrapper en profondeur - http://www.javabrahman.com/corejava/Java-wrapper-classes-tutorial-with-examples / (Disclosure - Ce blog m'appartient)

0
Dhruv Rai Puri