Êtes-vous un étudiant de l'EPFL à la recherche d'un projet de semestre?
Travaillez avec nous sur des projets en science des données et en visualisation, et déployez votre projet sous forme d'application sur Graph Search.
En génie logiciel, adaptateur (ou wrapper) est un patron de conception (design pattern) de type structure (structural). Il permet de convertir l'interface d'une classe en une autre interface que le client attend. L’adaptateur fait fonctionner ensemble des classes qui n'auraient pas pu fonctionner sans lui, à cause d'une incompatibilité d'interfaces. Il permet d'intégrer une classe à ne pas modifier, par exemple : une API tiers convient au besoin fonctionnel, mais la signature de ses méthodes ne convient pas ; l'utilisation d'anciennes classes doit être normalisée, sans pour autant en reprendre tout le code. Un objet adaptateur sert de liaison entre les objets manipulés et un programme les utilisant, permettant la communication entre classes. Il est utilisé pour convertir l'interface d'un objet vers une autre interface, attendue par le client pour utiliser l'objet en question. IEmployee : définit l'interface métier utilisée par le employee. employee : travaille avec des objets utilisant l'interface IEmployee. EmployeeManager : définit une interface existante devant être adaptée. employeeAdapter : fait correspondre l'interface de Adapté à l'interface IEmployee. 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 CarreCoinsRondAdaptateur: public Carre, private Cercle{ public: CarreCoinsRondAdaptateur(); 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(); } }; En C♯ : /// la signature "IDeveloppeur" utilisée par le client public interface IDeveloppeur { /// Requete string EcrireCode(); } /// concrétisation normale de IDeveloppeur par une classe class DeveloppeurLambda : IDeveloppeur { public string EcrireCode() { return "main = putStrLn "Algorithme codé""; } } /// Adapté qui n'a pas la signature IDeveloppeur class Architecte { public string EcrireAlgorithme() { return "Algorithme"; } } /// Adaptateur qui encapsule un objet qui n'a pas la bonne signature class Adaptateur : IDeveloppeur { Architecte _adapté; public Adaptateur (Architecte adapté) { _adapté = adapté; } public string EcrireCode() { string algorithme = _adapté.
Sabine Süsstrunk, Mathieu Salzmann, Tong Zhang, Yi Wu
Martin Odersky, Yichen Xu, Aleksander Slawomir Boruch-Gruszecki
Vincent Kaufmann, Emmanuel Pierre Jean Ravalet, Yann Francis Eric Dubois, Diego Alejandro Marcelo Mermoud