PROGRAMMATION ORIENTE OBJET
Ferdinand BATANA, DBA & Web Developer(OCAJP, MCSE SQL SERVER)
Les objets et les classes
Un objet existe en mémoire et effectue une tâche spécifique.
Les objets ont deux capacités générales:
Les objets peuvent stocker des données. Les éléments de données stockés
dans un objet sont également appelés champs / attributs.
Les objets peuvent effectuer des opérations. Les opérations qu'un objet peut
effectuer sont appelées méthodes.
Les objets et les classes
Vous avez déjà utilisé l'objet suivant:
Objets scanner, pour lire une entrée
cette expression crée un objet
Example: Scanner en memoire.
Scanner keyboard = new Scanner([Link]);
L’adresse mémoire de
l’objet est assignee à la
variable keyboard.
Les objets et les classes
L'API Java fournit de nombreuses classes
Jusqu'à présent, les classes à partir desquelles vous avez créé des objets sont
fournies par l'API Java.
Exemple:
• Scaner
• Ramdom
L’utilisateur peut définir ses propres classes
Déterminez les données dont il avait besoin
Déterminer les méthodes
Ecrire une classe étape par étape
Un objet Rectangle aura les champs suivants:
length. Le champ length contiendra la longueur du rectangle.
width. Le champ width contiendra la largeur du rectangle.
Quelles methods avons nous besoin ?
Ecrire une classe étape par étape
La classe Rectangle aura les methods suivantes:
setLength.
setWidth.
getLength.
getWidth.
getArea.
Diagramme UML
Le langage de modélisation unifié (UML) fournit un ensemble de
diagrammes standard pour la représentation graphique de systèmes
orientés objet
.
Class name goes here
Fields are listed here
Methods are listed here
Diagramme UML
La class Rectangle
.
Rectangle
length
width
setLength()
setWidth()
getLength()
getWidth()
getArea()
Écrire le code pour les champs de classe
public class Rectangle
{
// data or instance variables
private double length;
private double width;
}
.
Les modificateurs d’accès
Un spécificateur d'accès est un mot-clé Java qui indique
comment accéder à un champ ou à une méthode.
publique
Lorsque le spécificateur d'accès public est appliqué à un
membre de la classe, le membre peut être accédé par code
à l'intérieur ou à l'extérieur de la classe.
private
Lorsque le spécificateur d'accès privé est appliqué à un
membre de la classe, il est impossible d'accéder à ce
membre via un code situé en dehors de la classe. Le
membre n'est accessible que par les méthodes membres de
la même classe.
L’entête de la méthode setLength
Notez que le mot static
Type n'apparaît pas dans la
retour définition de la méthode
Modificateur Nom conçue pour fonctionner
d’accès méthode sur une instance d'une
classe (méthode
d'instance).
public void setLength (double len)
Paramètre
Ecrire et démontrer la méthode setLength
Donner un corp à la méthode setLength
Création d’un objet Rectangle
Rectangle box = new Rectangle()
La variable box length: 0.0
contient l’adresse de address
l’objet Rectangle width: 0.0
Appelle de la méthode setLength
[Link](10.0)
Voici l’état de l’objet box après l’exécution de l’objet
setLength :
La variable box length: 10.0
contient l’adresse de address
l’objet Rectangle width: 0.0
Ecrire et démontrer la méthode getLength
Donner un corps à la méthode getLength
Donner un corps à la méthode getArea
Les accesseurs et les mutateurs
En raison du concept de masquage des données, les
champs d'une classe sont privés.
Les méthodes qui extraient les données des champs
s'appellent des accesseurs.
Les méthodes qui modifient les données des champs
s'appellent des mutateurs.
Chaque champ que le programmeur souhaite voir affiché
par d'autres classes a besoin d'un accesseur.
Chaque champ que le programmeur souhaite modifier par
d'autres classes nécessite un mutateur.
Les accesseurs et les mutateurs
Pour notre exemple, les accesseurs et mutateurs sont les
suivants:
setLength : modifie la valeur du champ length
public void setLength(double len)….
setWidth: modifie la valeur du champ width
public void setWidth()….
getLength: retourne la valeur du champ length
public double getLenth()….
getWidth() : retourne la valeur du champ width
public double getWidth()….
Ces méthodes sont aussi appelé getters et setters
Masquage de données (Data hiding)
Un objet masque ses champs privés(private) internes du
code situé en dehors de la classe dont il est une instance.
Seules les méthodes de la classe peuvent accéder
directement aux données internes de l’objet et y apporter
des modifications.
Le code en dehors de la classe doit utiliser les méthodes
publiques de la classe pour opérer sur les champs privés
d'un objet.
Masquage de données (Data hiding)
Le masquage des données est important car les classes
sont généralement utilisées en tant que composants dans
de grands systèmes logiciels, impliquant une équipe de
programmeurs.
Le masquage des données permet de renforcer l'intégrité
des données internes d'un objet.
Données périmées
Certaines données sont le résultat d'un calcul.
Considérons l'aire d'un rectangle.
length × width
Il ne serait pas pratique d'utiliser une variable d'aire ici.
Les données nécessitant le calcul de divers facteurs
risquent de devenir obsolètes.
Pour éviter les données obsolètes, il est préférable de
calculer la valeur de ces données dans une méthode plutôt
que de les stocker dans une variable.
Données périmées
Au lieu d’utiliser une variable area dans la class Rectangle:
public double getArea()
{
return length * width;
}
Ceci calcule dynamiquement la valeur de la surface du
rectangle lorsque la méthode est appelée.
Désormais, toute modification des variables de longueur ou
de largeur ne laissera pas la surface du rectangle périmée.
Les types de données UML et la notation des parametres
Le diagramme UML est un langage indépendant
Les diagrammes UML utilisent une notation indépendante
pour montrer le type de retour, les modificateurs d’accès
Les
modificateurs
d’accès sont
notés comme Rectangle
suit:
- private - width : double
+ public
+ setWidth(w : double) : void
Convertion d’un diagramme UML en code
En rassemblant toutes ces informations, un fichier de
classe Java peut être construit facilement à l'aide du
diagramme UML.
Les parties du diagramme UML correspondent à la
structure du fichier de classe Java.
classe NomClasse
{ Champs
Champs Methodes
Methodes
}
Convention de mise en page
La structure varie d’un instructeurs ou d’un programmeur
La structure globales est:
Les champs
Liste des méthodes
• Les accesseurs et les mutateurs sont généralement groupés
Les méthodes et variables d’instances
Les champs et les méthodes déclarés comme
précédemment sont appelés champs d'instance et
méthodes d'instance.
Les objets créés à partir d'une classe ont chacun leur
propre copie des champs d'instance.
Les méthodes d'instance sont des méthodes qui ne sont
pas déclarées avec un mot clé spécial, static.
L’héritage
La notion d'héritage est l'un des fondements de la
programmation orientée objet. Grâce à elle, nous pourrons
créer des classes héritées de nos classes mères (appelées
aussi classes de base).
On utilise le mot clé extends pour informer une classe A
qu’elle hérite d’une classe B
L’héritage : cas d’une classe Ville et Capitale
Dans le cas actuel, la classe Capitale hérite de la classe
Ville; ce qui se traduit par la notation suivante:
class Capitale extends Ville {
}
L’héritage : cas d’une classe Ville et Capitale
Définition des constructeurs
Toutes les classes ont au moins un constructeur
En java l’instruction première de tout constructeur est
l’appel d’un autre constructeur de la même classe par le
mot clé this() ou d’une classe mère directe par le mot clé
super()
Si le constructeur parent prend des arguments alors le
constructeur super() aussi doit en prendre.
L’héritage : cas d’une classe Ville et Capitale
Dans la classe ci-dessus, la première instruction est un appel au
constructeur parent défini dans la classe [Link] qui ne
prend pas d’arguments.
L’héritage : cas d’une classe Ville et Capitale
Dans le cas actuel, la première instruction est un appel au
constructeur de la classe Ville qui prend 3 arguments.
La classe Capitale contient un deuxième constructeur sans
arguments faisant appel au constructeur se trouvant dans la
même classe en utilisant this("Kara",3000,"Togo");
L’héritage : cas d’une classe Ville et Capitale
NB: this() et super() doivent être les premières instructions dans
un constructeur
Si la classe parent contient plusieurs constructeurs, la classe
fille peut redéfinir un seul.
L’héritage : Accès aux champs hérités
Les classes Java peuvent utiliser n'importe quel membre public
ou protégé de la classe parent, y compris des méthodes, des
primitives ou des références d'objet.
Si la classe parent et la classe enfant font partie du même
package, la classe enfant peut également utiliser tous les
membres par défaut définis dans la classe parent.
Une classe enfant ne peut jamais accéder à un membre privé de
la classe parent, du moins pas par toute référence directe
L’héritage : super() vs. super, this() vs. this
Super() est utilisé en première ligne dans un constructeur de la
classe fille pour appeler le constructeur parent
Super est utilisé pour accéder à un membre de la classe mère
This() est utilisé en première ligne dans un constructeur pour
appeler un constructeur de la même classe
This est utilisé pour accéder un membre d’une classe
Le polymorphisme
Le polymorphisme est un mécanisme important dans la
programmation objet. Il permet de modifier le comportement
d’une classe fille par rapport à sa classe mère. Le
polymorphisme permet d’utiliser l’héritage comme un
mécanisme d’extension en adaptant le comportement des
objets.
Le polymorphisme: Redéfinition de méthodes
Redéfinition de méthodes : redéfinition de méthode
signifie avoir deux méthodes avec la même signature,
l’une dans la classe mère et l’autre dans la classe fille.
L’implémentation étant différente de celle de la classe
mère.
En redéfinissant une méthode vous pouvez utiliser le mot
clé super pour faire référence à la méthode parent ou this
pour la méthode courante
Exemple:
L’héritage : Héritage de méthode: Redéfinition de méthodes
L’héritage : Héritage de méthode: Redéfinition de méthodes
Dans cet exemple la classe fille Ville redéfini la méthode
decrisToi() de la classe mère Ville(), l’exécution se passe
sans erreurs et affiche:
L’héritage : Héritage de méthode: Redéfinition de méthodes
La redéfinition de méthode doit respecter les règles
suivantes:
La méthode de la classe fille doit avoir la même signature que la
méthode de la mère
L’accessibilité de la méthode de la classe fille doit être plus
grande ou égale à celle de la classe mère
Le type de retour de la méthode redéfinie doit être le même ou
un sous type.
L’autres règle sera abordée lorsque nous parlerons des
exceptions.
L’héritage : Héritage de méthode: Surcharge de méthodes
Une méthode surchargée a le même nom que la méthode
de base mais pas la même signature.