conception classes Matrice
Bonjour,
pour un projet j'ai développé une classe Matrice qui représente les pixels d'une image. Donc les attributs de ma classe étaient :
Code:
1 2 3 4 5 6 7 8 9
|
public class Matrice
{
private int [][] mtx;
private int nbLigne;
private int nbCol;
[...]
} |
et elle ne peut contenir que des entiers compris entre 0 et 255 (image en niveau de gris).
Par la suite, un imprévu nous a donné le besoin d'avoir en plus des matrices de double.
Du coup, j'ai transformé la classe Matrice en MatriceInt, et j'ai créé une classe MatriceDouble contenant les méthodes dont on avait besoin.
Mais certaines méthodes étaient identique ou quasi-identique, je me suis donc dit que créer une classe abstraite Matrice ne serait pas un mal.
Voici la classe Matrice en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| /**
* Projet : LAM
* Paquetage : fr.statlife.LAM
* Fichier : Matrice.java
*
* @author Mathilde Pellerin
* @date 6 juil. 2010
*/
package fr.statlife.LAM;
/**
*
* @author Mathilde Pellerin
*/
public abstract class Matrice
{
protected int nbLigne;
protected int nbCol;
public Matrice(int nbLigne, int nbCol)
{
this.nbLigne = nbLigne;
this.nbCol = nbCol;
}
/**
* equals : indique si un autre objet TabInt est egal a celui-la
* @param obj : Objet avec lequel on fait la comparaison
* @return true si l'objet est le meme que celui passe en argument
*/
public boolean equals(Object obj)
{
boolean egal = true;
//Les objets ne sont pas egaux si :
// -> les deux classes ne sont pas du meme type
if(this.getClass().getName() != obj.getClass().getName())
egal = false;
// -> les deux matrices ne sont pas de meme dimensions
else if((this.getNbCol() != ((Matrice) obj).getNbCol()) || (this.getNbLigne() != ((Matrice) obj).getNbLigne()))
egal = false;
return egal;
}
/////////////////////
// ACCESSEURS //
////////////////////
/**
* getNbLigne : recupere le nombre de lignes de la matrice
* @return nbLigne
*/
public int getNbLigne() {return nbLigne;}
/**
* getNbCol : recupere le nombre de colonnes de la matrice
* @return nbCol
*/
public int getNbCol(){return nbCol;}
} |
Mon problème, c'est que certaines méthodes sont identiques dans les classes MatriceInt et MatriceDouble, mais font appel à l'attribut mtx qui est un int[][] dans une classe et un double[][] dans l'autre. Du coup, je ne peux pas mettre cet attribut dans la classe abstraite...
J'ai bien conscience que mon problème porte sur la conception, mais je n'arrive pas à savoir quelle est la solution la plus propre ?
- tenter d'utiliser la généricité?
- laisser ces classes dans leur état actuel malgré la duplicité du code de certaines méthodes?
- Trouver un moyen pour ne faire qu'une seule classe matrice qui réponde à toutes les contraintes (matrice d'int compris entre 0 et 255 dans un cas et matrice de double dans l'autre)?
Bref, j'ai besoin de conseils avisés pour partir dans la bonne direction et avoir quelque chose de propre et bien conçu au final...
Merci d'avance pour toute l'aide que vous pourrez m'apporter :aie: