Vous êtes sur la page 1sur 173

NOTIONS DE BASE DU

LANGAGE JAVA
Plan
2

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Petit historique du langage Java
3

 On peut faire remonter la naissance de Java à 1991.


 Java fondé sur le concept de machine virtuelle
 Traduire un programme source, non pas directement en langage machine, mais
dans un pseudo langage universel
 Ce code intermédiaire (formé de byte codes), se trouve ainsi compact et
portable sur n‟importe quelle machine

 Une de ses plus grandes forces est son excellente portabilité : une fois votre
programme créé, il fonctionnera automatiquement sous Windows, Mac, Linux,
Cours POO/JAVA

etc.

 On peut faire de nombreuses sortes de programmes avec Java :


- des applications, sous forme de fenêtre ou de console ;
- des applets, qui sont des programmes Java incorporés à des pages web ;
Dorra ZAIBI

- des applications pour appareils mobiles, avec J2ME , android;


- et bien d'autres ! J2EE, JMF, J3D pour la 3D...
Langage java
4

 C‟est un langage orienté objet

 Il est compilé en bytecode


Le bytecode est un code intermédiaire indépendant de la machine
Cours POO/JAVA

 Il est interprété
Le bytecode est interpété par une machine virtuelle Java
Dorra ZAIBI
Premier exemple : HelloWord
5

Dans un fichier de nom HelloWorld.java


public class HelloWorld {
/* Un style de commentaire
sur plusieurs lignes. */
public static void main(String[] args) {
// Un commentaire sur une seule ligne
System.out.println("Bonjour à vous les IR1!");
Cours POO/JAVA

}
}
NB: toute classe publique doit être dans un fichier qui a le même nom
que la classe
Ce fichier définit une classe, qui est une unité de compilation, étant donné
Dorra ZAIBI

qu‟il y a une méthode main, cette classe est « exécutable »


Compilation et Exécution
6
(Java Virtual Machine)
Cours POO/JAVA
Dorra ZAIBI
Le bytecode
7

 Le code source d'une classe contenue dans un fichier est


compilé avec la commande javac

 Cela produit un code intermédiaire(extension.class), appelé


bytecode, qui est le langage machine de la machine virtuelle
Java

 Le bytecode d'une classe est destiné à être chargé par une


Cours POO/JAVA

machine virtuelle qui doit l'exécuter avec la commande java

 Ce bytecode peut être exécuté sous de nombreux systèmes


d‟exploitation par une machine virtuelle Java.
Dorra ZAIBI
Machine Virtuelle Java (JVM)
8

 La machine virtuelle Java ou JVM (Java Virtual Machine) est un


environnement d'exécution pour applications Java.

 Elle exécute des programmes compilés.

 C'est un des éléments les plus importants de la plate-forme Java.

 Elle assure l'indépendance du matériel et du système d'exploitation


Cours POO/JAVA

lors de l'exécution des applications Java.

 Une application Java ne s'exécute pas directement dans le système


d'exploitation mais dans une machine virtuelle qui s'exécute dans le
système d'exploitation et propose une couche d'abstraction entre
l'application Java et ce système.
Dorra ZAIBI
Java : langage et plateforme
9

Il existe plusieurs éditions, selon la plateforme java considérée:

 Java SE (Java Platform, Standard Edition): Java SE pour applications


classiques, desktop

 Java EE (Java Platform, Enterprise Edition): Java EE pour développer


et déployer des applications serveur, Web services, etc.
Cours POO/JAVA

 Java ME (Java Platform, Micro Edition): J2ME pour les applications


embarquées, PDA, téléphones, etc.
Dorra ZAIBI
Plateforme Java
10

La plateforme java utilise un ensemble de bibliothèques, de


programmes et d‟outils. Cet ensemble contient :

 Le kit de développement Java (JDK)


 L‟environnement d‟exécution (JRE)
 La machine virtuelle java (JVM)
Cours POO/JAVA
Dorra ZAIBI
JDK / JVM / JRE
11

 JDK (Java Developpement Kit) = un ensemble d‟outils et


programmes pour développer, compiler, déboguer et exécuter
un programme en java. Il contient également un environnement
d‟exécution de java (JRE)

 JVM (Java Virtual Machine) = un programme qui permet


d‟interpréter le programme java crée avec le JDK
Cours POO/JAVA

 JRE (Java Runtime Execution) = un ensemble d‟outils et de


programmes nécessaires pour exécuter un programme java (déjà
compilé)
Dorra ZAIBI
Installation Java
12

 Installer JDK (exemple: JDK 8).


 Plateforme Java (exemple: Eclipse indigo SE).
 Vérification de l‟installation Java (java -version).

NB: Chaque fois que le développeur télécharge un JDK, celui-ci inclut un


JRE compatible avec la version, et ce JRE comprend lui-même un JVM
par défaut.
Cours POO/JAVA
Dorra ZAIBI
Compilation et exécution
13

Compilation (commande javac) => Fichier.class


Exécution (commande java) => package.Fichier
Cours POO/JAVA
Dorra ZAIBI
Langage java
14

Les variables, les opérateurs, les expressions, instructions, blocs,


contrôle de flot sont très proches de ceux du C

Les exceptions sont une nouveauté

Les types primitifs ont une taille et une représentation normée

Il y a des spécificités syntaxiques liées à la programmation objets,


Cours POO/JAVA

aux classes, à l'héritage...

Un style de nommage (très fortement) conseillé


 Première majuscule pour les classes (class HelloWorld)
Première minuscule pour les variables et les méthodes (nom,
Dorra ZAIBI

getNom())
 Tout en majuscule pour les constantes (MAX_SIZE)
Plan
15

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Les variables en Java
16

Les variables locales comme les champs des classes et des objets ne peuvent être
que de deux natures:

 De type « primitif »
La déclaration de la variable réserve la place mémoire pour stocker sa valeur (qui
dépend de son type)
Exemple: int entier; long entierLong;
Cours POO/JAVA

 De type « référence » comprennent deux sous-catégories


1) Le type tableau qui est un type prédéfini;
2) Les types des objets. Ils pourront être prédéfinis (ex: String) ou définis
par le programmeur. La déclaration de la variable de type «objet»
ne fait que réserver la place d'une référence (une sorte de pointeur) qui
permettra d‟accéder à l‟endroit en mémoire où est effectivement stocké l'objet
Dorra ZAIBI

en lui même (vaut null si référence inconnue)


Exemple:
Pixel p1; p1=new Pixel(1,3);
Type primitif
17

Types entiers signés


 byte (octet) sur 8 bits

 short sur 16 bits

 int sur 32 bits

 long sur 64 bits

Type caractère non signé


 char sur 16 bits
Cours POO/JAVA

Types à virgule flottante


 float sur 32 bits

 double sur 64 bits


Dorra ZAIBI

Type booléen: boolean (true ou false)


18
Dorra ZAIBI Cours POO/JAVA

Types fondamentaux
Valeur constante
19

Une constante est une variable finale, c‟est-`a-dire une variable non
modifiable.

Pour signaler qu'une variable est une constante, on utilise le mot


réservé final lors de sa déclaration :

final int VAL = 6;


Cours POO/JAVA

Le compilateur indique donc qu‟on ne peut pas donner une valeur à


une constante.
Dorra ZAIBI

Message d‟erreur: « cannot assign a value »


Valeur littérale
20

Un littéral est une valeur explicite utilisée dans le


code source d'un programme .

On peut représenter les entiers simplement en donnant leur


valeur sous forme décimale, binaire, octale ou hexadécimale.

Les littéraux de type numériques


Cours POO/JAVA

Les littéraux sont par défaut de type int. Un littéral peut être rendu de
type long en le suffixant avec l ou L.
Exemple:
 12345 est de type int
Dorra ZAIBI

 12345L est de type long


Valeur littérale
21

Pour les valeurs numériques, voici une récapitulation des règles


appliquées :
Cours POO/JAVA

On remarque que les modificateurs d et f peuvent s‟appliquer aux


entiers et les faire considérer comme des doubles ou des floats (un
entier est un cas particulier de réel)
Exemple
Dorra ZAIBI
Conversion des types
22

Java est très strict du point de vue des données et il est parfois
intéressant de convertir une donnée d'un type primitif vers un autre
type primitif.
Cours POO/JAVA
Dorra ZAIBI
Conversion implicite /
23
Compatibilité des types
Types numériques
Il est toujours possible de placer un entier de “petite taille” dans un
entier plus grand (par exemple un entier de type int dans une variable
de type long).

De façon générale, il est impossible de faire des affectations dans


l‟autre sens, comme par exemple placer le contenu d‟une variable de
Cours POO/JAVA

type int dans une variable de type byte.

Les types numériques sont donc rangés dans l‟ordre suivant : byte <
short < int < long < float < double
Dorra ZAIBI
Conversion implicite /
24
Compatibilité des types
Cas 1 => Correct

Cas 2 => Erreur de compilation


Cours POO/JAVA

Maintenant, si on avait le contraire, c'est-à-dire une conversion par


affectation du type float vers le type int. Dans ce cas, on aurait eu une
Dorra ZAIBI

erreur de compilation puisque cette conversion est avec perte


d'information.
Conversion implicite /
25
Compatibilité des types
Le type boolean est compatible seulement avec lui-même.
Cela signifie qu‟il est strictement impossible de placer une
valeur de type boolean dans une variable d‟un type autre
que boolean.
Cours POO/JAVA

=> erreur
Dorra ZAIBI
Conversion explicite / implicite
26

 La conversion est réalisé via l‟un des 2 mécanismes: conversion implicite ou


conversion explicite.

 Les conversions qu'on vient de voir se font de manière implicite,


automatiquement.

 Conversion implicite: Les conversions automatiques sont seulement possibles


lorsque le compilateur sait que la variable destination est assez grande.
Exemple:
pour réaliser l‟addition, les deux opérandes doivent avoir le même format.
Cours POO/JAVA

x = 3 + 2.5;

 Conversion explicite: le programmeur indique explicitement la conversion qu‟il


souhaite réaliser.
Exemple: conversion de 2.5 vers int. En mémoire x = 5.
x = 3 + (int) 2.5;
Dorra ZAIBI
27
Dorra ZAIBI Cours POO/JAVA

Exemple
Compatibilité des types
28

 On peut placer une valeur de type char dans une variable de type int (et
donc dans une variable d‟un type “plus grand” que int).
 Le type char est compatible avec tous les types numériques (int, double,
etc.);
 Pour les types primitifs (char), on parle de conversion implicite
char < int
Conversions explicites entre types numériques et char:
Cours POO/JAVA

Exemple : (char) 97 ⇒ ‟a‟


(int) ‟+‟ ⇒ 43
char a = „a‟;
a = (char) (a+1);
 Cependant, il est impossible de placer une valeur entière classique dans un
Dorra ZAIBI

char car les autres types entiers peuvent prendre des valeurs négatives.
Compatibilité des types
29

On peut se servir des caractères comme entiers :

Exemple:
int trois = 3;
char un = ‟1‟;
char quatre = (char) (trois + un);
Cours POO/JAVA

 quatre : ‟4‟.
 un a été converti à int dans l‟expression
Dorra ZAIBI

 Puis conversion en char avant l‟assignation.


Exemple
30
Plan
31

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Opérateur logique
32

 La valeur de vérité d‟une expression logique est vrai ou


faux. Une telle valeur est de type booléen (boolean).

 Pour former des expressions logiques, on dispose


d‟opérateurs de comparaison.
Cours POO/JAVA

 Les principaux opérateurs sont les suivants


Dorra ZAIBI
Opérateur arithmétique
33

Les opérateurs arithmétiques


Cours POO/JAVA
Dorra ZAIBI
Opérateurs d'incrémentation et
34
de décrémentation
 L'opération d'incrémentation ( ++ ) est un opérateur
unaire qui ne peut être appliqué qu'à des variables. Il va
modifier la valeur de la variable sur laquelle il est
appliqué, en lui ajoutant 1.

 Il y a également un opérateur de décrémentation ( -- )


Cours POO/JAVA

qui fonctionne comme l'opérateur d'incrémentation, sauf


que son effet de bord consiste à retirer 1 de la variable
sur laquelle il est appliqué.
Dorra ZAIBI
Opérateurs d'incrémentation et
35
de décrémentation
Les deux opérateurs (++ et --) existent sous deux formes.
 la forme suffixe de l'opérateur; celui-ci étant placé après la variable.
 la forme préfixe, c'est-à-dire qu'on les place avant la variable.
Cours POO/JAVA
Dorra ZAIBI
Opérateurs d'incrémentation et
36
de décrémentation
Les deux opérateurs (++ et --) existent sous deux formes.
 la forme suffixe de l'opérateur; celui-ci étant placé après la variable.
 la forme préfixe, c'est-à-dire qu'on les place avant la variable.
Cours POO/JAVA
Dorra ZAIBI
Plan
37

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Structure de contrôle
38

Il existe trois catégories :

 les instructions conditionnelles (if-else , switch);

 les instructions répétitives (while, do et for);


Cours POO/JAVA

 les instructions de branchement: permettent de faire un saut depuis


un point précis du programme vers un autre endroit (Il y
a break, continue qui sont utilisés avec les boucles et
également return)
Dorra ZAIBI
Structure conditionnelle:
39
Syntaxe if
La condition est une expression booléenne et elle est dite
vérifiée si sa valeur est true
Cours POO/JAVA
Dorra ZAIBI
40
Dorra ZAIBI Cours POO/JAVA

Syntaxe if - else
41
Dorra ZAIBI Cours POO/JAVA

Syntaxe switch
Opérateur conditionnel (plus court)
42

L‟instruction if-else correspondante calcule exactement la


même chose :
Cours POO/JAVA
Dorra ZAIBI
Instruction répétitive: While
43

L'instruction while permet de répéter une instruction ou un bloc de


code tant qu'une condition est vraie.

La condition est une expression booléenne, comme pour


l'instruction if-else.
Cours POO/JAVA
Dorra ZAIBI
Instruction répétitive: While
44

Boucle infinie
Lorsqu'on utilise des boucles, il faut faire très attention aux boucles
infinies.

Comme le nom le suggère, il s'agit de boucles dont le corps est


exécuté un nombre infini de fois. La condition est toujours vérifiée
et la boucle ne s'arrête donc jamais de s'exécuter.
Cours POO/JAVA
Dorra ZAIBI
Syntaxe do - while
45

L'instruction do -while est similaire à l'instruction while sauf pour ce qui


est de l'ordre dans lequel les choses sont exécutées.

Le corps de la boucle est d'abord exécuté, puis la condition est


évaluée.
Cours POO/JAVA

Le corps de la boucle sera exécuté au moins une fois dans tous les
cas.
Dorra ZAIBI
46
Dorra ZAIBI Cours POO/JAVA

Syntaxe for
Instruction continue
47

L'instruction continue, utilisable uniquement dans les boucles, permet


d'arrêter l'exécution de l'itération en cours et de passer directement à la
suivante.

Dans le cas des boucles while et do, on revient directement à la


vérification de la condition
Cours POO/JAVA
Dorra ZAIBI
Instruction continue
48

L'instruction continue, utilisable uniquement dans les boucles, permet


d'arrêter l'exécution de l'itération en cours et de passer directement à la
suivante.

Dans le cas des boucles while et do, on revient directement à la


vérification de la condition
Cours POO/JAVA
Dorra ZAIBI
Instruction break
49

L'instruction break a en fait pour effet de directement quitter


le switch ou la boucle et de poursuivre le programme à l'instruction
suivante.

Voici un exemple de programme qui affiche les entiers de 1 à 5 et qui


utilise l'instruction break
Cours POO/JAVA
Dorra ZAIBI
Plan
50

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de


caractères, passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Affichage
51

L‟affichage d‟une valeur (System.out.println) est


relativement simple, comme le montre l‟exemple suivant :
Cours POO/JAVA
Dorra ZAIBI
Affichage
52

System.out.print(expression);
Cette méthode permet d‟afficher la valeur de l‟expression entre
parenthèses sans passer à la ligne après cet affichage.

System.out.println(expression);
Cette méthode passe au contraire à la ligne après l‟affichage.
Cours POO/JAVA
Dorra ZAIBI
Saisie
53

Pour que Java puisse lire ce que vous tapez au clavier, vous allez
devoir utiliser un objet de type Scanner.

Nous allons utiliser l'entrée standard System.in.

Exemple:
import java.util.Scanner;
Cours POO/JAVA

Scanner sc = new Scanner(System.in);


Dorra ZAIBI
Saisie
54

Nous présentons certaines méthodes les plus utiles pour lire différents types
de données à partir du périphérique d'entrée par défaut (récupérer le type de
variable primitif adéquat):

nextInt ()
nextByte ()
nextShort ()
nextLong ()
nextFloat ()
Cours POO/JAVA

nextDouble ()

Exemple:
Scanner scanner = new Scanner( System.in ) )
System.out.print( "Veuillez saisir un premier entier : " );
Dorra ZAIBI

int a = scanner.nextInt();
Saisie
55

 La méthode nextLine () permet de lire une ligne de texte jusqu'au


prochain retour à la ligne (récupère une chaîne de caractère)
Cours POO/JAVA
Dorra ZAIBI
Saisie
56

Remarque:
La classe Scanner ne contient pas de méthode nextChar(). Pour
extraire un seul caractère du clavier, vous pouvez utiliser la
méthode nextLine(), puis la méthode charAt().

Exemple
System.out.println("Saisissez une lettre :");
Cours POO/JAVA

Scanner sc = new Scanner(System.in);


String str = sc.nextLine();
char carac = str.charAt(0);
System.out.println("Vous avez saisi le caractère : " + carac);
Dorra ZAIBI
Tableau
57

La création d‟un tableau peut être faite comme suit :

1) Déclaration d'une variable de tableau avec définition explicite de taille :


 Déclaration de type
int tableau_entiers [] ; // déclaration équivalente à int [] tableau_entiers ;
// tableau_entiers est une variable de type référence vers un tableau contenant
des éléments de type int.
Cours POO/JAVA

 Allocation mémoire, via „ new ‟


tableau_entiers = new int[5] ;
L‟opérateur new renvoie une référence vers un tableau
(une référence est un identifiant unique d‟une structure de données)
Dorra ZAIBI

NB: Pour les tableaux, la valeur spéciale null représente un tableau sans
aucune valeur (0 pour chaque élément) .
Exemple de déclaration d‟un tableau
58
Cours POO/JAVA
Dorra ZAIBI
Tableau
59

2) Déclaration et initialisation d'un tableau avec définition implicite


de taille :

 Initialisation
<type du tableau> <nom du tableau> [] = {<contenu du tableau>};

Exemple:
Cours POO/JAVA

int tableau_initialise[] = { 12, 34, 786 };

Dans cette éventualité, Java crée le tableau, calcule sa taille et l'initialise


avec les valeurs fournies.
Dorra ZAIBI
Tableau
60

Exemple:
int tableauEntier [] = {0,1,2,3,4,5,6,7,8,9};

double tableauDouble [] = {0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};

char tableauCaractere [] = {'a','b','c','d','e','f','g'}; // initialisation du


caractère
Cours POO/JAVA

String tableauChaine [] = {"chaine1", "chaine2", "chaine3" , "chaine4"}; //


initialisation du String
Dorra ZAIBI
Tableau
61

Variable locale constante


Un objet ou un tableau « final » peut avoir ses
champs ou ses éléments modifiés
Cours POO/JAVA
Dorra ZAIBI
Tableau multidimensionnel
62

Tableaux multidimensionnels crées comme

double matrice[][] = new double[4][4];

Ce qui revient à
Cours POO/JAVA

 double matrice[][] = new double[4][];


 matrice[0] = new double[4];
 matrice[1] = new double[4];
 matrice[2] = new double[4];
Dorra ZAIBI

 matrice[3] = new double[4];


Tableau multidimensionnel
63

Initialisation par défaut de tous les éléments.

Des expressions sont permises dans les initialisations de tableaux.

double m[][] = {
{ 0*0, 1*0, 2*0 },
Cours POO/JAVA

{ 0*1, 1*1, 2*1 },


{ 0*2, 1*2, 2*2 }
};
Dorra ZAIBI
Tableau multidimensionnel
64

Voici une manière imagée de visualiser une matrice à n+1 lignes et à p+1
colonnes

Int [][] table = new int [n+1][p+1];


Cours POO/JAVA
Dorra ZAIBI
Opérations sur le tableau
65

 On dispose d'une classe utilitaire, Arrays, dans le package java.util, qui nous
propose des méthodes permettant de manipuler les tableaux.

 Egalement, la classe Arrays offre des méthodes de classe pour


la recherche et le tri d'éléments d'un tableau.

Parmi ces méthodes nous citons:


Cours POO/JAVA

 La méthode equals compare deux tableaux renvoie un booléen true s'ils ont
même longueur et contenu,
 La méthode binarySearch effectue la recherche binaire d'une valeur dans un
tableau,
 La méthode fill remplit un tableau avec la valeur donnée,
Dorra ZAIBI

 La méthode sort trie un tableau dans l'ordre croissant de ses éléments.


Opérations sur le tableau
66

Il existe un attribut général de la classe des tableaux, qui contient la


taille d'un tableau quelque soit son type, c'est l'attribut length.

Exemple :
int [ ] table1 = {17,-9,4,3,57};
int taille;
taille = table1.length; // taille = 5

NB:
Cours POO/JAVA

1) Avec les tableaux, c'est la propriété .length, (array.length)


 Si tu essaies la méthode .length(), ça ne compilera pas.

2) Avec les String, c'est la méthode .length(), (string.length())


Dorra ZAIBI

 Si tu essaies la propriété .length, ça ne compilera pas.


Exemple
67

public class Test {


public static void main(String[] args)
{
// Here array is the array name of int type
int[] array = new int[4];
System.out.println("The size of the array is " + array.length);
Cours POO/JAVA

// Here str is a string object


String str = “TestExample";
System.out.println("The size of the String is " + str.length());

// Here str is an array


Dorra ZAIBI

String[] str = {"Hello", "Every", "Person" };


System.out.println(str[0].length());
}
Utilisation d'un tableau comme
un Object
68

int [] tab1 = {0, 1, 2, 3, 4} ;


int [] tab2 = {0, 1, 2, 3, 4} ;

 La méthode toString() de tab1 nous retourne l'indigeste chaîne de


caractères suivante :
Exemple: tab1.toString() -> [I@18d107f

 La comparaison de ces deux tableaux par la méthode equals()


nous retourne un désespérant :
Exemple: tab1.equals(tab2) -> false
Copie de tableaux
69

 La copie d'un tableau dans l'autre peut toujours se faire par itération
sur les éléments du premier tableau, et recopie dans le second. La
méthode à invoquer est System.arraycopy, dont voici la signature.

public static void arraycopy(Object src, int src_pos, Object dest, int
dest_pos, int length)
Remarque:
1) Si un dépassement de capacité a lieu, une exception est générée.
2) Rappelons qu'une fois un tableau créé, il n'est plus possible d'en
changer la taille. L'utilisation de System.arraycopy ne déroge pas à
cette règle.
Accès à un tableau
70

Accès à un élément avec tab[indice]

Exemple : tab[i] = tab[j] * 2;

Attention : les éléments sont indexés à partir de 0


⇒ un tableau possède les éléments allant de 0 à tab.length - 1
Cours POO/JAVA

Un accès en dehors des bornes du tableau provoque une erreur à


l‟exécution (ArrayOutOfBoundsException)
Dorra ZAIBI
Exemple d‟accès à un tableau
71
Cours POO/JAVA
Dorra ZAIBI
Exemple de référencement
72
Cours POO/JAVA
Dorra ZAIBI
Chaîne de caractères
73

Comme pour les tableaux, il n‟existe pas de variable de type String en


Java !

La classe String est une classe fondamentale du langage Java,


puisque c'est elle qui permet de gérer les chaînes de caractères.

Elle déclare une variable référençant une zone mémoire typée avec le
Cours POO/JAVA

type String

Exemple : String s1 = "Coucou"; String s2 = s1;


Dorra ZAIBI
Chaîne de caractères
74

Construction d'un objet String de deux façons


String s1 = "Coucou"; // création implicite
String s2 = new String("Bonjour le monde !") ; //création explicite

Concaténation de deux String


 1ère méthode
Cours POO/JAVA

String s1 = "Bonjour" ;
String s2 = “à tous!" ;
String s3 = s1 + " " + s2 ;
 2ème méthode
=> à l'aide de la méthode concat : String concat(String)
Dorra ZAIBI
Chaîne de caractères
75

D‟autre opérations

Longueur
 int length(): La méthode length() renvoie la longueur ( nombre de
caractères) de la chaîne.

Comparaison
 int compareTo(String anotherString): Compare une chaîne de
Cours POO/JAVA

caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0.

 boolean equals(Object anObject): Compare la chaîne a un objet et


retourne true en cas d‟égalité et false sinon
Dorra ZAIBI

 boolean startsWith(String), endsWith(): renvoient true si la chaîne


commence ou se termine par la chaîne passée en paramètre
Chaîne de caractères
76

Caractère et sous-chaînes
 char charAt(int): Retourne le caractère à l‟indice spécifié en paramètre.
 String substring(int): Sous-chaîne depuis l‟indice jusqu‟à la fin.

Conversions
 String toLowerCase(): Retourne une chaîne égale à la chaîne convertie
en minuscules.
String toUpperCase(): Retourne une chaîne égale à la chaîne
Cours POO/JAVA


convertie en majuscules.

Recherche:
 int indexOf(int): Retourne l‟indice de la première occurrence du
caractère.
Dorra ZAIBI
Conversions vers les types primitifs
77

 Les classes Byte, Short, Integer et Long possèdent une


méthode X.parseX(String) qui permet de convertir une chaîne de caractères
en un entier en Byte, Short, Interger …

Exemple :
int s = Integer.parseInt("111"); // returns 111
int s = Integer.parseInt("-121"); // returns -121
Cours POO/JAVA

 Les classes Float et Double possèdent une méthode X.parseX(String) qui


permet de convertir une chaîne de caractères en un flottant.

NB: Si cette conversion n'est pas possible, une exception est levée:
NumberFormatException
Dorra ZAIBI
Les Chaînes modifiables « StringBuffer »
78

 Elles sont modifiables par insertion, ajouts, conversions, …

 On obtient une « StringBuffer » avec ses constructeurs


StringBuffer mCM = new StringBuffer(int length);
StringBuffer mCM = new StringBuffer(String str);

 On peut les transformer en chaînes normales String


String s = mCM.toString(); => la méthode toString() renvoie le nom de
la classe de l'objet concerné suivi de l'adresse de cet objet

 On peut leur ajouter n‟importe (surcharge) quoi


mCM.append(...); // String, int, long, float, double, boolean, char
Exemple: append()
79

StringBuffer sbf = new StringBuffer("Bonjour - ");


System.out.println("string buffer = " + sbf);

String strvalue = " à tous";

// Here it appends the Object value


sbf.append(strvalue);

System.out.println("After appending result is = " + sbf);


}

 Resultat:
string buffer = Bonjour
After appending result is = Bonjour - à tous
Passage de paramètres
80

Lors des appels de méthode, les arguments sont toujours passés par
valeur

 Dans le cas des types primitifs, c'est la valeur de l'argument qui est
recopiée dans le paramètre de la méthode
Cours POO/JAVA

 Dans le cas des types « objet », c'est la valeur de la variable,


(la référence à l'objet) qui est transmise à la méthode
Dorra ZAIBI
Passage de paramètre:
Type primitif
81

Dans le cas des types primitifs, c'est la valeur de l'argument qui est
recopiée dans le paramètre de la méthode

Les modifications sur le paramètre de la méthode sont


sans effet sur l'argument.
Cours POO/JAVA
Dorra ZAIBI
Passage de paramètre:
Type référence
82

 Dans le cas des types « objet », c'est la valeur de la variable, (la


référence à l'objet) qui est transmise à la méthode.

 Les modifications effectuées en suivant cette référence


(e.g. modification d'un champ de l'objet) sont répercutés dans la mé
moire et sont donc visibles sur l'argument.
Cours POO/JAVA
Dorra ZAIBI
Type référence et valeur nulle
83

Par défaut, une référence vaut une valeur particulière,


nulle
Cours POO/JAVA
Dorra ZAIBI
Allocation mémoire
84

Pour qu'une variable objet prenne une autre valeur que null, il faut être
capable d'y affecter une référence.

 Elle peut être retournée par l'opérateur d'allocation new.


 Cet opérateur a besoin de connaître la taille de l'objet qu'il doit
réserver en mémoire.
new Box(); // j'ai besoin de stocker 1 int (field)
Cours POO/JAVA

new int[10]; // stocker 10 int + la taille du tableau

La zone mémoire allouée doit être initialisée (affectation des valeurs)


new Pixel(1,3); // utilise un « constructeur »
Dorra ZAIBI

 Ce que retourne l'opérateur new est la référence qui permet


d'accéder à l'objet alloué en mémoire
Désallocation mémoire
85

La désallocation mémoire n‟est pas gérée par le


programmeur, mais par un Garbage Collector (GC).

En fait, la restitution de la mémoire inutilisée est prise en charge


automatiquement par le récupérateur de mémoire (garbage collector).
Ce GC aussi appelé ramasse-miettes.

Il n'existe pas d'instruction delete comme en C++.


Cours POO/JAVA

En Java, les destructeurs appelés finaliseurs (finalizers), sont


automatiquement invoqués par le garbage collector.

Pour créer un finaliseur, il faut redéfinir la méthode finalize() héritée de


Dorra ZAIBI

la classe Object.
Désallocation mémoire
86

Les objets qui ne sont plus référencés peuvent être « récupérés » par
le GC, pour « recycler » l'espace mémoire qu'ils occupent.

Un même objet peut être référencé par plusieurs variables.

Il faut qu'aucune variable ne référence plus un objet pour qu'il soit


réclamé.
Cours POO/JAVA

Les variables cessent de référencer un objet


 Quand on leur affecte une autre valeur, ou null
 Quand on quitte le bloc où elles ont été définies: elles meurent et
Dorra ZAIBI

disparaissent...
Plan
87

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Structure d‟une classe
88

Une classe est définie par son nom et son package d'appartenance
(e.g.: java.lang.String)

En l'absence de directive, les classes sont dans un package dit « par


défaut » (i.e., pas de package).

Une classe peut contenir trois sortes de membres


Des champs ou attributs
Cours POO/JAVA

 Des méthodes et constructeurs


 Des classes internes

 Les membres statiques (static) sont dits membres de classe.


Dorra ZAIBI

Ils sont définis sur la classe et non sur les objets

 Les membres non statiques (ou membres d‟instance) ne


peuvent sans un objet
Structure d‟une classe
89

La syntaxe de déclaration d'une classe est la suivante :

Modificateurs class nom_de_classe [extends classe_mere]


[implements interfaces] { ... }
Cours POO/JAVA
Dorra ZAIBI
90
Dorra ZAIBI Cours POO/JAVA

Exemple
Initialisation et valeur par défaut
91

Les champs possèdent une valeur par défaut qui


leur est affectée lors de la création d'un objet

 0 pour les types numériques primitifs


 false pour les booléens
 null pour les types référence
Cours POO/JAVA

Tandis que les variables locales doivent nécessairement être initialisées


avant d'être utilisées

Les attributs peuvent être initialisés :


– Lors de la déclaration
Dorra ZAIBI

– Dans le constructeur
Champ constant
92

Comme pour les variables locales, il est possible de déclarer


un champ avec le modificateur final.

Cela signifie qu'il doit avoir une affectation unique.

Le compilateur vérifie que il a bien été initialisé, et ce quelque soit le


constructeur mais également qu‟il n'a été affecté qu'une seule fois.
Cours POO/JAVA
Dorra ZAIBI
93
Dorra ZAIBI Cours POO/JAVA

Champ constant
Exemple: déclaration d‟un
94
attribut
Cours POO/JAVA
Dorra ZAIBI
Modificateurs d'accès
95

 Ils s'appliquent aux classes, aux méthodes et aux attributs.

 Ils assurent le contrôle des conditions d'héritage, d'accès aux


éléments et de modification de données par les autres objets.
Cours POO/JAVA
Dorra ZAIBI
Modificateurs de visibilité
96

Il existe 3 modificateurs qui peuvent être utilisés pour définir les attributs
de visibilité des entités (classes, méthodes ou attributs) : public, private et
protected.

Modificateur Rôle
Une variable, méthode ou classe déclarée public est visible par tous les autres
public
objets.
Il n'existe pas de mot clé pour définir ce niveau, qui est le niveau par défaut
par défaut :
lorsqu'aucun modificateur n'est précisé. Cette déclaration permet à une entité
package
(classe, méthode ou variable) d'être visible par toutes les classes se trouvant dans
friendly
le même package.
Si une méthode ou une variable est déclarée protected, seules les méthodes
protected présentes dans le même package que cette classe ou ses sous-classes pourront y
accéder.
C'est le niveau de protection le plus fort. Les composants ne sont visibles qu'à
private
l'intérieur de la classe .
Modificateurs de visibilité
97

Exemple:
 class MyClass
La classe sera accessible depuis toutes les classes du même
paquetege qu‟elle (on parle quelque fois de visibilité de paquetage)

 public class MyClass


La classe sera accessible de n'importe où (pourvu qu'on indique son
Cours POO/JAVA

nom de paquetage complet ou qu‟on utilise la directive import)


Dorra ZAIBI
Modificateurs : final
98

Le mot clé final s'applique aux variables de classe ou d'instance ou


locales, aux méthodes, aux paramètres d'une méthode et aux classes.

 Une méthode déclarée final ne peut pas être redéfinie dans une
sous-classe.
 Elle peut être utile pour garantir qu‟aucune autre définition ne pourra
être donnée pour cette méthode (sécurité)
Cours POO/JAVA

 Lorsque le modificateur final est ajouté à une classe, il est interdit


de créer une classe qui en hérite.

Avantage:
Dorra ZAIBI

Utile pour des raisons de sécurité et de performances


De nombreuses classes du JDK sont « final »
Modificateurs : final
99

Remarque:
 Toutes les méthodes à l‟intérieur de la classe
final seront implicitement finales
Cours POO/JAVA
Dorra ZAIBI
Modificateur : abstract
100

Le mot-clé abstract s'applique aux méthodes et aux classes.

 Abstract indique que la classe ne pourra être instanciée telle quelle.

 Une méthode abstraite est une méthode déclarée avec le


modificateur abstract et sans corps. Elle correspond à une méthode
dont on veut forcer l'implémentation dans une sous-classe.
Cours POO/JAVA

 Une classe est automatiquement abstraite dès qu'une de ses


méthodes est déclarée abstraite..
Dorra ZAIBI
Déclarer une classe
101

 Une classe « public » est visible en dehors du package


– Par défaut, elle n‟est pas visible
 – Chaque fichier java doit contenir au maximum une classe « public»
=>erreur de compilation
Cette classe doit porter le nom du fichier dans lequel elle est définie (en
respectant les majuscules/minuscules)
Cours POO/JAVA

 Une classe « final » ne peut pas être dérivée (pas de sous-classes)

 Une classe « abstract » ne peut pas être instanciée (pas de « new »)


Dorra ZAIBI
Membre statique
102

Le mot clé static s'applique aux variables et aux méthodes.

Les membres statiques (déclaré avec le mot-clé static) sont liés à la


classe et non à une instance particulière (objet). Ils n'existent donc
qu'une seule fois en mémoire.

Champs statique
Sa valeur n'est pas propre à un objet mais à la classe. On y accède à
Cours POO/JAVA

partir du nom de la classe ou de la référence à n'importe quel objet de


la classe

Méthode statique
Dorra ZAIBI

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)
Exemple
103

public class MonApp1 {


public static void main(String[] args) {
System.out.println("Bonjour"); }

}
Cours POO/JAVA
Dorra ZAIBI
Accès aux membres: champs et
méthodes
104

Avec le point « . » sur une référence à


un objet: p.x, p0.sameAs(p1)

Le compilateur regarde le type déclaré


de la variable (ici p ou p0) et
vérifie que le membre (ici x ou
sameAs) existe.

Le compilateur vérifie également


les droits d'accessibilité.

Un champ et une méthode peuvent


avoir le même nom.

this représente l'instance courante.


Création d‟instance
105

Une instance, ou un objet, d'une classe est créée en 3 temps


Pixel p1 = new Pixel (1,3);

new est l'opérateur d'instanciation: comme il est suivi du nom


de la classe, il sait quelle classe doit être instanciée

 Il initialise chaque champ à sa valeur par défaut


Cours POO/JAVA

 Il peut exécuter un bloc d'initialisation éventuel

 Il retournera la référence de l'objet ainsi créé

Pixel est le nom de la classe

(1,3) permet de trouver une fonction d'initialisation particulière


Dorra ZAIBI

dans la classe, qu'on appelle un constructeur


Exemple: création d‟objet
106
Cours POO/JAVA
Dorra ZAIBI
« this »
107

 « this » = référence sur l‟objet courant

 Représente l‟instance courante en train de s‟exécuter


Cours POO/JAVA
Dorra ZAIBI
Utilisation de « this » dans un
108
constructeur
Cours POO/JAVA
Dorra ZAIBI
Point d‟entrée d‟un programme
109

Un programme Java comporte toujours une classe


principale et une méthode main () dans cette classe, c‟est
pourquoi nous avons appelé “programme” un fichier
contenant une classe réduite à une méthode main().
Cours POO/JAVA
Dorra ZAIBI
Point d‟entrée d‟un programme
110

Un programme Java est constitué d‟une ou de plusieurs classes.


Parmi toutes ces classes, il doit exister au moins une classe qui
contient la méthode statique et publique main() qui est le point
d‟entrée de l‟exécution du programme.

La méthode main() doit être déclarée static et public pour qu‟elle


puisse être invoquée par l‟interpréteur Java.
Cours POO/JAVA

L‟argument args est un tableau de String qui correspond aux


arguments de la ligne de commande lors du lancement du programme
(args[0] est le 1er argument, args[1] est le 2 ième argument …)
Dorra ZAIBI
111
Dorra ZAIBI Cours POO/JAVA

Méthode main()
Constructeur
112

Un constructeur est une méthode particulière, qui sert à :

 Initialiser un objet

 Permet de garantir des invariants sur un objet sont conservés,


par exemple pour initialiser un objet avec des valeurs particulières
Exemple, on veut qu'un Pixel soit en (1,1)
Cours POO/JAVA

Le constructeur a le même nom que la classe et n‟a


pas de type de retour

En l'absence de constructeur explicitement défini, le compilateur


ajoute un constructeur public sans paramètre
Dorra ZAIBI
Appel à un autre constructeur
113

Plusieurs constructeurs peuvent cohabiter dans la même classe

Ils ont typiquement des rôles différents et offrent des « services »


complémentaires à l'utilisateur, par exemple:

 new Pixel(1,3) crée un pixel avec les coordonnées explicites


 new Pixel() crée un pixel avec les coordonnées à l'origine
 new Pixel(1) crée un pixel sur la diagonale (x == y), etc.
Cours POO/JAVA

Quand c'est possible, il est préférable qu'il y en ait un « le plus général »


et que les autres y fassent appel

Plutôt que de dupliquer le code dans plusieurs constrcuteurs,


Dorra ZAIBI

l'appel à un autre constructeur de la même classe se fait par this(...)


Appel à un autre constructeur
114
Cours POO/JAVA
Dorra ZAIBI
Opérateurs sur les références
115

 Egalité de deux références : ==


– Compare si 2 références pointent vers le même objet

 Différence de deux références : !=


– Compare si 2 références pointent vers des objets différents
– Compare si 2 références pointent vers des objets différents
Cours POO/JAVA

 Type d‟instance de la référence : instanceof


– Permet de savoir si l‟objet référencé est une instance d‟une
classe donnée ou d‟une de ses sous-classes
Dorra ZAIBI
Surcharge des méthodes
116

Les méthodes sont redéfinies avec le même nom, les mêmes types et le même nombre
d'arguments, sinon il s'agit d'une surcharge.

Les méthodes comme les constructeurs peuvent être surchargées: (overloaded)

 Leur nom est le même


 Le nombre ou le type de leurs paramètres varie
 Le type du paramètre de retour n‟est pas pris en compte par le mécanisme de résolution
de surcharge
Cours POO/JAVA

Objectif: fournir plusieurs définitions pour la même méthode


Le compilateur doit pouvoir trouver celui qui convient le mieux au « site d'appel », c'est à
dire au nombre et au type des arguments

Si aucune méthode ne correspond exactement, le compilateur peut prendre une méthode


approchée en fonction du typage
Dorra ZAIBI
Méthode println()
117

Les méthodes println() sont surchargées pour être adaptées:

 A chaque valeur de type primitif (boolean char double float int long)
 Aux chaînes de caractères (String et char[])
 Aux objets (Object)

Par défaut, toute classe A « hérite » de Object


Cours POO/JAVA

Cela induit une relation de sous typage : A < Object


A définit un « sous-type » de Object
On peut donc appliquer sur A ce qu'on sait faire sur Object
Quand on appelle println() sur un Pixel, ça appelle la méthode sur Object
Dorra ZAIBI
Exemple: Méthode println()
118
Cours POO/JAVA
Dorra ZAIBI
Dorra ZAIBI Cours POO/JAVA

119
Méthode println()
Exemple: Méthode println()
120

PrintStream.println(Object x) appelle String.valueOf(x)

String.valueOf(Object x) retourne
 "null" si jamais l'objet x vaut null

 x.toString() si x ne vaut pas nul


Cours POO/JAVA
Dorra ZAIBI
Héritage
121

Consiste à définir une classe, dite classe dérivée ou classe fille,


à partir d'une autre classe, dite classe de base ou classe mère,
en récupérant automatiquement dans la classe dérivée tous
les membres de la classe de base, et en lui ajoutant éventuellement
de nouveaux membres.

L‟héritage définit la relation « est-un ».


Cours POO/JAVA
Dorra ZAIBI
Héritage
122

Dans une hiérarchie de classe:


 Un objet d‟une sous-classe hérite le type de sa super-
classe
 L‟héritage est transitif

 Un objet peut donc avoir plusieurs type


Cours POO/JAVA
Dorra ZAIBI
Héritage
123

 Toute classe Java est une sous-classe de la classe « Object »

 Toutes les variables et méthodes contenues dans Object sont


accessibles à partir de n'importe quelle classe car par héritages
successifs toutes les classes héritent d'Object.

 Seuls les constructeurs ne sont pas hérités.


Ils restent propres à leur classe
Cours POO/JAVA

 La classe dérivée peut changer l‟implémentation d‟une ou plusieurs


méthodes héritées : redéfinition
Dorra ZAIBI

 Il est possible de faire en sorte que l‟on ne puisse pas hériter d‟une
classe en particulier : utilisation du mot-clé « final »
Dorra ZAIBI Cours POO/JAVA

124
Exemple
Dorra ZAIBI Cours POO/JAVA

125
Exemple
Héritage
126

Remarque:
 Pas d‟héritage multiple, pour des raisons de
performances et de complexité. A la place, il y a la
notion d‟interface.

Object est une classe au sommet de la hiérarchie. Sans


Cours POO/JAVA

mot-clé extends, le compilateur met automatiquement


extends Object.
Dorra ZAIBI
Héritage
127

 Si une variable référence un objet d‟une classe, elle peut


référencer un objet de n‟importe laquelle de ses sous-classes

Exemple:
class Felin {………}
class Lion extends Felin {………}
Lion lion = new Lion();
Cours POO/JAVA

Felin felin;
felin = lion; // OK conversion implicite : les lions sont des félins
lion = felin // ERREUR : tous les félins ne sont pas des lions
lion = (Lion)felin; // Conversion descendante explicite
Dorra ZAIBI
Redéfinition/Masquage
128

Les membres peuvent être manipulés si leur accessibilité le permet

Fournir une nouvelle définition pour la même méthode:

 Même nom, mêmes arguments, même type de retour, code différent


Cours POO/JAVA

 Lorsqu‟une méthode redéfinie par une classe est invoquée par un


objet de cette classe, c‟est la nouvelle définition et non pas celle de la
super-classe qui est exécutée
Dorra ZAIBI
Redéfinition/Masquage
129

 Les membres d‟une classe de base peuvent être masqués par la


définition de champs qui ont le même nom dans la classe dérivée

 Si String x est déclaré dans ColoredPixel, c'est celui qui sera


considéré dans cette classe quand on parle de this.x
 Il est possible de manipuler celui qui est masqué (s'il est accessible)
Cours POO/JAVA

par la notation super.x


Dorra ZAIBI
Redéfinition/Masquage
130

 Pour les champs:


On peut accéder à celui immédiatement supérieur par
super.x

 Pour la méthode
On peut accéder à celle immédiatement supérieure par
Cours POO/JAVA

super.m()
Dorra ZAIBI
Redéfinition/Réutilisation
131

 Possibilité de réutiliser le code de la méthode héritée


(super)
Cours POO/JAVA
Dorra ZAIBI
Redéfinition/Surcharge
132

Si la signature de la méthode qu'on définit dans la classe


dérivée n'est pas le même que celle de la classe de base
=> il s'agit de surcharge:

 Les deux méthodes cohabitent dans la classe dérivée


Cours POO/JAVA
Dorra ZAIBI
Redéfinition/ Surcharge
133

 Ne pas confondre redéfinition avec surcharge


 Il faut faire attention à la signature des
méthodes !
Cours POO/JAVA
Dorra ZAIBI
Constructeur et héritage
134

 La construction de toute instance d'une classe


débute par la construction d'une instance d'Object
= > Chaque fois qu‟un objet est créé, les constructeurs sont invoqués
en remontant la hiérarchie jusqu‟à la classe Object

 En pratique, tout constructeur débute par un appel au constructeur


de sa superclasse: super()
Cours POO/JAVA

 Doit obligatoirement être la première instruction du constructeur

 Le constructeur implicite (ajouté par le compilateur) fait appel au co


nstructeur sans argument de la superclasse
Dorra ZAIBI

 On peut dire que l‟instance existe vraiment à partir du moment où le


constructeur d‟Object a été exécuté. C‟est pourquoi l‟appel à
super(…) doit être la 1ère instruction
Exemple 1: Appel du
constructeur
135
Cours POO/JAVA
Dorra ZAIBI
Exemple 2: Appel du
constructeur
136
Cours POO/JAVA
Dorra ZAIBI
Exemple 3: chaînage des
constructeurs
137
Cours POO/JAVA
Dorra ZAIBI
Héritage et Constructeur par défaut
138
Cours POO/JAVA
Dorra ZAIBI
Super-classe « Object »
139

Il est possible d‟affecter une instance de n‟importe quelle classe à une


variable de type Object
Exemple: Object v = new UneClasse(..) ;

La classe Object définit, entre autres, les méthodes:


 toString: quii affiche juste une représentation de l‟adresse objet,
 equals: qui fait une comparaison au moyen de == (comparaison
Cours POO/JAVA

des références),
 clone: qui permet de copier l‟instance courante

Dans la plupart des cas, ces définitions par défaut ne sont pas
satisfaisantes pour vos propres classes
Dorra ZAIBI

=> Vous êtes amenés à les redéfinir pour permettre un affichage plus
explicite, une comparaison, ou une copie correcte de vos objets.
Redéfinition de toString()
140
Cours POO/JAVA
Dorra ZAIBI
Interface
141

Supposons que l‟on souhaite programmer un jeu mettant en scène les


entités suivantes :
 Balle
 Raquette
 Filet
 Joueur
Cours POO/JAVA
Dorra ZAIBI
Interface
142

Si l‟on analyse de plus près les besoins du jeu, on réalise que :


 certaines entités doivent avoir une représentation graphique
(Balle, Raquette, Filet) et d‟autres non (Joueur)
 certaines entités doivent être interactives (Balle, Raquette) et
d‟autres non (Joueur, Filet)
Cours POO/JAVA

Java ne permet que l‟héritage simple

Chaque sous-classe ne peut avoir qu‟une seule classe parente


directe !
Dorra ZAIBI
Interface
143

Si l‟on analyse de plus près les besoins du jeu, on réalise que :


 certaines entités doivent avoir une représentation graphique (Balle,
Raquette, Filet) et d‟autres non (Joueur)
 certaines entités doivent être interactives (Balle, Raquette) et
d‟autres non (Joueur, Filet)
Cours POO/JAVA
Dorra ZAIBI
Interface
144

Une interface permet d‟imposer un contenu commun (et


aussi particulier) à des sous-classes en dehors d‟une
relation d‟héritage.
Cours POO/JAVA
Dorra ZAIBI
Interface
145
Cours POO/JAVA

 Une interface ne peut pas avoir un constructeur


Dorra ZAIBI

=> impossible de faire new


Interface
146

 Elle est composée d‟un ensemble de méthodes


abstraites et de constantes (« static » et « final »
implicitement déclarées)

 Les variables des interfaces doivent obligatoirement être


initialisées
Cours POO/JAVA
Dorra ZAIBI
Interface
147

 Attribution d‟une interface à une classe


Cours POO/JAVA

 Une classe peut implémenter plusieurs interface mais étendre une


seule classe (Java supporte l‟héritage multiple d‟interface)
Dorra ZAIBI
Héritage d‟interface
148

De la même manière qu'une classe peut avoir des sous-classes, une


interface peut avoir des « sous-interfaces »
Une sous interface
 hérite de toutes les méthodes abstraites et des constantes de sa
« super-interface »
 peut définir de nouvelles constantes et méthodes abstraites
Cours POO/JAVA
Dorra ZAIBI

Une classe qui implémente une interface doit implémenter toutes les
méthodes abstraites définies dans l'interface et dans les interfaces dont
elle hérite.
Dorra ZAIBI Cours POO/JAVA

149
Exemple
Héritage d‟interface
150

Remarque:
A la différence des classes une interface peut étendre plus d'une
interface à la fois
Cours POO/JAVA
Dorra ZAIBI
Héritage d‟interface
151

Intérêt
 Les interfaces permettent de s‟affranchir d‟éventuelles
contraintes d‟héritage.

Lorsqu‟on examine une classe implémentant une ou


plusieurs interfaces, on est sûr que le code
d‟implémentation est dans le corps de la classe.
Cours POO/JAVA

Excellente localisation du code (défaut de l‟héritage


multiple, sauf si on hérite de classes purement abstraites).
Dorra ZAIBI

 Permet une grande évolutivité du modèle objet


Variable de type interface
152

Une interface attribue un type supplémentaire à une classe


d‟objets, on peut donc :
 Déclarer une variable de type interface

 Y affecter un objet d‟une classe qui implémente

l‟interface
 (éventuellement, faire un transtypage explicite vers
Cours POO/JAVA

l‟interface)
Dorra ZAIBI
Interface et type
153

 Des objets différents peuvent répondre au même message à


condition qu‟ils implémentent la même interface

 L‟opérateur « instanceof » peut être utilisé pour savoir si un objet


implémente une interface donnée
Cours POO/JAVA
Dorra ZAIBI
Quand utiliser les interfaces
154

 Pour définir des services techniques


 Pour contourner le fait que Java ne supporte pas l‟héritage multiple
 Interface vs Héritage :
– On utilise l‟héritage quand un objet est un sous-type d‟un autre
– On utilise une interface pour décrire le fait qu‟une classe implémente un
service particulier
Cours POO/JAVA
Dorra ZAIBI
Dorra ZAIBI Cours POO/JAVA

155
Exemple
Dorra ZAIBI Cours POO/JAVA

156
Exemple
Dorra ZAIBI Cours POO/JAVA

157
Exemple
Polymorphisme
158

Le polymorphisme est la capacité, pour un même message de


correspondre à plusieurs formes de traitements selon l'objet auquel ce
message est adressé.

Une méthode polymorphe est ainsi une méthode déclarée dans une
super-classe et redéfinie dans une sous-classe

Une méthode Java est par défaut polymorphe. Java met en œuvre le
Cours POO/JAVA

principe de « résolution dynamique des liens »


=> C‟est le type effectif (celui de l‟objet effectivement stocké dans la
variable) et non le type apparent qui est pris en compte.

La gestion du polymorphisme est assurée par la machine virtuelle


Dorra ZAIBI

dynamiquement à l'exécution.
Polymorphisme
159

La mise en oeuvre du polymorphismes se fait au travers de:

 l‟héritage (hiérarchie de classes)


 la résolution dynamique des liens
Cours POO/JAVA
Dorra ZAIBI
Polymorphisme
160

 Le transtypage induit par l'héritage facilite le


polymorphisme.

 L'héritage définit un cast implicite de la classe fille vers


la classe mère : on peut affecter à une référence d'une
classe n'importe quel objet d'une de ses sous-classes.
Cours POO/JAVA

 Les méthodes « final » ne peuvent pas être redéfinies


Dorra ZAIBI
Exemple
161

 Il est possible d'écrire le code suivant si Employe hérite


de Personne

Il est possible de surcharger une méthode héritée : la


Cours POO/JAVA

forme de la méthode à exécuter est choisie en fonction


des paramètres associés à l'appel.
Dorra ZAIBI
Dorra ZAIBI Cours POO/JAVA

162
Exemple
Méthode abstraite
163

 Une méthode abstraite n‟a pas de définition dans la


classe où elle est introduite (pas de corps)
 Elle sert à imposer aux classes qu‟elles doivent définir la
méthode abstraite héritée
 Elle doit être contenue dans une classe abstraite
Cours POO/JAVA
Dorra ZAIBI
Classe abstraite
164

Une classe abstraite

 Elle ne peut pas être instanciée


 Ses sous-classes restent abstraites tant qu‟elles ne
fournissent pas les définitions de toutes les méthodes
abstraites dont elles héritent.
Cours POO/JAVA
Dorra ZAIBI
Classe abstraite
165
Cours POO/JAVA
Dorra ZAIBI

Cercle n‟est pas une classe abstraite. Polygone est une classe abstraite.
Constructeur et polymorphisme
166

 Un constructeur n‟est pas prévu qu‟il ait un comportement


polymorphique.
 Il est déconseillé d‟invoquer une méthode polymorphique dans le
corps d‟un constructeur

 Résultat

 b vaut 0
Modificateur final
167

Ce modificateur permet d‟indiquer les éléments


du programme qui ne doivent pas être modifiés
/redéfinis/étendus

=> Impossible d‟étendre la classe par une sous-


Cours POO/JAVA

classe (erreur de compilation)


Dorra ZAIBI
Paquetage
168

 En Java, il existe un moyen de regrouper des classes voisines ou


qui couvrent un même domaine : ce sont les packages.

 Les packages sont organisés hiérarchiquement

 Un package est une bibliothèque de classes


Cours POO/JAVA

 La notion de package apporte un niveau d‟encapsulation


supplémentaire
Dorra ZAIBI
Paquetage
169

 Pour utiliser un package ainsi créé, on l'importe dans le fichier :


import nomPackage.*;

Pour importer un package, il y a deux méthodes

Exemple Rôle
Cours POO/JAVA

import nomPackage.*; toutes les classes du package sont importées


appel à une seule classe : l'avantage de cette
import nomPackage.nomClasse; notation est de réduire le temps de
compilation
Dorra ZAIBI
Dorra ZAIBI Cours POO/JAVA

170
Exemple
Paquetage
171

 Les classes du JDK sont classées dans des Java packages


Cours POO/JAVA

 Java importe automatiquement le package « java.lang » qui


contient des classes comme « Thread » ou « System »

Les classes du paquetage java.lang sont visibles par défaut


Dorra ZAIBI


Paquetage: Utilisation
172

 Le mot-clé « package » permet de définir un nouveau package

 La hiérarchie des packages correspond à la hiérarchie des répertoires


Cours POO/JAVA
Dorra ZAIBI
Paquetage: CLASSPATH
173

 Le compilateur utilise la variable d‟environnement CLASSPATH


pour localiser les classes d‟un package sur le disque

 Cette variable doit référencer tous les répertoires ou fichiers dans


lesquels sont susceptibles de se fichiers dans lesquels sont
susceptibles de se trouver des classes Java
Cours POO/JAVA

 On a le droit de placer les classes dans des archives (zip, jar, cab)
Dans ce cas, la variable CLASSPATH doit référencer le fichier

 La hiérarchie des classes des packages doit être respectée


Dorra ZAIBI

Vous aimerez peut-être aussi