I. Problématique▲
On dispose d'une classe livre dont la définition UML simplifiée est la suivante :
On souhaite gérer le nom, le prénom de l'auteur du livre. Quelle solution peut-on envisager ?
Ajouter le nom et le prénom de l'auteur dans la classe « Livre » et avoir des risques de redondance d'information ?
C'est une pure hérésie ! Vous vous rappelez le sort que l'on réservait aux hérétiques au Moyen-Âge ? Alors, faites attention !
La meilleure solution est de créer une classe « Auteur » et de lier cette classe a « Livre ».
II. Diagramme de classes UML▲
L'association représente des relations structurelles entre classes : elle possède un nom qui symbolise l'association.
La multiplicité d'une association (=cardinalité en merise) représente combien d'objets de la classe considérée sont reliés à un objet de l'autre classe.
1 ou 1..1 : un et un seul
0..1 : zéro ou 1
n: n
m..n: de m à n
* ou 0..*: de zéro à plusieurs
1..*: de un à plusieurs
Maintenant le mieux est de commencer à mettre les mains dans le « cambouis ».
Créez un nouveau projet nommé : Tpobjet8-2 vous ne déclarerez pas d'analyse.
Voici la première et seule fenêtre du projet nommée « Départ » :
Il y a cinq champs de saisie :
Anom, Aprénom, Ltitre, AfficheNomAuteur, AffichePrénomAuteur.
Quatre boutons :
BcreerAuteur, BcreerLivre, BnomAuteurLivre, BprenomAuteurLivre.
Nous allons créer les classes Livre et Auteur.
Les membres Privés à la classe sont :
le Titre du Livre qui recevra le titre de l'ouvrage ;
Numéro qui contiendra le numéro du livre (en fait le total des livres +1) ;
AuteurLivre est un objet de type auteur qui sera implémenté plus tard.
Les membres Protégés :
Compteur livre est un membre Statique à la classe qui comptera le nombre d'instances de la classe Livre.
Nous allons passer au constructeur :
Maintenant vous commencez à comprendre le fonctionnement du constructeur, il récupère 2 paramètres : le titre du livre et un objet de type auteur.
Donc le membre prive Titre recoit P_Titre, on active la méthode AugmenteCompteur, numéro recevra un numéro de livre grâce à la méthode statique GetCompteur et enfin l'objet dynamique auteurlivre reçoit l'objet aut passé en paramètre.
Je vous laisse saisir et comprendre le fonctionnement de ces différentes méthodes, il n'y a rien de compliqué ! On passe à la classe Auteur ? C'est parti !
Rien de plus classique : une définition de la classe, un constructeur, deux accesseurs, deux mutateurs.
Nous avons les deux classes, l'ébauche de la fenêtre, il nous reste à mettre en œuvre l'ensemble.
III. Finalisation :▲
Nous allons implémenter nos deux objets de façon dynamique, pourquoi ? Jusqu'à présent les objets étaient déclarés et instanciés d'un seul « jet ». Cela signifie que l'on connaît à priori les paramètres du constructeur à la déclaration de l'objet. Nous allons cette fois-ci procéder en deux étapes : on commencera à déclarer l'objet ( en fait, lui réserver la place mémoire) et ensuite on l'instanciera.
Pour les déclarer, allez dans le code du projet (Projet->Code du projet ) et saisissez ceci :
Passons à la fenêtre principale
Dans la zone auteur, vous saisirez le nom et le prénom, l'objet sera créé par un clic sur le bouton « Créer Auteur », dont le code est le suivant :
Aut1 =allouer un Auteur(ANom,Aprenom)
Cette ligne de code instancie vraiment l'objet en passant les paramètres au constructeur de la classe Auteur.
Le code du bouton « Créer Livre » est le suivant :
Liv1=allouer un Livre(LTitre,Aut1)
Comme vous le voyez, le constructeur de livre reçoit l'objet Aut1 qui contient le nom et le prénom de l'auteur. Comment en être sûr ? Il suffit de faire afficher ces deux informations c'est le rôle des deux boutons qui suivent.
Code du bouton « Nom de l'auteur du livre » :
autlu est un objet Auteur dynamique
autlu=Liv1:GetAuteurLivre()
AfficheNomAuteur=autlu:GetNom()
Vous vous rappelez le code des méthodes de la classe Livre ? On veut récupérer le nom de l'auteur, c'est le rôle de la méthode GetAuteurLivre(). En fait elle renvoie l'objet Auteur.
Pour expliquer le code :
Autlu est un objet Auteur qui reçoit en copie un objet du même type provenant de l'objet Liv1 et le champ de la fenêtre AfficheNomAuteur reçoit la variable envoyée par GetNom.
Ce n'est pas compliqué en soit, si vous ne comprenez pas ce cheminement relisez le code de la classe Livre.
Il nous manque que le code de « Prénom de l'auteur du livre » :
autlu est un objet Auteur dynamique
autlu=Liv1:GetAuteurLivre()
AffichePrenomAuteur=autlu:GetPrenom()
Pas besoin d'explication ? Non ? Alors c'est super. Pour continuer à vous entrainer, vous pouvez faire en sorte que le nombre de livres s'affiche. Eh oui, je ne l'ai pas implémenté. À bientôt