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.

file.read()<br />

'contenu du fichier'<br />

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

<strong>Programmation</strong> orientée objet<br />

CHAPITRE 14<br />

StringIO peut donc être utilisé en lieu et place de tout type fichier, lorsqu’un flux de<br />

lecture est attendu : le code appelant ne fait pas la différence.<br />

Ce pattern est bien sûr sensible à tous les tests effectués sur le type de classe d’un<br />

objet lorsque ce dernier traverse le code adapté, comme un test isinstance(objet,<br />

classe), mais ce problème est restreint à son utilisation sur du code non maîtrisé et il<br />

reste possible de tricher en modifiant l’attribut __class__.<br />

Un autre exemple d’utilisation d’Adapter est l’implémentation du modèle document-vue.<br />

En quelques mots, ce modèle stipule qu’une classe qui implémente une<br />

certaine fonctionnalité ne doit pas, si elle est utilisée dans une interface de visualisation,<br />

être étendue pour fournir les méthodes qui permettent de l’afficher.<br />

En d’autres termes, l’affichage est spécifique à un type d’interface et cette logique<br />

doit être découplée de la classe car elle n’évolue pas de la même manière.<br />

Adapter, exemple 2<br />

class MaClasse(object):<br />

def __init__(self):<br />

self.a = 2<br />

self.b = 4<br />

def calcul(self):<br />

return self.a + self.b<br />

class InterfaceMaClasse(object):<br />

def __init__(self, contexte):<br />

self.contexte = contexte<br />

def afficheCalcul(self):<br />

resultat = self.contexte.calcul()<br />

print resultat<br />

def saisieValeurs(self):<br />

a = int(raw_input('saisissez a: '))<br />

b = int(raw_input('saisissez b: '))<br />

if __name__ == '__main__':<br />

A = MaClasse()<br />

interface = InterfaceMaClasse(A)<br />

interface.saisieValeurs()<br />

519

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

Saved successfully!

Ooh no, something went wrong!