Énoncé 4 : Objets et classes
Introduction
Durée
6 heures 25
Mots-clés
classe, objet, attribut, constructeur, méthode, création
Objectif
Dans ce chapitre, vous apprendrez à :
-
déclarer une classe, ses attributs et ses méthodes ;
-
créer des objets à partir d’une classe ;
-
accéder aux attributs au sein des méthodes d’une classe ;
-
appeler les méthodes ;
-
utiliser les constructeurs ;
-
réaliser des interactions entre deux objets.
Prérequis
Pour valider les prérequis nécessaires avant d’aborder le TP, répondez aux questions ci-après.
1. Questions générales
|
1. |
Quel est le but d’une classe ? |
|
|
2. |
Parmi les éléments suivants, que peut contenir la déclaration d’une classe ? |
|
|
|
a. |
des attributs ; |
|
|
b. |
une liste des autres classes avec lesquelles elle accepte de communiquer ; |
|
|
c. |
des méthodes. |
|
3. |
Au sein d’une méthode, quelles sont les variables accessibles ? |
|
|
|
a. |
les attributs de la classe dans laquelle est déclarée la méthode ; |
|
|
b. |
les variables locales de la méthode ; |
|
|
c. |
les paramètres de la méthode ayant appelé cette méthode ; |
|
|
d. |
les variables locales de la méthode ayant appelé cette méthode ; |
|
|
e. |
les paramètres de la méthode. |
|
4. |
À quoi sert un constructeur ? |
|
|
|
a. |
à initialiser un objet lors de sa création ; |
|
|
b. |
à déterminer les règles d’interaction entre les objets d’une classe ; |
|
|
c. |
à construire la classe. |
|
5. |
Quand le constructeur d’une classe est-il invoqué ? |
|
|
6. |
Parmi les éléments suivants, auxquels une classe peut-elle servir de type ? |
|
|
|
a. |
à une variable définie dans le programme principal ; |
|
|
b. |
à un attribut d’une classe ; |
|
|
c. |
à un paramètre d’une méthode. |
2. Questions Java
|
7. |
Comment les objets sont-ils créés à partir d’une classe ? |
|
|
8. |
Combien est-il possible de définir de constructeurs dans une classe ? |
|
|
9. |
Comment est réalisé... | |
Énoncé 4.1 : La classe Rectangle
Durée estimative : 20 minutes
Écrivez en Java/Python la classe Rectangle qui permet de représenter des rectangles en définissant leur hauteur et leur largeur (les rectangles sont horizontaux et ne vous préoccupez pas de leurs coordonnées).
Écrivez les méthodes suivantes :
-
le constructeur permettant de donner la valeur initiale de la hauteur et de la largeur ;
-
la méthode setLargeur (Java)/set_largeur (Python) pour modifier la largeur ;
-
la méthode setHauteur (Java)/set_hauteur (Python) pour modifier la hauteur ;
-
la méthode getLargeur (Java)/get_largeur (Python) pour obtenir la largeur ;
-
la méthode getHauteur (Java)/get_hauteur (Python) pour obtenir la hauteur ;
-
la méthode surface qui calcule la surface du rectangle ;
-
la méthode perimetre qui calcule le périmètre du rectangle.
Écrivez ensuite un programme principal qui crée un objet de la classe Rectangle après avoir préalablement lu au clavier sa largeur et sa hauteur. Ensuite, le programme affiche la surface et le périmètre du rectangle.
Énoncé 4.2 : La classe Calculatrice
Durée estimative : 25 minutes
Écrivez en Java/Python la classe Calculatrice qui permet de représenter une calculatrice.
Écrivez les méthodes suivantes :
-
le constructeur permettant de fixer la valeur initiale de la calculatrice ;
-
la méthode getValeur (Java)/get_valeur (Python) pour obtenir la valeur de la calculatrice ;
-
la méthode ajoute pour ajouter à la valeur de la calculatrice une valeur passée en paramètre ;
-
la méthode multiplie pour multiplier la valeur de la calculatrice par une valeur passée en paramètre ;
-
la méthode divise pour diviser la valeur de la calculatrice par une valeur passée en paramètre.
Écrivez ensuite un programme principal qui propose en boucle à l’utilisateur de choisir entre ajouter un nombre, multiplier ou diviser la valeur de la calculatrice par un nombre ou terminer l’exécution du programme. La valeur initiale de la calculatrice est zéro.
Énoncé 4.3 : La classe Complexe
Durée estimative : 30 minutes
Écrivez en Java/Python la classe Complexe qui permet de représenter des nombres complexes en définissant leur partie réelle et leur partie imaginaire qui sont deux nombres réels indépendants.
Écrivez les méthodes suivantes :
-
le constructeur permettant de donner la valeur initiale de la partie réelle et celle de la partie complexe ;
-
la méthode getReel (Java)/get_reel (Python) pour obtenir la partie réelle ;
-
la méthode setReel (Java)/set_reel (Python) pour modifier la partie réelle ;
-
la méthode getImaginaire (Java)/get_imaginaire (Python) pour obtenir la partie imaginaire ;
-
la méthode setImaginaire (Java)/set_imaginaire (Python) pour modifier la partie imaginaire ;
-
la méthode module pour calculer le module du nombre complexe ;
-
la méthode ajouteReel (Java)/ajoute_reel (Python) pour ajouter un nombre réel au nombre complexe ;
-
la méthode multiplieReel (Java)/multiplie_reel (Python) pour multiplier le nombre complexe par un nombre réel.
Écrivez ensuite un programme principal qui crée un objet de la classe Complexe après avoir préalablement lu au clavier sa partie réelle et sa partie imaginaire. Ensuite, le programme affiche le module puis...
Énoncé 4.4 : La classe NombreAleatoire
Durée estimative : 25 minutes
Écrivez en Java/Python la classe NombreAleatoire qui calcule un nombre entier aléatoire entre une borne inférieure et une borne supérieure.
Écrivez les méthodes suivantes :
-
le constructeur qui prend comme paramètre la borne inférieure et la borne supérieure de l’intervalle ;
-
la méthode getBorneinf (Java)/get_borne_inf (Python) qui renvoie la borne inférieure de l’intervalle ;
-
la méthode getBorneSup (Java)/get_borne_sup (Python) qui renvoie la borne supérieure de l’intervalle ;
-
la méthode getValeur (Java)/get_valeur (Python) qui renvoie le nombre généré ;
-
la méthode compare qui prend une valeur comme paramètre et qui renvoie :
-
0 si la valeur est égale au nombre choisi aléatoirement ;
-
1 si la valeur est strictement supérieure au nombre aléatoire ;
-
-1 si la valeur est strictement inférieure au nombre aléatoire ;
-
-
la méthode recalcule qui recalcule un nouveau nombre entier entre la borne inférieure et la borne supérieure.
Écrivez ensuite un programme principal de test qui affiche vingt nombres entiers aléatoires compris entre 1 et 10.
Indice
Pour calculer le nombre...
Énoncé 4.5 : La classe Vecteur
Durée estimative : 20 minutes
Écrivez la classe Vecteur en Java/Python. Un vecteur est un tableau d’entiers de taille fixe. Cette taille est fixée lors de la création du vecteur. La valeur de la taille n’est pas conservée dans un attribut de la classe.
Écrivez les méthodes suivantes :
-
le constructeur qui prend la taille en paramètre ;
-
la méthode getElement (Java)/get_element (Python) qui prend comme paramètre un indice et qui renvoie la valeur du vecteur à cet indice ;
-
la méthode setElement (Java)/set_element (Python) qui prend comme paramètres un indice ainsi que la valeur à affecter à l’élément du vecteur se situant à cet indice ;
-
la méthode lit qui lit au clavier tous les éléments du vecteur ;
-
la méthode affiche qui écrit tous les éléments du vecteur à l’écran ;
-
la méthode remplitAleatoirement (Java)/remplit_aleatoirement (Python) qui prend deux paramètres entiers min et max et remplit les valeurs du vecteur avec des nombres aléatoires entiers compris entre min et max (bornes incluses).
Écrivez un programme principal qui crée un vecteur dont la taille est fixée par l’utilisateur, lit ses valeurs...
Énoncé 4.6 : La classe Complexe2
Durée estimative : 30 minutes
En reprenant tous les éléments de l’exercice 4.3, écrivez la classe Complexe2 en Java/Python.
Ajoutez les méthodes :
-
la méthode ajouteComplexe (Java)/ajoute_complexe (Python) pour ajouter un autre nombre complexe au nombre complexe ;
-
la méthode multiplieComplexe (Java)/multiple_complexe (Python) pour multiplier le nombre complexe par un autre nombre complexe.
Ces deux méthodes prennent un objet de la classe Complexe2 en paramètre.
Écrivez ensuite une extension au programme principal pour qu’il réalise une addition puis une multiplication de nombres complexes.
Indice
Soit a la partie réelle d’un premier nombre complexe et b sa partie imaginaire, puis c la partie réelle d’un second nombre complexe et d sa partie imaginaire :
-
La somme des deux nombres complexes a pour partie réelle a+c et pour partie imaginaire b+d.
-
La multiplication des deux nombres complexes a pour partie réelle a*c - b*d et pour partie imaginaire a*d + b*c.
Énoncé 4.7 : La classe Angle
Durée estimative : 20 minutes
Écrivez en Java/Python la classe Angle qui contient la valeur d’un angle. Sa valeur initiale est 0.
Écrivez les méthodes suivantes :
-
la méthode getAngleGrades (Java)/get_angle_grades (Python) pour obtenir la valeur de l’angle en grades ;
-
la méthode setAngleGrades (Java)/set_angle_grades (Python) pour fixer la valeur de l’angle en grades ;
-
la méthode getAngleDegres (Java)/get_angle_degres (Python) pour obtenir la valeur de l’angle en degrés ;
-
la méthode setAngleDegres (Java)/set_angle_degres (Python) pour fixer la valeur de l’angle en degrés ;
-
la méthode getAngleRadians (Java)/get_angle_radians (Python) pour obtenir la valeur de l’angle en radians ;
-
la méthode setAngleRadians (Java)/set_angle_gradians (Python) pour fixer la valeur de l’angle en radians.
Bien entendu, la valeur de l’angle n’est stockée en interne que dans une seule unité, à savoir dans le cadre de cet exercice, en grades.
Écrivez ensuite un programme qui permet de lire la valeur de l’angle dans l’unité choisie par l’utilisateur puis affiche sa valeur dans les trois unités.
Indice
Pour rappel, 180 degrés correspondent à π radians...
Énoncé 4.8 : La classe Fraction
Durée estimative : 35 minutes
Le but de l’exercice est d’élaborer en Java/Python la classe Fraction qui représente les nombres rationnels positifs, à savoir ceux qui peuvent être représentés sous la forme d’une fraction (a/b) constituée d’un numérateur (a) et d’un dénominateur (b). a est un entier positif, b est un entier positif non nul.
Écrivez les méthodes suivantes :
-
Le constructeur qui prend en paramètres le numérateur et le dénominateur. Ces paramètres ne sont pris en compte que s’ils répondent aux conditions énoncées ci-dessus. Sinon, le numérateur vaut 0 et le dénominateur 1.
-
La méthode reel qui renvoie la valeur de la fraction sous la forme d’un nombre réel.
-
La méthode reduit qui réduit au maximum la valeur du numérateur et du dénominateur sans changer la valeur mathématique de la fraction. N’oubliez pas le cas particulier du numérateur de valeur nulle.
-
La méthode addition qui prend une autre fraction en paramètre et renvoie comme résultat la somme des deux fractions. Le résultat doit être une fraction réduite.
Écrivez un programme principal qui crée une fraction dont le numérateur et le dénominateur...
Énoncé 4.9 : La classe Rectangle2
Durée estimative : 40 minutes
Le but de l’exercice est d’écrire en Java/Python la classe Rectangle2 qui représente des rectangles dont les côtés sont parallèles avec l’axe des abscisses (X) et l’axe des ordonnées (Y).
Écrivez les méthodes suivantes :
-
le constructeur qui prend comme paramètres quatre nombres réels : xmin, xmax, ymin et ymax ;
-
les méthodes getXmin, getXmax, getYmin et getYmax (Java)/get_xmin, get_xmax, get_ymin et get_ymax (Python) qui renvoient les quatre coordonnées du rectangle ;
-
la méthode intersection qui prend un autre rectangle en paramètre et renvoie comme résultat un nouveau rectangle qui est l’intersection des deux rectangles.
Écrivez un programme qui crée deux rectangles, calcule leur intersection et affiche les quatre coordonnées de celle-ci.
Indices
Pour écrire la méthode intersection, le calcul se fait indépendamment sur chaque axe. Il faut utiliser une fois le maximum et une fois le minimum pour effectuer le calcul sur chaque axe. En cas d’intersection vide, pensez surtout à retourner un rectangle vide respectant xmin=xmax=0 et ymin=ymax=0.
N’hésitez pas à travailler sur un exemple pour trouver comment il faut écrire...
Énoncé 4.10 : La classe Ensemble
Durée estimative : 25 minutes
Dans les exercices 2.5 et 2.6, un ensemble d’entiers est représenté par deux variables :
-
un tableau d’entiers dont la taille représente la taille maximale de l’ensemble ;
-
une variable de type entier dont la valeur est la taille de l’ensemble.
L’utilisation d’une classe est tout à fait adaptée pour une telle représentation. Par conséquent, écrivez en Java/Python la classe Ensemble. L’état initial d’un ensemble est vide.
En vous basant sur les corrigés des exercices 2.5 et 2.6, écrivez les méthodes suivantes :
-
Le constructeur qui prend pour paramètre la taille maximale de l’ensemble.
-
La méthode insere qui ajoute un nouvel entier dans l’ensemble. La valeur de retour est à vrai si le nouvel entier a été inséré (même s’il était déjà présent) et à faux si l’insertion n’est pas possible (lorsqu’il n’y a plus de place dans le tableau).
-
La méthode supprime pour supprimer un élément de l’ensemble. La valeur de retour est à vrai si l’élément était présent et à faux dans le cas contraire.
-
La méthode affiche qui sert à...
Énoncé 4.11 : La classe EnsembleTrie
Durée estimative : 35 minutes
Écrivez la classe EnsembleTrie en Java/Python. Ses attributs sont les mêmes que ceux de la classe Ensemble introduite dans l’exercice précédent.
Il faut également écrire les mêmes méthodes que dans l’énoncé précédent mais en y incluant les mécanismes qui garantissent que l’ensemble reste en permanence trié et qui sont décrits dans les exercices 2.7 et 2.8. Utilisez les corrigés de ces deux exercices pour écrire les méthodes.
Modifiez le programme principal de l’exercice précédent pour qu’il utilise la classe EnsembleTrie à la place de la classe Ensemble.
Énoncé 4.12 : La classe Matrice
Durée estimative : 35 minutes
Écrivez en Java/Python la classe Matrice qui représente des matrices rectangulaires. Les attributs définis dans la classe sont :
-
le nombre de lignes (nombreLignes) ;
-
le nombre de colonnes (nombreColonnes) ;
-
le tableau contenant les valeurs de la matrice.
En vous basant sur le corrigé de l’exercice 3.12, écrivez en Java/Python les méthodes suivantes :
-
le constructeur qui prend comme paramètre le nombre de lignes et le nombre de colonnes ;
-
la méthode getNombreLignes (Java)/get_nombre_lignes (Python) pour obtenir le nombre de lignes ;
-
la méthode getNombreColonnes (Java)/get_nombre_colonnes (Python) pour obtenir le nombre de colonnes ;
-
la méthode lit pour lire au clavier les différents éléments de la matrice ;
-
la méthode affiche pour afficher les différents éléments de la matrice ;
-
la méthode ajoute pour ajouter à la matrice la matrice passée en paramètre. Cette méthode prend un paramètre de type Matrice et renvoie un résultat booléen. Le résultat est vrai si l’addition a pu être réalisée et faux dans le cas où les deux dimensions ne sont pas identiques.
Écrivez...
Énoncé 4.13 : La classe Devine
Durée estimative : 45 minutes
Le but de l’exercice est d’écrire la classe Devine en Java/Python.
La méthode session de la classe Devine demande à l’utilisateur de choisir un nombre et lui répond que le nombre proposé est soit trop grand, soit trop petit, soit égal jusqu’à ce que l’utilisateur ait trouvé la solution. Elle renvoie ensuite le nombre de tentatives qui ont été nécessaires.
Écrivez en Java/Python la classe Devine ainsi que les deux méthodes suivantes :
-
le constructeur qui prend en paramètre d’entrée un objet de la classe NombreAleatoire telle qu’elle est introduite dans l’exercice 4.4 ;
-
la méthode session dont le fonctionnement est décrit ci-dessus.
La méthode session commence par indiquer à l’utilisateur que le nombre qu’il doit trouver est compris entre la borne inférieure et la borne supérieure de l’objet de la classe NombreAleatoire (bornes incluses) transmis lors de l’appel au constructeur.
Écrivez ensuite un programme Java/Python qui met les deux classes en œuvre. La borne inférieure et la borne supérieure du nombre aléatoire sont définies comme constantes dans le programme principal.
Indice
Pour écrire la méthode...