0% ont trouvé ce document utile (0 vote)
344 vues8 pages

Examen POO Java : Classe Car et CarNG

Ce document décrit une classe Car modélisant des voitures autonomes et une sous-classe CarNG ajoutant de nouvelles fonctionnalités. Il présente des exercices sur la définition de ces classes, la manipulation d'objets dans des tableaux et l'écriture dans des fichiers.

Transféré par

El Atiki Anouar
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
344 vues8 pages

Examen POO Java : Classe Car et CarNG

Ce document décrit une classe Car modélisant des voitures autonomes et une sous-classe CarNG ajoutant de nouvelles fonctionnalités. Il présente des exercices sur la définition de ces classes, la manipulation d'objets dans des tableaux et l'écriture dans des fichiers.

Transféré par

El Atiki Anouar
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université Moulay Ismaïl 2021-2022

Durée : 2h
ENSAM – Meknès S2 / 3 ième Année / TC

Examen Programmation Orienté Objet


Java
Instructions :

• Aucun document n’est autorisé.


• Il est strictement interdit d’échanger du matériels (blanco, stylo…) entre étudiants lors de l’examen.
• Aucune question n’est autorisée.
• Vous devez répondre aux exercices de cet énoncé dans la feuille A3.
• Une note de zéro sera attribuée à la feuille qui ne contient pas : nom ou prénom ou code ENSAM.
• Un point est réservé à la clarté et l’indentation du code source.

Note : [Link]() peut être replacée par sysout() dans vos réponses.

Exercice 1 :
La classe Car modélise l’état et le comportement de voitures autonomes virtuelles. Chaque voiture correspond
à un objet qui est une instance à cette classe.

Chaque Car :

• a un designation (chaîne de caractères).


• a une position : donnée par les attributs entiers x et y, sachant que x augmente en allant vers l’Est et y
augmente en allant vers le Nord.
• a une destination : donnée par l’attribut direction qui prend une des valeurs "Nord", "Est", "Sud" ou
"Ouest".
• Peut parcourue une distance d’un pas : avec la méthode sans paramètres mobile().
• Peut tourner à droite de 90° pour changer de direction (si sa direction était "Nord" elle devient "Est", si
c’était "Est" elle devient "Sud", etc.) : avec la méthode sans paramètres right(). Les voitures ne
peuvent pas tourner à gauche.
• Peut afficher son état en détails (avec de simple [Link]()).

La désignation, la position et la destination d’une voiture lui sont donnés au moment de sa création. La
désignation est obligatoire mais on peut ne pas spécifier la position et la destination, qui sont définis par défaut
(0,0) et "Est".

1. Écrire les instructions qui permettent de définir la classe Car avec tous les constructeurs possibles, en
respectant les principes de l’encapsulation.

2. On veut améliorer ces voitures en créant une Nouvelle Génération, les CarNG qui ne remplacent pas
les anciennes voitures mais peuvent cohabiter avec eux.
Les CarNG savent faire la même chose, mais aussi :
• Avancer d’une distance en une seule fois (i.e. plusieurs pas) grâce à la méthode mobile()
qui prend en paramètre la distance parcourue.
• Tourner à gauche de 90° grâce à la méthode left().
• Faire un demi-tour grâce à la méthode halfturn().

Ecrire cette nouvelle classe en spécialisant celle de la première question, sans modifier celle-ci :

a- Les nouvelles méthodes appellent les anciennes méthodes pour implémenter le nouveau
comportement : avancer d’une distance se fait en avançant de 1 pas n fois, "tourner à gauche"
se fait en tournant 3 fois à droite, faire demi-tour se fait en tournant 2 fois.

POO Java 1 /4 ENSAM-Meknès


b- Solution plus efficace qui change directement l’état de l’objet sans faire appel aux anciennes
méthodes.

3. On veut mettre ensemble dans un tableau des objets de type Car et de type CarNG.
1- Comment déclarer un tableau de type Car et CarNG?
2- Comment afficher l’état de tous les voitures contenues dans le tableau?

4. Modifier la classe CarNG pour activer un mode "Turbo" et le désactiver. Dans ce mode chaque pas
est multiplié par 3. L’appel à la méthode afficher() devra indiquer à la fin si la voiture est en
mode Turbo ou pas.

