0% ont trouvé ce document utile (0 vote)
11 vues165 pages

Mon POO Java

Ce document est une introduction à la programmation orientée objet en Java, couvrant les composants de la plateforme Java, le fonctionnement du JDK, et les bases de la syntaxe Java. Il présente également des exemples de code, des types primitifs, des structures conditionnelles et répétitives, ainsi que des exercices pratiques pour renforcer l'apprentissage. Enfin, il aborde les différences entre la programmation procédurale et orientée objet.

Transféré par

auram
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
11 vues165 pages

Mon POO Java

Ce document est une introduction à la programmation orientée objet en Java, couvrant les composants de la plateforme Java, le fonctionnement du JDK, et les bases de la syntaxe Java. Il présente également des exemples de code, des types primitifs, des structures conditionnelles et répétitives, ainsi que des exercices pratiques pour renforcer l'apprentissage. Enfin, il aborde les différences entre la programmation procédurale et orientée objet.

Transféré par

auram
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction à la programmation

Orientée Objets en java

Responsable : Pr. Othmane EL MESLOUHI


proffsaa@[Link]

Introduction de POO en 11 Pr. Othmane EL MESLOUHI


JAVA 1
La plateforme Java

La plateforme Java a deux composants :


La Machine Virtuelle Java (Java Virtual Machine) :
programme permettant d'interpréter et d'exécuter le bytecode Java (proche du langage
machine).
L’API Java (Java Application Programmig Interface):

ensemble de bibliothèques contenant des classes et interfaces organisées


en Packages.

Introduction de POO en 22 Pr. Othmane EL MESLOUHI


JAVA
Historique

Introduction de POO en 33 Pr. Othmane EL MESLOUHI


JAVA
Introduction
 Le kit de développement Java (JDK) est l'un des trois packages
technologiques de base utilisés dans la programmation Java, avec la JVM
(Java Virtual Machine) et le JRE (Java Runtime Environment). Il est
important de différencier ces trois technologies, ainsi que de comprendre
comment elles sont connectées:

 La JVM est le composant de la plate-forme Java qui exécute les


programmes.
 Le JRE est la partie sur disque de Java qui crée la JVM.
 Le JDK permet aux développeurs de créer des programmes Java qui
peuvent être exécutés et exécutés par la JVM et JRE.
 IDE :
 Eclipse
 Netbeans
 JBuilder
 IntelliJ

Introduction de POO en 44 Pr. Othmane EL MESLOUHI


JAVA
Fonctionnement

(1) Créer votre document source, exemple [Link]


(2) Compilation à l’aide de l’instruction javac,
ex : javac [Link].
- Le compilateur recherche les erreurs et refuse de compiler tant qu’il n’est pas
sûr que tout fonctionne correctement.
(3) Le compilateur crée un nouveau document, [Link], codé en
bytecode java.
(4) Exécuter le programme en lançant la JVM avec le fichier [Link] :
java MonProgramme (la commande java lance la JVM)

Introduction de POO en 55 Pr. Othmane EL MESLOUHI


JAVA
Exemple 1

public class Hello {


public static void main (String[ ] args) {
[Link]("Bonjour");
}
}

Introduction de POO en 66 Pr. Othmane EL MESLOUHI


JAVA
Exemple 2

public class PremierCalcul{


public static void main(String [] args) {
int a;
a=5*3;
[Link](a);
a=287%7;
[Link](a);
}
}

Introduction de POO en 77 Pr. Othmane EL MESLOUHI


JAVA
Types primitifs

 Java est un langage à typage fort


 Il existe deux sortes de variables : les types primitifs et
les références aux objets.
 Les types primitifs contiennent des valeurs élémentaires
(de simples suites de bits), dont les entiers, les booléens
et les nombres en virgule flottante
 Exemple : int nombre

Introduction de POO en 88 Pr. Othmane EL MESLOUHI


JAVA
Les types primitifs

Introduction de POO en 99 Pr. Othmane EL MESLOUHI


JAVA
Les types primitifs
 int taille = 32 ;
 char lettre = ‘j’ ;
 double d = 456.54
 boolean test ;
 test = true ;
 int y = x + 43 ;

 Vous ne pouvez pas mettre une grande valeur dans une petite tasse.
int x = 24 ;
byte y = x ; // ne fonctionnera pas
 Par contre mettre une petite tasse dans une grande tasse est possible.
byte x = 24 ;
int y = x ; // fonctionne
 Constantes
Ce sont des variables dont la valeur ne peut être affectée qu'une fois
 Exemple : final int n =5 ;
n = 10; // erreur : n est déclaré final, ne peut plus être modifiée

Introduction de POO en 10
10 Pr. Othmane EL MESLOUHI
JAVA
Les types primitifs

Introduction de POO en 11
11 Pr. Othmane EL MESLOUHI
JAVA
Les variables : comparaisons

Java propose des opérateurs pour toutes les comparaisons :

> (strictement supérieur) & (ET binaire )


< (strictement inférieur ) ^ (OU exclusif binaire )
>= (supérieur ou égal ) | (OU binaire)
<=(inférieur ou égal ) ?: (opérateur conditionnel)
== (egalité) Exemple : a ? b : c
!= (diffèrent de ) équivalent à : si a alors b sinon
&& (ET logique) c Remarque : b et c doivent
|| (OU logique) retourner le même type

Introduction de POO en 12
12 Pr. Othmane EL MESLOUHI
JAVA
Les variables : comparaisons

Priorités des opérateurs du plus au moins prioritaire :


1) les parenthèses : ( )
2) les opérateurs d'incrémentation : ++ , --
3) les opérateurs de multiplication, division, et modulo :*, / , %
4) les opérateurs d'addition et soustraction :+, -
5) les opérateurs de comparaison : < , >,<=,>=
6) les opérateurs d'égalité : ==, !=
7) l'opérateur OU exclusif : ^
8)l'opérateur ET logique : &&
9)l'opérateur OU logique : ||
10)les opérateurs d'assignement : =, += ,-=
Remarque :
Les parenthèses ayant une forte priorité, l'ordre d'interprétation
des opérateurs peut être modifié par des parenthèses.
Introduction de POO en 13
13 Pr. Othmane EL MESLOUHI
JAVA
Les structures alternatives
 Si (condition ) alors Actions1
sinon : Action2
 syntaxe Java :
if (condition) {
Actions1
} else {
Actions2
}
Exemple :
int n = 3 ;
if ( n > 2 ) {
[Link](‘’ n est supérieur à 2’’) ;
} else {
[Link](‘’ n est inférieur ou égal à 2 ‘’) ;
}

Introduction de POO en 14
14 Pr. Othmane EL MESLOUHI
JAVA
Les structures alternatives
 Si (condition ) alors Actions1
sinon si: Action2
sinon Action 3
 syntaxe Java :
