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 :
et elle ne peut contenir que des entiers compris entre 0 et 255 (image en niveau de gris).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class Matrice { private int [][] mtx; private int nbLigne; private int nbCol; [...] }
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 :
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;} }
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
Partager