Uploaded by Lidy Cad

Chapitre 3

advertisement
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
Introduction la programmation orientée objet (résumé)
Dans cette polycopie, nous allons aborder l’une des notions les plus importantes de la programmation
moderne. En effet, la programmation orientée objet est très popularisée et utilisée de nos jours. Elle
s’appuie sur la notion d’objets et a rendu possible l’apparition des systèmes complexes et évolués tels
que l’environnement graphique de Microsoft Windows.
1. De la programmation impérative à la programmation orientée objet
Avant l’apparition de la programmation orientée objet, il y avait la programmation impérative ou
procédurale: qui utilise des procédures, des variables, des pointeurs, etc. Exemple : C, Pascal, Cobol,
Fortran, etc. Un programme procédural est généralement une liste ordonnée d’instructions. Bien que ce
type de programmation reste très pratique, leurs limites deviennent flagrantes dès qu’on passe au
développement d’applications graphiques volumineuses. Ou lorsqu’on essaye de modéliser des
phénomènes du monde réel (fonctionnement d’entreprise, analyse des données complexes, etc.)
Pour répondre aux nouvelles exigences, un nouveau style de programmation plus adapté au
développement de ce genre d’application a été développé : la programmation Orientée Objet (POO).
L’objectif était de pouvoir réutiliser le code et de créer de nouveaux éléments sans rééditer les
instructions en question.
Imaginez-vous en train d’utiliser une application graphique, vous utilisez une interface faite de boutons,
de menus, de cases à cocher, de zones d’édition, etc. Chacun de ces éléments doit pouvoir être affiché
et masqué au besoin.
En utilisant la programmation impérative, il faudrait écrire pour chaque composant autant de procédures
d’affichage et de masquage. Ces codes présenteraient incontestablement des similarités.
Des concepts de la programmation orientée objets (héritage et polymorphisme) permettent justement
d’écrire une seule fois la procédure de masquage et d’affichage et de pouvoir les réutiliser à volonté
dans de nouveaux éléments.
2. Classes et objets
Les deux premiers concepts de la programmation orientée objet à comprendre sont la classe et l’objet.
Une classe en programmation orientée objet est l’équivalent d’un concept (dans le monde réel).
Autrement dit une classe permet de transcrire au mieux les concepts du monde réel en langage de
programmation. Ainsi une classe définit les données relatives à une notion et les actions qui s’y
apportent.
Exemple : Un téléviseur.
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
Un concept de téléviseur est lié à des données (voir d’autres concepts) et des actions.
Les données : poids, longueurs, chaines mémorisées, état (allumé, veille, éteint, etc.).
Les actions : changer une chaine, éteindre, allumer le téléviseur, régler d’une chaine.
Le concept téléviseur peut lui-même être raccordé à d’autres concepts : magnétoscope, ordinateur, etc.
Voici donc une représentation possible du concept téléviseur :
En programmation orientée objet, la représentation idéale du concept téléviseur est une classe. Ainsi il
est possible au sein d’une même structure (classe) de regrouper les données (dites attributs) et les
actions (dites méthodes).
Poussons notre exemple un peu plus loin : un concept n’est pas une réalisation pratique. Un concept
(dans le monde réel) ou la classe (dans la Programmation Orientée Objet) est une sorte de moule.
Le concept téléviseur, ne vous permettra pas d’en regarder chez vous, il va vous falloir sa réalisation
pratique : un exemplaire physique.
En programmation orientée objet, la réalisation d’une classe est un objet (ou instance).
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
Parlons maintenant des écrans d’ordinateurs, ils sont également caractérisés par : leurs poids, leurs
longueurs, leurs diagonales, etc. L’écran d’un ordinateur possède encore une liste de résolutions d’écran
possibles. Un tel écran peut être : allumé, éteint ou en veille.
De même le concept écran de l’ordinateur pourra être représenté par une classe, dont laquelle les attributs
représentent le poids, la longueur et la hauteur. Et les méthodes pour éteindre, allumer ou changer la
résolution.
Comme vous pouvez le constater, les deux classes présentent des attributs et méthodes en communs.
Ainsi, un téléviseur et un écran d’ordinateur possédant un poids, une longueur, et il est possible de
l’éteindre ou l’allumer.
Néanmoins, certaines caractéristiques (attributs) et actions (méthodes) sont spécifiques à l’écran de
l’ordinateur ou du téléviseur (notion d’héritage et polymorphisme).
Ainsi les trois concepts peuvent être représentés selon le schéma suivant (dit hiérarchie de classes):
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
Première question qui surgit donc lors de la modélisation en termes d’objets c’est « quel concept du
monde réel deviendra un objet dans le programme et quelle classe le décrira au mieux ? » le tableau
suivant vous donnera une idée plus claire sur la question.
Objets
Windows (fenêtres)
Éléments de
l’environnement utilisateur
Windows
Menus
Objets graphiques (cercles, rectangles, etc.)
Périphériques (Claviers, souris).
Un véhicule dans la simulation des trafics.
Objets physiques
Un composant électronique dans
un circuit.
Un pays dans un monde économique
Employé
Entité humain
Etudiant
Consommateur
Vendeur
Structures de données
Tableaux
Listes
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
Arbres binaires
Fichier personnel
Collection de données
Dictionnaire
Table de latitudes et longitudes des cités du monde
Temps
Type de données
Angle
Nombre complexe
Point dans un plan
Ainsi un programme orienté objet consiste en un ensemble d’objets qui communiquent entre eux en
appelant les méthodes externes (voir l’aspect abstraction de la POO) des autres objets.
3. Les concepts de bases de la programmation orientée objet
Les notions de classes et d’objets ont étaient introduites dans le but de mieux organiser les programmes
complexes grâce à quatre notions :

