02.11.2014 Views

Les objets en Java: Labo 1

Les objets en Java: Labo 1

Les objets en Java: Labo 1

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Les</strong> <strong>objets</strong> <strong>en</strong> <strong>Java</strong>: <strong>Labo</strong> 1<br />

GEF 321 hiver 2013<br />

Table de matières<br />

1 Objectif<br />

2 Soumission et date d’échéance<br />

3 Préalable<br />

4 Comm<strong>en</strong>cem<strong>en</strong>t<br />

5 Partie 1 — Compréh<strong>en</strong>sion du programme<br />

5.1 Classes et Objets<br />

5.2 Création d’<strong>objets</strong> et initialisation<br />

5.3 Classes et interfaces<br />

5.4 Invocation des méthodes<br />

5.5 Conception de programme<br />

6 Partie 2 – Modification du programme<br />

1 Objectif<br />

Ce laboratoire a pour but de vous faire réviser quelques concepts fondam<strong>en</strong>taux de <strong>Java</strong>, y compris<br />

les classes et les <strong>objets</strong>. Le laboratoire va aussi vous permettre de vous (ré-)familiariser avec<br />

l’<strong>en</strong>vironnem<strong>en</strong>t de développem<strong>en</strong>t pour logiciel Eclipse.<br />

2 Soumission et date d’échéance<br />

Vous devez soumettre un rapport du laboratoire et votre code source pour la partie 2 avant 8h le<br />

14 janvier 2013 par courriel (mailto:greg.phillips@rmc.ca). Il faut que votre rapport du laboratoire est <strong>en</strong> format<br />

PDF. Dans Microsoft Word 2010, vous pouvez créer un fichier PDF avec le m<strong>en</strong>u File ><br />

Save as....<br />

Le rapport doit se consister <strong>en</strong> des réponses aux questions ci-dessous avec une discussion de<br />

ce que vous avez appris, découverte, ou trouvé difficile dans le laboratoire. Soyez concise!<br />

3 Préalable<br />

Un objet est un exemple d’un type de données abstrait. En plus d’emmagasiner les données<br />

(les attributs), l’objet dispose égalem<strong>en</strong>t d’un <strong>en</strong>semble précis d’opérations (les méthodes) qu’il<br />

peut exécuter. Un objet est donc une structure de données avec des membres de données et des<br />

membres d’exécution.<br />

Un programme <strong>Java</strong> est une collection d’<strong>objets</strong> qui accomplit une certaine tâche <strong>en</strong> <strong>en</strong>voyant des<br />

messages <strong>en</strong>tre les <strong>objets</strong>. Un objet qui transmet un message à un autre objet est implém<strong>en</strong>té<br />

comme un objet qui appelle l’exécution d’une méthode d’un autre objet. <strong>Les</strong> <strong>objets</strong> ont donc<br />

un <strong>en</strong>semble de messages (ou de méthodes) auxquels ils répond<strong>en</strong>t, l’<strong>en</strong>semble des messages<br />

qu’un objet répond est l’interface pour cet objet.<br />

Chaque objet à sa propre mémoire composée d’autres <strong>objets</strong> ou de types primitifs. Chaque objet<br />

a un ou plus types. Tous les <strong>objets</strong> d’un type particulier peuv<strong>en</strong>t recevoir les mêmes messages<br />

(car ils partag<strong>en</strong>t tous la même interface).<br />

La classe d’un objet établit un de ces types. Toutes les variables et méthodes sont indiquées<br />

dans la définition de classe. Ainsi une classe indique quel g<strong>en</strong>re de membres de donné et quelles<br />

méthodes form<strong>en</strong>t l’interface pour tous les <strong>objets</strong> d’un certain type. Une fois qu’une classe a été<br />

définie, les <strong>objets</strong> peuv<strong>en</strong>t être instanciés ou créés à partir de la définition de classe. Un objet est<br />

une instance d’un type de données abstrait (une classe).<br />

1 of 4


Un objet peut être considéré comme une instance de n’importe laquelle de ces superclasses, ou<br />

des interfaces <strong>Java</strong> qu’il implante, ou des interfaces implantées par ces superclasses.<br />

