Vous êtes sur la page 1sur 7

Université de Carthage - Ecole Nationale d’Ingénieurs de Carthage

Travaux Pratiques en Programmation Java


Niveau : deuxième année ingénieur en Génie Informatique

TP 3 : Concepts Avancés en Java


Objectifs du TP :
Les objectifs de ce TP sont :
 Comment créer et examiner un module dans un projet Apache NetBeans IDE
 Comprendre la hiérarchie des packages et classes avec les modes d’accès
 Maitriser les notions des classes abstraites, interfaces et records
 Introduire la notion des exceptions
 Utiliser des expressions Lambda et références aux méthodes

Pour atteindre ces objectifs, nous allons traiter deux applications lors de ce TP.

I. Travaux en classe

Application 1 : Héritage – classe abstraite - Interface et Exception


NB : Le début de cette application a été demandé comme travail à domicile lors du TP
précédent
On Considère un programme de gestion des personnels employés par une entreprise. On
peut distinguer dans cette entreprise, les différents types de salariés suivants :
 les employés qui sont décrits par une matricule, un nom, un nombre d’heures et
le prix d’une heure.
 les vendeurs sont des employés qui touchent en plus une commission = Ventes *
Pourcentage
 à part les employés et les vendeurs, l’entreprise emploie une 3ème catégorie de
salariés qui sont les directeurs. Ceux-ci sont des salariés qui touchent un salaire
fixe augmenté d’une prime et ils dirigent un certain nombre d’employés.

Définir une application java capable de :


 Saisir toutes les informations associées à un salarié,
 Retourner toutes les informations associées à un salarié,
 Calculer la paye d’un salarié.
 A vous de définir les méthodes nécessaires pour chaque classe tous en appliquant
les principes de la POO (encapsulation, héritage et polymorphisme). Identifier les
différentes classes
Il demandé aussi de Créer la classe TabSalaries qui est définie par un tableau dynamique
en vue de stocker l’ensemble des salariés de l’entreprise. A partir de ce tableau, vous
devez pouvoir :
 ajouter un salarié donné dans le tableau
 retourner le salarié de rang donné dans le tableau
 supprimer un salarié de rang donné du tableau
 afficher les informations concernant tous les salariés
 calculer le total des payes à verser.

A.U : 2023-2024Page 1
Ecrire un programme principal permettant de créer une instance de TabSalaries et de
l’ajouter des salariés de différents types, d’afficher les salariés, de supprimer un salarié
suivi d’un test d’affichage, tester le polymorphisme par affichage des salaires de chaque
salarié, et fin afficher le total des payes à verser.

La structure à créer est la suivante :

Pour débuter nous créerons un « POM project » (ceci permet de diviser en modules)
intitulé « gestionEntrprise » ;

A.U : 2023-2024Page 2
Ouvrir « Modules », que remarquez-vous ?
Ouvrir « pom.xml » et examiner.

Créer un nouveau module intitulé « salaries »

A.U : 2023-2024Page 3
Re-Ouvrir le même fichier « pom.xml » vu précédemment. Que remarquez-vous ?
Examiner aussi le fichier « pom.xml » de « salaries » ainsi que les dépendances
Java :

A.U : 2023-2024Page 4
 Créer les différents packages et classes demandés dans « salaries ». Ne pas mettre
des getters dans la classe Directeur avec des attributs finaux. Tester votre
programme sous Apache NetBeans IDE. La classe « Salaries » est la principale.
 Créer une instance Vendeur et afficher son pourcentage.
 Enlever le mot clé « public » devant le getter du pourcentage de la classe
Vendeur. Quel message d’erreur à détecter sur l’affichage du pourcentage
(dernière manipulation).
directeur
Interface et Record :
 Modifier la classe « Salarie » sous forme d’interface. Quel type d’interface ?
 Pourquoi il vaut mieux mettre Vendeur comme Record. Effectuer la modification.
 Effectuer les modifications sur les autres classes.
 Que remarquez-vous concernant l’affichage des éléments du tableau des
salariés ?

Exception :
 Implémenter la classe ErreurRang : représente l’erreur qui survient lorsqu’on
tente de supprimer un salarié en donnant un rang erroné.
 Mettre en œuvre le mécanisme de gestion de cette erreur dans le programme
principal et tester pour un remove exceptionnel.

Application 2 : Classe anonyme, interface fonctionnelle, référence au méthode et


expression Lambda

Soient le code java suivant :


instanciation de interface et une classe anonyme qui developpe interface modifiable
import java.util.Scanner; Scanner sc = new Scanner(System.in);
public interface Modifiable { System.out.println("Saisir un entier:");
int incrémenter (int val ,int inc); int valeur = sc.nextInt();
int décrémenter (int val,int inc); valeur = ent.incrémenter(valeur, 3);
int raz (int val); } System.out.println("valeur entier:
public class ProjetInitial { "+valeur);
public static void main(String[] args) { valeur = ent.décrémenter(valeur, 5);
Modifiable ent = new Modifiable (){ System.out.println("valeur entier:
@Override "+valeur);
public int incrémenter(int val, int inc) { valeur=ent.raz(valeur);
return val+inc;} System.out.println("valeur entier:
@Override "+valeur);
public int décrémenter(int val, int inc) { }}
return val-inc;}
@Override
public int raz(int val) { val = 0;
return val;} }; import mismatchexception

 Expliquer le code en repérant les définitions des classes anonymes. Exécuter sous
Apache NetBeans IDE.
 Tester si insérez une chaine de caractères ou un nombre réel.
 Effectuer une modification en vue de générer InputMismatchException.

A.U : 2023-2024Page 5
 Remplacer l’interface Modifiable par des interfaces fonctionnelles, puis donner
un code équivalent dans lequel vous utilisez des expressions Lambda.
L’incrémentation est conditionnelle : si le nombre est pair on ajoute l’incrément,
sinon on ajoute le double de l’incrément.
 Tester aussi l’expression Lambda de l’incrémentation est insérée via une
méthode statique de la classe principale.

Soit ce deuxième code :

import java.util.Scanner; Nombre entier = new Nombre () {


public interface Modifiable { private int valeur = 0;
void incrémenter (); public void saisir () {
void décrémenter (); System.out.println("Donnez un entier: ");
void raz (); } Scanner sc = new Scanner(System.in);
public abstract class Nombre implements valeur = sc.nextInt();
Modifiable { }
public abstract void saisir (); public void afficher () {
public abstract void afficher (); } System.out.println("Entier = "+valeur);
}
public class Projet2 { public void incrémenter () { valeur++; }
public static void main(String[] args) { public void décrémenter () { valeur--; }
Modifiable point = new Modifiable () { public void raz () { valeur = 0; }
private int x = 5; };
private int y = 6; entier.saisir ();
@Override entier.afficher();
public void incrémenter () { entier.incrémenter();
x++; y++; entier.afficher();
System.out.println("["+x + " "+y+"]");} entier.décrémenter();
@Override entier.afficher();
public void décrémenter () { x--; y--; entier.raz();
System.out.println("["+x + " "+y+"]");} entier.afficher();
@Override }}
public void raz () { x = 0; y = 0;
System.out.println("["+x + " "+y+"]");}
};
point.décrémenter();
point.raz();
point.incrémenter()

 Donnez un code équivalent et dans lequel, vous remplacez les classes anonymes
par des classes nommées explicitement. Testez l’incrémentation avec une
référence à la méthode

II. Travail à domicile


NB : dans toute l’application n’utiliser que des tableaux statiques ou dynamiques (ArrayList)
On se propose de développer une application Java destinée à un comité d’organisation d’un
tournoi sportif afin de permettre la gestion des équipes. Dans ce contexte et après une brève
analyse il apparait que :

A.U : 2023-2024Page 6
 Un joueur est caractérisé par son nom-prénom, son âge, sa taille, son poids, le nombre
de matchs joués (tous ces nombres doivent être positifs) et son rôle dans l’équipe
affecté à partir de cet ensemble statique {Gardien, Défense, Centre, Attaque}
 Une équipe est composée par une liste de joueurs, et possède un ensemble de titres
 Un tournoi est caractérisé par un lieu et un ensemble des équipes. A chaque équipe on
attribue un identifiant numérique unique lors du tournoi.
1) Implémenter les classes Joueur et Titre ainsi que les méthodes que vous jugez
nécessaires pour chaque classe. N’oublier pas d’implémenter les exceptions
adéquates.
2) Implémenter la classe Equipe. Il est à noter qu’on doit avoir ces méthodes :
 ajouterJoueur(Joueur)
 ajouterTitre(Titre)
 getJoueur(int)
 getJoueurs()
 afficher() : affichage de toutes les données avec des itérateurs
 afficherJoueurs()
 afficherTitres()
 redéfinition de toString() : utiliser StringBuffer et une boucle for Each
3) Implémenter une classe Test possédant une méthode main() afin de créer une
équipe, d’ajouter des joueurs et des titres et de tester les affichages.

A.U : 2023-2024Page 7

Vous aimerez peut-être aussi