Organisation de concerts : Héritage, classe abstraite, fichiers de données
L'organisation d'un concert de musique comprend le choix des uvres musicales à présenter, puis la sélection des musiciens ayant les compétences requises.
Chaque modèle d'instrument de musique est désigné par un nom particulier : violon, violoncelle, contrebasse, piano, flûte, clarinette, hautbois, trompette, cor, basson, trombone, cymbales, batterie,
Il appartient également a une certaine classe d'instruments : instruments à cordes, à anche, à membrane, à percussion,
Nous définirons donc tout d'abord une classe d'objets "Instrument" , dont les éléments correspondent aux différents modèles d'instruments, et sont caractérisés par le nom et le type de l'instrument .
La liste des instruments nécessaires à l'exécution d'une uvre musicale est composée de lots d'instruments d'un même modèle : 8 violons, 2 flûtes, 2 hautbois 2 clarinettes, 2 violoncelles, Nous définirons donc également une classe "LotInstruments", dont les objets seront composés d'un "instrument" (modèle d'instrument) , accompagné d'un nombre d'instruments.. L'ensemble des instruments nécessaires à l'exécution d'une uvre apparaîtra alors comme une collection d'objets de type "LotInstruments".
Du point de vue de l'organisation de concerts, les uvres musicales seront des objets identifiés par un nom, et caractérisés par la liste des lots d'instruments nécessaires à l'exécution de l'uvre, telle que nous venons de la définir.
Par ailleurs, chaque musicien est caractérisé par son nom et par ses compétences musicales, c'est à dire par la liste des modèles d'instruments dont il sait jouer. Nous définirons donc une classe d'objets "Musicien", dont les éléments sont composés de l'identification du musicien, accompagnée de la liste des modèles d'instruments qu'il pratique (collection d'instruments).
Selon leur spécialité, les musiciens sont regroupés au sein d'orchestres de diverses catégories : orchestre de chambre, orchestre symphonique, orchestre de jazz., ayant chacun leur spécificité. C'est pourquoi nous définirons tout d'abord une classe abstraite MusicienSet correspondant à une collection de musiciens, comportant des méthodes applicables à tout type d'orchestre. Les orchestres des divers types seront ensuite dérivés de cette classe abstraite.
I MODELISATION OBJET
1 Classes Instrument , LotInstruments et Musicien :
a) Chaque modèle d'instrument de musique est caractérisé par son nom, ainsi que par son type. Les objets de la classe Instrument devront donc comporter les champs suivants :
nom (String)type (String) |
Les méthodes à implémenter au niveau de cette classe seront :
-
String toString ( ) : méthode fournissant une version affichable des données de l'objet actuel.b) Par ailleurs, dans un orchestre, il faut en général disposer de plusieurs instruments du même modèle, et l'on va donc définir aussi une classe LotInstruments , dérivée de la classe Instrument, permettant de mémoriser le nombre d'instruments d'un modèle donné figurant dans un orchestre. Les objets de la classe LotInstruments devront donc comporter en plus le champ de type int nbrInstr .
Les méthodes implémentées au niveau de cette classe seront :
-
LotInstruments (Instrument instr , int nbrInstr) : constructeur initialisant les champs de l'objet à l'aide des valeurs fournies en paramètres.-
String toString ( ) : méthode fournissant un version affichable des données de l'objet actuel.c) Un musicien d'orchestre est caractérisé par son nom et son prénom, ainsi que par la liste des modèles d'instruments qu'il pratique. Les objets de la classe Musicien devront donc comporter les champs suivants :
nom (String)prenom (String)lstInstr (collection d'instruments, du type ArrayList) |
Les méthodes à implémenter au niveau de cette classe seront :
2 Classes InstrumentSet et OeuvreMusicale :
a) L'ensemble des instruments nécessaires à l'exécution d'une uvre musicale sera introduit au moyen de la classe InstrumentSet , dont les objets seront des collections de "lots d'instruments" : Cette classe sera dérivée de la classe HashSet ; elle ne comportera aucun champ supplémentaire, mais seulement plusieurs méthodes spécifiques :
b) Les uvres musicales sont des objets identifiés par un nom, et caractérisés par la liste des instruments nécessaires à l'interprétation de l'uvre. Les objets de la classe OeuvreMusicale devront donc comporter les champs suivants :
nomOeuvre (String)instrSet (InstrumentSet) |
En vue de faciliter les tests de mise au point, on mettra en place dans cette classe deux méthodes pour permettre la sauvegarde dans un fichier-texte des données relatives à une uvre musicale, puis la re-création en mémoire d'un objet "OeuvreMusicale", à partir des données du fichier-texte.
Les méthodes à implémenter au niveau de cette classe seront donc les suivantes :
3 Classe abstraite MusicienSet , et classes OrchestreSympho , OrchestreJazz , OrchestreCh :
La classe abstraite MusicienSet correspond à une collection de musiciens pouvant constituer un orchestre. Les objets de la classe Musicien comporteront les champs suivants :
nomMusicienSet (String)musiciens (HashSet) |
Comme pour la classe OeuvreMusicale, et en vue de faciliter les tests de mise au point, on mettra aussi en place dans la classe MusicienSet deux méthodes pour permettre la sauvegarde dans un fichier-texte des données correspondant à un orchestre, puis la re-création en mémoire d'un objet "MusicienSet ", à partir des données du fichier-texte.
Les méthodes à implémenter au niveau de cette classe seront les suivantes :
- void toString (
) : version affichable des données d'un MusicienSet, avec pour chaque musicien, la liste des instruments pratiqués.
b) Les classes OrchestreSympho , OrchestreCh , OrchestreJazz , seront des classes dérivées de la classe MusicienSet , elles ne comportent aucun champ supplémentaire, mais seulement des constructeurs spécifiques, tenant compte de règles particulières à chacune des classes :
- un OrchestreSympho comporte plus de 50 musiciens, (parmi lesquels figurent au moins 8 instruments à cordes, 2 flûtes, 2 hautbois, 2 bassons, 2 clarinettes, 2 cors, 2 trombones, 2 trompettes).
- un OrchestreCh comporte au plus 49 musiciens,
- un OrchestreJazz comporte nécessairement au moins un trompettiste, un saxophoniste, un trombone, et une batterie.
(Tous les constructeurs doivent être redéfinis, mais les contraintes relatives à la composition de chaque type d'orchestre ne seront prises en compte que par les constructeurs à deux paramètres, qui devront "lever une exception" si les données fournies ne respectent pas les règles relatives au type d'orchestre considéré.)
4 Classe Concert :
Pour simplifier la programmation, on supposera qu'une seule uvre musicale est présentée au cours du concert. Les objets de la classe Concert sont alors définis par :
Les méthodes à prévoir pour les objets de cette classe sont le constructeur Concert , les différents accesseurs aux membres de l'objet, ainsi qu'une méthode toString ( ) permettant d'obtenir une version affichable des différentes données de l'objet, avec une présentation correcte.
Le constructeur :
Concert (String titre, OeuvreMusicale oeuvre, Orchestre orchestre, HashSet musiciensOeuvre )
est avant tout chargé de vérifier la cohérence des données fournies, c'est à dire si l'orchestre indiqué est capable d'interpréter l'uvre musicale indiquée. Dans ce cas, il initialisera les champs titre, oeuvre et orchestre de l'objet à l'aide des données fournies ; il initialisera également le champ musiciensOeuvre avec une sélection de musiciens, choisis au sein de l'orchestre pour l'interprétation de l'uvre. Dans le cas contraire, le constructeur devra se borner à "lever une exception".
On pourra définir au préalable une méthode de classe :
HashSet selectMusiciens (OeuvreMusicale oeuvre
, Orchestre orchestre)effectuant une sélection, parmi les musiciens de l'orchestre, des ceux qui sont nécessaires pour jouer l'uvre musicale indiquée, et qui construit la collection (HashSet) des musiciens sélectionnés. Si la construction de cette collection est impossible, la méthode devra retourner le pointeur null .
II PROGRAMMATION DEMANDEE :
1 a) Définir les classes Instrument , LotInstruments et Musicien , et vérifier le bon fonctionnement des différentes méthodes écrites pour ces classes..
b) Définir les classes InstrumentSet et OeuvreMusicale , et vérifier le bon fonctionnement des différentes méthodes écrites pour ces classes. Le programme de test devra en particulier vérifier la sauvegarde dans un fichier-texte des données relatives à une uvre musicale, ainsi que le rechargement en mémoire de ces données, permettant de recréer l'objet.
2 a) Définir la classe abstraite MusicienSet ainsi que la classe dérivée OrchestreCh.
b) Vérifier le bon fonctionnement des différentes méthodes écrites pour ces classes en écrivant un programme qui définit, à partir de données entrées au clavier, un orchestre de chambre composé de 6 musiciens pratiquant chacun plusieurs instruments différents. Le programme affichera ensuite la composition complète de cet orchestre, ainsi que la liste de tous les instruments différents pratiqués par les musiciens. Il effectuera également la sauvegarde dans un fichier-texte de l'ensemble des données relatives à l'orchestre.
3 a) Définir la classe Concert.
b) Ecrire un programme qui permet d'introduire au clavier les données relatives à une uvre musicale, prévue pour être mise au programme d'un concert. Le programme effectuera également la sauvegarde dans un fichier-texte des données relatives à cette uvre musicale.
c) Ecrire un programme qui permet, à partir des données introduites précédemment dans les questions 2 et 3 , de construire un objet de type Concert , si les données disponibles s'avèrent compatibles, et affiche alors, avec une mise en page correcte, l'ensemble des données correspondantes.