Vous êtes sur la page 1sur 9

Les objets

Anthony AÏT

Table des matières


1 Langage procédural / Langage orienté objet 2

2 Objet 2

3 Les attributs 2

4 Les méthodes 2

5 Classes 3

6 Encapsulation des données 3

7 Encapsulation et interface 3

8 Visibilité de classe/d’instance 4

9 Prototype d’une fonction 4

10 Initialisation et mort d’un objet 5

11 Membres d’instance / de classe 5

12 Relations entre objets 6


12.1 Association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
12.2 Agrégation/Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

13 Héritage 7
13.1 Synonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
13.2 Redéfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

14 Polymorphisme 8

15 Visibilité et héritage 8

16 Les différents types d’héritage 8

17 Classe abstraite 9

1
Algorithmique

1 Langage procédural / Langage orienté objet


La programmation objet permet de reproduire la perception humaine des idées. Un programme
est un algorithme qui s’applique à ces données. Elle ne traduit pas directement la réalité des
choses sur laquelle on travaille.

Équation de Niklaus Wirth :

algorithme + structure de données = programme

Les fonctions sont des méthodes et les données sont attachées à des objets, nommées attributs.

Un programme est constitué d’un ensemble d’objets.

Langage orienté objet :


Fonctions + données = objet
Programme = ensemble d’objets

La grande différence entre un langage objet et un langage orienté objet, dans un langage orienté
objet il existe encore des types de bases (entier,...) alors que dans le langage objet ce sont des
objets.

2 Objet
Les objets fonctionnent en classe d’équivalence.

Un objet :

• Unité indépendante, c’est-à-dire qu’elle a sa propre existence.

• Composé de variables (données) et de procédures (fonction)

• A un cycle de vie : un objet nait (réservation mémoire), vit (le temps d’utilisation) et
meurt (libération de la mémoire utilisée)

• Les variables décrivent l’état interne de l’objet

• Les procédures décrivent son comportement

3 Les attributs
Les attributs sont les données contenues dans l’objet
Synonymes : Donnée membre/Propriété/Champ
L’attribut appartient à la classe ou l’objet, contrairement à une variable.

4 Les méthodes
Les méthodes sont les fonctions et procédures de l’objet
Synonymes : Fonction membre/Service/Sélecteur
Une méthode et une fonction sont deux choses différents : une méthode est inhérente à l’objet
et n’existe pas sans, tandis qu’une fonction si.

4 LES MÉTHODES 2
Algorithmique

5 Classes
Les objets possédant les mêmes méthodes et mêmes attributs sont décrits par une classe.

Une classe ne contient pas de données.

Une classe est une abstraction d’un objet réel, elle décrit une catégorie d’objets ayant des com-
portements communs.

L’abstraction est le fait de passer du monde réel à une classe. On va extraire les caractéris-
tiques utiles lors de la modélisation. On ne modélise pas de la même façon une Formule 1 et
une voiture tuning.

À partir de la classe, on peut créer plusieurs objets ayant les caractéristiques contenues dans
la classe. On parle d’une instanciation. Un objet est donc aussi appelé une instance.
Les attributs d’un objet contiennent des valeurs spécifiques.
Exemple d’une classe :
Identifiant Voiture
Attributs marque/couleur
Méthodes demarrer()/arreter()

6 Encapsulation des données


On peut choisir de masquer certains attributs ou méthodes d’un objet de façon à ce qu’il ne
soit visible que par l’objet lui-même. On parle alors de visibilité ou d’accessibilité. Certains
membres sont visibles ou non :
• Public : membres visibles de partout
• Privé : membres inaccessibles depuis l’extérieur
• États intermédiaires
Certains membres sont privés pour protéger des données.
Exemple :

Serveur
Liste : Utilisateur
- Liste : Mot de passe
+ demande connexion
- accepter connexion
Si accepter connexion était public, on aurait juste à la demander pour se connecter. De même
pour les mots de passe.
On met un + quand c’est public et un - quand c’est privé

7 Encapsulation et interface
On dit des membres privés qu’ils sont encapsulés. Souvent, les attributs sont privés, on parle
alors d’encapsulation.

7 ENCAPSULATION ET INTERFACE 3
Algorithmique

Le programmeur qui utilise un objet n’a pas besoin de connaître la représentation physique
des données utilisées et peut raisonner en terme d’abstraction, l’objet étant définir par son
comportement et non par sa structure. On réalise ainsi une abstraction des données.

L’ensemble des membres publics d’un objet constitue son interface, c’est-à-dire la partie est
visibles depuis l’extérieur. L’objet est manipulé par ses méthodes d’interface pour modifier ou
accéder à la valeur d’un attribut. On parle d’envoi de messages, un message est une requête
envoyé à un objet pour lui demander l’exécution d’une certaine action, c’est-à-dire appliqué
une de ses méthodes.

Cette interface a deux grands intérêts :

• C’est une notice d’emploi de l’objet

• C’est un cahier des charges de l’objet

Il faut éviter de rendre des attributs publics, on créera plutôt des accesseurs (méthodes d’accès),
qui sont des méthodes publiques dont l’intérêt est de donner l’attribut de l’objet.

• Getter : Retourne la valeur d’un attribut : Accesseur

• Setter : Modifie la valeur d’un attribut : Mutateur

Cela permet d’avoir un vrai contrôle des données.

L’encapsulation permet :

• Protéger les attributs du monde extérieur

• Cacher le fonctionnement interne de l’objet

• Facilite le développement en groupe

• C’est un gage de réutilisabilité du code

8 Visibilité de classe/d’instance
De classe : Un objet a accès à tous les membres de toutes les instances de sa classe
D’instance : Les membres privés d’un objet sont visibles par lui seul

9 Prototype d’une fonction


Un prototype d’une fonction (ou la signature) est constitué de :

• Son identifiant

• Sa classe d’appartenance

• Son type de retour

• Ses paramètres (type et ordre)

Exemple :

9 PROTOTYPE D’UNE FONCTION 4


Algorithmique

VOITURE
//Attributs
tourner (angle a, entier v)
vitesse get.vitesse()
tourner (entier v, angle a)
tourner()

Son identifiant est "tourner"


Sa classe d’appartenance est VOITURE
Il n’y a pas de type de retour
Ses paramètres : angle et vitesse sont les types, a et v les noms.

On peut écrire plusieurs méthodes avec le même nom, cela s’appelle de la surdéfinition

De façon plus générique, on parle de surdéfinition quand un symbole a plusieurs définitions


(exemple du + qui peut servir à l’addition ou à concaténer des chaînes de caractères)

10 Initialisation et mort d’un objet


Quand on manipule un objet, on manipule des références. Ainsi si on pose une égalité entre 2
objets, ces 2 objets vont tendre vers la même adresse. On ne manipule pas un objet comme on
manipule un type de base.

Quand on crée un objet, il faut pouvoir donner des valeurs à ses attributs.

• Constructeur : Méthode particulière appelée lors de la création de l’objet et qui permet


d’initialiser ses données. La fonction initialise permet de créer ses propres constructeurs.

• Constructeur par défaut : Certains langages possèdent des constructeurs par défaut, ils
n’attendent aucun paramètre et initialise l’objet avec des valeurs par défauts présentes
dans le code source de la classe. Il convient de s’en méfier car souvent ces constructeurs
par défaut ne font rien.

• Constructeur par recopie : C’est un constructeur qui a en mémoire en objet et va créer


un clone de cet objet en recopiant chacun de ses attributs. Il faut s’en méfier car il y a
en réalité 2 références qui désignent un même objet, donc une modification affecte les 2
références.

Parfois il faut libérer la mémoire lorsque l’on a fini d’utiliser l’objet. Le destructeur est appelé
lors de la mort d’un objet, et permet d’expliciter les actions que l’objet va réaliser avant de
disparaître (fermer fichier ouvert par exemple). Dans certains langages, le destructeur est appelé
automatiquement ou est appelé depuis un finaliseur.

11 Membres d’instance / de classe


Tous les membres vu jusqu’à présent sont des membres d’instance, c’est-à-dire qu’ils sont at-
tachés à un objet. Chaque objet possède ses propres variables et ses propres méthodes indé-
pendantes des autres variables et méthodes contenus dans les autres instances de sa classe. Ce
n’est pas toujours le cas.

11 MEMBRES D’INSTANCE / DE CLASSE 5


Algorithmique

Les langages orientés objet définissent des membres de classe, ce sont des données et fonctions
partagées par toutes les instances d’une même classe. En d’autres termes, la modification d’une
variable de classe par un objet implique une modification de cette variable pour toutes les ins-
tances de la classe.

Une méthode de classe doit avoir un comportement identique pour tous les objets de la classe,
elle ne peut pas manipuler de variables d’instance. Les membres de classe sont appelés membres
statiques, elles sont partagées par toutes les instances de la classe.

12 Relations entre objets


12.1 Association
On parle d’association quand on a collaboration entre 2 objets indépendants en vue de réaliser
un but commun. Il y a association entre objet lorsque dans un programme les objets s’envoient
des messages. Le programme a besoin des 2 objets pour fonctionner et l’un d’entre eux au moins
utilise les services de l’autre.

En pratique, on peut repérer une association si un objet "utilise" l’autre.

Par exemple, une personne utilise une voiture, il y a relation d’association entre la personne et
la voiture.

12.2 Agrégation/Composition
Il y a composition ou agrégation quand un objet en contient un autre. L’objet contenu est un
composant, c’est-à-dire un attribut de l’objet qui le contient. L’objet contenant est un objet
dit composite.

En pratique, on peut repérer une composition ou une agrégation si un objet "possède" ou


"est composé de" l’autre.