5. Pour des besoins de reporting, on crée un fichier "car_all.txt", stocké dans l’arborescence de la
machine (partition C) rempli avec le contenu suivant (les noms des voitures) :

Travail à faire :

Écrire un programme java qui lit le fichier "car_all.txt" et écrit les noms contenant "NG" dans un
fichier séparé nommé "car_NG.txt" et les autres dans un autre fichier séparé nommé "[Link]".

POO Java 2 /4 ENSAM-Meknès


Exercice 1 :
Solution de l’exercice 1
Nord
y+1
Ouest x Est
x-1 y x+1
Sud
y-1

Question 1 :

public class Car {


public String designation;
public int x;
public int y;
public String direction;

// Constructeur avec désignation obligatoire


public Car(String designation) {
[Link] = designation;
this.x = 0;
this.y = 0;
[Link] = "Est";
}

// Méthode mobile pour déplacer la voiture d'un pas (avec 1)


public void mobile() {
if ([Link]("Nord")) {
y++;
} else if ([Link]("Est")) {
x++;
} else if ([Link]("Sud")) {
y--;
} else if ([Link]("Ouest")) {
x--;
}
}

// Méthode pour tourner à droite de 90°


public void right() {
if ([Link]("Nord")) {
direction = "Est";
} else if ([Link]("Est")) {
direction = "Sud";
} else if ([Link]("Sud")) {
direction = "Ouest";
} else if ([Link]("Ouest")) {
direction = "Nord";
}
}

// Méthode pour afficher l'état de la voiture


public void afficHeEtat() {
[Link]("Voiture : " + designation);
[Link]("Position : (" + x + ", " + y + ")");
[Link]("Direction : " + direction);
}
}

POO Java 3 /4 ENSAM-Meknès


Question 2.a :
public class CarNG extends Car {

// Constructeur avec désignation obligatoire


public CarNG(String designation) {
super(designation);
}

// Méthode pour avancer d'une distance donnée


public void mobile(int distance) {
for (int i = 0; i < distance; i++) {
[Link]();
}
}

// Méthode pour tourner à gauche en tournant trois fois à droite


public void left() {
[Link]();
[Link]();
[Link]();
}

// Méthode pour faire un demi-tour en tournant deux fois à droite


public void halfturn() {
[Link]();
[Link]();
}

// Méthode pour avancer d'une distance donnée


public void mobile(int distance) {
if ([Link]("Nord")) {
x += distance;
} else if ([Link]("Est")) {
y += distance;
} else if ([Link]("Sud")) {
y -= distance;
} else if ([Link]("Ouest")) {
x -= distance;
}
}

// Méthode main pour tester la classe CarNG


public static void main(String[] args) {
CarNG carNG1 = new CarNG("VoitureNG1");
[Link]();

[Link](3);
[Link]();
[Link](2);
[Link]();
[Link]();
}
}

POO Java 4 /4 ENSAM-Meknès


Question 2.b :

// Méthode pour tourner à gauche en changeant directement la direction


public void left() {
if ([Link]("Nord")) {
direction = "Ouest";
} else if ([Link]("Est")) {
direction = "Nord";
} else if ([Link]("Sud")) {
direction = "Est";
} else if ([Link]("Ouest")) {
direction = "Sud";
}
}

// Méthode pour faire un demi-tour en changeant directement la direction


public void halfturn() {
if ([Link]("Nord")) {
direction = "Sud";
} else if ([Link]("Est")) {
direction = "Ouest";
} else if ([Link]("Sud")) {
direction = "Nord";
} else if ([Link]("Ouest")) {
direction = "Est";
}
}

Question 3.1:

//par exemple déclarer un tableau T de 5 éléments


Car TabVoiture[] =new Car[5];
TabVoiture[0]=new Car("voiture 1");
TabVoiture[1]=new Car("voiture 2");
TabVoiture[2]=new CarNG("voiture ng1");
TabVoiture[3]=new CarNG("voiture ng2");
TabVoiture[4]=new Car("voiture 2");

Question 3.2 :

// pour afficher l’état des voitures de son contenu

for (Car voiture :T)


[Link]();

POO Java 5 /4 ENSAM-Meknès


Question 4 :

