Contrôle continu Nom : Prénom
Transcription
Contrôle continu Nom : Prénom
Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL Nom : Contrôle continu Prénom : Programmation objet 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. Partie 1 : Classes, constructeurs, méthodes, tableaux On considère une classe Convive qui représente un invité à un banquet et une classe Table qui représente la table utilisée pour ce banquet. Un convive a un nom, un prénom, un age et un sexe. Le sexe est représenté par un caractère qui peut prendre deux valeurs : ‘H’ pour homme et ‘F’ pour femme. La classe Convive dispose en outre d’une méthode getNoms retournant une chaîne de caractères constituée du prénom et du nom de la personne concernée, d’une méthode getAge retournant son âge, et d’une méthode getSexe retournant son sexe. Complétez ci-dessous la définition de cette classe. public class Convive { String nom,prenom; int age; char sexe; public Convive(String nom, String prenom, int age, char sexe) { } String getNoms() { } int getAge() { } char getSexe() { } } Contrôle continu n°1 - page 1 sur 8 Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL La classe Table contient un tableau de convives. L’indice de chaque cellule du tableau correspond au numéro de la place à table du convive concerné, ou contient null si la place est vide. Comme c’est un banquet d’informaticiens, les places sont numérotées à partir de 0. Complétez ci dessous la définition de la classe Table. public class Table { private Convive[] tab; Crée une table avec n places vides. public Table(int n) { Retourne true si la place est libre, false sinon. } public boolean estLibre(int place) { } public void ajouteInv(Convive inv, int place) { Met un convive à la place mentionnée, en supposant qu’elle est vide. } Libère toutes les places public void libereTable() { } } Complétez ci contre la définition de la méthode qui retourne le nombre de femmes à table. Attention, certaines places peuvent être vides. public int combienDeFemmes() { } Contrôle continu n°1 - page 2 sur 8 Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL Complétez la méthode ci-dessous de manière à ce qu’elle retourne un tableau d’entiers contenant les numéros des places où se trouvent des femmes. Ne faites cet exercice que si vous avez les compétences nécessaires, sinon passez à la suite. public int[] ouSontLesFemmes() { } Partie 2 : Variables de classe, d’instances, de méthodes… Deux classe A et B, ainsi qu’une classe Main, sont définies page suivante. Dans les définitions des classe A et B, encadrez les variables d’instances, entourez d’un ovale les variables de classe, et soulignez les variables de méthode. Répondez par oui ou par non aux questions suivantes : Y a t-il un constructeur implicite dans la classe A ? Y a t-il un constructeur implicite dans la classe B ? Y a t-il un constructeur par défaut dans la classe A ? Y a t-il un constructeur par défaut dans la classe B ? Contrôle continu n°1 - page 3 sur 8 Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL public class A { private B b; public class B { private int x; public int y; private static int z=5; public void m3(B z) { b = z; } public String toString() { return x+" "+y+" "+z; } public void m4() { B b = new B(); } public void m1() { y++; z++; } public void m5() { b = new B(); } public B() { x=11; y=22; } public void afficher() { System.out.println("--> " + b.toString()); } public void afficher() { System.out.println(toString()); } } } Dans la classe Main ci-contre, barrez les lignes de code qui provoquent une erreur due à l’appel d’une méthode avec un objet null ou à la tentative d’accéder à une variable inaccessible depuis la classe Main. Puis donnez ci dessous les affichages réalisés par l’exécution de la méthode main. public class Main { static public void main(String[] args) { A a = new A(); B b1 = new B(); B b2 = new B(); B b3 = b2; b1.x++; b1.y++; a.afficher(); b1.afficher(); b2.afficher(); b1.m1(); b2.m1(); b1.afficher(); b2.afficher(); b3.m1(); b2.afficher(); a.m4(); a.afficher(); a.m3(b1); a.afficher(); a.m4(); a.afficher(); a.m5(); a.afficher(); } } Contrôle continu n°1 - page 4 sur 8 Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL Partie 3 : Composition, héritage, interfaces, ArrayList. On représente certains concepts du milieu hospitalier à l’aide des classes suivantes : ● Personnel : Membres du personnel d’un hôpital. ● PersonnelMédical : Cas particulier des personnels intervenant lors des soins donnés aux patients. ● Medecin : Les médecins sont des personnels médicaux qui peuvent faire des prescriptions. ● Infirmier : Un autre type de personnel médical. ● Comptable : Un cas particulier de personnel qui n’est pas un personnel médical. ● Hopital : Un établissement médical constitué de plusieurs services ● Service : Une partie d’un l’hopital. ● ServiceDeCardiologie : Un service particulier dédié aux traitement des maladies cardiovasculaires. Représentez graphiquement les liens d’héritage et de composition entre ces classes. Contrôle continu n°1 - page 5 sur 8 Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL Complétez la définition suivante. public class Personnel { private String nom,prenom; private int indice; public Personnel(String nom, String prenom, int indice) { } } Certaines catégories de personnel, dont notamment le personnel médical, doivent être réquisitionnables, et les classes qui les représentent doivent implanter une méthode public void requisitionner(). Détaillez l’interface Requisitionnable permettant de modéliser cette notion. Complétez la définition suivante sans oublier que les personnels médicaux doivent être réquisitionnables (ne mettez rien dans le corps de la méthode concernée) et sont avant tout des personnels. La variable d’instance certification est une ArrayList de String qui est vide (pas null) à la construction d’une instance. public class PersonnelMedical { certifications; public PersonnelMedical(String nom, String prenom, int indice) { } } Contrôle continu n°1 - page 6 sur 8 Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL Définissez la classe Medecin en lui adjoignant juste un constructeur. Expliquez brièvement pourquoi on ne peut pas, en l’état, mettre dans la classe Medecin une méthode toString retournant une chaîne contenant le nom et le prénom du médecin. Proposez (donnez juste les explications, pas le code java) au moins deux solutions permettant de résoudre ce problème. Contrôle continu n°1 - page 7 sur 8 Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL Partie 4 : ArrayList, String. La classe String inclut une méthode length qui retourne la longueur de l’instance courante. Par exemple, si s est une instance de String représentant la chaîne "pi", s.length() retourne la valeur 2. Réalisez une méthode statique cumul qui accepte en paramètre une liste w de String et retourne la somme des longueurs des chaînes contenues dans w. public static int cumul(ArrayList<String> w) { } Réalisez une méthode statique maxN qui accepte en paramètres une liste w de String et un entier n et retourne la liste des chaînes de longueur inférieure ou égale à n contenues dans w. public static ArrayList<String> maxN(ArrayList<String> w, int n) { } Contrôle continu n°1 - page 8 sur 8