====== TP1 & TP2 ====== Prise en main de Java et premières classes. Ceci est une introduction à la création de classe, comme pour la [[public:mco-2:un_projet_complet:card|création de la classe Card]] du cours. Lancer Intellij en ouvrant un terminal et en tapant : idea.sh ===== Hello World! ===== C'est une tradition de commencer tout nouveau langage par un "Hello World!". Suivez donc les instructions de [[public:java:utiliser_intellij| pour faire vos premiers pas avec Intellij]] & créer votre premier projet Java. Ceci fait, vous devriez avoir un environnement de développement opérationnel. ===== Des Dés ===== On vous demande de créer une classe ''Dice'' qui représentera un dé à 6 faces. ==== On débute ==== On commence par créer une première classe ''Dice'' avec les propriétés basiques que vous testerez dans votre programme principal. === Modèle UML === {{ :restricted:mco-2:tp1:dice_1.png |}} === Tests === Créez une méthode ''static'' (le pourquoi du ''static'' est expliqué [[public:java:misc#Understanding Class Members|ici]]) dans la classe ''Main'' où vous testerez les différentes méthodes/attributs que vous créerez. N'oubliez pas que les méthodes ''toString'', les getter/setter et les méthodes ''equals'' et ''hashcode'' peuvent être générés automatiquement (**"code >> generate..."**). == Dans un premier temps == * Créez un Dé, * affichez son attribut à l'écran, * Changez sa position et vérifiez que l'affichage a bien changé. La doc utile pour la construction d'objets : * [[public:java:misc#Classes| définir une classe]] * [[public:java:misc#Declaring Member Variables|ses attributs]], * [[public:java:misc#Providing Constructors for Your Classes|un constructeur]], * [[public:java:misc#créer et utiliser des objects]] == Dans un second temps == * Affichez un Dé * Créez un second dé et initialisez le comme le premier dé * Testez l'égalité des deux dés que vous venez de créer suivant: * l'opérateur ''=='' (réponse ''false''), * la méthode ''equals'' (réponse ''true'' si les deux positions sont égales et ''false ''sinon). La doc utile : * [[public:java:misc#Controlling Access to Members of a Class|la visibilité]] des méthodes et classes, * [[public:java:misc#Object as a Superclass| la surcharge]] des méthodes d'Object permettant de : * afficher un objet à l'écran : méthode ''toString'' * égalité entre objet, méthode ''equals'', qui ne va jamais sans la méthode ''hashcode'' (qui transforme un objet en entier). ==== Le hasard ==== En utilisant le lien suivant : [[http://www.leepoint.net/algorithms/random/random-api.html]], ajoutez une méthode ''+void: roll()'' à la classe ''Dice'' qui changera la position du dé (On suppose avoir affaire à un banal dé à six face). Les documentations officielles du lien précédent sont : * Classe [[https://docs.oracle.com/javase/8/docs/api/java/util/Random.html|java.util.Random]] * Méthode [[https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#random--|random()]] de la classe java.lang.Math === Tests === Créez une méthode statique dans ''Main'' qui lance 100 fois le dé. Vérifiez que le nombre de fois où l'on obtient un 1 est cohérent avec la théorie. ==== Tapis vert ==== Créez une classe ''Track''. Cette classe va nous permettre de jouer aux dés. Elle doit pouvoir lancer 5 dés. Pour créer la classe ''Track'', vous aurez besoin de gérer des [[public:java:misc#tableaux]]. === UML === On propose le diagramme UML suivant : {{ :restricted:mco-2:tp1:track.png |}} === tests === Créez une méthode statique dans ''Main'' qui lance 100 fois les 5 dés (avec la méthode roll de ''Track''). Calculez la moyenne de la somme de ces 100 tirages. Est-ce cohérent avec la théorie ? Attention, la division de 2 entiers donne un entier : int un = 1; int trois = 3; int divisionEntiere = un / trois; // vaut 0 Pour obtenir un réel il faut utiliser la division réelle, et donc que l'un des deux protagoniste soit un réel : float un = 1.0; int trois = 3; float division = un / trois; // vaut 0.3333333 On peut également transformer un entier en réel en utilisant le //cast// : int un = 1; int trois = 3; // considere un comme un réel et on le divise par l'entier 3 float division = ((float) un) / trois;