Vous êtes sur la page 1sur 5

TP #1 Langage Java / Corrig

Applications Rparties 2009-2010 Universit Paris VIII / Parcours SRM / M1


Mise en place de l'environnement de dveloppement : Un des objectifs de ce module est de vous former des technologies utilises couramment dans le monde de l'entreprise. Dans cette optique, bien que simples, les TPs serons raliss dans un environnement de dveloppement intgr (ou IDE) qui permet de masquer au dveloppeur une partie non-ngligeable de la complexit du dveloppement, de la compilation et de l'excution d'applications. Un des IDEs les plus utiliss l'heure actuelle dans le monde Java s'appelle Eclipse, il s'agit d'un projet Open Source soutenu activement par IBM. Il est multi-plateforme et supporte aussi bien les plateformes Windows que Linux ou MacOS. Tlchargez clipse l'adresse suivante : www.eclipse.org et installez le. Dans eclipse : 1. Dnir un nouveau projet Java (File->New->Java Project) et lui donner le nom "tp1". 2. Pour chaque exercice, dnir un package tp1.ex# o # correspond au numro de l'exercice (click droit sur le nom du projet->New->Package). Le code li chaque exercice devra se trouver dans un package (espace de nommage) distinct. 3. Si un exercice fait rfrence du code qui aurait dj t implment dans un exercice prcdent, il est possible d'importer les sources contenues dans ce package de manire ne pas devoir tout rcrire.

Exercice 1 : Concepts de la Programmation Oriente Objets


Compltez les blancs dans les afrmations suivantes : 1. 2. 3. 4. 5. Les objets du monde rel contiennent des tats et comportements. L'tat d'un objet logiciel est stock dans ses champs. Une fabrique d'objets logiciel est appele une classe. Le comportement d'un objet est expos au travers de ses mthodes. Le fait de cacher les donnes prives d'un objet et de permettre leur accs uniquement via ses mthodes publiques s'appelle l'encapsulation des donnes. 6. Un comportement de haut niveau peut tre dni dans une super-classe ou classe mre et hrit dans une classe lle en utilisant le mot cl extends. 7. Un regroupement de mthodes sans implmentation est appel une interface.

Exercice 2 : Classes et Interfaces


Etablissez une interface 'Car' reprsentant une voiture du monde rel, prvoyez des mthodes pour changer et accder la couleur, au nombre de roues, la vitesse courante du botier de vitesse ("gear"), la vitesse courante de dplacement ("speed"). Correction :
public interface Car { String getColor(); void setColor(String newColor); int getWheelCount(); void setWheelCount(int newWheelCount); int getCurrentGear(); void changeGear(int newGear); int getCurrentSpeed(); void speedUp(int increment); void speedDown(int decrement); }

Ecrivez ensuite la classe 'BasicCar' implmentant cette interface : vous devez dnir les champs de la classe, les initialiser avec des valeurs par dfaut et crire le code des mthodes de l'interface. Correction :
public class BasicCar implements Car {

private private private private

int gear = 0; String color = "White"; int speed = 0; int wheelCount = 4;

public void changeGear(int newGear) { gear = newGear; } public String getColor() { return color; } public int getCurrentGear() { return gear; } public int getCurrentSpeed() { return speed; } public int getWheelCount() { return wheelCount; } public void setColor(String newColor) { if(newColor != null) color = newColor; } public void setWheelCount(int newWheelCount) { if(wheelCount >= 0) wheelCount = newWheelCount; } public void speedUp(int increment) { if(increment > 0) speed = speed + increment; } public void speedDown(int decrement) { if(decrement > 0 && speed - decrement >= 0) speed = speed - decrement; } }

Ecrivez ensuite la classe 'BasicTruck' (camion), sous-classe de la classe 'BasicCar', rajoutant une caractristique par rapport une voiture : on est capable de spcier son type de chargement sous la forme d'une chane de caractres et d'accder ce type (ex. vide, cailloux, beton, ...). Correction :
public class BasicTruck extends BasicCar { String load = "empty"; public void changeLoad(String newLoad) { load = newLoad; } public String getLoad() { return load; } }

