Académique Documents
Professionnel Documents
Culture Documents
TP 04
TP 04
Important : Chaque étudiant doit envoyer par email sa propre solution de la série de TP 4 à
son chargé de TP avant le 10 octobre, pour son évaluation. Elle sera comptabilisée dans la note
de module. Les groupes G1 et G2 à l'adresse miec.infodz@gmail.com, les autres groupes à
l'adresse: chaouche007@gmail.com. Notez bien votre nom, prénom et N° de groupe.
a) Créer la classe Enseignant qui hérite de la classe Personne et ayant deux attributs
supplémentaires : nss numéro de sécurité sociale de type long, modules un tableau de
chaines de caractères représentant les modules qu’il enseigne.
b) Ajouter un constructeur dans cette seconde classe appelant celui de la classe mère et
initialisant les champs spécifiques à la classe Enseignant.
c) Créer la classe Etudiant héritant de la classe Personne et ayant comme attributs spécifiques:
matricule de type entier, notes un tableau de type double indiquant les notes de l’étudiant
dans les différents modules qui sont au nombre de 3.
d) Ajouter un constructeur dans la classe Etudiant appelant celui de la classe mère et initialisant
les champs spécifiques à la classe Etudiant.
e) Ajouter dans la classe Etudiant la méthode double claculMoyenne(double[] notes) qui
calcule la moyenne de l’étudiant en supposant que tous les modules ont un coefficient 1.
f) Redéfinissez la méthode afficher() de la classe Personne dans les deux classes Enseignant et
Etudiant afin d’afficher leurs attributs (la nouvelle méthode peut invoquer en partie la
méthode afficher() de classe mère pour afficher les attributs hérités).
g) Créer au niveau de la méthode main() un tableau de 5 éléments de type Personne contenant
deux éléments de type Enseignant et 3 de type Etudiant.
h) Afficher pour chaque élément du tableau les informations le concernant.
On désire obliger les programmeurs qui conçoivent des classes héritant de la classe Personne à
doter ces classes de certaines méthodes :
// Méthode à implémenter
abstract public void filter(Filter f);
// Méthode fournies
public ImageRoot (String filename) { … }
public int getWidth () { … }
public int getHeight () { … }
public void save (String filename) { … }
}
La classe Image peut être dérivée de la classe ImageRoot. Il reste donc la méthode filter() à
implémenter. Elle doit être générale, c.à.d. elle doit être compatible avec plusieurs types de filtres.
Le principe d’un filtre (le comportement commun) est simple : à partir de 9 valeurs, correspondant aux
niveaux de gris d’un pixel donné et de ses 8 voisins, le filtre va calculer une nouvelle valeur à l’aide
d’une méthode filterPixel() spécifique à lui. La fonction de filtrage filter() de l’image applique cette
méthode à tous les pixels de l’image.
- Filtre « négatif » : la valeur de chaque pixel i est remplacée par 255 – i. Les valeurs des
voisins sont ignorées.
- Filtre linéaire : la valeur de chaque pixel i est remplacée par une somme pondérée impliquant
sa valeur d’origine et les valeurs I des voisins. Les poids w de cette combinaison linéaire sont
les paramètres de ce filtre à fournir au constructeur lors de sa création. L’opération est
complétée par la multiplication par un facteur f et par l’addition d’une constante a :
float [] c = {-1,0,1,-1,0,1,-1,0,1};
// Paramètres :
// 1) tableau de coefficients ;
// 2) facteur ;
// 3) constante additive
f = new LinearFilter(c,(float)(1.0/6.0),127.5);
Le poids le plus important est donc associé au pixel à traiter, les poids des voisins étant moins élevés.
Le point commun de tous les filtres du système est la fonction filterPixel() dont la signature est la
suivante :
public int filterPixel(int v0, int v1, int v2, int v3, int v4, int
v5, int v6, int v7, int v8);
Les valeurs de v0 à v8 correspondent aux niveaux de gris du pixel à filtrer (v4) et ses voisins (v0 à v3
et v5 à v8). Chaque filtre doit définir sa propre version de filterPixel().
Plan de travail :
1. Créer une hiérarchie de classe de filtres en précisant quel filtre hérite de quel autre filtre.
Quelle classe se trouve à la racine de la hiérarchie ? Veuillez spécifier la visibilité des
différents attributs.
2. Implémenter un type de filtre.
3. Implémenter la méthode filter() de la classe Image. Elle va parcourir tous les pixels de
l’image et pour chaque pixel elle appellera la méthode filterPixel() du filtre f donné en
argument. Deux remarques :
a) Lors du calcul du résultat pour un pixel donné, les valeurs des voisins doivent
correspondre aux valeurs avant le traitement. Pour cette raison, les résultats du calcul sont
temporairement stockés dans un deuxième tableau. A la fin du traitement, l’image est
mise à jour à partir de ce deuxième tableau.
b) Les pixels aux bords de l’image ne disposent pas de voisins. Pour ces pixels, les résultats
seront égaux aux entrées (aucun traitement pour ces pixels).
4. Implémenter les autres filtres (non traités dans la question 2).
1. Créer une nouvelle classe FindMinMain comprenant une nouvelle fonction principale main()
(en static). Dans cette fonction, créer un tableau de type Image de taille 4, et charger les 4
images fournies («Scanner_thoracique_COVID19.png», « Pneumonie.png »,
«Cameraman128.png », et « Baboongray.png »).
2. Prendre la fonction FindMin() donnée comme ci-dessus et adapter la pour qu’elle puisse
traiter des objets différents. En état, la fonction traite des tableaux de «int» uniquement.
Ajouter la comme méthode static à la classe FindMinMain.