Enseignement > Programmation orientée objet > Java > Examen 2018  

Examen de POO

Jeudi 20 janvier 2018

tout document autorisé
durée : 3 heures

Le code que vous écrirez devra comporter tous les commentaires permettant de générer automatiquement la documentation de votre programme. 2 points seront accordés à la qualité de la documentation générée.

On cherche à modéliser en Java quelques éléments de la chimie.

Tous les fichiers que vous aller utiliser et créer devront être placés dans un package que vous appelerez chimie.

1 Les atomes

Voici un fichier java qui donne une énumération des éléments chimiques avec leur nom, leur numéro atomique et leur symbole.

Examinez attentivement cette énumération (en particulier la fin du fichier qui décrit précisemment la structure), et utilisez cette énumération pour créer une classe Atome : un atome est défini par son élément chimique et sa masse atomique.

NB : certains corps peuvent avoir différents isotopes, c'est-à-dire être composés d'atomes ayant le même élément chimique, avec des masses atomiques différentes. Exemple : carbone 12 ou carbone 14

Ecrire la classe Atome reprenant ces 2 caractéristiques (élément chimique et masse atomique). Ecrire un constructeur, et encapsuler les attributs (on ne peut pas modifier un atome après sa création). Reécrire la méthode toString de manière judicieuse (voir la question 2). Implémenter l'interface Comparable<Atome> pour cette classe. (2 atomes sont égaux si ils sont du même élément chimique et si ils ont la même masse atomique ; sinon les atomes sont comparés selon leur masse atomique).

La masse atomique d'un atome est forcément supérieure au numéro atomique de son élément chimique. Si cette règle n'est pas respectée lors de la création d'un atome, lever une exception de type IllegalArgumentException.

2 Les molécules

Une molécule est formée par un assemblage chimique d'atomes liés entre eux par des liaisons covalentes. Cependant, on ne vérifiera pas dans cet exercice la validité chimique d'une molécule, que l'on considérera simplement comme une combinaison d'atomes à laquelle on donne un nom.
Exemple : eau H2O.
Ecrire une classe Molecule formée d'un nom et d'une structure collective d'atomes. Vous justifierez le choix de votre structure collective dans les commentaires de votre code. Ecrire un constructeur, et encapsuler les attributs (on ne peut pas modifier une molécule après sa création).

Ecrire une méthode masseMoleculaire (on peut calculer la masse moléculaire comme la somme des masses atomiques de ses atomes).

Reécrire la méthode toString pour définir sa formule chimique (on ne cherchera pas à respecter les conventions des chimistes).

Implémenter l'interface Comparable<Molecule> pour cette classe : 2 molécules sont égales si elles ont la même formule chimique, sinon elle sont comparées selon  leur masse moléculaire.

3 Les réactions chimiques

Une réaction chimique est formée de plusieurs molécules appelées "réactif" présentes avant la réaction, et de plusieurs molécules appelées "produit" qui sont formées par la réaction en recombinant les atomes des molécules du réactif.
Exemple :

Une réaction chimique est modélisée par une équation chimique.
Exemple :  CH4 + 2 O2 → CO2 + 2 H2O
Ecrire une classe ReactionChimique pour modéliser ce phénomène.
Ecrire un constructeur, et encapsuler les attributs. Reécrire la méthode toString pour afficher son équation chimique.
Ecrire une méthode booléenne reactionEquilibree qui vérifie que tous les atomes présents dans le réactif se retrouvent dans le produit de la réaction (Rien ne se perd, rien ne se crée, tout se transforme).

Ecrire un programme pour tester votre code avec l'exemple ci-dessus.

Bonus pour les étudiants qui ont le temps : rendre les classes Molecule et ReactionChimique sérialisables pour pouvoir les sauvegarder sur disque et les relire.