Wrapper (informatique)

Wrapper (informatique)

Adaptateur (patron de conception)

En génie logiciel, Adaptateur est un patron de conception (design pattern) de type structure (structural).

Sommaire

But

Il permet de convertir l'interface d'une classe en une autre interface que le client attend. Adaptateur fait fonctionner un ensemble des classes qui n'auraient pas pu fonctionner sans lui, à cause d'une incompatibilité d'interfaces.

Autre nom

Wrapper

Motivation / Exemple

Vous voulez intégrer une classe que vous ne voulez/pouvez pas modifier.

Applicabilité

  • Une API Tiers convient à votre besoin fonctionnel, mais la signature de ses méthodes ne vous convient pas.
  • Vous voulez normaliser l'utilisation d'anciennes classes sans pour autant en reprendre tout le code.

Structure

Schéma UML du motif de conception Adaptateur

Participants

  • IAdaptateur : Définit l'interface métier utilisée par le Client.
  • Client : Travaille avec des objets implémentant l'interface IAdaptateur.
  • Adapté : Définit une interface existante devant être adaptée.
  • Adaptateur : Fait correspondre l'interface de Adapté à l'interface IAdaptateur.

Collaboration

Conséquences

Un objet Adaptateur sert de liaison entre les objets manipulés et un programme les utilisant, à simplifier la communication entre deux classes. Il est utilisé pour modifier l'interface d'un objet vers une autre interface.

Implémentation

Exemple en C++

Un adaptateur pour faire un carré aux coins ronds. Le code est en C++.

class Carre{
  public:
    Carre();
    virtual DessineCarre();
    virtual coordonnees* GetQuatreCoins();
};
 
class Cercle{
  public:
    Cercle();
    virtual DessineCercle();
    virtual void SetArc1(coordonnees* c1);
    virtual void SetArc2(coordonnees* c2);
    virtual void SetArc3(coordonnees* c3);
    virtual void SetArc4(coordonnees* c4);
    virtual coordonnees* GetCoordonneesArc();
};
 
class CarreCoinsRondAdapter: public Carre, private Cercle{
  public:
    CarreCoinsRondAdapter();
    virtual void DessineCarre(){
       SetArc1(new coordonnees(0,0));
       SetArc2(new coordonnees(4,0));
       SetArc3(new coordonnees(4,4));
       SetArc4(new coordonnees(0,4));
       // Fonction qui dessine les lignes entre les arcs
       DessineCercle();
    }
    virtual coordonnees* GetQuatreCoins(){
       return GetCoordonneesArc();
    }
};

Exemple en C#

/// <summary> la signature "IAdaptateur" utilisée par le client </summary>
public interface IDeveloppeur {
    /// <summary>  Requete </summary>
    string EcrireCode();
}
 
/// <summary> concrétisation normale de "IAdaptateur" par une classe </summary>
class DeveloppeurLambda : IDeveloppeur {
    public string EcrireCode() { 
        return "main = putStrLn \"Algorithme codé\""; 
    }
}
 
/// <summary> "Adapté" qui n'a pas la signature "IAdaptateur" </summary>
class Architecte {
    public string EcrireAlgorithme() { 
        return "Algorithme";
    }
}
 
/// <summary> "Adaptateur" qui encapsule un objet qui n'a pas la bonne signature</summary>
class Adaptateur : IDeveloppeur {
    Architecte _adapté;
    public Adaptateur (Architecte adapté) {
        _adapté = adapté;
    }
    public string EcrireCode() {
        string algorithme = _adapté.EcrireAlgorithme();
        return string.Format("let main() = printfn \"{0} codé\"", algorithme);
    }
}
 
//___________________________________________________________________
// Implémentation
 
/// <summary> "Client" qui n'utilise que les objets qui respectent la signature </summary>
class Client {
    void Utiliser(IDeveloppeur cible) {
        string code = cible.EcrireCode();
        Console.WriteLine(code);
    }
    static void Main() {
        var client = new Client();
 
        IDeveloppeur cible1 = new DeveloppeurLambda();
        client.Utiliser(cible1);
 
        var adapté = new Architecte();
        IDeveloppeur cible2 = new Adaptateur(adapté);
        client.Utiliser(cible2);
    }
}

