Object Oriented Programming 1
Engineering track / 2nd year
2024-2025
Lab #4: Classes et Objects (1)
Statement
You create a first small program in Java, which will have a “FeuDeSignalisation” class. In the main
module, it will create two objects of this class, using two overloaded constructors. It will change their
color, an object attribute, and then query those objects for the value of their static height attribute (a
class attribute), which it will modify in several ways.
It will then execute the “Clignote” method on one of these objects, in its three overloaded versions,
passing as an argument the durations of the off and on phases.
For now, ignore the presence of the Public and Private keywords , which must be specified. The code
gets the same result on screen.
In Java you will write the code in a single file, although it contains two classes and a much better
practice is to separate the classes into as many files. You do it here for reason of simplicity given of the
code.
Solution
The [Link] file
/* Il est obligatoire en Java que la seule classe publique contenue dans le fichier porte le
même nom que celui-ci, ici « Principal ». C’est ce qui permet à Java de faire des liaisons
dynamiques entre les classes contenues dans des fichiers différents dès lors que chacun des
fichiers ne contient qu’une classe. */
class FeuDeSignalisation
{
private int couleur;
private int position ;
private static double hauteur = 12.0; /* attribut statique */
public FeuDeSignalisation(int couleurInit) { /* un premier constructeur */
couleur = couleurInit; // On initialise tous les attributs.
position = 0 ;
}
public FeuDeSignalisation(int couleurInit, int positionInit) {
/* le constructeur est surchargé */
couleur = couleurInit;
position = positionInit ;
}
public static void setHauteur(double nouvelleHauteur) {
/* Cette méthode statique accède à l'attribut statique */
hauteur = nouvelleHauteur;
}
public void changeCouleur (int nouvelleCouleur) {
/* Méthode agissant sur les objets "feux" */
couleur = nouvelleCouleur;
1/3
[Link]("ma couleur est: " + couleur);
}
public static void getHauteur() {
/* Cette méthode statique accède aussi à l’attribut statique */
[Link]("la hauteur des feux est " + hauteur);
}
public void clignote()
{
[Link]("premiere maniere de clignoter");
for (int i=0; i<2; i++)
{
for (int j=0; j<2; j++)
[Link]("je suis eteint");
for (int j=0; j<2; j++)
[Link]("je suis allume");
}
}
public void clignote(int a)
{
// première surcharge de la méthode
[Link]("deuxieme maniere de clignoter");
for (int i=0; i<2; i++)
{
for (int j=0; j<a; j++)
[Link]("je suis eteint");
for (int j=0; j<a; j++)
[Link]("je suis allume");
}
}
public int clignote(int a, int b)
{
/* deuxième surcharge. Le return aussi est changé */
[Link]("troisieme maniere de clignoter");
for (int i=0; i<2; i++)
{
for (int j=0; j<a; j++)
[Link]("je suis eteint");
for (int j=0; j<b; j++)
[Link]("je suis allume");
}
return b;
}
}
public class Principal
{
/* en Java, le fichier et la classe contenant le “main” doivent être appelés de la même
façon
2/3
*/
public static void main(String[] args)
{
/* c’est la manière d’écrire le main */
FeuDeSignalisation unFeu = new FeuDeSignalisation(1,3);
// création avec le deuxième constructeur
FeuDeSignalisation unAutreFeu = new FeuDeSignalisation(1);
/* …avec le premier constructeur */
[Link](3);
/* appel d'une méthode non statique sur l'objet "unFeu" */
[Link](8.9) ;
/* appel de la méthode statique à partir de l'objet */
[Link]();
/* appel de la méthode statique à partir de la classe cette fois */
[Link](10.6);
/* tous les feux voient leur hauteur modifiée */
[Link](); /* appel de la méthode statique à partir de l’objet */
[Link]("********** CLIGNOTEMENT **********");
[Link](); /* première manière de clignoter */
[Link](3); /* deuxième manière */
int b = [Link](2,3); /* C'est possible au vu du return.*/
}
}
Résultats
ma couleur est: 3
la hauteur des feux est 8.9
la hauteur des feux est 10.6
********** CLIGNOTEMENT **********
premiere maniere de clignoter
je suis eteint (écrit deux fois)
je suis allume (écrit deux fois)
je suis eteint(écrit deux fois)
je suis allume (écrit deux fois)
deuxieme maniere de clignoter
je suis eteint (écrit trois fois)
je suis allume (écrit trois fois)
je suis eteint (écrit trois fois)
je suis allume (écrit trois fois)
troisieme maniere de clignoter
je suis eteint(écrit deux fois)
je suis allume (écrit trois fois)
je suis eteint (écrit deux fois)
je suis allume (écrit trois fois)
3/3