public class CarNG extends Car {

private boolean turboMode;

// Constructeur avec désignation obligatoire


public CarNG(String designation) {
super(designation);
turboMode = false;
}

// Méthode pour activer le mode Turbo


public void enableTurboMode() {
turboMode = true;
}

// Méthode pour désactiver le mode Turbo


public void disableTurboMode() {
turboMode = false;
}

// Méthode pour avancer d'une distance donnée, en prenant en mode Turbo


public void mobile(int distance) {
int step = turboMode ? 3 : 1; // si trubo alors step=3 sinon 1
for (int i = 0; i < distance; i++) {
[Link]();
for (int j = 0; j < step - 1; j++) {
[Link]();
}
}
}

// Méthode pour tourner à gauche en changeant directement la direction


public void left() {
// pas de changement
}

// Méthode pour faire un demi-tour en changeant directement la direction


public void halfturn() {
// pas de changement
}

// Méthode pour afficher l'état de la voiture avec l'indication du mode Turbo


public void afficHeEtat() {
[Link]();
if (turboMode) {
[Link]("Mode Turbo activé");
} else {
[Link]("Mode Turbo désactivé");
}
}

POO Java 6 /4 ENSAM-Meknès


Examen Programmation Oriente Object JAVA
Duré de Réalisation 30 min
Exercice 1 : (7 points)

1. Donner le code de la classe Etudiant défini par les champs nom, prénom, code et note. Il faut indiquer
correctement les types des champs, les niveaux de visibilités, les constructeurs et les autres éléments
indispensables. (2 points)
public class Etudiant {
private String nom;
private String prénom;
private int code;
private double note;

// Constructeur par défaut


public Etudiant() {
}

// Constructeur avec tous les champs


public Etudiant(String nom, String prénom, int code, double note) {
[Link] = nom;
[Link]énom = prénom;
[Link] = code;
[Link] = note;
}

// Accesseurs (getters) pour chaque champ


public String getNom() {
return nom;
}

public String getPrénom() {


return prénom;
}

public int getCode() {


return code;
}

public double getNote() {


return note;
}

// Mutateurs (setters) pour chaque champ


public void setNom(String nom) {
[Link] = nom;
}

public void setPrénom(String prénom) {


[Link]énom = prénom;
}

public void setCode(int code) {


[Link] = code;
}

public void setNote(double note) {


[Link] = note;
}

POO Java 7 /4 ENSAM-Meknès


2. Donner le code java qui permet de créer un tableau nommé « tab » contenant 4 objets de types
étudiants qu’il faut instancier de votre choix. (2 points)

// Création du tableau "tab" pouvant contenir 4 objets de type "Etudiant"


Etudiant[] tab = new Etudiant[4];

// Instanciation des objets Etudiant et assignation au tableau


tab[0] = new Etudiant("Nom1", "Prenom1", 1, 10);
tab[1] = new Etudiant("Nom2", "Prenom2", 2, 19);
tab[2] = new Etudiant("Nom3", "Prenom3", 3, 8.5);
tab[3] = new Etudiant("Nom4", "Prenom4", 4, 13.75);

3. Donner le code source de la fonction rechercher qui permet de chercher un étudiant dans un tableau
via son code et de retourner null s’il est introuvable. (2 points)

public Etudiant rechercher(Etudiant[] tab, int code) {


for (Etudiant etudiant : tab) {
if ([Link]() == code) {
return etudiant;
}
}
return null; // Retourne null si l'étudiant n'est pas trouvé
}

4. Donner le code source de la fonction tri qui permet de trie un tableau d’étudiant en fonction de la
note, cette fonction retourne le tableau trié. (3 points)
//fonction de tri d'un tableau ( tri par sélection)
public static Etudiant[] tri(Etudiant[] tab) {
int n = [Link];

for (int i = 0; i < n - 1; i++) {


int indiceMin = i;

for (int j = i + 1; j < n; j++) {


if (tab[j].getNote() < tab[indiceMin].getNote()) {
indiceMin = j;
}
}

// Échange des positions de l'étudiant à l'indice i avec l'étudiant


ayant la note minimale
Etudiant temp = tab[i];
tab[i] = tab[indiceMin];
tab[indiceMin] = temp;
}

return tab; // Retourne le tableau trié


}

POO Java 8 /4 ENSAM-Meknès

Vous aimerez peut-être aussi