Representation mémoire d'un graphique

cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004 - 20 oct. 2004 à 08:54
cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 - 11 nov. 2004 à 18:13
Hello à tous les progs,

J'ai un espace graphique ou sera dessiner des rectangles avec des labels (une arborescence de rectangle comme un arbre mais avec qq variantes), j'aurais envie par la suite de tout sauvegarder dans un fichier.
donc j'ai une logique entre 3 blocs:

graphisme <-> traitement <-> system de fichier

J'aimerais savoir comment représenter en "mémoire de traitement" mon graphisme. Mon panneau graphique sera composer en nombreuse case (TheCase) pour le positionnement des rectangles.
Il faut stocker mon schéma dans des variables? ou il existe une méthode pour ceci?? Comment faire cette représentation en mémoire avant d'utilisé une méthode pour créer un fichier...

Merci de me filer un coup de pouce!

A+ les prog !!!!

PS: c vraiment sympa d'aider les jeunes qui ont de la peine et débute :-)

40 réponses

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
20 oct. 2004 à 09:51
:big) Neodante :big)

Fais toi une structure bête et méchante de liste chaînée (avec le nombre de noeud fils, père, frère que tu veux ... crée des ArrayList si besoin ..) et puis sérialise le tout (n'oublie pas d'implémenter l'interface Serializable) et le tour est joué ...
Pour recharger ton graphe, désérialise tout simplement. Si tu ne sais pas ce qu'est la sérialisation (binaire ou XML), reporte toi au tutorial de SUN qui traite du sujet ... c'est pas bien compliqué ...
En faisant tes classes Node et en séparant ta classe qui gère les graphismes (affiche ton arbre avec tes rectangles), laquelle utilise ton arbre avec tes noeuds pour représenter l'arbre, tu ajoute une couche de 'virtualisation' à ton programme. C'est à dire qu'il ne faut pas que tu fasse des Noeuds qui contiennent les données brutes et les fonctions pour l'afficher ... comme ça tu as bien graphisme <-> traitement <-> system de fichier !
J'espère que tu as compris si non dit le moi j'essayerais de meiux expliquer ! ;-)
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
20 oct. 2004 à 11:28
Ok merci pour tes conseils, je ne connaissait pas la sérialisation. J'ai lu le tutorial dans JBuilder et cela m'a aidé à comprendre le concept principale! C'est une bonne idée de faire ca. mon fichier de sortie sera XML... je présume que je dois utiliser une sorte de parser pour créer ces .XML. bref ca viendra par la suite..
donc pour une représentation d'un schéma comme ceci (ou X sont les rectangles):

X--X--X--X--X
|
X--X--X--X
|
X--X

j'ai pas bien compris ton histoire de liste chainée... Donc je dis que j'ai 1 père (premier bloc) avec 2 fils(dont un qui a un fils qui lui meme a un fils qui lui meme a un fils = --X--X--X). et dont le second a un fils qui a un frere....etc....
donc il faut que je dise combien j'ai de père, de fils direct, puis de petit fils et ainsi de suite... Simplement a partir de ceci je pourrais sauvegarder mon arborescence?

Peux-tu m'éclaircir encore un peu sur la chose?
Je te remercie beaucoup c'est sympa de ta part!!!

A+ :-)

PS: Donc par la suite je défini une classe Rectangle que j'appelerais autant de fois que nécessaire pour la représentation graphique... une méthode liaison et le tour est joué :-)
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
20 oct. 2004 à 11:44
:big) Neodante :big)

La structuration de données c'est un truc que j'aime bien, c'est ce qui me manque dans mon taf ....
ALors pour ce qui est de la liste chainée, voici un exemple de classe :

public class Tree{
private Node root;
... constructeurs+accesseurs
}

[public] class Node{

private Node parent;
private ArrayList children;
private ArrayList brothers;

... constructeurs+accesseurs

public Bode(){
children = new ArrayList();
brothers = new ArrayList();
...
}

public Node getParent(){
....
}

...

}

