• Aucun résultat trouvé

Licence Informatique 2ème année Programmation Objet I

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 2ème année Programmation Objet I"

Copied!
2
0
0

Texte intégral

(1)

Licence Informatique 2ème année

Programmation Objet I

TD n°6 – Collections, sérialization, clonage

1- Liste Rouge

On veut gérer des contacts dans un annuaire avec une liste rouge. Une classe Contact a déjà été écrite et est donnée ci-dessous. On peut comparer deux contacts grâce à l'implémentation de l'interface java.lang.Comparable.

public class Contact implements Comparable<Contact>{

private String nom, mail, tel;

private boolean liste_rouge;

public Contact(String n, String m, String t, boolean rouge){

this.nom = n;

this.mail = m;

this.tel = t;

this.liste_rouge = rouge;

}

public int compareTo(Contact c){

return this.nom.compareTo(c.nom);

}

public String getNom(){return this.nom;}

public String getMail(){return this.mail;}

public String getTel(){return this.tel;}

public boolean listeRouge(){return this.liste_rouge;}

}

L'annuaire est composé de contacts et peut être parcouru par itérateur dans l'ordre alphabétique des noms mais cet itérateur peut avoir deux comportements :

- si l'objet qui a appelé la méthode iterator() est une instance de la classe TelecomCompany (on suppose que cette classe existe déjà), l'itérateur parcourt tous les contacts.

- si l'objet qui a appelé la méthode iterator() n'est pas une instance de TelecomCompany, l'itérateur ne parcourt que les contacts qui ne sont pas sur liste rouge.

Écrire des classes implémentant les contacts et l'annuaire.

Remarques :

- pour savoir quel est le type de l'objet qui a appelé une méthode, on peut utiliser StackTraceElement[] Thread.currentThread().getStackTrace() qui renvoie le tableau représentant la pile des contextes d'exécution du processus courant. Le dernier élément du tableau représente le dernier appel de méthode et on peut donc connaitre le type de l'objet appelant en utilisant la méthode String getClassName() de la classe StackTraceElement.

- l'interface Iterator possède une méthode remove() qu'il n'est pas nécessaire de rendre opérationnelle, on peut se contenter de lui faire lever systématiquement une exception de type UnsupportedOperationException.

- la méthode next() de l'interface Iterator lève une exception de type NoSuchElementException si on l'appelle alors que l'itérateur a dépassé le bout de la liste.

(2)

2- Sécurité aérienne

Il s'agit de développer une classe pour un logiciel distribué embarqué dans un avion. Une partie du logiciel gère l'habitacle de l'avion mais communique avec les autres parties. La classe à écrire doit gérer les rapports concernant l'air dans l'habitacle. Elle doit permettre de créer un rapport avec comme information la date du rapport de type java.util.Date1, la pression, la température et le taux de fumée.

Sur l'ordinateur où s'exécute le programme, un autre morceau du programme est chargé du stockage des rapports dans la boite noire de l'avion. Le programme de gestion de l'habitacle transmet les rapports au programme de stockage par clonage total, pour éviter qu'une erreur d'exécution du programme de stockage détruise définitivement les rapports. D'autre part, les rapports sont transmis par sérialisation vers un autre ordinateur, où le logiciel qui gère le cockpit affiche le rapport pour les pilotes. Cette transmission se fait au travers d'une socket2.

Écrire le code permettant de générer les rapports et de la transmettre aux autres partie de l'application.

3- Planning

On veut développer un logiciel pour planifier la présence de personnes sur différents créneaux horaires dans une entreprise. Il faut donc gérer des heures, les jours de la semaine et des créneaux horaires. Un créneau porte un nom, peut être occupé par plusieurs personnes (avec un nombre minimum et un nombre maximum de personnes présentes) et peut être constitué de plusieurs plages horaires (par exemple le créneau "journée" est composé des plages 9h-12h et 13h- 17h). De plus, un créneau n'est valable que pour certains jours de la semaine (par exemple le créneau "journée" n'est valable que du lundi au vendredi, et le créneau "we" avec pour plage horaire 10h-15h n'est valable que le week-end). Finalement, un planning est une suite de créneaux avec pour chacun la liste des personnes qui occupent ce créneau. On doit pouvoir ajouter ou enlever une personne d'un créneau.

Écrire le code pour représenter les plannings.

Remarque : Java permet de définir des types énumérés qui sont des classes avec des constantes de classes représentant les valeurs du type.

public enum ArcEnCiel{

ROUGE(255,0,0),ORANGE(255,165,0),JAUNE(255,255,0),VERT(0,128,0), BLEU(0,0,255), INDIGO(75,0,130), VIOLET(238,130,238);

private int r,v,b;

private ArcEnCiel(int r, int v, int b){ this.r=r; this.v=v; this.b=b; } public java.awt.Color combine(ArcEnCiel aec){

return new java.awt.Color((this.r+aec.r)/2, (this.v+aec.v)/2, (this.b+aec.b)/2);

} }

1 La classe java.util.Date implémente Serializable et Cloneable et dispose d'un constructeur avec comme paramètre le nombre de millisecondes écoulées depuis le 1er janvier 1970.

2 Java offre une classe Socket sur laquelle on peut ouvrir un flux en écriture en appelant la méthode OutputStream getOutputStream().

Références

Documents relatifs

Chaque mois, les citoyens ayant un revenu mensuel supérieur à 850 euros payent à l'état un impôt sur le revenu égal à 14% de leurs revenus.. En plus, tous les citoyens payent à

Chaque partie peut être une chaine de caractères, mais aussi une histoire en elle-même : les 1001 Nuits racontent l'histoire de Shéhérazade, qui elle-même raconte des histoires

En outre, les acronymes doivent avoir une méthode String getSigle() qui renvoie la chaine de caractères constituée par les premières lettres de chacun des mots (NB : la méthode

Ces cotisant ont aussi une méthode qui calcule leur pension de retraite, égale à 75% du salaire moyen (somme des salaires / mois), plus le montant du compte pénibilité, moins 10%

Le code proposé doit comporter une classe Chiffres qui représente la numérotation avec uniquement des chiffres arabes (du genre 1.2.2) et implémente toutes les méthodes de

Exercice Bonus (peut rapporter jusqu'à 4 points de plus dans la limite de 20/20) : écrivez un programme qui permet de saisir des notes dans des cases et d'obtenir la moyenne des

supposer qu'il existe une fontion de fusion de deux setions d'un tableau. Érire une version multi-tâhes du tri fusion utilisant

Un programme écrit dans un langage de programmation orientée objet peut être vu comme une collection d’objets collaborant pour l’exécution d’une tâche donnée..