La Programmation Objet: Heritage

……….

Ce chapitre du cours traite de concepts relatifs a la programmation objet (hierarchie de classe, heritage, extension, masquage) et sera illustré par un exemple de représentation de comptes bancaires et d’opérations liées a la manipulation de ceux-ci (retrait, depot, consultation).

12.1 Une classe simple pour représenter des comptes bancaires

Décrivons maintenant la classe permettant de representer un compte bancaire. Il faut, au minimum, connaitre le proprietaire (que l’on representera simplement par son nom), le numéro du compte (que l’on représentera par tableau de caractères) et la somme disponible sur le compte (représentée par un double). Pour les opérations sur un compte, on se limite aux operations de retrait (on décrémente si possible le compte d’une somme donnée), le dépot (on augmente le compte d’une somme donnée) et la consultation (on retourne la somme disponible sur un compte). Dans le cas ou un retrait est impossible on lèvera une exception de type provision Insuffisante Erreur définie séparément.
….

12.2 Extension des données, notion d’héritage et syntaxe

Supposons maintenant que l’on souhaite prendre en considération la possibilité d’avoir un découvert sur un compte (un retrait conduit a un solde négatif) ou la possibilité d’associer une rémunération des dépots sur un compte (compte rémunéré) ; ces cas ne sont pas prévus dans la classe que nous avons définie. Une première possibilité est de modifier le code source de la classe précédente. Ceci peut impacter tout programme (ou toute classe) qui utilise cette classe et conduit a une difficulté : comment définir un compte rémunéré sans découvert ou un compte avec découvert possible mais non rémunéré.
Il faudrait dans ce cas dupliquer `a la main ces classes pour les particulariser ; il n’est pas difficile d’imaginer l’ensemble des modifications qu’entrainerait cette solution sur les programmes utilisant la classe Compte Bancaire.
Les langages de programmation modernes offrent différentes solutions a ce problème ; le but est chaque fois de permettre une extension ou une specialisation des types de base. Avec la programmation par objets ceci se réalise naturellement avec la notion d’héritage. Le principe consiste a definir une nouvelle classe a partir d’une classe existante en “ajoutant” des données a cette classe et en reutilisant de fac¸on implicite toutes les données de la classe de base.

12.3 Extension de la classe CompteBancaire en CompteAvecDe-couvert

Pour cette nouvelle classe nous introduisons une nouvelle donnée : le montant maximum du découvert. Cela nous conduit a modifier la methode retrait de telle sorte qu’un retrait puisse etre effectuer meme si le solde n’est pas suffisant (il faudra néanmoins que le solde reste plus grand que l’opposé du découvert maximal autorisé). Cette méthode retrait masquera la méthode de meme nom de la classe mère. Par ailleurs, on introduira une nouvelle méthode fixe Decouvert Maximal qui permet de modifier le montant du découvert maximum autorisé. Les autres données et méthodes seront reprises telles quelles (par le mécanisme d’héritage). Pour la définition du constructeur on utilise le constructeur de la classe mère (par un appel `a super). Notons que super est toujours appelé dans un constructeur soit de manière implicite en début d’exécution du constructeur soit de manière explicite par un appel a super.
12.4 Extension de la classe CompteBancaire en Compte Avec Remuneration
Pour cette extension, il faut au minimum connaitre le taux de rémunération du compte `a partir duquel la rémunération s’applique. On suppose que les intèrets sont versés `a part et intégrés sur le compte une fois l’an. Afin de simplifier l’écriture de cette classe nous supposerons qu’il existe une méthode qui calcule les intérets (le code est un peu complexe et nécessite la connaissance des dates auquelles sont faites les opérations afin de calculer les durées pendant lesquels l’inétret s’applique).

……….

Cours pdf

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *