Extends un tableau basique, c'est impossible ?

Extends un tableau basique, c'est impossible ? - Java - Programmation

Marsh Posté le 19-05-2004 à 11:16:49    

Comme on pourrait faire class Truc extends ArrayList ou Vector, est-il possible de faire class Truc extends Color[] (par exemple) ?
 
Je voudrais extends un tableau en fait mais les [] gène le compilateur. La "classe" des tableaux de base a t'elle un nom ?
 
 
J'ai fait quelques recherches mais je ne trouve pas on dirait qu'on ne peut pas faire ce que je souhaite...
 
 
Pourquoi je ne veux pas utiliser de ArrayList à la place ? Ben pour des questions de performances et de casse-couillage (colors[i][j] est quand meme mieux que (Color)(((ArrayList)rows.get(i)).get(j))

Reply

Marsh Posté le 19-05-2004 à 11:16:49   

Reply

Marsh Posté le 19-05-2004 à 11:20:39    

Bin c'est le contenu de ton tableau que tu dois étendre, pas le tableau lui meme. Un tableau c'est un tableau hein!
 
Tu fais juste class Truc extends Color puis tu fais un tableau de Truc.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-05-2004 à 11:27:30    

Faut faire gaffe, y'a des classes du JDK qu'on peut pas étendre. Ex: String

Reply

Marsh Posté le 19-05-2004 à 11:28:44    

Ce que je souhaite c'est bien étendre le tableau et pas son contenu. Mais l'utilité de faire une telle chose est tout de meme discutable.

Reply

Marsh Posté le 19-05-2004 à 11:28:55    

- Un tableau, ce n'est pas un objet à proprement parler, donc, non, tu ne peux pas "étendre" un tableau.
- les classes du JDK qu'on ne peut pas étendre sont les classes final.

Reply

Marsh Posté le 19-05-2004 à 11:30:21    

Tu veux étendre le tableau, mais pkoi faire???
 
A la limite, tu crées une classe, qui utilise des arraylist, ou ce que tu veux, et tu y ajoutes une méthode  
 

Code :
  1. Color get(int i, int j)

, ce qui te permet de n'écrire qu'une fois le fameux (Color)(((ArrayList)rows.get(i)).get(j))

Reply

Marsh Posté le 19-05-2004 à 11:34:28    

souliane a écrit :

Ce que je souhaite c'est bien étendre le tableau et pas son contenu. Mais l'utilité de faire une telle chose est tout de meme discutable.


 
quelle fonctionnalité tu veux en plus?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-05-2004 à 11:43:09    

mais tu veux faire quoi exactement? quel intéret d'étendre le tableau??? :heink:

Reply

Marsh Posté le 19-05-2004 à 11:59:31    

darklord a écrit :

quelle fonctionnalité tu veux en plus?


length, stro chiant à recoder :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 19-05-2004 à 12:04:31    

Taiche a écrit :

length, stro chiant à recoder :o

Code :
  1. public int length;

C'est pas si dur en fait :D

Reply

Marsh Posté le 19-05-2004 à 12:04:31   

Reply

Marsh Posté le 19-05-2004 à 12:27:25    

Ben en fait je fais un jeu de briques et j'aurai voulu avoir une classe Rows extends ArrayList et je rajoute dedans des instances de Column extends Color[]. Je ne sais pas si ca aurait vraiment été un plus mais j'aurais trouvé ca sympa.

Reply

Marsh Posté le 19-05-2004 à 12:30:36    

Mais pourquoi, bordel ? :cry: Faire un extends pour faire un extends, ça veut rien dire et ça sert à rien [:spamafote]
"Tiens, aujourd'hui j'vais faire un extends de LinkedHashSet, pour le fun. Demain ça sera un extends de ColorChooserComponentFactory" [:kiki]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 19-05-2004 à 13:00:44    

souliane a écrit :

Ben en fait je fais un jeu de briques et j'aurai voulu avoir une classe Rows extends ArrayList et je rajoute dedans des instances de Column extends Color[]. Je ne sais pas si ca aurait vraiment été un plus mais j'aurais trouvé ca sympa.


 
Ca n'a rien à voir.
Le 'extends' porte bien son nom, ça permet d'étendre les possibilités de la classe mère. Mais là il n'y a rien de commun entre tes classes mères et les classes dérivées !
 
Il vaut mieux créer une classe Row qui peut contenir un tableau de colonnes Column[]. Et tu mets tes Row dans un ArrayList

Reply

Marsh Posté le 19-05-2004 à 13:06:32    

J'aurai voulu rajouter des methodes du genre "est ce que le tableau est rempli (aucun element n'est nul)" ou bien "afficher en utilisant un Graphics passé en argument". Moi je trouve que ca aurait mieux séparé mes objets plutot que de mettre dans la meme classe les methodes qui travaille sur une ligne et sur la grille (plusieurs lignes).

Reply

Marsh Posté le 19-05-2004 à 13:07:29    

