Vous êtes sur la page 1sur 3

1.

3) Notion d’encapsulation
L'encapsulation est une manière de définir une classe de telle sorte que ses attributs ne puisse pas être
directement manipulés de l‘exterieur de la classe, mais seulement indirectement par l'intermédiaire des
méthodes.
Un des avantages de cette approche est la possiblité de redéfinir la représentation interne des attributs, sans
que cela affecte la manipulation externe d'un objet de cette classe.
L'encapsulation facilite donc la mise à jour des applications. On peut en voir l'intéret dans un projet de
développement réalisé par plusieurs développeurs (ce qui est généralement le cas en entreprise). Chaque
développeur est responsable d'une partie du projet. Si les classes dont il est le responsable sont proprement
encapsulées, il pourra modifier par la suite leurs représentations internes, sans que cela perturbe le travail des
autres développeurs du projet susceptibles d'utiliser ces classes.
Pour faire une encasuation, il suffit de déclarer « private » les données à encapsuler et de définir des méthodes
permettant de les lire et de les modifier : on appelle ces méthodes « getter » (pour la lecture) et « setter » (pour
la modification).Chacune ayant une fonction precise dont :
- Getter : méthode « public » permettant de définir la manière de lecture d’un attribut privé. Son type de retour
est celui de la donnée retournée et son nom est souvent composé de « get » et du nom de l’attribut qu’elle
retourne.
-Setter : méthode « public » permettant de définir la manière de modification d’une donnée. Souvent, elle ne
retourne rien (« void ») et prend un paramètre du même de type que la donnée à modifier. Son nom se
compose de la mention « set » et du nom de l’attribut concerné.

Autrement dit,l’encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Ces niveaux
de visibilité définissent les droits d’accès aux données selon que l’on y accède par une méthode de la classe
elle-même, d’une classe héritière, ou bien d’une classe quelconque. Il existe quatre niveaux de visibilité :
• Visibilité par défaut : aucun modificateur de visibilité n’est indiqué.
• Visibilité publique : les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes
d’une classe définie avec le niveau de visibilité « public ». Il s’agit du plus bas niveau de protection des
données.
• Visibilité protégée : l’accès aux données est réservé aux fonctions des classes héritières, c’est-à-dire
par les fonctions membres de la classe et des classes dérivées. Ainsi, Un attribut ou une méthode déclarée
“protected” est accessible uniquement aux classes d’un package et à ses sous-classes même si elles sont
définies dans un package différent.
• Visibilité privée : l’accès aux données est limité aux méthodes de la classe elle-même. Il s’agit du niveau
de protection des données le plus élevé

NB: Une classe est encapsulée, si tous ses attributs sont privés.

1-4)NOTION DE POLYMORPHISME
Le nom de polymorphisme vient du grec « polúmorphos » qui signifie « qui peut prendre
plusieurs formes ». Cette caractéristique est un des concepts essentiels de la programmation
orientée objet. Dans java il veut simplement dire qu’une classe peut prendre plusieurs formes
et c’est d’autant plus vrai avec les classes qui héritent d’une classe supérieure. Il peut aussi
être vu comme la capacité de choisir dynamiquement la méthode qui correspond au type réel
de l’objet.

On distingue généralement trois types de polymorphisme :

-Le polymorphisme ad hoc (également surcharge ou en anglais overloading).

-Le polymorphisme paramétrique (également généricité ou en anglais template).

-Le polymorphisme d'héritage (également redéfinition, spécialisation ou en anglais overriding).

 Le polymorphisme ad hoc

Le polymorphisme ad hoc permet d'avoir des fonctions de même nom, avec des
fonctionnalités similaires, dans des classes sans aucun rapport entre elles (si ce n'est bien
sûr d'être des filles de la classe objet). Par exemple, la classe complexe, la classe image et
la classe lien peuvent avoir chacune une fonction "afficher". Cela permettra de ne pas avoir à
se soucier du type de l'objet que l'on a si on souhaite l'afficher à l'écran.

Le polymorphisme ad hoc permet ainsi de définir des opérateurs dont l'utilisation sera
différente selon le type des paramètres qui leur sont passés. Il est donc possible par
exemple de surcharger l'opérateur + et de lui faire réaliser des actions différentes selon qu'il
s'agisse d'une opération entre deux entiers (addition) ou entre deux chaînes de caractères
(concaténation).

 Le polymorphisme paramétrique

Le polymorphisme paramétrique, appelé généricité, représente la possibilité de définir


plusieurs fonctions de même nom mais possédant des paramètres différents (en nombre
et/ou en type). Le polymorphisme paramétrique rend ainsi possible le choix
automatique de la bonne méthode à adopter en fonction du type de
donnée passé en paramètre.

Ainsi, on peut par exemple définir plusieurs méthodes


homonymes addition () effectuant une somme de valeurs.

-La méthode int addition (int, int) pourra retourner la somme de deux entiers

-La méthode float addition (float, float) pourra retourner la somme de deux
flottants

-La méthode char addition (char, char) pourra définir au gré de


l'auteur la somme de deux caractères, etc.

On appelle signature le nombre et le type (statique) des arguments d'une


fonction.
C'est donc la signature d'une méthode qui détermine laquelle sera appelée.

 Le polymorphisme d'héritage

La possibilité de redéfinir une méthode dans des classes héritant


d'une classe de base s'appelle la spécialisation. Il est alors possible
d'appeler la méthode d'un objet sans se soucier de son type
intrinsèque : il s'agit du polymorphisme d'héritage. Ceci permet de
faire abstraction des détails des classes spécialisées d'une famille
d'objet, en les masquant par une interface commune (qui est la
classe de base).

Vous aimerez peut-être aussi