Le livre de Bruce Eckel Thinking in <strong>Java</strong> (http://last3.in/mirror/TIJ3/) est une bonne référ<strong>en</strong>ce <strong>en</strong> matière <strong>Java</strong>.<br />

Vous devriez le consulter lorsque le temps vi<strong>en</strong>t de répondre aux questions posées dans ce laboratoire.<br />

4 Comm<strong>en</strong>cem<strong>en</strong>t<br />

• Téléchargez et sauvegardez ce fichier: labo1.zip. Ce n’est pas nécessaire de le dézipper.<br />

• Lancer le programme Eclipse.<br />

• Dans Eclipse, créer un nouveau projet <strong>Java</strong> nommé, par exemple, GEF321 labo 1. Utiliser<br />

le JRE par défaut et choisir l’option d’avoir des dossiers séparées pour les fichiers source et<br />

classe.<br />

• Sélectionner votre projet dans le panneau « Package Explorer », cliquer à droit, et choisir<br />

Import. Dans la boîte de dialogue, choisir G<strong>en</strong>eral > Archive File comme type, trouver<br />

votre copie de labo1.zip comme fichier, et l’importer.<br />

• Ouvrir le projet (cliquez sur le triangle) et le « paquet par défaut ». Vous trouveriez dedans les<br />

trois paquets et les huit fichiers sources de <strong>Java</strong> comme suite:<br />

◦ wallballgame<br />

▪<br />

▪<br />

▪<br />

Ball.java<br />

Paddle.java<br />

WallBallEquipm<strong>en</strong>t.java<br />

◦ wallballgui<br />

▪<br />

▪<br />

▪<br />

WallballApp.java<br />

WallballFrame.java<br />

WallballView.java<br />

◦ wallballsupport<br />

▪<br />

▪<br />

Collidable.java<br />

Path.java<br />

Le programme réalise un jeu très simple de Wall Ball (un peu comme l’anci<strong>en</strong> jeu vidéo Pong,<br />

mais pour un seul joueur). Pour lancer le jeu, sélectionnez le fichier WallballApp.java et cliquez<br />

l’icône d’exécution (Run) dans la barre à outils (le cercle vert avec le triangle blanc le dans). Jouer<br />

avec le jeu un peu pour voir comm<strong>en</strong>t cela fonctionne.<br />

5 Partie 1 — Compréh<strong>en</strong>sion du programme<br />

5.1 Classes et Objets<br />

Répondez aux questions suivantes:<br />

2 of 4


1. Donner un exemple d’une classe.<br />

2. Donner un exemple d’un objet.<br />

3. Donner un exemple d’un constructeur.<br />

4. Dans la classe WallballView, BORDER est une variable d’attribut. Est-ce BORDER est un objet?<br />

Expliquez.<br />

5. Dans la classe WallballView, thePaddle est une variable d’attribut. Est-ce que thePaddle<br />

est un objet? Expliquez.<br />

5.2 Création d’<strong>objets</strong> et initialisation<br />

On regard maint<strong>en</strong>ant l’initialisation d’objet et spécifiquem<strong>en</strong>t l’initialisation des référ<strong>en</strong>ces<br />

d’objet (l’attribution de la mémoire pour les <strong>objets</strong> actuels et le connexion <strong>en</strong>tre un objet et une<br />

variable de référ<strong>en</strong>ce). Vous pouvez initialiser une référ<strong>en</strong>ce aux temps suivants:<br />

• Au point où l’objet cont<strong>en</strong>ant la référ<strong>en</strong>ce est défini. Ceci signifie les référ<strong>en</strong>ces seront toujours<br />

initialisées avant que le constructeur soit appelé.<br />

• Dans le constructeur de l’objet qui le conti<strong>en</strong>t.<br />

• Juste avant que vous deviez réellem<strong>en</strong>t utiliser l’objet. Dans certains cas, cela peut réduire<br />

le temps d’initialisation ou l’espace de mémoire, si au cours de l’exécution, l’objet n’a pas<br />

besoin d’être créé.<br />

6. Donner un exemple de chacun de ces trois mécanismes d’initialisation trouvé dans la classe<br />

WallBallView.<br />

7. Quel est l’effet d’utiliser Integer <strong>en</strong> lieu de int pour spécifier les types de width et height<br />

dans WallBallEquipm<strong>en</strong>t.<br />

5.3 Classes et interfaces<br />

Le paquet wallballgame conti<strong>en</strong>t trois classes. Deux de ces classes soit Ball et Paddle sont<br />

ext<strong>en</strong>sions de (« ext<strong>en</strong>ds ») la classe WallBallEquipm<strong>en</strong>t. La classe WallBallEquipm<strong>en</strong>t implém<strong>en</strong>te<br />

(« implem<strong>en</strong>ts ») l’interface Collidable du paquet wallballsupport.<br />

8. Vos propres mots, expliquer la différ<strong>en</strong>ce <strong>en</strong>tre une classe et une interface dans le langage<br />

de programmation <strong>Java</strong>.<br />

9. Qu’est-ce que ça veut dire quand une classe est une ext<strong>en</strong>sion d’une autre?<br />

10. Qu’est-ce que ça veut dire quand une classe implém<strong>en</strong>te une interface?<br />

11. <strong>Les</strong> constructeurs pour Ball et Paddle conti<strong>en</strong>t des expressions semblables à super(fgColor,<br />

bgColor, x, y). Qu’est-ce que c’est l’effet de cette expression et pourquoi<br />

est-il nécessaire?<br />

12. La classe WallBallEquipm<strong>en</strong>t à deux constructeurs. Un des deux conti<strong>en</strong>t l’expression<br />

this(fgColor, bgColor). Qu’est-ce que c’est le mot clé « this » dans <strong>Java</strong> et comm<strong>en</strong>t<br />

est-il utilisé dans cette expression?<br />

5.4 Invocation des méthodes<br />

13. Expliquer, dans vos propres mots, comm<strong>en</strong>t le méthode checkHit dans la classe WallBallView<br />

détermine si le Paddle avait frappé le Ball.<br />

5.5 Conception de programme<br />

14. Le code dans le projet WallBall conti<strong>en</strong>t plusieurs nombres magiques (http://fr.wikipedia.org/wiki/Nombre_magique_(programmation))<br />

(dans le s<strong>en</strong>s de « constantes numériques non nommées »). Expliquer<br />

3 of 4


dans vos propres mots ce que les nombres magiques sont, et pourquoi il faut les éviter dans<br />

votre propre code.<br />

15. Lequel des principes discutés dans la première leçon du cours suggère l’élimination des<br />

nombres magiques?<br />

16. Faire de la recherche au sujet de le principe de responsabilité simple et donner une sommaire<br />

bref dans vos propres mots.<br />

17. Est-ce que la classe WallBallView se conforme au principe de responsabilité simple ou estce<br />

qu’elle le viole? Justifier votre opinion avec référ<strong>en</strong>ce au code dans la classe WallBallView.<br />

6 Partie 2 – Modification du programme<br />

Vous avez peut-être remarqué que le m<strong>en</strong>u Paddle Size du jeu ne fait ri<strong>en</strong>. Modifier le programme<br />

pour régler ce problème. Vous pouvez étudier le code qui modifie la couleur de la raquette<br />

pour trouver des indices comm<strong>en</strong>t procéder. La modification demandera l’addition d’<strong>en</strong>viron une<br />

douzaine de lignes de code à trois classes (dép<strong>en</strong>dant de votre solution).<br />

C’est possible que vous alliez arriver au point ou la raquette change de grandeur comme il faut,<br />

mais, si la modification est faite près de la frontière de la f<strong>en</strong>être, la raquette n’est plus capable<br />

de bouger. Ce n’est pas nécessaire de régler ce problème s’il arrive.<br />

From http://last3.in © Greg Phillips. Unlimited use is permitted within the Governm<strong>en</strong>t of Canada. All other use<br />

is governed by the Creative Commons by-nc 3.0 lic<strong>en</strong>se; see http://last3.in/colophon.html for details.<br />

4 of 4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!