Ba extends ArrayList, alors [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 19-05-2004 à 13:12:41    

Tiens en parlant de ColorChooser, c'est facile de changer son aspect, de le rendre plus light et moins encombrant ?
 
Par facile j'entend des models deja fait qu'il suffit de passer en parametres, à l'inverse d'un truc ou il faudrait tout tout redéfinir (je parle pas des méthodes mais des attributs).

Reply

Marsh Posté le 19-05-2004 à 13:47:26    

souliane a écrit :

Tiens en parlant de ColorChooser, c'est facile de changer son aspect, de le rendre plus light et moins encombrant ?
 
Par facile j'entend des models deja fait qu'il suffit de passer en parametres, à l'inverse d'un truc ou il faudrait tout tout redéfinir (je parle pas des méthodes mais des attributs).


 
Tu peux spécifier les panneaux dont tu n'a pas besoin ou en ajouter d'autre de ta création.
http://java.sun.com/docs/books/tut [...] eviewpanel

Reply

Marsh Posté le 19-05-2004 à 13:47:57    

Taiche a écrit :

Ba extends ArrayList, alors [:spamafote]


 
extends AbstractList  :jap:

Reply

Marsh Posté le 19-05-2004 à 13:49:44    

souliane a écrit :

"est ce que le tableau est rempli (aucun element n'est nul)"


 
Ca, ok, ça peut se justifier.
 
[citation]
 "afficher en utilisant un Graphics passé en argument".
[/citation]
 
Ca, par contre, c'est pas top : la classe qui gère les données (tes couleurs, si j'ai tout bien compris) ne devrait pas être celle qui dessine!! Pour faire n truc plus propre, et plus évolutif, il te faudrait une interface Renderer, qui a des méthodes permettant de dessiner une cellule que la classe de gestion lui passe : comme ça, si tu veux changer de manière de dessiner (genre, changer le design des briques d'un niveau à l'autre), ben tu écris une nouvelle implémentation de renderer, mais tu n'a pas à toucher à ta classe de gestion.
 
MVC powah, quoi! :)

Reply

Marsh Posté le 19-05-2004 à 15:20:02    

Mais c'est quoi les relations entre les classes alors ?
Je saisis pas qui implemente quoi.

Reply

Marsh Posté le 19-05-2004 à 15:29:07    

euuuh...alors...
 
- la classe TonRenderer implémente l'interface Renderer, qui définit la méthode dessineBrique(TonObjetQuiRepresenteUnBrique, Graphics g);
 
- la classe qui gère les données, donc, celle qui hérite de ArrayList, là, implémente (tant qu'à faire les choses, autant les faire bien) l'interface TonModele, qui définit des méthode permettant de récupérer les instances de TonObjetQuiRepresenteUnBrique a des coordonnées donnée, ou qui permet d'ajouter ou d'enlever une ou plusieurs briques, etc..
 
- Pour dessiner, ta classe d'interface graphique a un renderer, et un modèle : elle demande au renderer de dessiner la liste de briques fournies par le modèle, en lui donnant son Graphics.
 
Ca te permet de changer l'un ou l'autre des éléments sans toucher aux autres! Et donc, de facilement changer le design des briques, par exemple, ou de changer le type d'interface graphique, pour remplacer le Swing par de l'AWT ou du SWT ou n'importe quoi d'autre.
 
Regarde comment sont fait les trucs du même style dans l'API swing : JTable est un bon exemple.

Reply

Marsh Posté le 19-05-2004 à 16:10:15    

souliane a écrit :

Ben en fait je fais un jeu de briques et j'aurai voulu avoir une classe Rows extends ArrayList et je rajoute dedans des instances de Column extends Color[]. Je ne sais pas si ca aurait vraiment été un plus mais j'aurais trouvé ca sympa.


ben tu fais ca alors:

Code :
  1. public class Column {
  2.     private Color[] colors = null;
  3. }


et

Code :
  1. public class Row {
  2.     private List columns = null;
  3.    
  4.     public Row() {
  5.         columns = new ArrayList();
  6.     }
  7.     public void addRow(Column column) {
  8.         columns.add(column);
  9.     }
  10. }

Reply

Marsh Posté le 19-05-2004 à 16:31:09    

gfive a écrit :

euuuh...alors...
 
- la classe TonRenderer implémente l'interface Renderer, qui définit la méthode dessineBrique(TonObjetQuiRepresenteUnBrique, Graphics g);
 
- la classe qui gère les données, donc, celle qui hérite de ArrayList, là, implémente (tant qu'à faire les choses, autant les faire bien) l'interface TonModele, qui définit des méthode permettant de récupérer les instances de TonObjetQuiRepresenteUnBrique a des coordonnées donnée, ou qui permet d'ajouter ou d'enlever une ou plusieurs briques, etc..
 
- Pour dessiner, ta classe d'interface graphique a un renderer, et un modèle : elle demande au renderer de dessiner la liste de briques fournies par le modèle, en lui donnant son Graphics.
 
Ca te permet de changer l'un ou l'autre des éléments sans toucher aux autres! Et donc, de facilement changer le design des briques, par exemple, ou de changer le type d'interface graphique, pour remplacer le Swing par de l'AWT ou du SWT ou n'importe quoi d'autre.
 
Regarde comment sont fait les trucs du même style dans l'API swing : JTable est un bon exemple.


 
pas mieux !!!

Reply

Marsh Posté le 28-05-2004 à 13:41:57    

ca dépend de tes pointeurs

Reply

Marsh Posté le 28-05-2004 à 16:04:38    

childjuice a écrit :

ca dépend de tes pointeurs


 
pô de pointeur en Java  :non:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed