Documente Academic
Documente Profesional
Documente Cultură
POO en Java
ENSA de Fès
Université Sidi Mohammed Ben Abdellah
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
Sommaire
2 POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
L’évolution de la programmation
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 4
La Programmation Orientée Objet
POO en Java
L’évolution de la programmation
Langages de programmation procéduraux
I En programmation procédural ou structurée, un programme est formé de la
réunion de différentes procédures et de différentes structures de données,
généralement indépendantes de ces procédures.
I Repose sur l”’équation de Writh” :
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 5
La Programmation Orientée Objet
POO en Java
L’évolution de la programmation
I Les fonctions, procédures accèdent à une zone où sont stockées les données. Il
y a donc une dissociation entre les données et les fonctions fonctions ce qui
pose des difficultés lorsque l’on désire changer les structures de données.
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 6
La Programmation Orientée Objet
POO en Java
L’évolution de la programmation
L’avènement de l’objet
I Afin de:
⇒ Libérer la programmation des contraintes liées au fonctionnement des
processeurs.
⇒ Rapprocher la programmation du mode cognitif de résolution des
problèmes.
I Mise au point d’un nouveau style de langages de programmation
⇒ Exemple: Simula, Smalltalk, C++, Eiffel, Java, C#, Delphi, PowerBuilder,
Python...
I Repose sur le concept d’objet qui est une association de données et de
procédures (ou méthodes) agissant sur ces données :
Programmer en OO, c’est donc définir des objets et les faire interagir.
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 8
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 9
La Programmation Orientée Objet
POO en Java
Objet
Classe
L’encapsulation
L’héritage
Polymorphisme
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
Quelques exemples:
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
Intérêts :
facilite l’évolution d’une application car elle stabilise l’utilisation des objets :
on peut modifier l’implémentation des attributs d’un objet sans modifier son
interface.
garantit l’intégrité des données, car elle permet d’interdire l’accès direct aux
attributs des objets (utilisation d’accesseurs).
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
Les droits d’accès aux membres d’une classe concernent aussi bien les
méthodes que les attributs.
En Java, on dispose des droits d’accès suivants :
I Accès public : on peut utiliser le membre de n’importe où dans le
programme.
I Accès private : seule une fonction membre de la même classe A peut utiliser
ce membre ; il est invisible de l’extérieur de A.
I Accès protected : ce membre peut être utilisé par une fonction de cette
même classe A, et pas ailleurs dans le programme il ressemble donc à
private, mais il peut en plus être utilisé par une classe B qui hérite de A.
Il existe une règle de POO qui précise que les attributs doivent être
encapsulées dans la classe pour éviter une utilisation extérieure. C’est une
forme de protection permettant d’éviter une utilisation incorrecte ou non
prévue par le programmeur de la classe. On appliquera ce principe en
déclarant l’ensemble des attributs en private.
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
L’héritage permet de former une nouvelle classe à partir d’une autre classe
existante.
La nouvelle classe (classe fille, sous-classe) hérite des attributs et des
méthodes de classe à partir laquelle elle a été formée (classe mère,
super-classe).
De nouveaux attributs et de nouvelles méthodes peuvent être définis dans la
classe fille. (Spécialisation)
Des méthodes de classe mère peuvent être redéfinies dans la classe fille.
Intérêts : Réutilisation
Utiliser une classe existante...
I En lui rajoutant des membres
I et/ou en modifiant certains de ses comportements
sans modifier le code de la classe existante.
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
La classe
Définir une classe
L’ordre des méthodes et des attributs dans une classe n’a pas d’importance.
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 1
La Programmation Orientée Objet
POO en Java
La classe
Déclaration des attributs
Les attributs d’un objet sont définis par ses variables membres.
Pour définir les attributs d’un objet, il faut donc définir les variables membres
de sa classe.
La syntaxe de déclaration d’un attribut est la suivante :
modificateurs [ options ] type nomAttribut ;
La signature de la variable:
I modificateurs: indiquent le niveau d’accessibilité de la variable.
I [static]: permet la déclaration d’une variable de classe.
I [final]: empêche la modification de la variable (Crée une constante).
I [transient]: on ne tient pas compte de la variable en sérialisant l’objet
I [volatile]: pour le multithreading
I type: le type de la variable (ex: int, String, double,...)
I nomAttribut: le nom de l’attribut (identificateur)
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
La classe
Déclaration des attributs
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
La classe
Déclaration des méthodes
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
La classe
Déclaration des méthodes
Au minimum:
I La méthode possède un identificateur et un type de retour.
I Si la méthode ne renvoie rien, le type de retour est void.
Les paramètres d’une méthode fournissent une information depuis l’extérieur
du ”scope” de la méthode.
On a pas besoin de passer les attributs de la classe comme arguments aux
méthodes de cette classe.
Exemples :
public void afficher ()
{
System . out . println ( " I am object " );
}
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
La classe
L’encapsulation
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
La classe
Exemple: la classe Point
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
Création d’instances
Déclaration et instanciation
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
Création d’instances
Accès aux membres
L’accès aux valeurs des attributs d’une instance de nom nomInstance se fait
comme suite:
nomInstance . nomAttribut
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
Création d’instances
Exemple: instance de la classe Point
Fichier TstPixel.java
public class TstPixel {
public static void main ( String args []){
Pixel a ;
a = new Pixel () ;
a . SetCoord (3 , 5) ;
a . Afficher () ; // P (3 ,5)
a . Deplacer (2 , 0) ;
a . Afficher () ; // P (5 ,5)
Pixel b = new Pixel ();
b . SetCoord (6 , 8) ;
b . Afficher () ; // P (6 ,8)
}
}
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 2
La Programmation Orientée Objet
POO en Java
private int x ;
private int y ;
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Les constructeurs
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Les constructeurs
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Les constructeurs
Exemple de définition des constructeurs pour la classe Pixel
public class Pixel {
private int x ;
private int y ;
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Les constructeurs
Un constructeur peut en appeler un autre en cascade en utilisant this(...)
Syntaxe:
public Constructeur (...)
{
this (...); // appelle au constructeur
...
}
Exemple :
public class Pixel {
private int x ;
private int y ;
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Accesseurs et mutateurs
Si c’est nécessaire, l’accès aux attributs privés d’une classe se fera par
l’intermédiaire de méthodes nommées des accesseurs et mutateurs.
I Un accesseur est une méthode qui permettre d’accéder aux attributs de objets
en lecture
I Un mutateur est une méthode qui permettre d’accéder aux attributs de objets
en écriture
On a l’habitude de les nommer get() pour l’accès en lecture et set() pour
l’accès en écriture d’un attribut.
Modificateur d’accès aux accesseurs et mutateurs est en général public.
Les accesseurs sont du même type que les attributs qu’ils doivent retourner.
Les mutateurs sont, par contre, de type void.
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Accesseurs et mutateurs
Exemple de définition de get() et set() pour les attributs de la classe Pixel
public class Pixel {
private int x ;
private int y ;
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Cont...
class PointDist {
public static void main ( String args []) {
Point p1 = new Point (10 , 10);
Point p2 = new Point (30 , 40);
System . out . println ( " p1 . distance ( p2 ) = " + p1 . distance ( p2 ));
System . out . println ( " p1 . distance (60 , 80) = " + p1 . distance (60 , 80));
System . out . println ( " p1 . distance () = " + p1 . distance ());
System . out . println ( " p1 . distance (10) = " + p1 . distance (10));
}
}
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 3
La Programmation Orientée Objet
POO en Java
Le typage et la surcharge
Les types des arguments peuvent quelquefois être ordonnés par une relation
de sous-typage.
Il y a deux catégories du sous-typage:
I sous-typage sur les types références : lié aux classes, aux interfaces, aux
classes abstraites, à l’héritage...
I sous-typage sur les types primitifs : on parle de conversion implicite
byte > short > int > long > float > double
char > int
Exemple
public class Overloading {
public double somme ( int a , int b ) { return a + b ;}
public double somme ( int a , double b ) { return a + b ;}
public static void main ( String [] args ) {
int i = 1; char c = ’A ’; short s = 2; long l = 20;
float f = 2.5; double d = 3.54;
System . out . println ( somme ( s , i )); // Appel de somme ( int , int )
System . out . println ( somme ( s , l )); // Appel de somme ( int , double )
System . out . println ( somme ( i , f )); // Appel de somme ( int , double )
System . out . println ( somme ( s , c )); // Appel de somme ( int , int )
System . out . println ( somme ( d , d )); /** erreur de conversion * */
}
}
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 4
La Programmation Orientée Objet
POO en Java
Ambiguité de surcharge
Exemple
public class Overloading {
public static void m ( int i , char c )
{
System . out . println ( " m ( int , char ) " );
}
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 4
La Programmation Orientée Objet
POO en Java
Les membres statiques sont liés à la classe et non à une instance particulière
(un objet).
I Attributs: sa valeur n’est pas propre à un objet mais à la classe (l’attribut lui
même, et bien sûr sa valeur, est la même pour tous les objets de la classe).
On y accède à partir du nom de la classe ou de la référence à n’importe
quel objet de la classe.
I Méthodes: son code ne dépend pas d’un objet de la classe et peut être
exécuté même si aucun objet existe (e.g. main)
Les membres statiques sont déclarés avec le mot-clé static.
Tout code utilisé dans les membres statiques ne peut pas faire référence à
l’instance courante (this).
Pr. Abdessamad EL BOUSHAKI (ENSA de Fès) Programmation Orientée Objet avancée en JAVA 4