17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

520<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

[...]<br />

Dans cet exemple, InterfaceMaClasse implémente toute la couche d’interaction<br />

avec l’utilisateur : MaClasse reste indépendante de cette logique d’affichage.<br />

Facade<br />

Le DP Facade peut être considéré comme un Adapter multiple : lorsqu’une opération<br />

met en œuvre un certain nombre de classes, il peut être intéressant de masquer<br />

cette complexité dans une classe qui ne publie que l’opération.<br />

Facade n’a de sens que si la classe qui publie l’opération est correctement nommée et<br />

que les classes sous-jacentes ne sont pas appelées ailleurs dans le programme pour le<br />

même type de besoin. Comme pour Adapter, il n’existe pas de modèle générique<br />

particulier pour Facade.<br />

Dans l’exemple ci-dessous, une archive tar est construite à partir d’un fichier et de<br />

son empreinte MD5. Cette opération nécessite l’utilisation d’un objet de type file,<br />

de la classe md5 du module éponyme et du module tarball.<br />

Facade<br />

interface.afficheCalcul()<br />

[tziade@Tarek Desktop]$ python adapter2.py<br />

saisissez a: 1<br />

saisissez a: 5<br />

6<br />

class Archiveur(object):<br />

def archive_fichier(self, nom):<br />

# importations locales<br />

import md5<br />

import tarfile<br />

import os<br />

# création de l'archive<br />

nom_archive = '%s.tgz' % nom<br />

archive = tarfile.TarFile(nom_archive, 'w')<br />

archive.add(nom)<br />

# ajout du fichier à l'archive<br />

with open(nom, 'rb') as fichier:<br />

# md5<br />

calculateur = md5.new()

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

Saved successfully!

Ooh no, something went wrong!