{"id":674,"date":"2017-10-21T00:02:00","date_gmt":"2017-10-20T23:02:00","guid":{"rendered":"http:\/\/chezdom.net\/etu\/?page_id=674"},"modified":"2017-10-23T01:23:08","modified_gmt":"2017-10-23T00:23:08","slug":"java-miashs-12017-tp-1","status":"publish","type":"page","link":"https:\/\/chezdom.net\/etu\/java-miashs-12017-tp-1\/","title":{"rendered":"JAVA MIASHS 1\/2017 &#8211; TP 1"},"content":{"rendered":"<p>NB : Vous devez faire un rapport de TP dans lequel vous r\u00e9pondrez aux questions, avec notamment des copies des ex\u00e9cutions de vos programmes (ce qui s&rsquo;affiche quand vous ex\u00e9cutez un programme).<\/p>\n<h2>Exercice 1. Premiers pas<\/h2>\n<p>Le but de cet exercice est de se familiariser avec la m\u00e9thode <code>main<\/code> pour le lancement de programmes, les sorties standard <code>System.out.println<\/code> et avec la classe <a href=\"http:\/\/chezdom.net\/etu\/la-classe-console\/\">Console<\/a>, qui vous est fournie pour permettre des entr\u00e9es de donn\u00e9es simplifi\u00e9es.<\/p>\n<ol>\n<li>\u00c9crivez une classe, appel\u00e9e <code>PremiersPas<\/code>, qui ne contient qu\u2019une m\u00e9thode, la m\u00e9thode main, dans laquelle vous afficherez une cha\u00eene de caract\u00e8res quelconque (par exemple le classique <em><a href=\"http:\/\/chezdom.net\/etu\/2017\/10\/21\/helloworld-java\/\">\u00ab\u00a0Hello, world\u00a0\u00bb<\/a><\/em>). Tapez le code dans un fichier au nom appropri\u00e9, compilez et ex\u00e9cutez.<\/li>\n<li>En utilisant la classe <a href=\"http:\/\/chezdom.net\/etu\/la-classe-console\/\">Console<\/a>&nbsp;\u00e9crivez un programme pour afficher la question&nbsp;<em>\u00ab\u00a0Fait-il beau ?\u00a0\u00bb<\/em>, attendre une r\u00e9ponse \u00ab\u00a0oui\u00a0\u00bb ou <em>\u00ab\u00a0non\u00a0\u00bb<\/em>. Si la r\u00e9ponse est <em>\u00ab\u00a0oui\u00a0\u00bb<\/em>, le programme affichera <em>\u00ab\u00a0Tant mieux !\u00a0\u00bb<\/em>, si c\u2019est&nbsp;<em>\u00ab\u00a0non\u00a0\u00bb<\/em>, il affichera <em>\u00ab\u00a0Esp\u00e9rons que ce soit mieux demain\u00a0\u00bb<\/em>, et si ce n\u2019est ni l\u2019un ni l\u2019autre, <em>\u00ab\u00a0je ne comprends&nbsp;pas !\u00a0\u00bb<\/em>.<\/li>\n<li>Modifiez le programme pr\u00e9c\u00e9dent pour que, tant que la saisie de l\u2019utilisateur est incorrect, le programme affiche <em>\u00ab\u00a0merci de r\u00e9pondre par oui ou par non\u00a0\u00bb<\/em> et redemande une r\u00e9ponse (accepter aussi <em>\u00ab\u00a0o\u00a0\u00bb<\/em> et <em>\u00ab\u00a0n\u00a0\u00bb<\/em> comme r\u00e9ponses valides<\/li>\n<\/ol>\n<h2>Exercice 2. Une classe pour manipuler des heures<\/h2>\n<p>Voici l&rsquo;\u00e9bauche d&rsquo;une classe que nous allons appeler <code>Times<\/code>, destin\u00e9e \u00e0 manipuler des heures. Une heure sera repr\u00e9sent\u00e9e par une instance de la classe <code>Times<\/code>. Celle-ci aura en interne 3 attributs entiers, un pour la valeur de l&rsquo;heure repr\u00e9sent\u00e9e par cette instance, un pour celle de la minute et un pour celle de la seconde.<\/p>\n<h3>2.1 Constructeurs<\/h3>\n<pre class=\"brush: java\">public class Times {\r\n\r\n    private int hours, mins, secs;\r\n\r\n    public Times() {\r\n        java.time.LocalDateTime now = java.time.LocalDateTime.now();\r\n        hours=now.getHour();\r\n        mins=now.getMinute();\r\n        secs=now.getSecond();\r\n    }\r\n\r\n    public Times(int hours, int mins, int secs) {\r\n        this.hours = hours;\r\n        this.mins = mins;\r\n        this.secs = secs;\r\n    }\r\n\r\n    public Times(Times source) {\r\n        this(source.hours, source.mins, source.secs);\r\n    }\r\n}\r\n<\/pre>\n<p>Il y a ici 3 constructeurs. Le premier, sans arguments, initialise l&rsquo;heure \u00e0 l&rsquo;heure courante du syst\u00e8me (pour cela elle utilise une librairie, <code> java.time.LocalDateTime<\/code>). Le troisi\u00e8me est ce qu&rsquo;on appelle un constructeur par copie. Il cr\u00e9e un nouvel objet, dont le contenu est une copie de l&rsquo;original fourni en argument (on a donc bien 2 objets diff\u00e9rents en m\u00e9moire, ayant les m\u00eames valeurs).<\/p>\n<ol>\n<li>Impl\u00e9mentez un constructeur n&rsquo;ayant que 2 arguments, un pour l&rsquo;heure et un pour les minutes. Que mettre pour les secondes ? Pour cela il est pr\u00e9f\u00e9rable d&rsquo;utiliser le constructeur ayant 3 arguments (observez le constructeur par copie pour trouver la syntaxe). Quel sont les avantages d&rsquo;une telle m\u00e9thode ?<\/li>\n<li>Pourquoi ne peut-on pas faire la m\u00eame chose avec le constructeur sans arguments ? Y a-t-il une fa\u00e7on de contourner le probl\u00e8me pour que tous les objets soient construits par le m\u00eame code ?<\/li>\n<\/ol>\n<h3>2.2 M\u00e9thodes<\/h3>\n<p>On donne maintenant 3 m\u00e9thodes : <code>toString()<\/code> permettant de cr\u00e9er une cha\u00eene de caract\u00e8res pour repr\u00e9senter l&rsquo;objet, <code>equals(Times t)<\/code>pour v\u00e9rifier si 2 heures correspondent au m\u00eame instant, et <code>addMinutes(int n)<\/code> pour ajouter <code>n<\/code> minutes \u00e0 l&rsquo;objet.<\/p>\n<pre class=\"brush: java\">    public String toString() {\r\n        return hours+&quot;:&quot;+mins+&quot;:&quot;+secs;\r\n    }\r\n\r\n    public boolean equals(Times other) {\r\n        return (this.hours == other.hours)\r\n                &amp;&amp; (this.mins == other.mins)\r\n                &amp;&amp; (this.secs == other.secs);\r\n    }\r\n\r\n    public void addMinutesInit(int n) {\r\n        this.mins+=n;\r\n    }\r\n<\/pre>\n<p>Pour tester cette classe, il faut \u00e9crire une fonction <code>main<\/code> dans laquelle on va pouvoir faire appeler les diff\u00e9rentes constructeurs et m\u00e9thodes avec des valeurs vari\u00e9es, afin de rep\u00e9rer les probl\u00e8mes \u00e9ventuels. <\/p>\n<ol>\n<li>Que mettre dans une telle fonction ?<\/li>\n<li>Impl\u00e9mentez cette m\u00e9thode de test.<\/li>\n<li>Que se passe t&rsquo;il si on ajoute 90 minutes \u00e0 une heure donn\u00e9e (il faudra essayer en affichant le r\u00e9sultat).<\/li>\n<li>Quels sont les diff\u00e9rents probl\u00e8mes rencontr\u00e9s?<\/li>\n<li>Corrigez les m\u00e9thodes pour lesquelles des probl\u00e8mes ont \u00e9t\u00e9 rencontr\u00e9s.<\/li>\n<\/ol>\n<p>Revenons aux constructeurs.<\/p>\n<ol start=\"6\">\n<li>Que se passe-t-il si on ex\u00e9cute la ligne suivante\n<pre class=\"brush: java\">    Times t=new Times(1,65,99);\r\n<\/pre>\n<\/li>\n<li>Pouvez vous imaginer une fa\u00e7on de r\u00e9gler ce probl\u00e8me ?<\/li>\n<\/ol>\n<h3>2.3 De nouvelles m\u00e9thodes<\/h3>\n<ol>\n<li>Impl\u00e9menter deux m\u00e9thodes pour tester si une heure est avant ou apr\u00e8s une autre:\n<ul>\n<li><code>public boolean isBefore(Times t)<\/code><\/li>\n<li><code>public boolean isAfter(Times t)<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Impl\u00e9mentez une m\u00e9thode pour ajouter des secondes.<\/li>\n<li>Pouvez vous proposer d&rsquo;autres m\u00e9thodes utiles pour manipuler des heures ?<\/li>\n<\/ol>\n<h3>2.4 Une alarme<\/h3>\n<p>L&rsquo;une des utilisations possibles d&rsquo;une telle classe est de cr\u00e9er un minuteur. <\/p>\n<ol>\n<li>Imaginez une m\u00e9thode permettant de lancer un minuteur en lui donnant le nombre de secondes. Le minuteur affichera un message apr\u00e8s le bon nombre de secondes. <span style=\"text-decoration:underline\">Attention<\/span>: on utilisera plut\u00f4t des secondes pour ne pas avoir \u00e0 attendre des minutes le test, attention \u00e0 le lancer au d\u00e9but avec de toutes petites valeurs &#8211; 1 ou 2 secondes. <\/li>\n<li>Quels sont les probl\u00e8mes rencontr\u00e9s<\/li>\n<\/ol>\n<h2>Exercice 3. Mod\u00e9lisation &#8211; Autopartage<\/h2>\n<p>Pour une activit\u00e9 de d&rsquo;autopartage, nous souhaitons faire une application permettant de g\u00e9rer le parc de voitures et les conducteurs. Ces derniers peuvent prendre un voiture \u00e0 n&rsquo;importe quel site, et les rendre \u00e0 un autre site (on consid\u00e8re qu&rsquo;il n&rsquo;y a pas de probl\u00e8me de place, chaque site peut stocker autant de voitures que n\u00e9cessaire).<\/p>\n<p>On souhaite stocker les informations suivantes :<\/p>\n<ul>\n<li>Pour les voitures : immatriculation, marque, mod\u00e8le, nombre de portes, nombre de passagers, clim ou non, boite manuelle ou automatique (ces informations permettront au client de mieux cibler leur recherche).<\/li>\n<li>Pour les sites d&rsquo;autopartage : nom du site, localisation.<\/li>\n<li>Pour les conducteurs : pr\u00e9nom, t\u00e9l\u00e9phone, voiture en cours d&rsquo;utilisation.<\/li>\n<\/ul>\n<h3>Analyse<\/h3>\n<ol>\n<li>De combien de classes avons nous besoin ?<\/li>\n<li>Quels sont les attributs de ces classes ?<\/li>\n<li>Quelles sont les m\u00e9thodes n\u00e9cessaires ?<\/li>\n<\/ol>\n<p>Il n&rsquo;est pas demand\u00e9 d&rsquo;impl\u00e9menter ces classes pour l&rsquo;instant (mais vous pouvez le faire pour vous entra\u00eener).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>NB : Vous devez faire un rapport de TP dans lequel vous r\u00e9pondrez aux questions, avec notamment des copies des ex\u00e9cutions de vos programmes (ce qui s&rsquo;affiche quand vous ex\u00e9cutez un programme). Exercice 1. Premiers pas Le but de cet<span class=\"ellipsis\">&hellip;<\/span> <span class=\"read-more\"><a href=\"https:\/\/chezdom.net\/etu\/java-miashs-12017-tp-1\/\">Lire la suite &#8250;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"class_list":["post-674","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/P9qu1A-aS","_links":{"self":[{"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/pages\/674","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/comments?post=674"}],"version-history":[{"count":14,"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/pages\/674\/revisions"}],"predecessor-version":[{"id":721,"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/pages\/674\/revisions\/721"}],"wp:attachment":[{"href":"https:\/\/chezdom.net\/etu\/wp-json\/wp\/v2\/media?parent=674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}