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

Répondre à