Quand ces 2 classes et 1 interface sont nalises, crivez une classe contenant une mthode main (comme vue en cours) pour crer des instances de ces 2 classes.

Exercice 3 : Oprateurs
Modiez le programme suivant pour qu'il utilise des oprateurs arithmtiques composs :

public class ArithmeticDemo { public static void main(String[] args) { int result = 1 + 2; // result is now 3 System.out.println(result); result = result - 1; // result is now 2 System.out.println(result); result = result * 2; // result is now 4 System.out.println(result); result = result / 2; // result is now 2 System.out.println(result); result = result + 8; // result is now 10 result = result % 7; // result is now 3 System.out.println(result); } }

Correction : Voici une solution,


class ArithmeticDemo { public static void main (String[] args){ int result = 3; System.out.println(result); result -= 1; // result is now 2 System.out.println(result); result *= 2; // result is now 4 System.out.println(result); result /= 2; // result is now 2 System.out.println(result); result += 8; // result is now 10 result %= 7; // result is now 3 System.out.println(result); } }

Ensuite, expliquez pourquoi dans le programme suivant la valeur 6 est afche deux fois de suite.
public class PrePostDemo { public static void main(String[] args) { int i = 3; i++; System.out.println(i); ++i; System.out.println(i); System.out.println(++i); System.out.println(i++); System.out.println(i); } }

Correction : La ligne System.out.println(++i); est value 6 car l'oprateur ++ prxe incrmente la variable i et retourne la valeur incrmente (6). Dans la ligne suivante, System.out.println(i++); , l'oprateur ++ postxe incrmente la variable i 7 mais uniquement aprs que la valeur de la variable ai t retourne (encore 6).

Exercice 4 : Expressions, instructions et blocs


Identiez les expressions suivantes :

aValue = 8933.234; aValue++; System.out.println("Hello World!"); Bicycle myBike = new Bicycle();

affectation incrmentation invocation de mthode d'instance (l'instance out) instanciation

Exercice 5 : Gestion du ot de contrle


Compltez les blancs dans les afrmations suivantes : 1. 2. 3. L'instruction la plus basique de gestion du ot de contrle est l'instruction if-then. L'instruction switch permet de spcier un nombre potentiellement inni de chemins pour le ot de contrle. L'instruction do-while est similaire l'instruction while mais value son expression de test la n de la boucle au lieu du dbut. 4. Comment crire de manire simple une boucle innie en utilisant l'instruction for ? for ( ; ; ) { }

5.

Comment crire de manire simple une boucle innie en utilisant l'instruction while ou do-while ? while (true) { }

A partir de l'extrait de code ci-dessous, rpondez aux questions suivantes :


if (aNumber >= 0) if (aNumber == 0) System.out.println("first string"); else System.out.println("second string"); System.out.println("third string");

1. 2.

Sans utiliser Eclipse, quelle sortie pensez-vous que cet extrait de code va raliser sachant que aNumber = 10 ? Maintenant, sous Eclipse, crivez une classe contenant l'extrait de code suivant et initialisant la variable aNumber 10. La sortie correspond-elle ce que vous aviez prvu ? Expliquez la sortie en clariant le ot de contrle du bloc de code.

3.

Utilisez des { } pour clarier le code et faire apparatre explicitement le ot de contrle.

Correction : 1. second string third string 2. La difcult d'interprtation provient de la non-visibilit dans le bloc de code de la port des instructions if. 10 est suprieur 0 alors l'excution progresse sur le deuxime if. Le test du deuxime if choue car 10 n'est pas gal 0, de ce fait c'est la branche else de ce deuxime if qui est excute. La deuxime chane de caractres est alors afche. La dernire instruction println est en dehors de tout bloc conditionnel, elle est donc toujours excute, quelque-soit la valeur de aNumber. 3.
if (aNumber >= 0) { if (aNumber == 0) { System.out.println("first string"); } else { System.out.println("second string"); } } System.out.println("third string");