17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

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.

518<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

D’autres DP peuvent implémenter ce principe mais le gros intérêt de State est que<br />

l’objet s’auto-suffit : il n’est pas nécessaire ici d’implémenter une classe qui orchestre<br />

les transitions, et suivre le code devient nettement plus simple.<br />

Patterns structurels<br />

Les patterns structurels permettent d’organiser plusieurs classes en structures, ou composants.<br />

Les patterns structurels se ressemblent généralement beaucoup car ils mettent<br />

tous en œuvre des agrégations ou des encapsulations, mais ils répondent chacun à des<br />

problèmes précis, et leurs différences se creusent à l’usage, sur le code appelant :<br />

utiliser Adapter permet de recombiner des relations entre classes.<br />

Facade est utile pour masquer un système et limiter son accès.<br />

Proxy quant à lui, est un intermédiaire entre le code et un type d’objet, et diffère<br />

d’Adapter car il permet d’implémenter une couche logique supplémentaire.<br />

Adapter<br />

Le DP Adapter permet d’adapter une classe pour l’utiliser dans un contexte d’exécution<br />

prévu pour d’autres classes. La classe est encapsulée dans une deuxième classe<br />

(l’Adapter) qui se charge de fournir au contexte les interfaces attendues et de traduire<br />

en interne les appels pour qu’ils soient compréhensibles par la classe adaptée.<br />

Les Adapters sont de véritables liants pour la mise en place d’interactions entre composants<br />

qui n’ont pas été prévus pour fonctionner ensemble au départ. Ils peuvent<br />

aussi permettre de gérer les problématiques de versions lorsque l’interface d’un composant<br />

externe évolue. On parle alors de découplage, le code spécifique au contexte<br />

étant restreint dans la classe d’adaptation.<br />

Il n’existe pas d’implémentation générique pour ce pattern. Le seul principe commun<br />

entre les Adapters est la façon dont ils sont créés : l’objet adapté est un paramètre du<br />

constructeur de l’Adapter.<br />

La classe StringIO est un bon exemple d’Adapter : elle simule le fonctionnement<br />

d’un objet de type file en fournissant toutes les méthodes de lecture, et travaille en<br />

interne avec un objet de type string.<br />

Adapter StringIO<br />

>>> import cStringIO<br />

>>> file = cStringIO.StringIO('contenu du fichier')<br />

>>> file.readlines()<br />

['contenu du fichier']<br />

>>> file.seek(0)

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

Saved successfully!

Ooh no, something went wrong!