1 Programmation orientée objet (POO)

publicité
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Notes de cours
GEI 442 : STRUCTURES DE DONNÉES ET ALGORITHMES
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO en JAVA
Ahmed KHOUMSI
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
1
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Programmation orientée objet (POO)
Objet : cœur de la POO
objet = type de données qui a une structure et un état
État de l ’objet accessible (lecture) et manipulable (écriture) à l ’aide
d ’opérations définies par l ’objet
Quelques opérations particulières :
- créer nouvel objet
- copier un objet dans un autre objet
- tester si deux objets sont identiques
- effectuer des opérations E/S sur un objet
Atomicité : Objet doit être considéré comme un tout; ses parties sont :
- non accessibles directement
- accessibles indirectement par des méthodes fournies par l ’objet
Encapsulation :
- Groupement : - des données
- des opérations s ’appliquant sur ces données
- Cacher les détails d ’implantation
Réutilisation de code : facilitée par atomicité et encapsulation
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
2
1
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
POO (suite)
Héritage : - permet d ’étendre, restreindre ou modifier fonctionnalité d ’un objet
- favorise réutilisation de code
Polymorphisme : permet de référencer objets de différents types à l ’aide
d ’un même identificateur
Objet adéquat est déterminée à l ’aide de l ’opération (méthode + arguments)
qui lui est appliquée
Objet = instance d ’une classe
Appel d ’une méthode d ’un objet : effectué par un passage d ’un message à
un objet
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
3
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Exemple
Définition d ’une classe
public class Ballon
{
// méthodes
public int volume()
{ return vol; }
public void gonfle(int x)
{ if x > 0 vol = vol + x; }
public void degonfle(int x) { if ( (x > 0) && (x <= vol) ) vol = vol - x; }
// donnée
private int vol;
}
Méthodes de l ’objet :
- volume permet de lire
- gonfle et degonfle permettent de modifier la donnée vol
Méthodes accessibles par l ’utilisateur en spécifiant public
État de l ’objet = valeur de la donnée vol
inaccessible directement, en spécifiant private
accessible uniquement en utilisant les méthodes de l ’objet
En général, toutes les données d ’un objet doivent être private
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
4
2
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Exemple
(suite)
Utilisation de la classe Ballon
public class testBallon
{
public static main()
{
Ballon b = new Ballon();
b.gonfle(10);
System.out.println( “ volume du ballon = ” + b.volume() );
b.degonfle(6);
System.out.println(“ volume du ballon = ” + b.volume() );
// Instruction suivante génère erreur de compilation car vol est private
b.vol = 0;
}
}
Nous reviendrons sur la signification de static
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
5
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Constructeurs
Constructeur = méthode
- associée à une classe
- exécutée automatiquement lorsqu ’un objet de la classe est créé
- porte le nom de la classe
Il permet d ’effectuer une initialisation automatique d ’un objet lors de sa création
Si aucun constructeur défini :
- champs de base initialisés à 0
- champs de référence initialisés à null
Plusieurs constructeurs peuvent être définis grâce à la surcharge
Exemple : La classe Ballon (voir page 4) peut avoir les deux constructeurs suivants
public Ballon(int x) { vol = x; }
public Ballon( )
{ vol =0; }
Création de deux objets b1 et b2 de type Ballon, de volumes 0 et a
Ballon b1 = new Ballon( );
Ballon b2 = new Ballon( a );
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
6
3
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Mutateurs et accesseurs
Mutateur (mutator)= méthode qui modifie l ’état d ’un objet
Accesseur (accessor)= méthode qui examine, mais ne modifie pas l ’état de l ’objet
Exemple : Classe Ballon
Les méthodes gonfle et degonfle sont des mutateurs
La méthode volume est un accesseur
L ’état est défini par la donnée vol
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
7
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Méthodes toString et equals
toString retourne un String
- qui contient (une partie de) l ’état de l ’objet sous une forme compréhensible
- qui pourra être imprimé
equals permet de vérifier si deux objets sont identiques, càd
- sont de même type
- sont dans le même état
Exemple : Classe Ballon
public String toString( )
{
return “ volume du ballon = ” + vol;
}
public boolean equals(Object b)
{
if ( !( b instanceof Ballon) )
return false
Ballon b1 = (Ballon) b;
// nécessaire car argument b de type Object
return b1.vol == vol;
}
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
8
4
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Méthodes statiques et main
Méthode statique :
- associée à une classe
- ne nécessite pas création d ’un objet
- spécifiée par le mot-clé static
Exemples :
- la classe Integer contient plusieurs méthodes statiques (voir [2] page 350)
- la classe Math contient plusieurs méthodes statiques (voir [2] page 352)
main : Exemple de la classe Ballon
la commande « java Ballon » lance l ’interpréteur java
qui exécute la méthode main de la classe Ballon
Rappelons que :
- le code source de Ballon est (normalement) dans un fichier Ballon.java
- le code interprété (en j-code) est dans un fichier Ballon.class
Chaque classe peut avoir sa propre méthode main, ce qui rend le test de la classe
plus pratique
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
9
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Packages
Package = ensemble de classes
Permet de regrouper des classes
Visibilité des classes
Deux classes d ’un même package ont moins de restriction de visibilité
entre elles que si elles étaient dans des packages différents
En effet, si aucun des mots-clé public, private, protected n ’est utilisé
pour un membre (donnée ou méthode) d ’une classe, alors il est accessible
par toutes les classes du même package.
Exemples de packages : java.applet, java.awt, java.io, java.lang, java.util
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
10
5
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Structure des packages
Les classes d ’un même package P :
- sont dans un même répertoire D tel que :
si
P = a1.a2. … .an
alors D = a1/a2/ … /an
Le nom du répertoire est interprété relativement à la variable
d ’environnement CLASSPATH (voir plus loin)
- ont leur 1ère ligne égale à
Package P;
Exemple : Package java.io
Les classes de ce package :
- se trouvent dans répertoire java/io relativement à CLASSPATH
- ont comme 1ère ligne : Package java.io;
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
11
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Accès aux classes d ’un package
Première méthode d ’accès :
Une classe C d ’un package P est spécifiée par P.C
Exemple 1 : Package java.util contient la classe Data
Un objet de cette classe peut être créé par l ’instruction suivante :
java.util.Data jour = new java.util.Data();
Classe Data : - se trouve dans java/util (relativement à CLASSPATH)
- commence par la ligne : Package java.util;
Exemple 2 : Package java.io contient la classe FileReader
Un objet de cette classe peut être créé par l ’instruction suivante :
java.io.FileReader fichier = new java.io.FileReader(nom);
Classe FileReader : - se trouve dans java/io (relativement à CLASSPATH)
- commence par la ligne : Package java.io;
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
12
6
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Accès aux classes d ’un package
(suite)
Seconde méthode d ’accès : En utilisant la directive import,
on peut utiliser les classes d ’un package P en spécifiant uniquement
leurs noms, càd sans préciser le nom du package.
Exemple : Soit : - la classe Date du Package java.util
- plusieurs classes du Package java.io
Si on veut utiliser ces classes en spécifiant juste leur noms, alors le fichier
où ces classes sont utilisées devra commencer par les deux lignes suivantes :
import java.util.Date;
import java.io.*;
// Exemple d ’utilisation de classes
Date jour = new Date( );
FileReader fichier = new FileReader( nom);
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
13
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Variable d ’environnement CLASSPATH
Un package a1.a2. … .an est cherché dans un répertoire a1/a2/ … /an
relativement aux répertoires spécifiés dans la variable CLASSPATH
Manipulation de CLASSPATH sous UNIX
Lire CLASSPATH à l ’aide de la commande « echo $CLASSPATH »
Cette commande nous retourne une liste de noms de répertoires séparés par « : »
Les noms de packages sont interprétés relativement à ces répertoires
Exemple : si « echo $CLASSPATH » nous retourne
« .:/jdk/lib/ »,
alors les noms de packages sont interprétés par rapport au répertoire courant
et au répertoire /jdk/lib/
Initialiser ou modifier CLASSPATH à l ’aide de setenv
Si, par exemple, on veut ajouter le répertoire $HOME/book, alors on exécute
setenv CLASSPATH .:/jdk/lib/:$HOME/book
Les classes qui : - sont accessibles à travers CLASSPATH et
- ne font pas partie explicitement d ’un package
sont considérées comme faisant partie d ’un même package
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
14
7
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Compilation séparée
Un programme consiste en un ou plusieurs fichiers .java
Chacun de ces fichiers :
- contient une classe portant le nom du fichier (sans l ’extension java)
- doit être compilé (à l ’aide de javac) pour générer un fichier de même nom
(mais avec l ’extension class)
Les fichiers .java peuvent être compilés dans n ’importe quel ordre
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
15
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Opérateur instanceof
L ’instruction « u instanceof K » retourne true si l ’objet u est une instance :
- de la classe K ou
- d ’une sous-classe de K ou
- d ’une classe qui implante l ’interface K ou
- d ’une sous-classe d ’une classe qui implante l ’interface K
Les interfaces seront définies dans la partie 4
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
16
8
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Mot-clé this
Première utilisation : référence à l ’objet courant
Exemple : méthode equals de la classe Ballon
public boolean equals (Object b)
{
if ( !( b instanceof Ballon ) ) return false;
Ballon b1 = (Ballon) b;
if (this == b1) return true;
else return b1.vol == vol;
}
Remarque : vol est équivalent à this.vol
Seconde utilisation : un constructeur fait référence à un autre constructeur
du même objet
Exemple : constructeurs de la classe Ballon
public Ballon( int x) { vol = x; }
public Ballon ( )
{
this( 0 ); // appel du premier constructeur
}
Il existe d ’autres utilisations de this
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
17
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Variable et constante globales à une classe
Variable statique :
Une variable spécifiée static est partagée par tous les objets de la classe
correspondante. Une telle variable se comporte comme une variable
globale à la classe. Elle existe dès que la classe est chargée.
Constante
Les mots-clé final static permettent de définir une constante globale à la classe.
Elle existe dès que la classe est chargée.
Exemple : public final static int INDICE_MAX = 100;
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
18
9
Chapitre 1 : Langage JAVA
Partie 3 : Programmation OO
Université de Sherbrooke
Département de génie électrique et de génie informatique
Initialiseurs statiques
Les champs (variables, constantes) statiques sont initialisés (à des valeurs
par défaut) lorsque la classe est chargée
Initialiseur statique = morceau de code qui est automatiquement exécuté
lorsque classe chargée
- permet d ’initialiser automatiquement les champs statiques à des valeurs autres
que celles par défaut
- est précédé du mot-clé static
- doit suivre les déclarations des champs statiques
Exemple : public class Carres
{
private static double RacineCarrees [ ] double [ 100 ];
static
{
for (int i = 0; i < RacineCarres.length; i++ )
RacineCarres[i] = Math.sqrt( ( double) i );
}
// Reste de laclasse
}
GEI 442 : Structures de données et algorithmes
Hiver 2001
Ahmed KHOUMSI
19
10
Téléchargement