Utilisations connues

On peut également utiliser un adaptateur lorsque l'on ne veut pas implémenter toutes les méthodes d'une certaine interface. Par exemple, si l'on doit implémenter l'interface MouseListener en Java, mais que l'on ne souhaite pas implémenter de comportement pour toutes les méthodes, on peut dériver la classe MouseAdapter. Celle-ci fournit en effet un comportement par défaut (vide) pour toutes les méthodes de MouseListener.

Exemple avec le MouseAdapter :

 public class MouseBeeper extends MouseAdapter
 {
   public void mouseClicked(MouseEvent e) {
     Toolkit.getDefaultToolkit().beep();
   }
 }

Exemple avec le MouseListener :

 public class MouseBeeper implements MouseListener
 {
   public void mouseClicked(MouseEvent e) {
     Toolkit.getDefaultToolkit().beep();
   }
 
   public void mousePressed(MouseEvent e) {}
   public void mouseReleased(MouseEvent e) {}
   public void mouseEntered(MouseEvent e) {}
   public void mouseExited(MouseEvent e) {}
 }

Voir aussi

Articles connexes

Liens et documents externes

Ce document provient de « Adaptateur (patron de conception) ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Wrapper (informatique) de Wikipédia en français (auteurs)

Игры ⚽ Поможем сделать НИР

Regardez d'autres dictionnaires:

  • Wrapper (electronique) — Wrapper (électronique) Pour les articles homonymes, voir Wrapper (homonymie). Le wrapping est une technique de connectique d électronique permettant de remplacer les soudures et les connexions standard pour produire des circuits complexes en… …   Wikipédia en Français

  • Wrapper — (homonymie) Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. En électronique Wrapper En informatique : Wrapper, en programmation (motif de conception) wrapper TCP et UDP : tcpd pour les… …   Wikipédia en Français

  • wrapper — ● ►en n. m. ►CIEL programme enveloppant l exécution d un autre programme, pour lui préparer un environnement particulier. Utilisé par exemple pour sécuriser le fonctionnement de certaines applications en contrôlant très précisément leur interface …   Dictionnaire d'informatique francophone

  • Wrapper (électronique) — Pour les articles homonymes, voir Wrapper (homonymie). Une connexion par wrapping …   Wikipédia en Français

  • Wrapper (homonymie) — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Wrapper est un terme anglais qui fait, à l origine, référence à un type d emballage en papier, cellophane ou plastique pour contenir un objet. En… …   Wikipédia en Français

  • TCP Wrapper — est un terme anglais qui signifie littéralement emballage TCP. Il s agit d une technique de sécurité particulière aux réseaux gérés par des systèmes Unix. Afin de restreindre et de tracer les accès de certains services en fournissant l origine de …   Wikipédia en Français

  • Java (informatique) — Java (langage) Pour les articles homonymes, voir Java.  Ne doit pas être confondu avec JavaScript …   Wikipédia en Français

  • 68008 — ● np. m. ►PUCE CPU 68000 standard, utilisant en externe 20 bits d adresse et 8 bits de données. C était donc une version à bas prix et facile a wrapper …   Dictionnaire d'informatique francophone

  • SWIG — ● ►en np. sg. m. ►LANG Simplified Wrapper and Interface Generator. Outil permettant d étendre les fonctionnalités de certains langage de commande en le liant à des bibliothèques C ou C++. http://www.swig.org …   Dictionnaire d'informatique francophone

  • wrapping — ● ►en /À vous d imaginer une prononciation/ n. m. ● 1. ►ELECTRON Méthode consistant à enrouler un fil électrique plutôt que de le souder. Les signaux sont curieusement plus rapides. ● 2. ►PROG Emballage d une application dans une nouvelle… …   Dictionnaire d'informatique francophone

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”