Les objets en Java: Labo 1
Les objets en Java: Labo 1
Les objets en Java: Labo 1
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