Dans une relation d’agrégation, la destruction du composite n’induit pas la destruction des
composants. Contrairement à la composition ou les composants sont détruits si le composite
est détruit.

Dans une composition, le constructeur du composite instancie les composantes, mais pas d’une
agrégation où les composantes ont une instance propore

12 RELATIONS ENTRE OBJETS 6


Algorithmique

Représentation des relations :

13 Héritage
L’héritage est une relation entre classes. L’héritage permet de factoriser des connaissances (par
spécialisation ou extension) pour créer de nouveaux objets. Les classes qui héritent sont appe-
lées classe-héritière.

L’héritage est le partage des services (méthode) et données entre classes ayant une relation
hiérarchique. L’héritage conserve les données et méthodes.

Préciser une classe signifie qu’une classe héritière va devenir un cas particulier de sa classe mère.

Étendre une classe signifie que qu’une classe héritière va gagner des propriétés par rapport à
sa classe mère.

13.1 Synonymes
Classe mère = Classe de base = Superclasse

Classe fille = Classe dérivée = Classe héritière = Sous-classe

13.2 Redéfinition
On appelle redéfinition les membres de la classe mère réécrits dans une classe fille. Ils masquent
alors ceux de la classe de base. On conserve toutefois la possibilité d’utiliser les membres de la
classe de base.

Lorsqu’un membre est utilisé, la version dans la classe fille est prioritaire à l’ancienne version
présente dans la classe mère.

La redéfinition de méthode est très souvent utilisée, elle permet de spécialiser ou d’optimiser
les méthodes de la classe mère dans la classe fille.

On ne redéfinit jamais les attributs, en effet un attribut redéfinit ne serait pas connu de sa
classe mère mais il est probable que cet attribut soit utilisé par des méthodes de la classe mère

13 HÉRITAGE 7
Algorithmique

avant redéfinition. Deux mondes parallèles cohabitent alors, les méthodes de la classe mère uti-
lisent les attributs non redéfinis tandis que les méthodes de la classe fille utilisent les méthodes
redéfinis.

Dans certains langages on peut définir des membres non redéfinissables.

14 Polymorphisme
Deux types :
• Polymorphisme d’héritage
• Polymorphisme de fonction
Affectation polymorphique :

Un objet dérivé peut être considéré comme un cas particuliers d’instance de sa classe-mère. On
peut donc affecter à un objet déclaré dans une classe-mère tout objet d’une de ses classes-filles,
les types sont compatibles. À chaque fois qu’une instance de la classe-mère est attendue, une
instance de n’importe laquelle de ses classes héritières sera acceptée. On parle de polymor-
phisme d’héritage.

Par conséquent, un objet au cours de sa vie n’est pas connu par son type car il peut stocker
une donnée de sa classe ou de l’une de ses filles.

Partout où une instance de la classe-mère est attendue, on peut passer une instance de la classe-
fille.

Cela se réalise sans dégradation de l’information.

On dit qu’une fonction est polymorphe quand elle s’applique à des arguments qui peuvent
prendre plusieurs types (exemple la surdéfinition).

15 Visibilité et héritage
Principe d’encapsulation des données conduit à créer des classes dont tous les attributs sont
privés. Les données d’une instance sont donc inaccessibles aux instances des autres classes. En
particulier, les données d’une classe sont inaccessibles à ses sous-classes.

Pour résoudre ce problème on peut :


• On peut faire appel au constructeur de la classe-mère dans la classe fille.
• Il faut avoir une visibilité intermédiaire. Certains langages permettent de définir une
visibilité intermédiaire entre public et privé : protégé. Un membre est dit protégé s’il est
manipulable par tous les objets de la classe et de la classe héritière.

16 Les différents types d’héritage


• Héritage simple : Une classe B hérite d’une classe A (représenté par une flèche de la classe
fille vers la classe B)

16 LES DIFFÉRENTS TYPES D’HÉRITAGE 8


Algorithmique

• Héritage multiple : Une classe C hérite de plusieurs classes. Certains langages ne le per-
mettent pas. Certains attributs vont créer une ambiguïté car ils auront le même nom
dans plusieurs classes mères. Pour les méthodes, il suffit de les redéfinir dans la classe
fille. Pour les attributs, on ne peut rien y faire.

• Héritage indirect : C hérite indirectement de A. (C hérite de B qui hérite de A).

• Héritage répété (à proscrire) : Une classe B et C héritent de A. D hérite de B et de C. Il


y a nécessairement conflit car D va hériter en double de tous les membres de A.

C hérite de la classe B et implémente l’interface B. Une interface ne contient que des prototypes
de méthodes. Comme cela ne contient que des méthodes et que je dois les redéfinir car il faut
affecter un contenu à chaque méthode, cela permet de contourner le problème de l’héritage
multiple.

17 Classe abstraite
Une classe est définie comme abstraite si elle ne peut pas être instanciée.

17 CLASSE ABSTRAITE 9

Vous aimerez peut-être aussi