# Programmation orientée objet : héritage et polymorphisme

Informatique de gestion · Bachelor 2

> Classes, encapsulation, héritage, polymorphisme et composition appliqués à des objets métier.

## Introduction

La programmation orientée objet (POO) organise un programme en objets qui regroupent des données (attributs) et des comportements (méthodes). Une classe sert de modèle pour créer des objets ; chaque objet est une instance de classe avec son propre état. Ce paradigme est dominant dans le développement d'applications métier, notamment en Java, C# ou Python.

Quatre principes structurent la POO : l'abstraction, qui isole l'essentiel d'un concept ; l'encapsulation, qui cache l'état interne derrière une interface publique ; l'héritage, qui permet à une sous-classe de réutiliser et d'étendre une classe parente ; et le polymorphisme, qui permet d'appeler la même méthode sur des objets de classes différentes avec un comportement adapté à chacun.

En informatique de gestion, on modélise par exemple un Client, un Article, une Facture ou différents modes de paiement. Un bon concepteur sait aussi quand préférer la composition à l'héritage, et utilise les interfaces pour limiter le couplage entre composants.

## Objectifs d'apprentissage

- Distinguer classe, objet, attribut et méthode
- Appliquer l'encapsulation avec des attributs privés et des accesseurs
- Concevoir une hiérarchie d'héritage simple et la redéfinition de méthodes
- Expliquer le polymorphisme d'héritage et le rôle d'une interface
- Justifier le choix entre héritage et composition

## Concepts clés

- **Classe et objet** : La classe définit la structure et le comportement ; l'objet est une instance concrète avec ses valeurs d'attributs.
- **Encapsulation** : Les attributs sont privés et accessibles via des méthodes publiques qui peuvent valider les données et protéger l'invariant de l'objet.
- **Héritage** : Une sous-classe hérite des attributs et méthodes de sa superclasse, peut les redéfinir et en ajouter (relation « est un »).
- **Polymorphisme** : Un même appel de méthode produit un comportement dépendant du type réel de l'objet, résolu à l'exécution (liaison dynamique).
- **Composition et interface** : La composition (relation « a un ») réduit le couplage ; une interface définit un contrat sans implémentation.

## Conclusion

La POO structure le code autour de concepts métier : l'encapsulation protège les données, l'héritage mutualise le code, le polymorphisme et les interfaces rendent le système extensible.

Un bon usage privilégie des hiérarchies d'héritage peu profondes, des interfaces claires et la composition lorsque la relation n'est pas un véritable « est un ».

## Cartes

### Quelle différence entre une classe et un objet ?

La classe est le modèle (type) ; l'objet est une instance de cette classe, avec ses propres valeurs d'attributs.

### Qu'est-ce que l'encapsulation ?

Le fait de masquer l'état interne d'un objet (attributs privés) et de n'autoriser l'accès que via des méthodes publiques contrôlées.

### Pourquoi rendre un attribut « solde » privé ?

Pour que sa modification passe par des méthodes qui vérifient les règles (par exemple refuser un montant négatif).

### Que traduit la relation d'héritage ?

Une relation « est un » : un Employé est une Personne.

### Qu'est-ce que la redéfinition (override) ?

Une sous-classe fournit sa propre implémentation d'une méthode héritée, avec la même signature.

### Qu'est-ce que le polymorphisme ?

La capacité d'invoquer une même méthode sur des objets de types différents, le comportement dépendant de leur classe réelle.

### Qu'est-ce qu'une classe abstraite ?

Une classe qui ne peut pas être instanciée directement et qui peut contenir des méthodes sans implémentation à compléter par les sous-classes.

### Quel est le rôle d'une interface ?

Définir un contrat (ensemble de méthodes) que des classes différentes s'engagent à implémenter.

### Quand préférer la composition à l'héritage ?

Quand la relation est « a un » plutôt que « est un », ou pour éviter des hiérarchies rigides et un fort couplage.

### Qu'est-ce qu'un constructeur ?

Une méthode spéciale appelée à la création d'un objet pour initialiser son état.

## Glossaire

- **Classe** : Modèle décrivant les attributs et méthodes d'un type d'objets.
- **Encapsulation** : Dissimulation de l'état interne derrière une interface publique.
- **Héritage** : Mécanisme où une classe dérive d'une autre en réutilisant ses membres.
- **Polymorphisme** : Possibilité de traiter des objets de classes différentes via une même interface commune.
- **Interface** : Contrat de méthodes sans implémentation.
- **Composition** : Construction d'un objet à partir d'autres objets.

https://ruvy.ch/decks/-P5CSzv58cvARFb9YKs_