if (condition) {
Actions1
} else if {
Actions2
}
else { Actions3
}
Exemple :
if (testscore >= 90)
{ grade = 'A'; }
else if (testscore >= 80)
{ grade = 'B'; }
else { grade = ‘C'; }

Introduction de POO en 15
15 Pr. Othmane EL MESLOUHI
JAVA
Les structures alternatives
Tests avec Switch :
Switch permet d’effectuer des tests pour des valeurs
constantes de type primitif (byte, short, int, char).
Forme :

switch (expression) {

case constante1 : instr11; instr12; break;

case constante2 : ...; break;

default : ...

}
En l’absence du break, l’exécution passe au case suivant.

Introduction de POO en 16
16 Pr. Othmane EL MESLOUHI
JAVA
La lecture à partir du clavier

• Depuis l’arrivée de la version 5.0, SUN a implémenté une


classe permettant de récupérer une valeur saisie au clavier.

• Dorénavant, plus besoin de se développer une classe soi-


même pour faire cette tâche.

• Cette classe s’appelle Scanner


• Elle appartient au package [Link]

Introduction de POO en 17
17 Pr. Othmane EL MESLOUHI
JAVA
La classeScanner
Déclaration de l’objet :

Scanner s = new Scanner([Link]);

Quelques méthodes :

• nextLine() : permet de lire une chaine de caractères


String
• nextInt() : permet de lire un int
• nextLong() : permet de lire un long
• nextDouble() : permet de lire un double
• nextFloat() : permet de lire un float
Introduction de POO en 18
18 Pr. Othmane EL MESLOUHI
JAVA
Exercice 1

Écrire un programme qui permet d’afficher le


maximum et le minimum de deux nombres entiers
donnés.

Introduction de POO en 19
19 Pr. Othmane EL MESLOUHI
JAVA
Exercice 2

Ecrivez un programme qui lit trois valeurs entières (A, B et C)


au clavier et qui affiche la plus grande des trois valeurs, en
utilisant:

a) if - else et une variable d'aide MAX

b) if - else if - ... - else sans variable d'aide

c) les opérateurs conditionnels et une variable d'aide MAX

d) les opérateurs conditionnels sans variable d'aide

Introduction de POO en 20
20 Pr. Othmane EL MESLOUHI
JAVA
Les structures répétitives
 Boucle for
for (initialisation ; condition ; modification) {
Actions
}
 Exemple :
for ( int i = 0 ; i<10 ; i++) {
[Link](i);
}

int[ ] tableau = new tableau[100] ;


for ( int i = 0 ; i<[Link] ; i++) {
tableau[i] = 5 ;
}
Introduction de POO en 21
21 Pr. Othmane EL MESLOUHI
JAVA
Les structures répétitives

 while ( condition) {
Actions
}

int x = 1 ;
[Link](‘’Avant la boucle’’) ;
while (x < 4 ) {
[Link](‘’Dans la boucle’’) ;
[Link](‘’ La valeur de x est : ‘’ + x) ;
x = x +1 ;
}
[Link](‘’Après la boucle’’) ;
Introduction de POO en 22
22 Pr. Othmane EL MESLOUHI
JAVA
Les structures répétitives

 do {
//actions
}
while(condition);

Introduction de POO en 23
23 Pr. Othmane EL MESLOUHI
JAVA
Exercice 3

Lire deux nombres entiers dans les variables nd et nf


et écrire les doubles des nombres compris entre ces
deux limites (incluses).

Introduction de POO en 24
24 Pr. Othmane EL MESLOUHI
JAVA
Exercice 4

Écrire un algorithme qui affiche un triangle rempli


d'étoiles, s'étendant sur un nombre de lignes fourni
en donnée et se présentant comme dans cet
exemple :

*
**
***
****
Introduction de POO en 25
25 Pr. Othmane EL MESLOUHI
JAVA
Tableaux en Java

Introduction de POO en 26 Pr. Othmane EL MESLOUHI


JAVA
Tableaux

• En Java
– Une variable-tableau est une référence

– Le tableau doit être créé avant utilisation à l’aide de new


ou des { }

– Si on modifie le contenu d’un tableau dans une fonction,


le paramètre effectif sera affecté.

Introduction de POO en 27 Pr. Othmane EL MESLOUHI


JAVA
Tableaux

On définit les tableaux de la façon suivante :


• Exemple : int [ ] tabInt = new int[20]; //définit un tableau
de 20 entiers

– Exemple : char [ ] tabCar = {‘a’,’l’,’l’,’o’}; //définit un


tableau de 4 caractères

– Forme générale : type[ ] ident_tableau = new type


[nombre de cases] ou { liste des valeurs séparées
par une virgule};

Introduction de POO en 28 Pr. Othmane EL MESLOUHI


JAVA
Tableaux
• En Java

– Les indices commencent à 0


– Toutes les cases sont initialisées avec une valeur
nulle par défaut, selon le type (0, 0.0, null,’\0’)
– On accède à une valeur à l’aide du nom du
tableau[indice]
• Exemple : tabInt[3] fait référence à la 4ième case
du tableau

Introduction de POO en 29 Pr. Othmane EL MESLOUHI


JAVA
Tableaux

– On peut utiliser l’attribut length pour obtenir le nombre


de cases
• Exemple [Link]([Link]);

– Les tableaux sont statiques (la taille est invariable)

– L’accès à une case inexistante cause une erreur à


l’exécution.

Introduction de POO en 30 Pr. Othmane EL MESLOUHI


JAVA
Tableaux
• Représentation graphique 0 1 2 ... n-1

variable-tableau

• Boucle classique
for (i = 0; i < [Link]; i++)
Traitement de chaque case du tableau

Exemple : int[] tabChaine = new int[20];

for(int i = 0; i < [Link]; i++)


[Link](tabChaine[i]);
***Affichera 20 fois la valeur 0

Introduction de POO en 31 Pr. Othmane EL MESLOUHI


JAVA
Application 3

Introduction de POO en 32
32 Pr. Othmane EL MESLOUHI
JAVA
EXERCICE

Écrire un programme qui permet de rechercher une


valeur donnée dans un tableau et d'afficher son rang

Introduction de POO en 33 Pr. Othmane EL MESLOUHI 33


33
JAVA
EXERCICE

Écrire un programme en java déclarant un tableau T du type


entier de n éléments , remplit le tableau par des valeurs
entrées au clavier et affiche le tableau.

Copiez ensuite toutes les composantes strictement positives


dans un deuxième tableau TPOS et toutes les valeurs
strictement négatives dans un troisième tableau TNEG.
Afficher les tableaux TPOS et TNEG.

Introduction de POO en 34 Pr. Othmane EL MESLOUHI 34


34
JAVA
POO en Java

Introduction de POO en 35
35 Pr. Othmane EL MESLOUHI
JAVA
Styles de programmation
Programmation procédurale:

 Fondé sur l’exécution d’instructions modifiant l’état


de la mémoire
 Concept clef : la fonction (procédure, routine, ...) ->
découpage du problème en fonctions... découpées en
sous-fonctions ...
 Données séparées des traitements ;
 Analyse du problème de manière descendante
 Langage typique C, Pascal, Fortran

Introduction de POO en 36 Pr. Othmane EL MESLOUHI


JAVA
Styles de programmation

Programmation orienté objet


 Un programme est vu comme une communauté
de composants autonomes (objets) disposant de
ses ressources et de ses moyens d’interaction
 Utilise des classes pour décrire les structures et
leur comportement
 Usage intensif de l’échange de messages
 Langage typique Smalltalk, C++, Java,

Introduction de POO en 37 Pr. Othmane EL MESLOUHI


JAVA
Avantages du style objet
Facilite la programmation procédurale
 La conception par classe conduit à des
composants réutilisables
 Un composant offre des services et en utilise
d ’autres
 Elle « expose » ses services à travers une interface
 Elle cache les détails d’implémentations
(encapsulation ou data-hiding)
 Tout ceci le rend réutilisable

Introduction de POO en 38 Pr. Othmane EL MESLOUHI


JAVA
Critères de qualité d’un logiciel

1. Correct
2. Robuste
3. Extensible
4. Réutilisable
5. Portable
6. Efficace

Introduction de POO en 39
39 Pr. Othmane EL MESLOUHI
JAVA
Approche orientée objet

Approche Intuitive
 Dans la vie réelle, utilisation de composants déjà prêt.
 La POO s’appuie sur la même idée.
 La programmation orientée objet (POO), est une façon
d'architecturer une application informatique en regroupant
les données et les traitements au sein d'une même entité, les
objets.
 En POO., on identifie d’ abord les concepts, et c’est ensuite
seulement que l’on cherche les méthodes.

Approche Technique

Introduction de POO en 40
40 Pr. Othmane EL MESLOUHI
JAVA
Les Objets
Un objet informatique, au sens de l’orienté objet, est
une unité atomique possédant :
 une identité ;
 un état, défini par un ensemble de données
(attributs, ou données membres) ;
 un comportement, défini par un ensemble de
fonctions (méthodes, ou fonctions membres).
Un Objet peut correspondre à :
 objet concret du monde réel, ayant une réalité
physique;
 Un concept abstrait;

Introduction de POO en 41
41 Pr. Othmane EL MESLOUHI
JAVA
Les Objets
Un Objet est une entité informatique
résultant de l’association :
- de DONNÉES ( Propriétés ou Attributs) ;
- de MÉTHODES manipulant ces données
(Comportements) ;

OBJET = Attributs+Méthodes

Introduction de POO en 42
42 Pr. Othmane EL MESLOUHI
JAVA
Les Classes
Une Classe est un modèle informatique représentant une
famille d’objets ayant :
- la même structure de données (même liste d’attributs)
- les mêmes méthodes (mêmes comportements).

Introduction de POO en 43
43 Pr. Othmane EL MESLOUHI
JAVA
Les Classes

La Classe par elle-même ne contient pas les valeurs


des données : c’est un type de données abstrait.
La notion de Classe est fortement liée à la notion de
type
La création d’un objet en tant qu’exemplaire concret
(contenant des données) d’une classe s’appelle une
INSTANCIATION.
Chaque objet (instance d’une classe) donne des
valeurs aux attributs de la classe.

Introduction de POO en 44
44 Pr. Othmane EL MESLOUHI
JAVA
Classes et Objets

Introduction de POO en 45
45 Pr. Othmane EL MESLOUHI
JAVA
Classes et Objets

Introduction de POO en 46
46 Pr. Othmane EL MESLOUHI
JAVA
Classes et Objets

donnez différents
attributs associés à la
classe Télévision
donnez différents
actions associées à
cette classe
identifier des objets de
la classe

Introduction de POO en 47
47 Pr. Othmane EL MESLOUHI
JAVA
Syntaxe

Introduction de POO en 48
48 Pr. Othmane EL MESLOUHI
JAVA
Déclarer une Classe

 Syntaxe :
public class nom_classe{
attributs  Les attributs et les méthodes
sont appelés les propriétés
méthodes de la classe.

}
Avec : nom_classe=> le nom de la Classe
attributs => l’ensemble des attributs de la Classe
méthodes => l’ensemble des méthodes de la Classe
 Le code doit être enregistré dans un fichier de nom : nom_classe.java

Introduction de POO en 49
49 Pr. Othmane EL MESLOUHI
JAVA
Les attributs

 Syntaxe :
type nom_attribut_1;

type nom_attribut_N;

=> Les attributs sont des variables dont la portée est toutes les
méthodes de la classe.
=>(Recommandation: Les attributs ne doivent pas être
accessibles à l’extérieur de la classe qui les définit.

Introduction de POO en 50
50 Pr. Othmane EL MESLOUHI
JAVA
Les méthodes

 Syntaxe :
public type_retour nom_methode1(type1 nom1, type2 nom2, …){
code_methode1
}

public type_retour nom_methodeM(type1 nom1, type2 nom2, …){
code_methodeM
}

Introduction de POO en 51
51 Pr. Othmane EL MESLOUHI
JAVA
Exemple 1

Introduction de POO en 52
52 Pr. Othmane EL MESLOUHI
JAVA
Exemple 1

Introduction de POO en 53
53 Pr. Othmane EL MESLOUHI
JAVA
Classes et Objets
 Chaque objet qui est une instance de la classe Voiture possède ses
propres valeurs d’attributs
 Toutes les instances d’une classe donnée ont les mêmes méthodes,
mais ces méthodes peuvent se comporter différemment selon la
valeur des variables d’instance(attributs).

Introduction de POO en 54
54 Pr. Othmane EL MESLOUHI
JAVA
Constructeurs

 Un constructeur est une méthode qui :


 a pour nom le nom de la classe

 n’a pas de type de retour dans sa déclaration

 Syntaxe :
public nom_classe(type1 nom1, type2 nom2, …){
code_constructeur
}

=> On peut définir plusieurs constructeurs avec des signatures


différentes.
Introduction de POO en 55
55 Pr. Othmane EL MESLOUHI
JAVA
Constructeurs
 Le rôle du constructeur est de permettre d’initialiser les attributs
d’un objet au moment de sa création.
 Le constructeur dont la signature ne comporte pas d’argument
est appelé le constructeur par défaut.
 Si on ne définit aucun constructeur dans le code de la classe, le
constructeur par défaut existe mais il ne contient aucune
instruction (donc il ne fait rien).
 Le constructeur est appelé automatiquement par l’opérateur new
quand on crée un objet. Les arguments d’appel du constructeur
sont indiqués dans les parenthèses après le nom du type :

… = new nom_du_type(arg1, …, argN);

Introduction de POO en 56
56 Pr. Othmane EL MESLOUHI
JAVA
Constructeurs

Chien monChien = new Chien() ;


 Il contient le code qui s’exécute lorsque vous dites new
 Quand on écrit pas de manière explicite un constructeur, le
compilateur se charge de le faire à notre place
 public class Chien{
public Chien() {

}
}

Introduction de POO en 57
57 Pr. Othmane EL MESLOUHI
JAVA
Constructeurs
 Le meilleur endroit où placer l’initialisation est le constructeur. Il suffit de
créer un constructeur avec arguments :

public class Chien{


int taille ;
public Chien( int tailleChien ) {
[Link](‘’Construction de l’objet Chien’’) ;
taille = tailleChien ;
[Link](‘’Le Chien mesure ’’+taille) ;
}
}

public class UtiliserChien {

public static void main(String[] args) {


Chien c = new Chien(42);
}
}

Introduction de POO en 58
58 Pr. Othmane EL MESLOUHI
JAVA
Constructeurs
 deux constructeurs, un pour la taille par défaut et un autre avec taille comme argument

public class Chien


int taille ;
public Chien( ) {
taille = 27 ;
}
public Chien( int tailleChien ) {
taille = tailleChien ;
}
}

public class UtiliserChien {

public static void main(String[] args) {


Chien c1 = new Chien(42);
Chien c2 = new Chien(); //on crée un Chien dont on ne connait pas la taille
}
}
Introduction de POO en 59
59 Pr. Othmane EL MESLOUHI
JAVA
Exemple : le constructeur de la classe Voiture

Quelque part dans le code :


Appelle le constructeur Point(int,int)

Appelle le constructeur Point()

Introduction de POO en 60
60 Pr. Othmane EL MESLOUHI
JAVA
Destructeur
 La durée de vie d'un objet passe par trois étapes :

a. la déclaration de l'objet et l'instanciation grâce


à l'opérateur new
b.L'utilisation de l'objet en appelant ses méthodes
c. La suppression de l'objet

 Dans d’autres langages de programmation (c++ par


exemple) la suppression (libération de la mémoire) est
faite par une méthode appelée destructeur.

 En java, cette fonction est prise en charge


automatiquement par les garbages collectors
Introduction de POO en 61
61 Pr. Othmane EL MESLOUHI
JAVA
Références
 Il n’existe pas de variables objet
 Il n’existe que des références à des objets
 Chien monChien = new Chien() ;

Introduction de POO en 62 Pr. Othmane EL MESLOUHI


JAVA
Références

 Chien b = new Chien() ;


 Chien c = new Chien() ;
 Chien d = c ;
 c=b
 d=c

Introduction de POO en 63 Pr. Othmane EL MESLOUHI


JAVA
Références

 Chien b = new Chien() ;


 Chien c = new Chien() ;

Introduction de POO en 64 Pr. Othmane EL MESLOUHI


JAVA
Références

 Chien d = c ;

Introduction de POO en 65 Pr. Othmane EL MESLOUHI


JAVA
Références

 c=b

Introduction de POO en 66 Pr. Othmane EL MESLOUHI


JAVA
Références

 d=c

Introduction de POO en 67 Pr. Othmane EL MESLOUHI


JAVA
Références

 d = null ;

Introduction de POO en 68 Pr. Othmane EL MESLOUHI


JAVA
Les concepts fondamentaux de la
POO

Introduction de POO en 69
69 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation

L'encapsulation est l'un des trois grands principes


de la POO :
1. Un objet rassemble en lui même ses données et ses
traitements.
2. Abstraction de données : la structure d'un objet n'est pas
visible de l'extérieur. L'objet protège les données et ne
les rendant accessibles qu'au travers des interfaces.
L'interface précise quelles sont les services ( action )
offerts par l'objet.
3. Abstraction de traitements : Du point de vue de
l'extérieur, l'invocation d'un service est atomique.

Introduction de POO en 70
70 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation : Message

L'objet est une boite noire. Le message est le


moyen de formuler une requête à un objet (une
demande de service).
 Le message doit contenir:
 Handle de l'objet : une référence ou un pointeur vers
l'objet.
 Sélecteur de méthode (nom de la méthode).
 Liste des paramètres.

Exemple : [Link]élerer(2)
Introduction de POO en 71
71 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation : Message

Message B

Message A

Objet 1

Objet 2

Message C
Message E

Objet 4
Objet 3

Message D
Introduction de POO en 72
72 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation : Message

Vis à vis des messages, un objet peut se comporter


comme :
- Acteur : objet actif, à l’origine de l’envoi de messages ;
- Serveur : objet passif destinataire des messages,
jamais à l’origine d’un échange ;
- Agent : objet à la fois Acteur et Serveur, peut interagir
avec les autres objets, de sa propre initiative ou
suite à un message.

Introduction de POO en 73
73 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation : Message

Introduction de POO en 74
74 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation : Interface
La liste des messages auxquels est capable de répondre
un objet constitue son interface. C'est la partie publique
d'un objet.
En pratique, dans C++ ou Java, l'interface représente la
liste des méthodes accessibles (publiques) au client de
l'objet.

Ampoule
C'est au programmeur Allumer()

Interface
de veiller au respect du Éteindre()
principe d'encapsulation Augmenter()
Réduire()

Introduction de POO en 75
75 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation

Données
} •Partie statique, passive
•Partie cachée, privée

Traitement
} •Partie dynamique, comportementale
•Partie visible, publique
•Interface avec l’extérieur

User

Introduction de POO en 76 Pr. Othmane EL MESLOUHI


JAVA 76
Encapsulation

 propriété : une propriété est dite visible par


une classe si les méthodes de cette classe
peuvent avoir accès à sa valeur et peuvent la
modifier.

 méthode : une méthode est dite visible par


une classe si les méthodes de cette classe
peuvent l’appeler.

Introduction de POO en 77
77 Pr. Othmane EL MESLOUHI
JAVA
visibilité des propriétés et des méthodes

 public : visible de partout (à partir des autres classes


des autres packages également)

 protected : (protégé) visible uniquement à partir des


classes du même package et des sous classes
 « rien » : visible uniquement à partie des classes du
même package.

 private : (privé) visible uniquement dans la classe


Introduction de POO en 78
78 Pr. Othmane EL MESLOUHI
JAVA
Comment rendre accessible une propriété privée?

 Même si une propriété est privée, on peut y


accéder à l’aide des méthodes publiques ou
protégées.
 Ces méthodes peuvent être accessible par une
autre classe.
 Ces méthodes servent comme une interface entre
les propriétés privées et des classes extérieures.
 Ces méthodes peuvent réaliser le contrôle d’accès
et la validité des valeurs, donc la protection des
données.
Introduction de POO en 79
79 Pr. Othmane EL MESLOUHI
JAVA
Les méthodes d’accès à une propriété privée -
exemple
public class Cercle {
private double rayon;
Vers l’extérieure
// Constructeur
public Cercle (double r) {
rayon = r; getRayon setRayon
}
// méthodes d'accèes
public double getRayon() {
return rayon; } rayon
public void setRayon( double r) {
if ( r>0 ) { Classe Cercle
rayon = r; Accès à la valeur

} modifier la valeur
else
[Link](" erreur "); La méthode permet d’assurer la validité
} de la valeur en cas de modification
} extérieure.

Introduction de POO en 80
80 Pr. Othmane EL MESLOUHI
JAVA
Encapsulation

Introduction de POO en 81
81 Pr. Othmane EL MESLOUHI
JAVA
Exercice 1

 Définissez une classe Point permettant de manipuler un point du


plan. Cette classe contiendra :

 un constructeur,
 les méthodes d'accès et de modification des coordonnées,
 une méthode deplacer qui effectue une translation définie
par les arguments
 une méthode afficher qui affiche les coordonnées d'un
point

 On donnera un exemple d'utilisation avec une méthode main

Introduction de POO en 82
82 Pr. Othmane EL MESLOUHI
JAVA
Exercice 2

 Définissez une classe Individu composée


d'un nom, d'une adresse, et d'un numéro
de telephone. Vous écrirez aussi les méthodes
constructeur, modification et consultation des
champs et affichage.

Introduction de POO en 83
83 Pr. Othmane EL MESLOUHI
JAVA
Exercice 3

Introduction de POO en 84
84 Pr. Othmane EL MESLOUHI
JAVA
Relations entre classes

Introduction de POO en 85
85 Pr. Othmane EL MESLOUHI
JAVA
Les relations entre Classes

Les relations entre classes peuvent être de plusieurs


natures :
- l’Héritage, traduit une classification ;
- la contenance (Agrégation, Composition), traduit
une composition ;
- L’Association, simple relation permettant à deux
classes d’échanger des messages ;
Les relations entre classes modélisent les interactions
(les "liens") entre objets

Introduction de POO en 86
86 Pr. Othmane EL MESLOUHI
JAVA
Héritage
L’héritage traduit la relation "est un"
Un roman est un livre
Une voiture est un Véhicule

Introduction de POO en 87
87 Pr. Othmane EL MESLOUHI
JAVA
Héritage
L’héritage est le mécanisme de transmission des propriétés
(attributs et méthodes) d’une classe à une autre ;
La classe de base (classe mère, parente) transmet toutes ses
propriétés transmissibles aux classes dérivées (classe fille,
enfant);
La classe dérivée possède ses propres attributs et méthodes,
que la classe de base ne connaît pas ;
La classe dérivée peut redéfinir (améliorer, spécialiser, ....) les
méthodes transmises par la classe de base ;
Tout ce que la classe de base sait faire, la classe dérivée sait le
faire ;
Éventuellement, la classe dérivée sait le faire "mieux" ou
"différemment" ;

Introduction de POO en 88
88 Pr. Othmane EL MESLOUHI
JAVA
Héritage

L’héritage peut être simple au multiple : une classe


peut dériver de plusieurs classes de base
L’héritage est souvent arborescent : une classe
dérivée peut à son tour être une classe de base pour
une autre dérivation ( -> hiérarchie de classes) ;
L’héritage n’est pas réflexif : une classe ne peut pas
hériter d’elle-même ;
L’héritage évite la duplication et encourage la
réutilisation

Introduction de POO en 89
89 Pr. Othmane EL MESLOUHI
JAVA
Héritage
L’héritage peut être utilisé en conception de deux façons :
héritage par spécialisation (descendant)
- une classe de base est dérivée pour produire une ou plusieurs classes dérivées
spécialisées dans certains traitements, ou comportant des attributs particuliers
- démarche très utilisée dans les phases initiales de conception car elle permet :
- de réutiliser tout ou partie des attributs et des méthodes d’une classe de
base,
- de ne rajouter dans la classe dérivée que les attributs et les méthodes qui la
spécialisent.
héritage par généralisation (ascendant)
- factorisation d’un ensemble d’attributs ou de méthodes que l’on regroupe dans
une classe de base
- démarche utilisée pour imposer un modèle commun à une hiérarchie de classes.
- démarche fréquente en fin de phase de conception, après mûrissement, quand
on s’aperçoit que certaines classes possèdent des attributs ou des comportements
communs factorisables dans une classe de base.

Introduction de POO en 90
90 Pr. Othmane EL MESLOUHI
JAVA
Héritage

Introduction de POO en 91
91 Pr. Othmane EL MESLOUHI
JAVA
Héritage

Introduction de POO en 92
92 Pr. Othmane EL MESLOUHI
JAVA
Héritage

Introduction de POO en 93
93 Pr. Othmane EL MESLOUHI
JAVA
Héritage

 la classe dérivée possède


 LES PROPRIETES DE SA CLASSE MERE en fonction
des modificateurs
 LES METHODES DE LA CLASSE MERE en fonction
des modificateurs

Introduction de POO en 94
94 Pr. Othmane EL MESLOUHI
JAVA
Héritage des propriétés (exemple)
voiture
fabriquant
chauffeur

Utilitaire Propriétés
héritées
fabriquant, chauffeur
cargaison
quantité

Introduction de POO en 95
95 Pr. Othmane EL MESLOUHI
JAVA
Héritage des méthodes (exemple)
voiture
démarrer()
arrêter()

Utilitaire Méthodes héritées


démarrer(), arrêter()
charger()
décharger()

Introduction de POO en 96
96 Pr. Othmane EL MESLOUHI
JAVA
Hiérarchie des classes

 Exemple : véhicule

 La hiérarchie va voiture camion moto


des classes
générales vers
les classes 4x4 utilitaire
spécifiques

Introduction de POO en 97
97 Pr. Othmane EL MESLOUHI
JAVA
héritage sous JAVA
 Dans l’en-tête da la classe dérivée, le mot clé
extends sert à préciser la classe mère.
 Une classe dérivée peut avoir une seule classe
mère.
 Tous les propriétés et les méthodes de la classe
mère sont héritées (i.e. utilisables dans la classe
dérivée) sauf celles déclarés avec le modificateur
final
 Les classes avec les modificateur final ne peuvent
pas être des classes mères

Introduction de POO en 98
98 Pr. Othmane EL MESLOUHI
JAVA
Remarques

 sous JAVA, l’héritage est dit simple : une classe ne


peut avoir qu’une seule classe mère (l’héritage
multiple existe sous C++)
 une classe peut être la mère de plusieurs classes
dérivées
 l’héritage permet de déclarer les propriétés et les
méthodes une seule fois.

Introduction de POO en 99
99 Pr. Othmane EL MESLOUHI
JAVA
Le mot clé this
• L’objet « courant » est désigné par le mot clé this
• Permet de désigner l’objet dans lequel on se trouve
•Désigne une référence particulière qui est un membre
caché

• Utilité de l’objet « courant »

Rendre explicite l’accès aux propres attributs et méthodes définies dans la


classe

Passer en paramètre d’une méthode la référence de l’objet courant

Introduction de POO en 100


100 Pr. Othmane EL MESLOUHI
JAVA
70
Le mot clé this

Introduction de POO en 101 Pr. Othmane EL MESLOUHI


JAVA
Le mot clé super

 Les propriétés et les méthodes masquées de la


classe mère sont référencées à l’aide du mot clé
super:
 super.nom_méthode
 super.nom_propriété
 On ne peut pas référencer les méthodes et
propriétés privées (private) de la classe mère si
elles sont surdéfinie.
 Les méthodes finales (final) ne peuvent jamais
être surdéfinie dans la classe dérivée.
Introduction de POO en 102
102 Pr. Othmane EL MESLOUHI
JAVA
Constructeurs et héritage
public class Animal {
public Animal( ) {
[Link](‘’Nouvel Animal’’) ;
}
}
public class Chien extends Animal {
public Chien( ) {
super( ) ;
[Link](‘’Nouveau Chien’’) ;
}
}
public class TestChien( ) {
public static void main(String[ ] args) {
Chien c = new Chien( );
}
}

Introduction de POO en 103


103 Pr. Othmane EL MESLOUHI
JAVA
Exercice 5

Introduction de POO en 104


104 Pr. Othmane EL MESLOUHI
JAVA
Exercice 6

Introduction de POO en 105


105 Pr. Othmane EL MESLOUHI
JAVA
Exercice 7

Introduction de POO en 106


106 Pr. Othmane EL MESLOUHI
JAVA
Agrégation et composition

capacité d'un objet à être constitué de manière concrète ou


abstraite par d'autres objets ou à faire référence à d'autres
objets.
Par exemple, un objet automobile est constitué d'un objet
carrosserie, d'un objet moteur et d'un objet plaque
Immatriculation.
On parle plutôt de composition quand la durée de vie du
constituant dépend de celle du constitué : l'objet carrosserie
doit être détruit en même temps que l'objet automobile.
Sinon, on parle plutôt d'agrégation : l'objet numéro
Immatriculation doit continuer d'exister même quand ce n'est
plus le cas de l'objet automobile.

Introduction de POO en 107


107 Pr. Othmane EL MESLOUHI
JAVA
Agrégation et composition
Exemple Composition : soient les classes Arbre et Feuille. Quand on créé un arbre,
on en créé les feuilles, l’arbre est composé d’un tronc, de racines,… et de feuilles.
Si l’arbre meurt, on ne sait pas en récupérer les feuilles pour les mettre sur un
autre arbre -> elles meurent aussi.
Exemple Agrégation : soient les classes Voiture et Roue, une voiture a besoin dans
sa définition de roues, mais ses roues peuvent être changées, et donc les roues
ont une existence en dehors de la voiture. La voiture possède des roues, si la
voiture va à la casse on peut en récupérer les roues pour les mettre sur une autre
voiture.

Introduction de POO en 108


108 Pr. Othmane EL MESLOUHI
JAVA
Composition d’objets en java (1)
 Un objet peut être composé à partir d’autres objets
Exemple : Une voiture composée de
 5 roues (roue de secours) chacune composée d’un
• Pneu
 un moteur composé
• De cylindres
 portières
 etc Voiture Moteur Portière Portière

Roue Roue Roue Roue Roue


Pneu Pneu Pneu Pneu Pneu

Chaque composant est un attribut de l’objet composé

Introduction de POO en 109 Pr. Othmane EL MESLOUHI


JAVA
Composition d’objets en java (2)

Syntaxe de composition d’objets


class Pneu {
private float pression ;
void gonfler();
void degonfler();}

class Roue {
private float diametre;
Pneu pneu ;}

class Voiture {
Roue roueAVG,roueAVD, roueARG, roueARD , roueSecours ;
Portiere portiereG, portiereD;
Moteur moteur;}

Introduction de POO en 110 Pr. Othmane EL MESLOUHI


JAVA
Composition d’objets en java (3)

 Généralement, le constructeur d’un objet composé doit


appeler le constructeur de ses composants

public Roue ()
{ pneu = new Pneu();}
public Voiture () {
roueAVG = new Roue();
roueAVD = new Roue();
roueARG = new Roue();
roueARD = new Roue();
portiereG = new Portiere();
portiereD = new Portiere();
moteur = new Moteur();}

Introduction de POO en 111 Pr. Othmane EL MESLOUHI


JAVA
Composition d’objets en java (4)

 L’instanciation d’un objet composé instancie ainsi tous les objets


qui le composent

Moteur Portière Portière


Voiture

RoueAV G RoueAVD RoueAR RoueAR RoueSecours


G D
Roue Roue Roue Roue Roue
diamètre diamètre diamètre diamètre diamètre

Pneu Pneu Pneu Pneu Pneu


pression pression pression pression pression

Introduction de POO en 112 Pr. Othmane EL MESLOUHI


JAVA
Polymorphisme

Une sous-classe (fille, dérivée) peut


implémenter les méthodes héritées de
manière différente si nécessaire tout en
gardant le même nom que la méthode
héritée
Lors de l’exécution du programme, c’est la
méthode redéfinie par la sous-classe qui est
exécutée et non celle de la classe mère

Introduction de POO en 113


113 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme

X.déplacer(5,6)
Quand vous appelez la méthode "déplacer", le système va
regarder de quel objet il s'agit et appeler la bonne méthode
"déplacer" : celle du carré si c'est un carré, celle du cercle si
c'est un cercle
Introduction de POO en 114
114 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme

- Le même nom de méthode peut se retrouver dans une


classe de base et une(des) classe(s) dérivée(s)

- La Résolution est dynamique, à l’exécution du programme


en fonction du type des objets mis en oeuvre.

- Cette forme de polymorphisme traduit la faculté d’une


méthode à pouvoir s’appliquer différemment à des objets
de classes différentes (mais dérivées) ;

Introduction de POO en 115


115 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme (héritage)

 le type de la référence peut être la superclasse du


type de l’objet réel

Introduction de POO en 116


116 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme (héritage)

Introduction de POO en 117


117 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme (héritage)

Animal[ ] animaux = new Animal[5]


animaux[0] = new Chien() ;
animaux[1] = new Chat());
animaux[2] = new Loup();
animaux[3] = new Hippo();
animaux[4] = new Tigre();
for (int i=0; i<[Link]; i++ ) {
animaux[i].manger();
animaux[i].vagabonder();
}
Introduction de POO en 118
118 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme (héritage)
class Soin {
public void soigner(Animal a) {
//on soigne l’animal, puis il émet un son
[Link]() ;
}
}

class ProprietaireDAnimaux {
public static void main(String[] args) {
Soin s = new Soin();
Chien c = new Chien();
Hippo h = new Hippo();
[Link](c);
[Link](h);
}
}

Introduction de POO en 119


119 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme (héritage)
 Le polymorphisme vous permet d’écrire du code
qui ne change pas quand vous introduisez de
nouveaux types de sous-classes dans le
programme
 La classe Soin peut gérer n’importe quelle sous-
classe d’Animal
 Si quelqu’un d’autre veut tirer parti de la classe
Soin , il lui suffit de s’assurer que ses nouveaux
sous-types d’Animal étendent la classe Animal.

Introduction de POO en 120


120 Pr. Othmane EL MESLOUHI
JAVA
Polymorphisme (surcharge et redéfinition des
méthodes)

Introduction de POO en 121


121 Pr. Othmane EL MESLOUHI
JAVA
Application 5

Introduction de POO en 122


122 Pr. Othmane EL MESLOUHI
JAVA
Exercice 8

Introduction de POO en 123


123 Pr. Othmane EL MESLOUHI
JAVA
static

 Le comportement de la méthode max( ) de la classe


Math ne varie jamais
 la méthode max(x,y) agit sur l’argument mais n’est
jamais affecté par l’état d’une variable d’instance
 Gaspillage d’espace sur le tas pour créer une
instance de la classe Math à seul fin d’exécuter la
méthode max(), min( ), abs( ).
 Ces méthodes n’utilisent jamais la valeur d’une
variable d’instance.
 Math ne possède aucune variable d’instance

Introduction de POO en 124 Pr. Othmane EL MESLOUHI


JAVA
Variables de classe

 Une variable de classe est une variable associée à une


classe et non aux instances de cette classe.
 Un seul exemplaire d’une variable de classe ne peut
exister, indépendamment du nombre d’instances de
cette classe créées.
 Une variable static est partagée par toutes les
instances de la classe.
 Les variables de classe sont préfixées par le mot clé
static.
 On accède à une variable de classe en faisant
précéder le nom de cette variable par le nom de la
classe suivi d’un point.
Introduction de POO en 125 Pr. Othmane EL MESLOUHI
JAVA
Variables de classe

• Exemple 1: • Exemple 2:
class Alien La classe [Link] contient
{ la valeur de PI
static int counter ; class Math
Alien ( ) {
{ public static final double
counter += 1 ; PI=3.141592653589793d ;
} …
… }
} Utilisation: [Link]

Introduction de POO en 126 Pr. Othmane EL MESLOUHI


JAVA
Méthode de classe

• Une méthode de classe est une méthode


associée à une classe et non à une instance de
cette classe.
• Les méthodes de classe sont préfixées par le
mot clé static.
• Une méthode de classe est appelable sans avoir
à créer d’objet de cette classe.
• Une méthode de classe est appelée en préfixant
le nom de la méthode par le nom de la classe
suivi d’un point.
Introduction de POO en 127 Pr. Othmane EL MESLOUHI
JAVA
Méthode de classe

• Exemple :
La classe [Link] contient beaucoup de méthodes static
class Math
{
… public static int max( int a, int b
);
public static double sqrt( double a ) ;
public static double sin( double a ) ;
…}

Utilisation:
[Link] (10.123) ;

Introduction de POO en 128 Pr. Othmane EL MESLOUHI


JAVA
Organisation des classes en packages

 un certain nombre de classes peut être regroupés


en packages
 chaque package peut contenir d’autres packages
 chaque package correspond à un répertoire dans
le projet
 les packages forment une arborescence
 par défaut, toutes les classes appartiennent à
Default Package

Introduction de POO en 129


129 Pr. Othmane EL MESLOUHI
JAVA
Arborescence des packages - exemple

Default Package

package1 package2

[Link] package3 package4


[Link]

[Link] [Link] [Link]

Introduction de POO en 130


130 Pr. Othmane EL MESLOUHI
JAVA
référence aux classes des autres packages

Deux possibilités :
 opérateur point:

package1.package2
 instruction import au début du fichier:

import package1.package2
toutes les propriétés et les méthodes de cette
classe peuvent être référencées directement
 exemple: [Link] est une méthode de
la classe Math du package [Link]
Introduction de POO en 131
131 Pr. Othmane EL MESLOUHI
JAVA
Packages

 un package est un groupe de classes associées à une


fonctionnalité
 exemples de packages
 [Link] : rassemble les classes de base JAVA,
Object, String, System...
 [Link] : classes pour les collection
 [Link] : classes pour interfaces utilisateurs (Abstract
WindowToolkit)
 [Link] : classes pour manipulation d’images
bitmap
 ....
Introduction de POO en 132
132 Pr. Othmane EL MESLOUHI
JAVA
Introduction de POO en 133
133 Pr. Othmane EL MESLOUHI
JAVA
Introduction de POO en 134
134 Pr. Othmane EL MESLOUHI
JAVA
Introduction de POO en 135
135 Pr. Othmane EL MESLOUHI
JAVA
Introduction de POO en 136
136 Pr. Othmane EL MESLOUHI
JAVA
Introduction de POO en 137
137 Pr. Othmane EL MESLOUHI
JAVA
Introduction de POO en 138
138 Pr. Othmane EL MESLOUHI
JAVA
ArrayList

 Il serait intéressant d’avoir à notre disposition un tableau qui rétrécirait


quand on supprime quelque chose. Et qu’on n’aurait pas besoin de
parcourir pour vérifier chaque élément , mais auquel on pourrait
simplement demander s’il contient ce qu’on cherche. Et on pourrait en
extraire des valeurs sans savoir exactement où elles sont

 add(Object element) : ajoute le paramètre de type Object à la liste


 remove(int indice) : supprime l’objet à l’indice spécifié
 remove(Object element) : supprime cet objet s’il est dans l’ArrayList
 contains(Object element) : retourne true si l’objet est dans ArrayList
 isEmpty() : retourne true si l’objet n’a plus d’éléments
 indexOf(Object element) : retourne soit l’indice de l’objet, soit -1
 size() : retourne le nombre d’éléments dans la liste
 get(int indice) : retourne l’objet se trouvant à l’indice spécifié

Introduction de POO en 139 Pr. Othmane EL MESLOUHI


JAVA
ArrayList

 1) création d’une ArrayList :


ArrayList<Chien> maListe = new ArrayList<Chien> ( ) ;
 2) on y place quelque chose
Chien monChien1 = new Chien() ;
[Link](monChien1) ;
 3) on y place autre chose
Chien monChien2 = new Chien() ;
[Link](monChien2) ;
 4) savoir combien elle en contient :
int taille = [Link]() ; // retourne 2

Introduction de POO en 140 Pr. Othmane EL MESLOUHI


JAVA
ArrayList
 5) savoir si elle contient quelque chose :
boolean qqch = [Link](monChien2)
//L’ArrayList contient l’objet Chien référencé par monChien2

 6)trouver quelque chose :


int indc = [Link](monChien2)
// le premier indice d’ArrayList est 0 ; comme l’objet référencé par
monChien2 est le deuxième élément de la liste, indexOf() retourne 1

 7) savoir si elle est vide :


boolean vide = [Link]() ; // la liste n’est pas vide,
isEmpty retourne false
 8) en enlever quelque chose
[Link](0); // on supprime l’objet à l’indice 0, et la liste
rétrécit automatiquement

Introduction de POO en 141 Pr. Othmane EL MESLOUHI


JAVA
Exercice

 Concevez un programme (une classe avec la méthode main) qui


crée une liste contenant les 5 nombres entiers 10, 20, ... 50. Les
entiers doivent être dans cet ordre dans la liste (10 sera le premier
élément, 20 le deuxième, etc.)

Introduction de POO en 142 Pr. Othmane EL MESLOUHI


JAVA
Classes abstraites

Introduction de POO en 143 Pr. Othmane EL MESLOUHI


JAVA
Classes abstraites

 que se passe-t-il si on veut écrire :


Animal anim = new Animal();
Il nous faut la classe Animal pour les besoins de
l’héritage et du polymorphisme. Mais nous ne
voulons pas que les programmeurs puissent créer un
objet Animal

Solution : déclarer la classe abstract


Une des principales raisons de l’existence de ces classes
abstraites : l’employer comme argument ou comme
type de retour polymorphe, ou créer un tableau
polymorphe.

Introduction de POO en 144 Pr. Othmane EL MESLOUHI


JAVA
Classes abstraites

abstract class Canin extends Animal {


public abstract void vagabonder();
}
Canin c = new Chien() // Ceci est legal
Canin c = new Canin() ; // Ceci est illégal
on peut également définir des méthodes abstraites
Une méthode abstraite n’a pas de corps
public abstract void manger() ;
Si vous déclarer une méthode abstraite, la classe doit l’être
également
La première classe concrète de la hiérarchie d’héritage doit
implémenter toutes les méthodes abstraites.

Introduction de POO en 145 Pr. Othmane EL MESLOUHI


JAVA
Exercice

Introduction de POO en 146 Pr. Othmane EL MESLOUHI


JAVA
Classe Object

 Certaines méthodes de la classe ArrayList acceptent comme


paramètre un type Object.
 La classe Object est la mère de toutes les classes, la
superclasse universelle.
 Toutes les classes Java étendent la classe Object.
 Comme toute classe Java est une sous-classe d’Object, les
méthodes d’ArrayList peuvent accepter n’importe quoi.
 l’Héritage multiple n’existe pas, la classe Chien étend déjà la
classe Canin, comment peut elle étendre en même temps la
classe Object??

Introduction de POO en 147 Pr. Othmane EL MESLOUHI


JAVA
Classe Object
1) equals(Object o) : indique si 2 objets sont égaux.
Chien c = new Chien() ;
Chat x = new Chat() ;
if ([Link](x) ) [Link] (‘’Vrai’’) ;
else [Link] (‘’Faux’’) ;
2) getClass() : indique à quelle classe appartient l’objet
Chat x = new Chat() ;
[Link] ([Link]() ) ; // affiche : class Chat
3) toString() : affiche l’objet sous forme de string
Chat x = new Chat() ;
[Link] ([Link]() ) ; // affiche : Chat@7d279f
4) hashCode() : donne un code de hashage
On discutera de cette méthode plus loin dans le cours.

Introduction de POO en 148 Pr. Othmane EL MESLOUHI


JAVA
Classe Object

ArrayList<Chien> mesChiens = new ArrayList<Chien> ();


Chien unChien = new Chien() ;
[Link](unChien) ;
Chien c = [Link](0) ;
 Mais que se passe-t-il si on déclare une ArrayList<Object> qui
accepte n’importe quoi ?
 ArrayList<Object> mesChiens = new ArrayList<Object> ;
Chien unChien = new Chien() ;
[Link](unChien) ;
Chien c = [Link](0) ; // ???

Introduction de POO en 149 Pr. Othmane EL MESLOUHI


JAVA
Classe Object

Introduction de POO en 150 Pr. Othmane EL MESLOUHI


JAVA
Classe Object
ArrayList<Object> mesChiens = new ArrayList<Object > ;
Chien unChien = new Chien() ;
[Link](unChien) ;
Object c = [Link](0) ;
[Link]() ; //impossible !!
 comment reconvertir une référence à un objet dans son type réel ?
ArrayList<Object> mesChiens = new ArrayList<Object > ;
Chien unChien = new Chien() ;
[Link](unChien) ;
Object o = [Link](0) ;
Chien c = (Chien) o ; // on reconvertit l’objet o en Chien
[Link]() ;

Introduction de POO en 151 Pr. Othmane EL MESLOUHI


JAVA
Classe Object

 Si on n’est pas sur que l’objet est un Chien, on utilise


l’opérateur instanceof pour vérifier.

ArrayList<Object> mesChiens = new ArrayList<Object > ;


Chien unChien = new Chien() ;
[Link](unChien) ;
Object o = [Link](0) ;
if ( o instanceof Chien ) {
Chien c = (Chien) o ; // on reconvertit l’objet o en Chien

[Link]() ;
}

Introduction de POO en 152 Pr. Othmane EL MESLOUHI


JAVA
Interfaces

 Supposons maintenant que l’on désire améliorer


notre diagramme d’animaux pour l’utiliser comme
programme d’animalerie. Certains de nos animaux
devront avoir un comportement d’animal de
compagnie. Un compagnon aura besoin de
méthodes comme etreAmical() et jouer().

 Nous créons une nouvelle classe nommée


Compagnon, et nous y plaçons toutes les méthodes
nécessaires.

Introduction de POO en 153 Pr. Othmane EL MESLOUHI


JAVA
Interfaces

Introduction de POO en 154 Pr. Othmane EL MESLOUHI


JAVA
Interfaces

Introduction de POO en 155 Pr. Othmane EL MESLOUHI


JAVA
Interfaces

 La façon dont les interfaces esquivent le problème du


losange de la mort est très simple : rendre toutes les
méthodes abstraites
 La sous-classe est alors obligée d’implémenter les
méthodes.
 Au moment de l’exécution, la JVM ne se demandera
pas laquelle des deux versions héritées elle est
censée appeler
 Une interface Java est une classe 100% abstraite

Introduction de POO en 156 Pr. Othmane EL MESLOUHI


JAVA
Interfaces

 Pour définir une interface, on écrit :


public interface Compagon {….}
 Pour implémenter une interface :
public class Chien implements Compagon {…}
 On peut implémenter une interface et étendre une classe en
même temps, on peut aussi implémenter plusieurs interface
en même temps.
public class Chien extends Canin implements Compagon {…}

Introduction de POO en 157 Pr. Othmane EL MESLOUHI


JAVA
Interfaces
public interface Compagon {
public abstract void etreAmical() ;
public abstract void jouer() ;
}
public interface Compagon {
void etreAmical() ;
void jouer() ;}
public class Chien extends Canin implements Compagon {
public void etreAmical() {
// lecher son maitre
}
public void jouer() {
// apporter la balle
}
public void vagabonder() {….}
public void manger() {….}
}

Introduction de POO en 158 Pr. Othmane EL MESLOUHI


JAVA
Interfaces
Une interface est un modèle pour une classe
• Quand toutes les méthodes d’une classe sont abstraites et il n’y a aucun attribut
on aboutit à la notion d’interface
• Elle définit la signature des méthodes qui doivent être implémentées dans les
classes qui respectent ce modèle
• Toute classe qui implémente l’interface doit implémenter toutes les méthodes
définies par l’interface
•Tout objet instance d’une classe qui implémente l’interface peut être déclaré
comme étant du type de cette interface
Exemple :
Les choses « Démarrable » doivent posséder une méthode « démarre() »

Introduction de POO en 159


159 Pr. Othmane EL MESLOUHI
JAVA
Interfaces
Mise en œuvre d’une interface
La définition d’une interface se présente comme celle d’une classe. On y utilise
simplement le mot clé interface à la place de class
public interface NomInterface {
...
}

Lorsqu’on définit une classe, on peut préciser qu’elle implémente une ou


plusieurs interfaces donnée(s) en utilisant une fois le mot clé implements

public class NomClasses implements Interface1,Interface3, ... {


...
}

Si une classe hérite d’une autre classe elle peut également implémenter une ou
plusieurs interfaces

public
... class NomClasses extends SuperClasse implements Interface1, ... {
}
Introduction de POO en 160
160 Pr. Othmane EL MESLOUHI
JAVA
Interfaces
Mise en œuvre d’une interface
• Une interface ne possède pas d’attribut
• Une interface peut posséder des constantes

public interface NomInterface {


public static final int CONST = 2;
}

• Une interface ne possède pas de mot clé abstract


• Les interfaces ne sont pas instanciables (Même raisonnement avec les classes
abstraites)
NomInterface jeTente = new NomInterface(); // Erreur!!

Introduction de POO en 161


161 Pr. Othmane EL MESLOUHI
JAVA
Interfaces

Introduction de POO en 162 Pr. Othmane EL MESLOUHI


JAVA
Interfaces
Les interfaces pourront se dériver
Une interface peut hériter d’une autre interface : « extends »

NomInte1 << Interface >>


• Conséquences
+…
La définition de méthodes de l’interface mère
(NomInte1) sont reprises dans l’interface fille
(NomInte2). Toute classe qui implémente l’interface
fille doit donner une implémentation à toutes les
méthodes mêmes celle héritées NomInte2 << Interface >>
+…

Introduction de POO en 163


163 Pr. Othmane EL MESLOUHI
JAVA
Classes abstraites versus interfaces
• Les classes
Elles sont complètement implémentées
Une autre classe peut en hériter

• Les classes abstraites


Elles sont partiellement implémentées
Une autre classe peut en hériter mais doit donner une implémentation aux
méthodes abstraites
Elles ne peuvent pas être instanciées

• Les interfaces
Elles ne sont pas implémentées
Toute classe qui implémente une ou plusieurs interfaces doit implémenter

toutes leurs méthodes (abstraites)


Introduction de POO en 164
164 Pr. Othmane EL MESLOUHI
JAVA
Exercice

 Établissez une interface 'Car' représentant une voiture du monde réel,


prévoyez des méthodes pour changer et accéder à la couleur, au nombre
de roues, à la vitesse courante du boîtier de vitesse ("gear"), à la vitesse
courante de déplacement ("speed").

 Ecrivez ensuite la classe 'BasicCar' implémentant cette interface : vous


devez définir les champs de la classe, les initialiser avec des valeurs par
défaut et écrire le code des méthodes de l'interface.

 Ecrivez ensuite la classe 'BasicTruck' (camion), sous-classe de la classe


'BasicCar', rajoutant une caractéristique par rapport à une voiture : on est
capable de spécifier son type de chargement sous la forme d'une chaîne
de caractères et d'accéder à ce type (ex. vide, cailloux, beton, ...).

Introduction de POO en 165 Pr. Othmane EL MESLOUHI


JAVA

Vous aimerez peut-être aussi