1. SERIE IIA2 JAVA
Exercice 1 –
1. On considère la classe définie par :
class A {
static int i;
}
a- Combien de mémoire consommera le code suivant. Expliquer par un schéma.
b- Quel est le résultat affiché par le code ci-dessus (inséré dans un main):
A a=new A();
A b=new A();
a.i=10; b.i=12;
System.out.println(a.i);
Exercice 2 –
Pour les classes Machin et Bidule définies comme suit:
abstract class Machin {
public abstract int f();
public int g() {return (6);}
}
class Bidule extends Machin {
public int f() {return(2); }
public int g() {return (4); }
}
a- Le code JAVA suivant va-t-il compiler correctement ? Expliquer
b- Si oui que va t-il afficher ? Expliquer
class Test{
public static void main(String [] args){
Bidule b=new Bidule();
Machin m =new Bidule();
System.out.println(b.f()*m.g());}}
Problème
L’objet de cette application est de gérer un service de transport en commun.
Une ville souhaite une application permettant d’afficher la liste des services de transport en commun dont
elle dispose ainsi que la représentation spatiale des stations.
La ville dispose de différents types de moyen de transport que l’on divisera en deux catégories. La
première concerne les moyen de locomotion sur rails contenant des métropolitains, des trains et des
tramway. La deuxième concerne les moyens de locomotions sur route, c’est à dire des bus. Chacun des
Saloua Ben Yahia Page 1 sur 4
2. moyens de transport à un numéro indépendant. Les métropolitains et les trains ont plusieurs wagons. Les
bus une capacité de réservoir.
Chaque moyen de locomotion part d’un terminal de départ, s’arrête à série de Station, arrive à un terminal
d’arrivée. Toutes les stations ont un nom et un numéro.
On a établit la hiérarchie des classes pour cette application. Les classes soulignées sont abstraites (Object,
Transport, TransportSurRoute,TransportSurRail).
Object
Transport
TransportSurRail TransportSurRoute
Partie 1 (4.5pt)
Dans la suite, utiliser les noms des classes, des variables ou des méthodes qui vous sont donnés.
Remarque : le type des variables est laissé à votre choix, mais vous veillerez à ce qu’il soit réaliste par
rapport à l’application.
Remarque : pour simplifier l’écriture, les attributs sont private et les get/set sont supposés existants. De
ce fait, on ne vous demande de ne pas les écrire mais de supposer toujours qu’ils existent.
Question 1 : (1.5 points) Définir une classe Station qui correspond à une station d’arrêt d’un moyen de
transport. Elle sera situé à endroit dans la ville, que l’on représentera par des coordonnées entières (x,y).
Chaque station aura un nom et un numéro. Ecrire un seul constructeur avec paramètres et sa méthode
toString qui affichera la description de la station sous la forme :
Station Le Passage n°1 est à la position 100:200
Question 2 : (1.5 points) Définir une classe Terminal qui hérite de la classe Station. Elle correspond à
une station de départ ou d’arrivée. Elle n’a aucune caractéristique en plus autre que celles dont elle hérite.
Ecrire le constructeur correspondant ainsi que sa méthode toString. La méthode toString de Terminal
devra re-utiliser la méthode de la classe Station. Elle produira l’affichage d’un terminal sous la forme:
Saloua Ben Yahia Page 2 sur 4
3. Terminal : Station Gare n°3 est à la position 150:280
Question 3 : (1.5 points) Soit la classe Transport
//Classe qui définit un moyen de transport
abstract class Transport {
//variable d’instance
int numero;
//numero du transport
//Constructeur
Transport(int n){
numero=n;
}
//Methode toString
public String toString(){
return "Transport n°" + numero + "n";
}
}
L’instruction ci-dessous compilera t-elle correctement ? Si oui quel affichage va-t-elle produire ? Justifiez
votre réponse.
Transport monPremierTransport = new Transport(1);
Partie 2 (7.5 pts)
On considère donné le code Java du reste classes TransportSurRail, TransportSurRoute,Bus,Metro,
Train,Tramway.
On veut maintenant définir une ligne de transport de metro. Chaque ligne est référencée par une lettre et
une seule (On ne peut donc avoir que 26 lignes de transport au total). Chacune a un terminal de départ et
un terminal d’arrivée. Elles desservent de plus une liste de stations spécifiques (au maximum 20).
Question 4 : (1 pt) Dessiner le diagramme UML représentant la relation entre la classe Ligne et Station
Question 5 : (1 points) Ecrire uniquement la déclaration des variables (les attributs) de la classe Ligne
Question 6 : (1 points) Ecrire le constructeur de la classe Ligne de manière à respecter l’instanciation
suivante :
Terminal departA=new Terminal("Depart A",10,5);
Terminal arriveeA=new Terminal("Arrivee A",234,53);
Ligne ligneA=new Ligne(‘A’, departA,arriveeA);
Question 7 : (1.5 points)
Saloua Ben Yahia Page 3 sur 4
4. Rajouter les méthodes public void addStation(Station s) à la classe Ligne de manière à ce qu’elle ajoute
une station à la classe. Cette méthode doit afficher des messages d’erreur si on ajoute trop de stations.
Question 7 : (1.5 pts) Dans la classe Ligne, ajouter une méthode void existeStation(Station s)
qui vérifie que la station passée en paramètre est bien sur cette ligne et affiche un message d’erreur sinon.
Question 8 : (1.5 points)
On a décidé de rajouter à la classe Transport la méthode suivante.
abstract int consommationEnergetique() ;
a - Que faut-il faire et dans qu’elles classes faut-il le faire pour que les classes de l’application compilent
à nouveau correctement ? (ne pas écrire de code)
b - Une fois les corrections apportés, le code suivant est il correct à la compilation? Expliquez. Si le code
est correct expliquer le résultat attendu à l’exécution (Sans donner l’affichage exact).
Transport [ ] tab=new Transport[10] ;
tab[0]=new Metro(1,2);//La classe Metro existe et possède bien un cst 2-args entiers
tab[1]=new Bus(2); //La classe Bus existe et possède bien un cst 1-args entier
System.out.println(tab[0].consommationEnergetique());
System.out.println(tab[1]. consommationEnergetique());
Saloua Ben Yahia Page 4 sur 4