Encapsulation

Abstraction

Héritage

Polymorphisme
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
3.1. Encapsulation :
L’encapsulation consiste à regrouper dans le même objet, les données et les traitements qui lui sont
spécifiques.
Attributs : les données incluses dans un objet.
Méthodes : Les foncions (traitements) définies dans un objet.
Donc chaque objet est défini par ses méthodes et ses attributs.
Exemple : Soit une classe qui décrit la notion de rectangle, cette notion est liée à des données (attributs)
telles que la longueur et la largeur, et des traitements (méthodes) tel que le calcul de la surface et du
périmètre. L’objet peut être alors décrit comme suit :
3.2. Abstraction :
L’abstraction permet une description générique de l’ensemble considéré (ensemble d’objets) et de
réduire le code d’un niveau de détail : se focaliser sur l’essentiel et ignorer les détails.
L’abstraction permet de définir un niveau de perception dit externe, qui est la partie visible par les
programmeurs utilisateurs (dite aussi interface). Et un niveau interne qui contient les détails
d’implémentation et l’ensemble des méthodes et des attributs accessibles seulement depuis l’intérieur
de l’objet.
Bonne pratique de programmation : Les attributs d’un objet ne doivent pas être accessibles depuis
l’extérieur, mais uniquement par des méthodes (manipulateurs et accesseurs).
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
3.3. Pourquoi l’encapsulation/abstraction :
L’encapsulation et l’abstraction permettent :

Une meilleure visibilité.

Une meilleure cohérence.

Plus grande modularité.
3.4. Héritage :
Imaginons un jeu vidéo ou il y a quatre personnages : Guerrier, Voleur, Magicien, Sorcier.
Définissons les classes pour ces quatre personnages (définir les attributs et les méthodes) :
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
Vous remarquez qu’il y a beaucoup de code dupliqué. Ce qui peut engendrer un problème de
maintenance : par exemple, si on change le type de l’attribut energie de l’entier à réel nous devons mettre
à jour le code des quatre classes.
C’est ici qu’intervient le troisième aspect de la Programmation Orientée Objet : l’héritage.
L’héritage représente la relation «est-un». Il permet de créer des classes plus spécialisées, appelées
sous-classes, à partir de classes plus générales déjà existantes, dites superclasses.
Lorsqu’une sous-classe C1 est créée à partir d’une super-classe C :

Le type est hérité : un objet de classe C1 est aussi de classe C.

C1 hérite de l’ensemble des attributs et des méthodes de C.

Les attributs et méthodes de C vont être disponibles pour C1 sans que l’on ait besoin de les redéfinir
explicitement dans C1.

Par ailleurs :
o
des attributs et/ou méthodes supplémentaires peuvent être définis par la sous-classe C1
(enrichissement).
o
des méthodes héritées de C peuvent être redéfinies dans C1 (spécialisation).
Exemple :
Lorsqu’une sous-classe C1 (ici Guerrier ou Voleur) est créée à partir d’une super-classe C (ici
Personnage),

le type est hérité : un Guerrier est (aussi) un Personnage
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.

La classe Guerrier va hériter de l’ensemble des attributs et des méthodes de la classe
Personnage.

Des attributs et/ou méthodes supplémentaires peuvent être définis par la sous-classe Guerrier :
par exemple, une classe Guerrier définit un attribut supplémentaire : arme (enrichissement).

des
méthodes
héritées
de
Personnage
peuvent
être
redéfinies
dans
Voleur
:
rencontrer(Personnage).
Remarque :

L’héritage doit être utilisé pour décrire une relation « est un ».

Il ne doit jamais décrire une relation « a un » (assurée par l’encapsulation).
Transitivité de l’héritage :
Les instances d’une sous-classe possèdent : Les attributs et méthodes de l’ensemble des classes parentes
(super-classe, super-super-classe, etc.).
Exemple :
L’héritage est transitif : un Sorcier est un Magicien qui est un Personnage.
3.5. Polymorphisme :
Université A/Mira Béjaïa
M1 : Réseau et télécommunication, Electronique instrumentation, Système de télécommunication.
Mécanisme de redéfinition du comportement des méthodes de la super classe.
Un exemple :

Grâce à l’héritage, le même code pourra être appliqué à un Magicien, un Guerrier, etc. qui
sont de classe Personnage.

La façon dont un Personnage en rencontre un autre peut prendre plusieurs formes : le saluer
(Magicien), le frapper (Guerrier), le voler (Voleur), etc.

Grâce au polymorphisme, le même code appliqué à différents personnages pourra avoir un
comportement différent, propre à chacun.
Download