Qu'est ce qu'une classe wrapper?


Qu'est Ce qu'une classe wrapper?
Comment ces classes sont-elles utiles?

Author: Patrick McDonald, 2009-05-20

17 answers

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. Ceux-ci sont utiles en fournissant un niveau d'abstraction de l'implémentation de la classe ou du composant sous-jacent; par exemple, les classes wrapper qui encapsulent les composants COM peuvent gérer le processus d'appel du composant COM sans déranger le code appelant avec lui. Ils peuvent également simplifier l'utilisation de l'objet sous jacent en réduisant le nombre de points d'interface souvent, cela permet une utilisation plus sûre des composants sous-jacents.

 156
Author: Paul Sonier, 2009-05-20 17:19:59

Juste ce que cela ressemble: une classe qui "enveloppe" la fonctionnalité d'une autre classe ou API dans une API plus simple ou simplement différente.

Voir: Modèle d'adaptateur, Modèle de façade

 64
Author: Shog9, 2009-05-20 17:18:10

Les classes Wrapper fournissent un moyen d'utiliser des types primitifs comme objets. Pour chaque primitive , nous avons une classe wrapper comme,

int Integer
byte Byte 

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

Concept peut être bien compris par l'exemple suivant comme

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 en d'autres types primitifs ainsi. Ce type de conversion est utilisé lorsque vous devez convertir un type primitif en objet et les utiliser pour obtenir d'autres primitives.Bien que pour cette approche, vous devez écrire un gros code . Cependant, la même chose peut être obtenue avec la technique de casting simple car un extrait de code peut être réalisé comme ci-dessous

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

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

 38
Author: SBTec, 2017-10-07 11:22:37

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

Par exemple, il peut être très utile de créer une classe wrapper dll, qui prend en charge toutes les initialisations et nettoyages dll et de créer des méthodes de classe qui enveloppent les pointeurs de fonction créés à partir par exemple GetProcAddress().

Santé !

 17
Author: ralphtheninja, 2018-03-25 23:45:11

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 Modèle d'adaptateur. Cela vous permet de modifier un ensemble d'API dans une forme 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 directives de conception.NET.

 8
Author: Reed Copsey, 2009-05-20 17:18:52

Il existe plusieurs modèles de conception qui 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
Author: Bill Karwin, 2017-05-23 12:10:10

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 l'implémentation du wrappee, sinon il ne sert à rien d'envelopper par rapport à l'extension de la classe wrappee. 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 pour la programmation Aspect. Plutôt que de passer par une interface fonction par fonction et d'ajouter une journalisation standard, dans la programmation aspect, vous définissez un pointcut, qui est une sorte d'expression régulière pour les méthodes, puis déclarez les méthodes que vous souhaitez exécuter avant, après ou autour de toutes les méthodes correspondant au pointcut. C'est probablement juste de dire que la programmation par aspect est une sorte de utilisation du motif Décorateur, pour lequel les classes wrapper peuvent également être utilisées, mais que les deux technologies ont d'autres utilisations.

 7
Author: Jherico, 2009-05-20 18:57:15

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
Author: Rakesh verma, 2011-09-09 05:11:15

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

Disons que vous avez une collection et que vous voulez utiliser une sorte de traduction lorsque des objets y sont ajoutés - vous écrivez une classe wrapper qui a toutes les méthodes de la collection. lorsque add () est appelé, le wrapper traduit les arguments au lieu de simplement les passer dans le privé collection.

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

 5
Author: Amir Arad, 2009-05-20 17:25:44

Une classe wrapper est une classe qui est utilisée pour envelopper une autre classe pour ajouter une couche d'indirection et d'abstraction entre le client et la classe d'origine de l'envelopper.

 3
Author: Andrew Hare, 2009-05-20 17:18:39

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

 3
Author: David, 2011-07-04 08:14:17

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

 3
Author: THOSEEF PASHA, 2012-05-01 12:42:22

Pour une classe wrapper bien-être n'est pas une tâche facile. Comprendre une classe wrapper comment elle est conçue par d'autres n'est pas non plus une tâche facile. Parce que c'est une idée, pas un code. Ce n'est que lorsque vous comprenez l'idée que vous pouvez comprendre wrapper.

 1
Author: Tony, 2014-11-18 03:14:38

Les classes Wrapper ont vu le jour pour répondre à un besoin fondamental des programmeurs - c'est-à-dire utiliser des valeurs primitives partout où seuls les objets sont autorisés. Comme leur nom l'indique, les classes wrapper enroulent autour d'une valeur primitive et conservent la valeur dans un objet. Ainsi, tous les endroits où les primitives n'étaient pas autorisées - telles que les génériques, les clés hashmap, les Arraylists, etc.-les programmeurs ont maintenant la possibilité de fournir ces valeurs primitives en tant que types de wrapper correspondants.

En outre ces wrapper les types ont un certain nombre de méthodes utilitaires pour convertir du type primitif en types wrapper correspondants et retour, et aussi des chaînes en types wrapper et retour.

J'ai écrit un article détaillé sur les classes wrapper dans mon blog qui explique le concept des types wrapper en profondeur - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples / (Divulgation - Ce blog est la propriété de moi)

 0
Author: Dhruv Rai Puri, 2015-11-03 06:23:57

J'ai actuellement utilisé une classe wrapper pour mon projet et les principaux avantages que j'obtiens (juste 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 si cela se produit, j'ai donc créé une classe wrapper qui gère les exceptions et les enregistre immédiatement. Donc, dans ma portée principale, il n'y a pas de gestion des exceptions. J'appelle juste une méthode et fais quelque chose.

Utilisation facile: je peux facilement initier le objet. Normalement, la phase d'initiation est construite avec beaucoup d'étapes.

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

Cacher les détails: Si vous générez une classe qu'un autre programmeur va utiliser, vous pouvez envelopper les détails comme "gestion des erreurs, gestion des exceptions, journalisation des messages, etc..."pour que le programmeur ne soit pas obligé de gérer le chaos, il utilise simplement les méthodes.

 0
Author: Bahadir Tasdemir, 2015-11-20 09:27:17

Une classe wrapper est une classe qui a pour seul but de contenir quelque chose et d'y ajouter des fonctionnalités. En Java depuis les primitives (comme ints,floats,caractères...) ne sont pas des objets, donc si vous voulez les traiter comme un seul, alors vous devez utiliser une classe wrapper. Supposons que vous souhaitiez créer un vecteur d'ints, le problème est qu'un Vecteur ne contient que des Objets et non des primitives. Donc, ce que vous allez faire, c'est mettre tous les ints dans un wrapper entier et l'utiliser. Exemple:

int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
 -1
Author: Reza Baradaran Gazorisangi, 2015-12-14 14:09:45

Un wrapper est une classe qui est utilisée pour communiquer entre deux applications différentes entre différentes plates-formes

 -7
Author: laxminarayan, 2011-09-27 11:46:11