C'est ce que j'essaie de faire depuis le début.
Mais seul et sans prof, c'est pas si facile que ça :no:
Version imprimable
C'est ce que j'essaie de faire depuis le début.
Mais seul et sans prof, c'est pas si facile que ça :no:
Cadeau: http://bruce-eckel.developpez.com/li...aduction/tij2/
(c'est une version un poil ancienne, par exemple pas de référence aux generics et autres bestioles de ce genre, mais elle suffit plus que largement pour s'initier à la POO en java)
Reprenons le type de base List<Layer> (car comme Sinok te l'a dis utiliser une liste t'evite de devoir gerer manuellement certaines choses comme ce qu'il faut faire lorsque tu retires un elements d'un tableau ou que tu rajoutes qq chose et que ton tableau est trop petit).
Il existe de base au moins 2 implementations de List (j'oublie Vector volontairement) : ArrayLis et LinkedList.
- ArrayList, c'est un tableau encapsule dans une liste, cad que c'est la liste et pas toi qui gere le probleme des trous (calque enleve) ou le redimensionnement (changement de capacite). Comme tous les elements sont dans un tableau, un acces a un element d'indice i est tres rapide, en cas de parcours dans une boucle on peut donc se permettre d'acceder au ieme element sans probleme. Par contre en cas d'ajouts ou de suppression important(e) d'elements, il se peut que le tableau soit realloue a une nouvelle capacite (la capacite de la liste ce n'est pas la meme chose que la taille de la liste) et qu'il y ait une recopie des elements depuis l'ancien conteneur vers le nouveau (donc ca c'est lent).
- LinkedList, c'est une liste chainee constitue de cellules independantes reliees entre elles par des references. Ici l'ajout suppression d'elements est rapide puisqu'il n'y a pas d'allocation de nouveau tableau en cas de changement de capacite (en fait il n'y a pas de capacite du tout). L'acces a des element d'indice i sont par contre plus lent car il faut parcourir la liste et sauter de reference en references. Donc, en cas de parcours, on privilegiera un parcours via un iterateur, plutot qu'un parcours qui accede a un element d'indice particulier.
Donc ces deux variantes de la liste sont a utiliser dans des cas precis quand on sait que l'on peut gagner en optimisation, par exemple :
- on utilisera LinkedList lorsqu'on ne connait pas a l'avance le nombre d'elements a inserer dans la liste mais qu'on est sur d'avoir beaucoup d'insertions : par exemple lors du chargement de fichier de definition.
- une fois le chargement effectue, on recopira le contenu dans une ArrayList, ce qui permet d'assurer un acces rapide. Meme si l'utilisateur peut ajouter / supprimer des calques via la GUI en general ca reste des operation effectuees en petites quantites donc il n'est pas critique d'essayer d'optimiser (trop) les changements de capacite de la liste.
Dans les deux cas, de toute maniere, on utilisera l'interface List, les methodes qu'elles contient sont suffisantes dans la plupart des cas.
En cherchant ce matin en lisant un peu des designs et patterns, je me suis rendu compte qu'il existais bien des choses ressemblant à ceci.
Donc, je me dis qu'ensuite c'est une histoire de propriété à utilisé.Citation:
Classe mère titre = new Classe enfante();
En poursuivant mes investigations, j'ai commencé à regroupé les différentes fonctions nécessaire au composants. Je vais donc pouvoir lancé un UML rapidement :ccool:
Je vous montrerais ce qu'il en est et je retoucherais ce qu'il y aura à retoucher.
J'ai fais un choix drastique de mettre tout ce qui concerne ma classe composant, commandes manuelles, point dans le même package. Ainsi chaque fonctions sont faites pour le package et le tout est complet.
Je reviens un peu par ici afin d'exposé mon uml.
Donc en me penchant un peu sur qui devais faire quoi, en simplifiant à l'extrême (j'ai volontairement pas tout représenté, car il y a des points soumis à discussions), j'ai établi ce diagramme.
http://img198.imageshack.us/img198/4...edeclasses.png
On aperçois deux interfaces. La première gère les couches de calque, la seconde les affiche et inter-agit avec l'utilisateur au travers de menu flottant. (on y reviendra car il faut aussi que je l'implémente).
J'espère être sur la bonne voie pour réalisez mon composant qui sera dans un package de façon à pouvoir le réutiliser dans d'autres logiciels.