Identifiant : Contrôle terminal Programmation objet et Internet Vous devez répondre dans les cadres aux questions posées. Documents de cours et notes personnelles autorisés. Téléphones portables, ordinateurs et calculatrices interdits. La classe Latitude représente une latitude géographique exprimée en degrés sous forme décimale, c est à dire sous la forme d une valeur de type double. Par convention, dans le cadre de cet exercice, une latitude Nord est représentée par une valeur positive de la variable d instance lat, et une latitude sud par une valeur négative. Par exemple la latitude 47.3325 Nord est représentée par 47.3325 alors que la latitude 18.568 Sud est représentée par -18.568. Vous devez compléter la classe Latitude ci-dessous de manière à la doter : D un deuxième constructeur acceptant deux paramètres : une valeur x de type double représentant la valeur absolue de la latitude et une valeur ns de type char qui indique sa direction avec la convention N pour Nord et S pour Sud. Ce constructeur devra lever une exception BadValue si le caractère passé en paramètre n est ni N ni S. Des méthodes getabs, getnord et tostring. public class Latitude private double lat; public Latitude(double x)lat=x; Ceci est la seule variable d instance de la classe. Ceci est le premier constructeur. Placez le deuxième dans l espace vide en dessous. public double getabs()return Math.abs(lat); public boolean getnord() Retourne la valeur absolue de la latitude. Retourne true pour une latitude Nord, false sinon. Retourne une description de la forme «Latitude 45.289 Nord» ou «Latitude 15.223 Sud». Contrôle terminal - 2013 - page 1 sur 7
La classe Latitude est elle modifiable? Justifiez brièvement votre réponse. Dans la suite, on suppose l existence d une classe Longitude représentant une longitude géographique, avec les mêmes conventions de représentation et les mêmes méthodes et constructeurs que pour la classe Latitude sauf que les directions sont Est et Ouest au lieu de Nord et Sud. La classe GPSpoint représente un point GPS constitué d une latitude et d une longitude. Complétez ci-dessous la définition de classe GPSpoint. public class GPSpoint private Latitude latitude; private Longitude longitude; public GPSpoint(Latitude lat, Longitude lon) public GPSpoint(double lat, double lon) public void setlat(latitude newlat) public void setlon(longitude newlon) Retourne une description de la forme «Latitude 45.289 Nord, Longitude 15.25 degrés Ouest». Réutilisez au maximum le code existant. Contrôle terminal - 2013 - page 2 sur 7
Un point d intérêt est un point GPS ayant en plus un descriptif. Complétez dans le cadre ci dessous la définition de la classe IntPoint, dérivée de GPSpoint, qui représente un point d intérêt. public class public IntPoint(double lat, double lon, String desc) public IntPoint(Latitude lat, Longitude lon, String desc) Retourne une description incluant la latitude, la longitude et le descriptif. Réutilisez le tostring de la classe GPSpoint. On souhaiterait disposer d une méthode static retournant le nombre de d instances de Int- Point créées depuis le début de l exécution du programme. Expliquez comment faire. Contrôle terminal - 2013 - page 3 sur 7
Définissez une méthode main qui crée un point d intérêt de latitude 57.26 Nord et de longitude 5.32 Sud avec comme descriptif «Moulinsard», puis affiche ce point d intérêt. Le constructeur à deux paramètres de la classe IntPoint doit être utilisé. Vous devez prévoir la capture d une éventuelle exception qui serait levée lors de la création de la latitude ou de la longitude nécessaires pour construire le point d intérêt. Si une telle exception se produit, prévoyez l affichage d un message d erreur. Si on crée une instance de ArrayList<GPSpoint>, sera t-il possible de mettre des instances de IntPoint dans cette liste? Justifiez brièvement votre réponse. La classe Itineraire représente un itinéraire constitué d une liste d instances de GPSpoint. Cette liste est stockée dans une variable d instance de type ArrayList<GPSpoint>. La classe Itineraire doit par ailleurs comporter : Un constructeur créant un itinéraire constitué d une liste vide de points GPS. Une méthode add permettant d ajouter un point GPS à l itinéraire. Une méthode abstraite gettype retournant une chaîne de caractères décrivant le type de l itinéraire courant. Ce type est définit dans une classe dérivée de Itineraire. Une méthode tostring retournant une description de l itinéraire incluant la liste des points GPS dont il est constitué et son type (obtenu par appel de la méthode gettype). Complétez la définition de cette classe dans le cadre page suivante. Contrôle terminal - 2013 - page 4 sur 7
class Itineraire public Itineraire() public void add(gpspoint p) abstract String gettype(); Réalisez une classe ItiVoiture représentant un cas particulier d itinéraire (donc dérivant de la classe Itineraire) à parcourir en voiture. Cette classe doit être concrète. Il doit donc être possible de créer des instances de ItiVoiture. Mettez un constructeur dans cette classe si et seulement si c est nécessaire. public class ItiVoiture extends Itineraire Contrôle terminal - 2013 - page 5 sur 7
On imagine qu il y a plusieurs classes dérivées de Itineraire telles que ItinérairePedestre, ItineraireVelo, ItineraireMoto etc. On souhaiterait que certaines de ces classes appartiennent à un type particulier nommé ItiVAM spécifique aux itinéraires pour véhicules à moteur. On souhaiterait que toute les classes de ce type disposent obligatoirement d une méthode double getconsommation() retournant la quantité de carburant consommée par la pratique des itinéraires concernés. Proposez une solution basée sur la notion d interface et expliquez comment la mettre en œuvre. On souhaite réaliser une méthode static acceptant en paramètre un tableau d instances de String et retournant la plus petite des chaînes du tableau au sens de l ordre lexicographique standard du langage Java. La solution ci dessous a été proposée par un étudiant mais comporte trois erreurs. Entourez les parties erronées et expliquez comment les corriger. public static String min(string tab) String mini = tab[0]; for(int i=1; i<tab.length; i++) if(tab[i] < mini) tab[i] = mini; return mini; Contrôle terminal - 2013 - page 6 sur 7
Si, dans la méthode min corrigée, on remplace le type String (partout où il apparaît) par le type Latitude, le compilateur acceptera t-il de compiler cette nouvelle méthode ou bien affichera t-il un message d'erreur? Dans le cas où un message d'erreur s'affiche à la compilation, préciser ce que dira ce message et comment remédier au problème. Dans une classe Main, il y a les deux méthodes ci-dessous. static public void main(string[] argv) String[] tab=new String[]"Picsou","Flairsou","Gripsous"; test(tab); public static void test(string[] t) t[0]=t[0]+t[1]; System.out.println("Que peut il y avoir dans la pile et le tas?"); Représentez graphiquement les variables situées dans la pile, les objets situés dans le tas et les liens entre ces variables et ces objets immédiatement après l'exécution de la ligne t[0]=t[0]+t[1];. Contrôle terminal - 2013 - page 7 sur 7