et si vraiment tu ne veux pas tout refaire utilise la classe LinkedList (regarde la javadoc), et tu peux évidemment utiliser la classe LinkedList à l'intérieur d'un noeud d'une autre LinkedList, ce qui te donne un diagramme comme le tiens et en plus tu n'as besoin de tout refaire et ce sera surement mieux fait que s'il fallait tout recoder ... ou tu peux encore faire une classe qui hérite de LinkedList(je crois qu'elle est dérivale !)) et lui ajouter des fonctions ...

Pour ce qui est de la sérialization en XML :

XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Test.xml")));
e.writeObject(new JButton("Hello, world"));
e.close();

Encode en XML un objet JButton dans le fichier Test.xml ... on ne pouvais pas faire plus cours !!!

XMLDecoder d = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("Test.xml")));
Object result = d.readObject();
d.close();

Pour faire l'inverse ...
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
20 oct. 2004 à 12:51
OK je vais essayer d'implémenter ceci. je te remercie pour ton aide.. les personnes d'expériences rendent service :-)
J'ai fait un bond en avant grace à toi merci! je vais arreter de tourner en rond... hihi

J'ai juste un "bug" de comprehension quand tu dis: ""tu peux évidemment utiliser la classe LinkedList à l'intérieur d'un noeud d'une autre LinkedList""

donc pour représenter ceci par exemple:

X--X--X--X <- une linkedList
|
X--X--X <- une linkerList

ce que je dois faire c'est d'insérer une linkerList entre les deux blocs de la premiere linkedList, c'est bien ceci? et la deuxième linkedlist contiendra les 3 blocs en questions.
Ma facon de penser est correcte??

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
20 oct. 2004 à 12:55
zut il est moche mon schéma... il s'affiche pas comme je veux... je te le fais dans l'autre sens..

X
|---
X X
| |
X X
| |
X X

voilà.. il y a un bloc... ensuite une liaison qui se divise en deux pour partir vers deux séries de 3 blocs... voila le genre de schéma que je dois representer (désolé avant j'avais pas revu les post poster...) vive la mise en page
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
20 oct. 2004 à 12:58
un exemple de schéma que je devrais sauvegarder....

X
|--
X X
| |--
X X X
| | |
X X X

etc... j'espère que j'ai été clair dans mes "schéma"...
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
20 oct. 2004 à 13:40
:big) Neodante :big)

C'est exactement ça !!! A l'exception prêt que les raccords se font sur les noeuds même et pas sur le chaine (lien) entre les deux noeuds :
X
|
X-X---X-X
| | | |
X X-X X X
| | |
X X X

par exemple ...

Ensuite tu fais :

XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Test.xml")));
e.writeObject(maLinkedListRacine);
e.close();

et vu que la sérialisation conserve les références et tout ... lorsque tu désérialisera ton fichier .. tout se remmettra comme à l'origine ... regarde simplement le fichier de sortie XML pour comprendre que tout est gardé dedans ...
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
21 oct. 2004 à 08:56
Salut, je suis en train de lire un ouvrage sur les arbres binaires... C'est un peu le même principe? Un LinkedList serait-il plus adéquate??
J'ai pas encore l'expérience pour sentir ce genre de trucs désolé...

J'ai encore un souci de compréhension... la LinkedList est en fait une liste ou un tableau à 1D.. Donc je vois pas comment représenter une arborescence.. C'est là que je bloc... je comprends bien qu'on peut facilement représenter une liste de non par exemple... Ou une liste de blocs différents.. mais comment on s'y prend pour une arborescence (qui sera créer au fur et à mesure sur un espace graphique... ) . Dès le môment ou il faut partir depuis une liaison sur deux blocs je vois pas comment faire pour utiliser la LinkedList...
Ca doit surement etre intuitif pour toi... mais pas pour moi.. navré....

A+
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
21 oct. 2004 à 09:46
:big) Neodante :big)

