11.07.2015 Views

Patrons de conception: Adaptateur

Patrons de conception: Adaptateur

Patrons de conception: Adaptateur

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>MotivationLes besoins pour une bonne <strong>conception</strong> et dubon co<strong>de</strong> :• Extensibilité• Flexibilité• Facilité à maintenir• Réutilisabilité• Les qualités internes• Meilleure eu e spécification, ca construction, o documentationo2010/2011 F. Mallet2


<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>Historique MVC Gang of Four : Erich Gamma, Richard Helm,RalphJohnson, John Vlissi<strong>de</strong>s• Définition <strong>de</strong> 23 patterns Design Patterns – Elements of Reusable Object-Oriented Software, Addison Wesley, 1994 Un Design Pattern nomme, abstrait et i<strong>de</strong>ntifie lesaspects essentiels d’une structuration récurrente, cequi permet <strong>de</strong> créer une modélisation orientée objetréutilisable2010/2011 F. Mallet3


Création<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>• Comment un objet peut être crééClassification• Indépendance entre la manière <strong>de</strong> créer et la manièred’utiliser Structure• Comment les objets peuvent être combinés• Indépendance entre les objets et les connexions Comportement• Comment les objets communiquent• Encapsulation <strong>de</strong> processus (ex : observer/observable)2010/2011 F. Mallet4


Intention<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong><strong>Adaptateur</strong>• Convertir l’interface d’une classe en une autreinterface qui est attendue par un client.• Permet <strong>de</strong> faire collaborer <strong>de</strong>s classes qui n’auraientpas pu le faire à cause <strong>de</strong> l’incompatibilité <strong>de</strong> leursinterfacesExemple• Une classe <strong>de</strong> bibliothèque conçue pour laréutilisation ne peut pas l’être à cause d’une<strong>de</strong>man<strong>de</strong> spécifique <strong>de</strong> l’application• Les Adapter <strong>de</strong> java : MouseAdapter,WindowAdapter,etc.Synonymes o y : Wrapper, Mariage age <strong>de</strong> convenanceceF. Mallet - Miage M1 5


<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>Structure Une cible (I<strong>Adaptateur</strong>) définit l’interface spécifique àl’application que le client utilise Le Client collabore avec les objets qui sont conformes àl’interface <strong>de</strong> I<strong>Adaptateur</strong> La classe à adapter (Adapté) est l’interface existante t qui abesoin d’adaptation L’adaptateur (<strong>Adaptateur</strong>) p adapte effectivement l’interface <strong>de</strong>Adapté à l’interface <strong>de</strong> I<strong>Adaptateur</strong> par traduction <strong>de</strong>s accèsF. Mallet - Miage M1 6http://fr.wikipedia.org/wiki/Fichier:PatternAdapter.png


Adaptation <strong>de</strong> classe<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>• Par héritage (multiple) <strong>de</strong> la classe à adapterImplémentation• en y ajoutant les métho<strong>de</strong>s <strong>de</strong> l’interface cible et en assurant lesappels adéquats aux métho<strong>de</strong>s <strong>de</strong> la classe à adapterHéritage multiple impossible en Java !F. Mallet - Miage M1 8


Adaptation d’objet• Par composition<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>Implémentation• faire correspondre les appels <strong>de</strong> métho<strong>de</strong>• la classe à adapter est un champ <strong>de</strong> la classe qui adapteF. Mallet - Miage M1 9


Adaptation d’objet• Par composition<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>Implémentation• faire correspondre les appels <strong>de</strong> métho<strong>de</strong>• la classe à adapter est un champ <strong>de</strong> la classe qui adapteF. Mallet - Miage M1 10


<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong>ExempleAdapté Toolkit.getDefaultToolkit().beep() àune action <strong>de</strong> la souris, un clic <strong>de</strong> bouton, unefin <strong>de</strong> Timer, …class MouseBeeper extends MouseAdapter {public void mouseClicked(MouseEvent e) {Toolkit.getDefaultToolkit().beep();}}class ActionBeeper implements ActionListener {public void actionPerformed(ActionEvent e) {Toolkit.getDefaultToolkit().beep();}}class TimerBeeper implements TimerListener {public void timerTriggered(TimerEvent i t e) {Toolkit.getDefaultToolkit().beep();}}F. Mallet - Miage M1 11


<strong>Patrons</strong> <strong>de</strong> création : <strong>Adaptateur</strong> Pour la classe <strong>de</strong> l’objet qui adapteConséquences• Pas possible d’adapter une classe et ses sous-classes• Mais redéfinition possible du comportement (sous-classe) Pour l’objet qui adapte• Un <strong>Adaptateur</strong> peut travailler avec plusieurs Adaptées• Plus difficile <strong>de</strong> redéfinir le comportement d’Adaptée (sousclasserpuis obliger <strong>Adaptateur</strong> à référencer la sous-classe)F. Mallet - Miage M1 12

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!