Ahhh de la doc en français pour néophyte ! Bravo pour ces explications
qui m'éclairent beaucoup ! OK pour le concept de conteneur. La question est alors : faut-il (au sens obligation, bonne pratique) prévoir pour chaque Content un Container ? Est-ce qu'une interface doit toujours être reprise par un container ? En fait, c'est cela qui me chiffone : certains exemples d'appli l'utilisent, d'autres non. En particulier, je n'ai pas de (ICOntainer) dans le WorldCookery de Philip W., alors qu'il y en a un dans le BookMarker sus sité... Encore merci pour ces explications longues et claires... JMarc Thierry Florac a écrit : Le vendredi 11 septembre 2009, jnmrclg...@free.fr a écrit : ======================================================================Bonjour à toute la liste.Suite à vos réponses et quelques lectures supplémentaires sur les arborescences de projets Zope 3, je me suis décidé à faire un 1er projet à partir de la feuille blanche, histoire de bien comprendre ce qui se passe. J'en suis aujourd'hui à étudier de près l'exemple BookMarker décrit dans " Zope 3 in 30 Minutes ", et j'ai une petite question sur les conteneurs. 1. utilisation des containers : quel intérêt y a-t-il à utiliser l'interface IBookMarker(IContainer)? Pour des applis très basiques genre Hello World, on se contente d'une simple IHelloWorld, et ça fonctionne. J'ai cru comprendre que les conteneurs permettent de classer des objets comme dans des dossiers, et une réponse serait : le conteneur contient des objets fabriqués à partir d'autres objets "providant" d'autres interfaces. Ce qui permet en particulier de classer des objects suivant certains critères (contraintes), comme le font l'interfaces class IMarkContained(IContained). 2. utilisation des conteneurs (suite) : j'étudie cet exemple pour créer une petite appli d'impression automatique d'étiquettes pour livrer des clients. Il s'agit d'enregistrer des clients (nom prénom adresse) et de créer des étiquettes sous forme de pdf qui s'imprimeront automatiquement. L'interface IClient est simple, mais l'interface IEtiquette me pose pb, puisque justement, elle fait appel aux objets client... Est-ce que par hasard, IEtiquette ne serait pas justement un conteneur ? Auquel cas j'aurai pigé le concept. Merci d'avance de m'aider dans mes premiers pas de fourmi. J'aime comprendre ce que je fais... et il paraît que "felix, qui potuit rerum cognoscere causas" (la phrase complète signifiant : «Heureux celui qui a pu pénétrer les cause secrètes des choses, et qui, foulant aux pieds toute crainte, méprise l'inexorable destin et les menaces de l'avance Achéron !»)... tout un programme !====================================================================== Bonjour, L'interface IContainer permet, comme son nom l'indique, de définir une interface pour des objets devant en contenir d'autres, donc une composition au sens UML du terme ; typiquement, un dossier dans une arborescence implémente l'interface IContainer. Certaines propriétés de cette interface permettent de spécifier les interfaces que les objets contenus doivent fournir, via des contraintes. Une interface IContainer étant elle-même la consolidation de deux interfaces (IReadContainer et IWriteContainer), il est possible de définir précisément les permissions nécessaires aux opérations de lecture et d'écriture pour chacune de ces deux interfaces. Le fait que certains conteneurs soient capables de définir et de maintenir un ordre pour les objets contenus repose sur une extension de cette interface et à des implémentations spécifiques (IOrderedContainer et OrderedContainer par exemple). Dans le cas de l'exemple avec des étiquettes et des clients, j'imagine qu'une étiquette est associée à un client ; ce n'est donc pas a priori une composition mais simplement une association. Si l'on considère qu'une étiquette "pointe" vers un client mais que la durée de vie des deux objets est indépendante (supprimer un client ne supprime pas ses étiquettes et vice-versa), on pourrait avoir : - un premier conteneur pour les clients - un second conteneur pour les étiquettes - un attribut au niveau de l'interface IEtiquette qui va référencer un client (client = Object(IClient) au niveau du schéma de IEtiquette). Mais ce n'est qu'une option, il faut voir exactement comment le modèle UML est conçu pour choisir la définition des interfaces. J'espère avoir été clair... ;-) A+ Thierry |
_______________________________________________ zope3-french-user mailing list zope3-french-user@lists.afpy.org http://lists.afpy.org/mailman/listinfo/zope3-french-user