Sommaire: Cours langage C++: Introduction aux objets
1. PRÉSENTATION DE LA NOTION D’OBJET
2. LE PRINCIPE D’ENCAPSULATION
3. L’HÉRITAGE
3.1 EXEMPLE 1 :LES OBJETS GRAPHIQUES
3.2 EXEMPLE 2 MODÉLISATION D’UN PARC DE VÉHICULES
3.3 LES CLASSES ABSTRAITES
3.4 LES DIFFICULTÉS INHÉRENTES À L’UTILISATION DE L’HÉRITAGE
3.5 L’HÉRITAGE MULTIPLE
3.6 LES INTERFACES
4.L’AGRÉGATION
4.1 DÉFINITION
4.2 L’AGRÉGATION COMME ALTERNATIVE À L’HÉRITAGE MULTIPLE OU AUX INTERFACES
5. LE POLYMORPHISME
5.1 DÉFINITION
5.2 LA PUISSANCE DU POLYMORPHISME
5.3 UNE FORME FAIBLE DE POLYMORPHISME : LA SURCHARGE
6.LA RELATION D’ASSOCIATION
7. POUR CONCLURE SUR LE MODÈLE OBJET
8. GLOSSAIRE
Extrait du cours langage C++: Introduction aux objets
1. Présentation de la notion d’objet
Un objet est une entité cohérente rassemblant des données et du code travaillant sur ses données. Une classe peut être considérée comme un moule à partir duquel on peut créer des objets. La notion de classe peut alors être considérée comme une expression de la notion de classe d’équivalence chère aux mathématiciens. En fait, on considère plus souvent que les classes sont les descriptions des objets (on dit que les classes sont la méta donnée des objets), lesquels sont des instances de leur classe.
Pourquoi ce vocabulaire ? une classe décrit la structure interne d’un objet : les données qu’il regroupe, les actions qu’il est capable d’assurer sur ses données. Un objet est un état de sa classe. Considérons par exemple la modélisation d’un véhicule telle que présentée par la figure suivante :
Dans ce modèle, un véhicule est représenté par une chaîne de caractères (sa marque) et trois entiers : la puissance fiscale, la vitesse maximale et la vitesse courante. Toutes ces données sont représentatives d’un véhicule particulier, autrement dit, chaque objet véhicule aura sa propre copie de ses données : on parle alors d’attribut d’instance. L’opération d’instanciation qui permet de créer un objet à partir d’une classe consiste précisément à fournir des valeurs particulières pour chacun des attributs d’instance.
2. Le principe d’encapsulation
Sans le savoir, vous avez déjà mis le doigt sur l’un des trois grands principes du paradigme objet : l’encapsulation. Ce principe, digne héritier des principes d’abstraction de données et d’abstraction procédurale prône les idées suivantes:
- Un objet rassemble en lui même ses données (les attributs) et le code capable d’agir dessus (les méthodes)
- Abstraction de données : la structure d’un objet n’est pas visible de l’extérieur, son interface est constituée de messages invocables par un utilisateur. La réception d’un message déclenche l’exécution de méthodes.
- Abstraction procédurale : Du point de vue de l’extérieur (c’est-à-dire en fait du client de l’objet), l’invocation d’un message est une opération atomique. L’utilisateur n’a aucun élément d’information sur la mécanique interne mise en œuvre. Par exemple, il ne sait pas si le traitement requis a demandé l’intervention de plusieurs méthodes ou même la création d’objets temporaires etc.
Dans les versions canoniques du paradigme objet, les services d’un objet ne sont invocables qu’au travers de messages, lesquels sont individuellement composés de :
- Un nom
- Une liste de paramètres en entrée
- Une liste de paramètres en sortie
La liste des messages auxquels est capable de répondre un objet constitue son interface : c’est la partie publique d’un objet. Tout ce qui concerne son implémentation doit rester caché à l’utilisateur final : c’est la partie privée de l’objet. Bien entendu,tous les objets d’une même classe présentent la même interface, en revanche deux objets appartenant à des classes différentes peuvent présenter la même interface.
D’un certain point de vue, l’interface peut être vue comme un attribut de classe particulier.
En pratique, dans la plupart des langages orientés objet modernes, l’interface représente la liste des méthodes accessibles à l’utilisateur.
Il est très important de cacher les détails les détails d’implémentation des objets à l’utilisateur. En effet, cela permet de modifier, par exemple la structure de données interne d’une classe (remplacer un tableau par une liste chaînée) sans pour autant entraîner de modifications dans le code de l’utilisateur, l’interface n’étant pas atteinte.
Autre exemple : considérons une classe modélisant un point en 2 dimensions pour laquelle on fournit deux méthodes renvoyant respectivement l’abscisse et l’ordonnée du point. Peu importe à l’utilisateur de savoir que le point est stocké réellement sous forme cartésienne ou si le concepteur a opté pour la représentation polaire!
Tous les langages orientés objet n’imposent pas de respecter le principe d’encapsulation. C’est donc au programmeur de veiller personnellement au grain.
3. L’héritage
L’héritage est le second des trois principes fondamentaux du paradigme orienté objet. Il est chargé de traduire le principe naturel de Généralisation / Spécialisation. En effet, la plupart des systèmes réels se prêtent à merveille à une classification hiérarchique des éléments qui les composent. La première idée à ce sujet est liée à l’entomologie et aux techniques de classification des insectes en fonction de divers critères. Expliquons nous d’abord sur le terme d’héritage. Il est basé sur l’idée qu’un objet spécialisé bénéficie ou hérite des caractéristiques de l’objet le plus général auquel il rajoute ses éléments propres.
………
Cours langage C++: Introduction aux objets (244 KO) (Cours PDF)