0% ont trouvé ce document utile (0 vote)
39 vues91 pages

Java - JEE - Introduction & Rappels24

Transféré par

AYMAN COUKI
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)
39 vues91 pages

Java - JEE - Introduction & Rappels24

Transféré par

AYMAN COUKI
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
Vous êtes sur la page 1/ 91

ENSEM

COURS DE

Java - JEE

Enseignant : Pr. AOUN Oussama

Année Universitaire 2024/2025


Java - JEE
Déroulement du cours

Séances de théorie
Séances de TP sur ordinateur
Évaluation pratique sur ordinateur
Examen sur le contenu du cours
Projet par groupes de 2 ou 3.

2
Software Requirement

[Java Environment]
Java (SE) 6 or higher http://www.java.com/
[Web application container]
Apache Tomcat 5.x or higher
http://tomcat.apache.org/
[Database]
Microsoft Access 2003 or higher
[Integrated Development Environment]
Eclipse
http://www.eclipse.org/downloads/
Introduction & Rappel

ENSEM Java - JEE 3


Caractéristiques Principales de
Java
Le langage Java est :
▪ « C-like » : Syntaxe familière aux programmeurs de C
▪Orienté objet : Tout est objet, sauf les types primitifs
(entiers, flottants, booléens, ...)
▪ Robuste : Typage fort, pas de pointeurs, etc.
▪Code intermédiaire : Le compilateur ne produit que du
bytecode indépendant de l’architecture de la machine où a
été compilé le code source

“Write Once, Run Anywhere : écrire une fois, exécuter


partout”

ENSEM Java - JEE 5


Quelques chiffres
- 97% des machines d'entreprises ont une JVM installée
- Java est téléchargé plus d'un milliards de fois chaque année
- Il y a plus de 9 millions de développeurs Java dans le monde
- Java est un des langages les plus utilisé dans le monde
- Plus de 3 milliards d'appareils mobiles peuvent utiliser Java
-Plus de 1,4 milliards de cartes à puce utilisant Java sont
produites chaque année

ENSEM Java - JEE 6


Langage compilé

Etapes qui ont lieu avant l'exécution pour un langage compilé


comme C++

Fichier
de Librairies
code

Programme
Compilation Code objet Edition de liens
exécutable

Autres code objet


Fichier
d'entête

7
Langage interprété

Cas de Java
Avant exécution Exécution

Autres byte code

Fichier
Byte code Machine virtuelle
de code Compilation
Java (JVM)
Java
javac MaClasse.class java
MaClasse.java

8
L’API de Java

Java fournit de nombreuses librairies de classes


remplissant des fonctionnalités très diverses : c'est
l'API Java
API (Application and Programming Interface /Interface
pour la programmation d'applications) : Ensemble de
bibliothèques permettant une programmation plus aisée
car les fonctions deviennent indépendantes du matériel.
Ces classes sont regroupées, par catégories, en
paquetages (ou "packages").

9
L’API de Java (2)

Les principaux paquetages


java.util : structures de données classiques
java.io : entrées / sorties
java.lang : chaînes de caractères, interaction avec l'OS, threads
java.applet : les applets sur le web
java.awt : interfaces graphiques, images et dessins
javax.swing : package récent proposant des composants « légers » pour la
création d’interfaces graphiques
java.net : sockets, URL
java.rmi : Remote Method Invocation (pas abordé dans ce cours)
java.sql : fournit le package JDBC (pas abordé dans ce cours)

10
L’API de Java (3)

La documentation de Java est standard, que ce


soit pour les classes de l'API ou pour les classes
utilisateur
possibilité de génération automatique avec l’outil
Javadoc.
Elle est au format HTML.
intérêt de l'hypertexte pour naviguer dans la
documentation

11
L’API de Java (4)

Pour chaque classe, il y a une page HTML contenant :


la hiérarchie d'héritage de la classe,
une description de la classe et son but général,
la liste des attributs de la classe (locaux et hérités),
la liste des constructeurs de la classe (locaux et hérités),
la liste des méthodes de la classe (locaux et hérités),
puis, chacune de ces trois dernières listes, avec la
description détaillée de chaque élément.

12
L’API de Java (5)

Où trouver les informations sur les classes de l’API


sous le répertoire jdk1.x/docs/api dans le JDK
les documentations de l’API se téléchargent et s’installent
(en général) dans le répertoire dans lequel on installe java.
Par exemple si vous avez installer Java dans le répertoire
D:/Apps/jdk1.4/, vous décompresser le fichier zip
contenant les documentations dans ce répertoire.
Les docs de l’API se trouveront alors sous :
D:/Apps/jdk1.4/docs/api/index.html
Sur le site de Sun, on peut la retrouver à
http://java.sun.com/docs/index.html

13
L’API de Java (6)

14
The Java 2 Platform

Platform introduced June, 1999


- J2SE – Java 2 Standard Edition
Java for the desktop / workstation
http://java.sun.com/j2se
- J2ME – Java 2 Micro Edition
Java for the consumer device
http://java.sun.com/j2me
- JEE - Java 2 Enterprise Edition –Jakarta EE
Java for the server
http://java.sun.com/j2ee
Evolution de Java

Personal Java 1.0 / 1.1 / 1.2 FDT, I/O, Collection et Outils,


Applet + Thread, AWT + Swing,
TCP/ IP + UDP / IP, RMI, New I/O,
Java2 SDK SE 1.3.0, Expression rationnelle, Image I/O,
Java2D, Java3D, JAI, JMF, Son, JCE,
1.3.1, 1.4.0 JSSE, JAAS

JSP + Servlet + JavaBeans, EJB,


RMI-IIOP and CORBA, JNDI,
JDK1.0 JDK 1.1 Java2 SDK EE Java2 SDK
OAK 1.2.1 EE 1.3.0
JMS, JDBC, XML

(91-94)

Plateforme Java Java2 SDK ME (Micro Pour téléphones cellulaires


PDA, JINI, JIRO **
Edition)

Plateforme Java2
Java embarqué
•Java 1.0.2
•Java 1.1.1 , 1.1.2, 1.1.3, 1.1.8
•Java 1.2.2
ENSEM Java - JEE 1
Les différents types d’applis

Applications autonomes

Exécutable Données
Les différents types d’applis

Applications déportées

Terminal ou Gestionnaire
d'écrans Données
émulateur
Les différents types d’applis

Applications client/serveur

Exécutable Données
Les différents types d’applis

Applications client/serveur distribuées ou 3-tiers

Exécutable Exécutable Données


Les différents types d’applis

Les applications client léger ou applications web

Navigateur Serveur
HTML/Javascript d'applications Données
Evolution du Web : Applications web

Développement des pages dynamiques :


- générées à partir d'une base de données : pas besoin d'écrire des centaines de pages
HTML
(ex : site de presse)
- apportent un contenu personnalisé à l'utilisateur (ex : messagerie)
- ne nécessitent pas d'installation sur le poste de l'utilisateur
(ex : annuaire de l'école)

HTML
Technologies du web dynamique

3 solutions :
ASP (.Net) :
Active Server Page
fonctionne uniquement avec un serveur MS Windows
PHP :
PHP Hypertext Processor
gratuit : communauté libre
fonctionne avec tout type de serveur
simple à apprendre
limité (mais nouvelles versions…)

ASP
PHP
Technologies du web dynamique

3 solutions :
Java : Servlets/JSP :
gratuit , mais sous la houlette de Jakarta
fonctionne avec tout type de serveur
programmation objet structurée, modulaire et évolutive
richesse des interfaces
répandu dans les entreprises
peu d’hébergements disponibles

servlet
JSP

25
Les applications Web en Java

Serveur web capable d'exécuter du Java :


serveur d'application JEE JEE
web container JEE
Un serveur JEE est capable d'exécuter :
des servlets : classes Java exécutées côté serveur
des JSP :
Java Server Pages
Fichiers de script qui « mélangent » du Java et du HTML/Javascript

26
Web dynamique : principes

2 : le serveur accepte la
1 : le navigateur rassemble connexion reçoit la
les informations du requête, retrouve les
formulaire, il se connecte au informations transmises
serveur et lui transmet ces et recherche les données
informations dans une correspondantes
requête HTTP

4 : le navigateur
affiche la page et 3 : le serveur génère
rompt la connexion dynamiquement une page
avec le résultat, l'envoie
en réponse HTTP au
navigateur
Rappel sur JAVA

ENSEM Java - JEE 2


Comment obtenir JAVA

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Documentation:
http://docs.oracle.com/javase/11/docs/api/index.html

ENSEM Java - JEE 2


Java Development Kit de Sun
Le compilateur javac
La syntaxe est la suivante : javac [options] [fichiers] [@fichiers]

L'interpréteur java/javaw
Ces deux outils sont les interpréteurs de byte code : ils lancent le JRE, chargent les classes nécessaires et
executent la méthode main de la classe.
java ouvre une console pour recevoir les messages de l'application alors que javaw n'en ouvre pas.

L'outil JAR/WAR
JAR est le diminutif de Java ARchive. C'est un format de fichier qui permet de regrouper des fichiers
contenant du byte-code Java (fichier .class) ou des données utilisées en temps que ressources (images,
son, ...). Ce format est compatible avec le format ZIP : les fichiers contenus dans un jar sont compressés
de façon indépendante du système d'exploitation.

Pour générer la documentation : l'outil javadoc


Cet outil permet de générer une documentation à partir des données insérées dans le code source.

ENSEM Java - JEE 8


Exécution du code JAVA

Erreurs…
public class Toto {
1001 1101
Pas d’erreurs… 1110 1101
public static void main (String[] 0011 0110
args){ Compilateur
int i; 0000 0001
for (i = 0 ; i<10 ; i++) JAVA …
System.out.println("Hello World");
} Byte code
}

Code source Toto.class


Toto.java

Hello World
Hello World
Hello World

Machine
virtuelle
ENSEM Introduction(JàVJMEE) 6 9
Environnements de
développement
Editeur de texte + lignes de commande
Les éditeurs simples : Jcreator, Emacs, JEdit
Les éditeurs avancés
o Eclipse http://www.eclipse.org/
o NetBeans http://www.netbeans.org/
o IntelliJ IDEA
o RAD
o JDeveloper
o JBuilder
o BlueJ

ENSEM Java - JEE 32


La méthode main
⚫ La méthode main est une méthode de classe publique, qui
contient le « programme principal » à exécuter et qui a pour
signature :
public static void main(String[] args)

⚫ Attention
⚫ La méthode main ne peut pas retourner d’entier comme en C.

public static int main(String[] args)

ENSEM Java - JEE 33


La méthode main

ENSEM Java - JEE 12


Concepts POO

Héritage (Polymorphisme, Interface, Class abstraite,


relation <<instance de>>, casting)
Visibilité et encapsulation
Attributs et Méthodes statiques

ENSEM Java - JEE 13


Héritage

⚫ L’héritage est une relation entre deux Object


classes.
⚫ Ex. Etudiant hérite de Personne:
• La classe étudiant et un sous-type (sous-
classe) de la classe Personne
(superclasse). Personne
⚫ Syntaxe: mot clé "extends"
• public class Etudiant extends Personne {
…}
⚫ En Java, une classe ne peut pas hériter
de plus d'une classe.
⚫ Si l'héritage n'est pas déclaré, la classe Enseignant
hérite implicitement de Etudiant
java.lang.Object
◼ une hiérarchie de classes

ENSEM Java - JEE 36


Sémantique d'héritage:
attributs et méthodes
⚫ La sous classe (ex. Etudiant) possède des attributs et des
méthodes définis dans la superclasse (ex. Personne).
⚫ Ex.
public class Etudiant extends Personne {
public class Personne { String noEtudiant;
String nom; public Etudiant(String _nom, _noEtudiant) {
nom = _nom;
public void envoyerMail( noEtudiant = _noEtudiant;
String adr, String message) envoyerMail("[email protected].
{ ….} ma", "creation de dossier : " +
nom);
} }
}

ENSEM Java - JEE 37


La classe Objet

● Classe mère de toutes les classes.


Possède des méthodes de base qu'il est

possible de redéfinir :
–toString()

–equals() & hashCode()


–getClass()

–clone()

–finalize()

ENSEM Java - JEE 38


Tests d’égalité

●Les opérateurs de comparaison == et != tests les


valeurs des variables :
–Pour les types primitifs, on test leurs valeurs
–Pour les types objets, on test les valeurs de leurs références
Point p1;
p1=new Point(2,2);
Point p2;
p2=p1
Point p3; Variables locales x 2 y2
p3=new Point(2,2);
p1==p2; // true p1
p1==p3; // false p2
p2==p3; // false p3 x 2 y2

ENSEM Java - JEE 39


La méthode equals()

Il existe déja une méthode equals(Object) dans


Object
● Mais son implémentation test les références
Point p1=new Point(2,2);
Point p3=new Point(2,2);

p1==p3; // false
p1.equals(p3); // false

●Pour comparer structurellement deux objet, il


faut changer (on dit redéfinir) le code de la
méthode equals()
ENSEM Java - JEE 40
constructeur
⚫ Chaque classe a un ou plusieurs constructeurs
• qui servent à créer les instances
• initialiser l'état de ces instances
⚫ Un constructeur :
• a le même nom que la classe
• n'a pas de type de retour
• peut disposer d’un nombre quelconque d’arguments
(éventuellement aucun).
ENSEM Java - JEE 41
Constructeur : exemple

ENSEM Java - JEE 42


Plusieurs constructeur : surcharge

ENSEM Java - JEE 43


Constructeur privé
⚫ Exemple 1:
class ClasseA{
private ClasseA() { … } // constructeur privée sans arguments
…}
ClasseA a = new ClasseA(); // erreur, car ClasseA() est privé
⚫ Exemple 2:

public class CacheSingleton {


private static CacheSingleton instance = new CacheSingleton();
private Map<Long, Object> cache = new HashMap<Long, Object>();
private CacheSingleton() { }
public static synchronized CacheSingleton getInstance() {return
instance; }

ENSEM Java - JEE 44
Les constructeurs en héritage
⚫ La première instruction d'un constructeur peut être un appel :
• à un constructeur de la classe mère : super(...)
• ou à un autre constructeur de la classe : this(...)
⚫ Interdit de placer this() ou super() ailleurs qu'en première
instruction d'un constructeur

⚫ Il n'est pas possible d'utiliser à la fois un autre constructeur


de la classe et un constructeur de sa classe mère dans la
définition d'un de ses constructeurs.

ENSEM Java - JEE 45


Constructeur de la classe mère

ENSEM Java - JEE 46


Constructeurs de la classe fille

ENSEM Java - JEE 47


Appel implicite du constructeur
de la classe mère
⚫ Si la première instruction d'un constructeur n'est ni
super(...), ni this(...), le compilateur ajoute au début un
appel implicite au constructeur sans paramètre de la classe
mère (super() ) .

⚫ Un constructeur de la classe mère est toujours exécuté


avant les autres instructions du constructeur.
⚫ La première instruction d'un constructeur de la classe mère
est l'appel à un constructeur de la classe « grand-mère », et
ainsi de suite...

⚫ La première instruction exécutée par un constructeur est le


constructeur (sans paramètre) de la classe Object !
ENSEM Java - JEE 48
Constructeur implicite :
exemple 1

ENSEM Java - JEE 49


Constructeurs : exemple 2

ENSEM Java - JEE 50


Constructeurs : exemple 2

ENSEM Java - JEE 51


Constructeurs : exemple 2

ENSEM Java - JEE 52


Constructeur implicite : erreur

ENSEM Java - JEE 53


Constructeur implicite :
correction

ENSEM Java - JEE 54


Redéfinir equals()

Pourquoi equals ?

Car elle sert à cela.


La plupart des classes de l’API redéfinissent la

méthode equals
public class Point {
private final int x,y;
public Point(int x,int y) {
this.x=x;
this.y=y;
}
public boolean equals(Point p) {
return x==p.x && y==p.y;
}
} // est ce que c’est bon ?

ENSEM Java - JEE 55


Redéfinir equals()

Point p1=new Point(2,2);


Point p3=new Point(2,2);
p1==p3; // false
p1.equals(p3); // true

ArrayList points=new ArrayList();


points.add(p1);
points.contains(p3); // false
// pourtant contains utilise Object.equals(Object) ??

La VM ne fait pas la liaison entre


Object.equals(Object) et Point.equals(Point)

ENSEM Java - JEE 56


Redéfinir equals()

Ce n'est pas le même equals(), car il n'y a pas


eut de redéfinition mais une autre définition (on


dit surcharge)
Point p1=new Point(2,2);
Point p3=new Point(2,2);
p1.equals(p3); // true : Point.equals(Point)

Object o1=p1;
Object o3=p3;
o1.equals(o3); // false : Object.equals(Object)

●Point possède deux méthodes equals


(equals(Object) et equals(Point))

ENSEM Java - JEE 57


Redéfinir equals()

Il faut définir equals() dans Point de telle façon


qu'elle remplace equals de Object


Pour cela equals doit avoir la meme signature

que equals(Object) de Object


public class Point {
private final int x,y;
public Point(int x,int y) {
this.x=x;
this.y=y;
}
public boolean equals(Object p) {
return x==p.x && y==p.y; // ce code ne marche pas
}
}

ENSEM Java - JEE 58


Utiliser @Override

●@Override est une annotation qui demande au


compilateur de vérifier que l'on redéfinie bien
une méthode
public class Point {
private final int x,y;
public Point(int x,int y) {
this.x=x;
this.y=y;
}
@Override public boolean equals(Point p) {
...
} // the method equals(Point p) in Point must override
// a superclass method
}

ENSEM Java - JEE 59


Redéfinir equals

●On demande dynamiquement à voir une


référence à Object comme à Point
(car on le sait que c'est un Point)
public class Point {
...
@Override public boolean equals(Object o) {
Point p=(Point)o; // ClassCastException si pas un Point
return x==p.x && y==p.y;
}
}

Mais equals doit renvoyer false si o n'est pas


un Point et pas lever une ClassCastException

ENSEM Java - JEE 60


Redéfinir equals

●On utilise instanceof qui renvoie vrai si une


référence est d'un type particulier
public class Point {
...
@Override public boolean equals(Object o) {
if (!(o instanceof Point)) // marche aussi avec null
return false;
Point p=(Point)o;
return x==p.x && y==p.y;
}
}

● null instanceof WhatYouWant renvoie false

ENSEM Java - JEE 61


Exemple: redéfinition de la méthode
equals(…)

Object
equals(…) {
public Personne { // comparer par
String noSecu; identité
… }
public boolean equals(Object autre)
{
if(autre instanceof Personne) {
Personne p2 = (Personne) autre; Personne
if(noSecu.equals(p2.noSecu)) String
equals(…) { equals(…) {
return true; // comparer par // comparer
} contenu (no de sécurité par contenu
sociale) }
return false; }
}
}

ENSEM Java - JEE 62


Accès aux méthodes redéfinies dans la
superclasse

⚫ Même si la sous classe redéfinit des méthodes de la superclasse,


elle a le moyen d'accéder à ces méthodes en utilisant le mot clé
<<super>>. public class B extends A{
public class A { public B(String s) {
public A(String s) { super(s);
System.out.println("A : " + s); System.out.println("B : " + s);
} }
public void m1() { public void m1() {
System.out.println("A.m1"); super.m1();
} m2(); // pas besoin de faire super.m2();
public void m2() { System.out.println("B.m1");
System.out.println("A.m2"); }
} }
} Résultat :
A : hello
// main B : hello
B b= new B("hello"); A.m1
b.m1(); A.m2
B.m1

ENSEM Java - JEE 63


Modificateur final
⚫ final appliquée à une classe, indique qu’on ne peut pas
créer de classes dérivées pour cette classe.
⚫ final appliqué à un champ, indique que la valeur de ce
champ ne peut pas être modifiée après l'affectation initiale.
Permet de définir des valeurs constantes.
⚫ final appliqué à une méthode, indique que la méthode ne
peut pas être redéfinie dans une sous-classe.
⚫ Pour les paramètres d'une méthode, final indique que la
valeur de ces paramètres ne peut pas être modifiée.
⚫ Remarque : final permet au compilateur d'effectuer
certaines optimisations.
64
super et this
⚫ Soit une classe B qui hérite d'une classe A

⚫ Dans une méthode d'instance m de B, « super. » sert à


désigner un membre de A

⚫ En particulier, super.m(…) désigne la méthode m de A qui


est en train d'être redéfinie dans B :

65
super
⚫ une méthode static, ne peut être redéfinie.

⚫ super.m() ne doit pas exister pour une méthode static m() ;

⚫ On ne peut remonter plus haut que la classe mère pour


récupérer une méthode redéfinie :
• pas de cast « (ClasseAncetre)m() »
• pas de « super.super.m() »

66
Polymorphisme
⚫ Si l'on considère le diagramme de classes suivant :

67
Polymorphisme
⚫ Définition : la capacité de choisir dynamiquement la
méthode qui correspond au type réel de l'objet.

⚫ Si la classe Poisson hérite de la classe Animal


• classe Poisson "EST-UN" classe Animal
• toute méthode m de Animal peut-être invoquée sur une
instance de la classe poisson (héritage)

⚫ Le polymorphisme consiste à exploiter cela en fournissant


une sous-classe dans les expressions "qui attendent" une
classe mère.
⚫ une fille doit pouvoir faire tout ce que fait sa mère ;
68
Polymorphisme
Animal anim1 = new Poisson( ) ; //un poisson est un animal
Animal anim2 = new Chien() ; //un chien est aussi un animal

System.out.println(anim1.mange());
System.out.println(anim2.mange());

// un animal n’est pas nécessairement un poisson


Poisson p=anim1;

69
Polymorphisme
⚫ Quelle méthode mange() sera invoquée dans ce cas ?

⚫ C'est toujours la méthode mange() définie dans la sous-


classe qui sera invoquée.

⚫ Même si anim1 est une référence de type Animal, c'est le


type de l'objet référencé qui détermine la méthode qui
sera appelée.
⚫ En Java, lorsqu’il y a héritage, la détermination de la
méthode à invoquer n'est pas effectuée lors de la
compilation.

70
Polymorphisme
⚫ C'est seulement à l'exécution que la machine virtuelle
déterminera la méthode à invoquer selon le type effectif de
l'objet référencé à ce moment là.

⚫ Ce mécanisme s'appelle "Recherche dynamique de


méthode" (Late Binding ou Dynamic Binding).

⚫ Ce mécanisme de recherche dynamique (durant l'exécution


de l'application) sert de base à la mise en œuvre de la
propriété appelée polymorphisme.

71
Polymorphisme
⚫ On pourrait définir le polymorphisme comme la propriété
permettant à un programme de réagir différemment à
l'envoi d'un même message (invocation de méthode) en
fonction des objets qui reçoivent ce message.

⚫ Il s'agit donc d'une adaptation dynamique du


comportement selon les objets en présence.

⚫ Avec l'encapsulation et l'héritage, le polymorphisme est


une des propriétés essentielles de la programmation
orientée objet.

72
Polymorphisme
// Déclaration et création du tableau
Animal[ ] menagerie = new Animal[6];
// Alimentation du tableau
menagerie[0] = new Poisson(...);
menagerie[1] = new Chien(...);
menagerie[2] = new Chien(...);
menagerie[3] = new Animal(...);
menagerie[4] = new Poisson(...);
menagerie[5] = new Chien(...);

73
Polymorphisme

74
Upcasting : classe fille →
classe mère
⚫ surclassement ou upcasting est le fait d'enregistrer une
référence d'une instance d'une classe B héritant d'une
classe A dans une variable de type A.

⚫ En java, cette opération est implicite et constitue la base du


polymorphisme.

75
Downcasting : classe mère →
classe fille
⚫ déclassement ou downcasting est le fait de convertir une
référence « surclassée » pour «libérer» certaines
fonctionnalités cachées par le surclassement.

⚫ En java, cette conversion n'est pas implicite, elle doit être


forcée par l'opérateur de cast : (<nomClasse>).

76
Downcasting
⚫ Attention : Le downcasting ne permet pas de convertir une
instance d'une classe donnée en une instance d'une sous-
classe !

77
Interface: type abstrait

<<Interface>> AdaptateurWifi
⚫ Une interface est un type
{ envoyerDonner(..)
abstrait, censé être recevoirDonner(..) }
implémenté par des classes.
⚫ Il ne contient que les
méthodes sans corps.
⚫ Ces méthodes sont à redéfinir
dans les classes AdaptateurWifiImpl1 AdaptateurWifiImpl2
d'implémentation envoyerDonner(..) { envoyerDonner(…)
⚫ On ne peut pas créer une .. } {.. }
recevoirDonner(..) recevoirDonner(...)
instance d'une interface mais { .. }
on peut créer une instance { .. }
d'une classe
d'implémentation.

ENSEM Java - JEE 78


Interface: héritage multiple
⚫ Une classe peut hériter de <<Interface>>
<<Interface>>
plusieurs interfaces. LecteurCD LecteurDVD
• Chaque interface lirePiste(…)

selectionnerLanguage();

représente un rôle d'une
classe.
• Ex. un Lecteur CD-DVD a
comme rôles LecteurCD
et LecteurDVD LecteurCdDvdImpl
lirePiste(…);
selectionnerLanguage(...);
….

ENSEM Java - JEE 79


Interface: syntaxe

interface nom_de_l'interface [ extends noms


d'autres interfaces ] {
public void methode1(String param1) ;
public int methode2(int param1, int param2) ;

// autres méthodes …
}

⚫ Le mot clé "extends" permet à une interface


d'hériter d'autres interfaces (une ou plusieurs)

ENSEM Java - JEE 80


Implémentation d'une interface
⚫ Une classe implémentant une interface doit redéfinir toutes
les méthodes déclarées dans l'interface.

public class LecteurCdDvdImpl


implements LecteurCD, LecteurDVD {

public void lirePiste(int noPiste) {


…. // à ¨spécifier
}
public void selectionnerLangue(String lang) {
…. // à spécifier
}

ENSEM Java - JEE 81


Les classes abstraites
⚫ Une classe abstraite est incomplète
• Elle ne peut être utilisée telle quelle.
• Elle est censée être spécifiée par des sous classes.
• On ne peut pas créer une instance d'une classe abstraite.
⚫ Une classe abstraite peut avoir des méthodes
vides (à redéfinir par des sous-classes).

ENSEM Java - JEE 82


Exemple d'une classe abstraite
public abstract Fenetre {
// attributs génériques pour tout type de fenêtres.
int posX; int posY;
int dimX; int dimY;
// Les méthodes dont l'implémentation est générique
// (pour tout type de fenêtres).
public void deplacer() { … }
public void redimensionner(int newDimX, int newDimY) {
dimX = newDimX; dimY = newDimY;
rafraichirContenu();
}
// la méthode dont on ne connaît pas encore l'implémentation
// (cela dépend de type de fenêtre). Ainsi on la laisse vide.
public abstract rafraichirContenu();
}
ENSEM Java - JEE 83
Visibilité: modificateur public/private
⚫ Le modificateur public marque que les attributs/ méthodes d'une
classe sont accessibles partout (dans les classes).
⚫ Le modificateur private marque que les attributs/ méthodes d'une
classe ne sont accessibles que dans cette classe.

class C2 {
void m3() {
class C1 { C1 c1 = new C1();
public String a1; c1.a1 = "hello"; // OK
private String a2; // c1.a2 = "hello"; illégal
public void m1(); c1.m1(); // OK
private void m2(); // c1.m2(); illégal
} }
}

ENSEM Java - JEE 84


Visibilité :
autre modificateurs de visibilité
⚫ Les autres modificateurs sont:
• aucun modificateur (par défaut): les attributs/ méthodes sont
accessibles
• par les classes du même package
• protected: les attributs/ méthodes sont accessibles
• par les classes du même package, et
• par les sous-classes de la classe courante.

package p1; package p2;


public class A{ public class C {
int a1; // a1, a2 non accessible
protected int a2; }
}
public class D extends A {
public class B { // a1 non accessible
// a1, a2 accessible // a2 accessible
} }

ENSEM Java - JEE 85


Encapsulation : principe
// pas d'encapsulation // modification illégale
public class Date { Date d1 = new Date();
public int jour; d1.jour = 23;
public int mois; d1.mois = 2;
public int annee; d1.annee = 2011;
}

⚫ Principe d'encapsulation :
• Une classe devrait cacher des attributs et exposer ses
méthodes au monde extérieur (aux autres classes)
• Protéger le contenu (les attributs) de la modification illégale
• Masquer les détails internes de la classe
→ simplification

ENSEM Java - JEE 86


Encapsulation: Protection du contenu

public class Date { ⚫ Seule la


private int jour;
private int mois;
modification
private int annee; valide est
public Date() { permise
… // initialisé à la date aujourd'hui
}
public boolean setDate(int j, int m, int a) {
if( estDateValide(j, m, a) ) {
jour =j; moi=m; annee=a; return true;
} else { return false; }
}

}

ENSEM Java - JEE 87


Encapsulation:
Masque de détails internes

public class Image {


// séquence d'octets au format propriétaire
private byte[] donnees;
public void chargerDeFichier(File ficher) {
… // charger et convertir au format propriétaire
}
public void afficher() {
…. // interpréter le format propriétaire.
}
}

⚫ L'utilisateur n’a pas besoin de connaître le


format de données pour utiliser cette classe

ENSEM Java - JEE 88


Membres statiques
⚫ Le modificateur «static» peut s'appliquer à une
méthode ou à un attribut d’une classe.
• L'élément statique est partagé par toutes les instances
de la classe.
• Il est possible d’y accéder sans disposer d’une instance,
mais directement par la classe.
⚫ Ex : une méthode statique
// OK
public class Calculatrice {
public static int valeurAbsolue(int i )
System.out.println(
{ Calculatrice.valeurAbsolue(-25) );
if(i < 0) return -1 * i;
// pas besoin de faire cela:
return i;
Calculatrice c = new Calculatrice();
}
} System.out.println(
c.valeurAbsolue(-25) );

ENSEM Java - JEE 89


Membres statiques: Exemple

public class Test { public static void main(String[] args) {


static int comptoir = 0; // initialiser Test t1 = Test();
//lors du chargement de la classe Test t2 = Test();
int id; Test t3 = Test();
public Test() { Test.imprimerComptoir(); // résultat?
id = comptoir; // utiliser le comptoir t1.imprimerId(); // résultat ?
//comme identifiant d'objet t2.imprimerId(); // résultat ?
comptoir ++; //incrémenter le t3.imprimerId(); // résultat ?
//comptoir à chaque instanciation }
}
public imprimerId() {
System.out.println(id);
}
⚫ Les méthodes statiques ne
public static imprimerComptoir() { peuvent accéder qu’aux
System.out.println(comptoir); attributs statiques.
}
}

ENSEM Java - JEE 90


Définition de constants
⚫ Un constant peut être défini comme un attribut d’une
classe, avec la déclaration <<static>> (partagée par
toutes les instances) et <<final>> (sa valeur est non
modifiable)
⚫ Par convention le nom d'un constant est tout en
majuscules.

public class MesConstants {


public static final int LOAD = 0;
public static final int SAVE = 0;
public static final int MOVE = 2;
}

ENSEM Java - JEE 91

Vous aimerez peut-être aussi