Une liste chainée est un arbre (moi je l'appellerais une liste c'est tout !) de largeur 1. EN fait le principe de la liste chainée c'est d'avoir un tableau de longueur variable et qui peut-être parcouru (attention juste parcouru (début->fin) pas pour faire une recherche ...) simplement ...
Une liste chainée c'est géniale pour plus de chose mais je pense que ton ouvrage est préférable à mes explications.

Pour le cas présent, le but de mettre des LinkedList dans d'autres LinkedList est effectivement de faire un arbre, mais celui-ci est réalisé beaucoup plus simplement et surtout sera de meilleure qualité que si on refaisait tout nous même ... la seule chose à faire c'est surement de créer une classe Tree et de mettre quelques méthodes de recherche pour aller dans les noeuds des ListeChainées de cet arbre ...

Quand quelque chose existe déjàà et à fait ses preuves cela ne sert à rien de vouloir tout refaire sauf si c'est vraiment spécifique ou diffréent ... c'est le même principe avec la STL de C++ ... ça sert à rien de réinventer la roue ... ça existe, ça marche, on ne perd pas de temps à coder et à débugguer et en plus c'est standard ... la classe quoi ! ;-)

Voilà ...

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
21 oct. 2004 à 12:01
Ok merci! C'est clair que je veux utiliser à la base qqch qui existe déjà et effectuer des modifications car réinventer la roue c'est une perte de temps...
Donc si j'ai bien compris une représentation mémoire de ceci

x1-----x2-----x3

serait x=[x1, x2, x3]

et

x1
|----
x2 x5
| |
x3 x6
| |----
x4 x7 x8

donnerait en mémoire qqch du genre:

x=[x1,[x2, x3, x4].[x5,x6, [x7],[x8]]]

on *encapsule* des LinkedList.

Si c'est bien ca je crois que j'ai compris! Puis pour le sauver en XML par exemple je vais utiliser cette méthode:

XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("SchemaX.xml")));
e.writeObject(x);
e.close();

Je tiens a te remercier pour ton aide! c'est super sympa! :-)
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
21 oct. 2004 à 12:44
:big) Neodante :big)

lu,
C'est ça ...
De rien on est là pour ça ... ;-)
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
21 oct. 2004 à 15:00
Merci merci :-)
Là je code, il y a une différence que je n'arrive pas a serner...
la différence entre LinkedList et Arraylist... J'ai lu des trucs mais c pas très explicite.. ca raconte la meme chose...
Pourquoi utiliser plus l'un que l'autre? ou les deux?

LinkedList: regroupent des objets qui sont rangés dynamiquement, se présentent sous la forme de listes d'éléments totalement indépendants les uns des autres.

Arraylist: Cette classe implémente un tableau d'objets de taille dynamique.

Pour moi c'est dans les deux cas un tableau a 1D dont la taille est dynamique..... Comme tu m'as dit je vais inserer des LinkedList dans d'autre linkedlist...

Tu peux un peu m'éclairsir les idées la-dessus.... :-)

A+ et re re re re Merci :-)

PS:Tu fais quoi comme job?
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
21 oct. 2004 à 18:25
J'ai bien réfléchi et comme j'ai des liaisons entre les blocs c'est plus simple d'utiliser une structure en arbre (genre arbre n-aire) avec
MonNoeud:
-Référence vers le bloc courant
-Reference vers le noeud fils gauche
-Reference vers le noeud fils gauche

J'en ai discuter avec mon collégue de boulot et il me semble que ceci est plus approprié car les liaisons se font bien entre les blocs. Bref faut que je réfléchisse la-dessus car c'est nouveau pour moi... :-) On apprend plein de truc quand on prog!
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
22 oct. 2004 à 00:02
:big) Neodante :big)

La linkedList présente quelques défaut par rapport à l'ArrayList puisque pour parcourir ta LinkedList tu n'as que le suivant .... tu me diras avec les linkedList et un iterator c'est pareil ... m'enfin je te dirais aussi que par rapport à l'ArrayList, la LinkedList est plus rapide sur certains points, m'enfin c'est pas de la grosse optimisation surtout qu'à mon avis ce n'est pas ton problème ... sinon il exsite la DoubleLinkedList ou un truc dans ce genre qui fera pareille que le noeud de ton arbre ...
Mais bon si tu veux refaire les classes de ton arbre pourquoi ça entraîne ... ;-)
En revanche tu auras surement des interfaces à implémenter si tu veux copier les fonctionnalités bien pratique voir indispensable des Collection .... je te laisse regarder la javadoc de LinkedList ou ArrayList ... y a pas mal d'interface implémentée ... le but de prendre quelque chose de déjà fait et qui se rapproche pas mal de ce que tu cherches bien que je ne sais pas trop comment tu veux parcourir ton arbre ... ou effectuer des recherches ... c'est que tu gagnes beaucoup de temps et de débugage ...
Maintenant essaye c'est le premier conseil que je pourrais te donner ...
@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
22 oct. 2004 à 10:45
Salut! Merci pour tes conseils!! J'ai appris pleins de trucs depuis hier :-)
Voilà j'ai utilise la sérialisation et la désérialisation et ca marche bien. Mais ce qui me comblerait c'est que la sauvegarde se face en language XML, avec en sortie un fichier XML syntaxicalement correcte.. j'ai entendu parler de DOM et SAM, en faisant des recherches je dois trouver qqch, non?

@+
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
22 oct. 2004 à 11:19
:big) Neodante :big)

Hein, le fichier du XMLEncoder n'est pas syntaxicalement correcte ???? C'est du XML il est forcément bien formé !!!! Tu utilises bien le XMLEncoder/XMLDecoder ???? Où alors tu veux ton propre format ... je te conseille de laisser tel qu'elle ce sera surement beaucoup mieux fait et surtout dés que tu voudras changer ta structure ou l'une de tes classes, tu seras obligé de tout refaire !!!!

Si tu veux faire du SAX et du DOM il y a encore un autre apprentissage et celui-ci nécessite du temps avant de bien être assimilé parce qu'il y a pas mal de truc ... regarde dans le SUN J2EE tutorial, y a 300 pages consacré à ces 2 APIs ! Meilleur tu sur le net ...

@+

[Responsable www.neogamedev.com]
0
cs_damien781 Messages postés 79 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 13 décembre 2004
22 oct. 2004 à 12:24
OK je refais des test alors... mais j'ai tout qui plante ca me gonfle de pas avancer....

dans la doc java sun, XML Encodeur se trouve là java.beans.XMLEncoder, donc je fais un importe... mais tout plante... il y a une astuce ou d'autre package a importer?

import java.beans.XMLEncoder:

A+

PS: j'aime etre débutant...
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
22 oct. 2004 à 13:29
:big) Neodante :big)

XMLEncoder est bien dans java.beans...

C'est quoi ton message d'erreur ???

Sinon voici la doc :
http://java.sun.com/products/jfc/tsc/articles/persistence4/
et pour la javadoc :
http://java.sun.com/j2se/1.4.2/docs/api/java/beans/XMLEncoder.html
@+

[Responsable www.neogamedev.com]
0
cs_AbriBus Messages postés 492 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 25 avril 2007 5
24 oct. 2004 à 08:21
Je vien de tout lire... je 'débute' en Java (tout du moins comparé a ca)... tres interressant mais j'ai un peu mal a la tete...

Merci pour toutes ces précieuses informations que sans le savoir je cherchais moi meme... tres utile.

On vous a déjà dit que vous étiez un peu des cinglés ? [:-D]
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
24 oct. 2004 à 15:40
:big) Neodante :big)

On discute plus d'algo que de prog réellement, en plus c'est le BABA des structures de données ... ;-)
Si tu veux vraiment t'améliorer dans ce domaine, je te conseile de t'acheter un petit bouquin d'ago .. tu verras tu risque de te surprendre !!!
@+

[Responsable www.neogamedev.com]
0
Rejoignez-nous