100% ont trouvé ce document utile (1 vote)
80 vues288 pages

Organisation du Module POO en Java

Transféré par

oumaima lamqari3
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
100% ont trouvé ce document utile (1 vote)
80 vues288 pages

Organisation du Module POO en Java

Transféré par

oumaima lamqari3
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

Université Cadi Ayyad

Ecole Supérieure de Technologie – Safi

Module
Cours 0 de
PrograMMation orientée objet

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

El Abdellaoui Saïd Programmation Orientée Objet : Java 2020 / 2021


SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019 / 2020
organisation du Module
P.o.o
ORGANISATION DU MODULE
3

Présentation du module :

Module
P.O.O

E1 : JAVA E2 : C++

50% 50%

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019


EST /- 2020
Safi
ORGANISATION DU MODULE
4

Présentation du module :
Module
P.O.O

E1 : JAVA E2 : C++

50% 50%
 Chaque élément de module se déroulera en 7 semaines.
S? S1

S7 S2

E1

S6 S3

S5 S4

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019


EST /- 2020
Safi
ORGANISATION DU MODULE
5

Présentation du module :
Module
P.O.O

E1 : JAVA E2 : C++

50% 50%

 Chaque élément de module se déroulera en 7 semaines.


 Pour chaque semaine, il y’aura:
 1 heures de cours;

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019


EST /- 2020
Safi
ORGANISATION DU MODULE
6

Présentation du module :
Module
P.O.O

E1 : JAVA E2 : C++

50% 50%

 Chaque élément de module se déroulera en 7 semaines.


 Pour chaque semaine, il y’aura:
 1 heures de cours;
 1 heures de TD

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019


EST /- 2020
Safi
ORGANISATION DU MODULE
7

Présentation du module :
Module
P.O.O

E1 : JAVA E2 : C++

50% 50%

 Chaque élément de module se déroulera en 7 semaines.


 Pour chaque semaine, il y’aura:
 1 heures de cours;
 1 heures de TD
 2 heures de TP
 1h pour l’application des exercices du TD
 1h pour résoudre l’exercice du TP ( Chaque TP est notée )

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019


EST /- 2020
Safi
ORGANISATION DU MODULE
8

Présentation du module :
Module
P.O.O

E1 : JAVA E2 : C++

50% 50%

 Chaque élément de module se déroulera en 7 semaines.


 Pour chaque semaine, il y’aura:
 1 heures de cours;
 1 heures de TD
 2 heures de TP
 1h pour l’application des exercices du TD
 1h pour résoudre l’exercice du TP ( Chaque TP est notée )

Note de chaque élément du module :


 1…* DS 30%
 TPs + Participation 30%
 1 EXAM 40%

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019


EST /- 2020
Safi
ORGANISATION DU MODULE POO
9

Consignes pour bien suivre le cours :

Prendre des notes Pratiquer régulièrement Passer le QCM de Faire les exercices demandés
chaque cours. ( TP, TD ou devoir )

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2019


EST /- 2020
Safi
Université Cadi Ayyad
Ecole Supérieure de Technologie – Safi

Cours 1 Cours de la programmation orientée objet (jaVa)

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

généralités

El Abdellaoui Saïd Programmation Orientée Objet : Java 2020 / 2021


SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi
PLANIFICATION
2

S? S1 Généralités
&
Le paradigme objet

P.O.O
Application S7 S2 &
compléte
Héritage

JAVA

Les bases de
Polymorphisme
données S6 S3 &
Collections

Programmation Interfaces
graphique S5 &
S4 Exceptions

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION
INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

INTRODUCTION
4

Modes de
programmation

Procédurale O.O

 Procédurale : Les notions de variables/types de données et de traitement de ces données étaient


séparées :
// Méthode !!
double Surface (double l, double h){
return (l × h)
}

main () {
// Déclarations !!
double Largeur = 7.0;
double Hauteur = 2.0 ;
// Affichage !!
print (" Surface du rectangle : "+
Surface (largeur, hauteur) );

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

INTRODUCTION
5

Modes de
programmation

Procédurale O.O

 Procédurale : Les notions de variables/types de données et de traitement de ces données étaient


séparées :
 Orienté Objet : Opèrent sur
O.O

Traitement Données

Influencent

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

INTRODUCTION
6

Modes de
programmation

Procédurale O.O

Public class Rectangle {


P public
ublic static void main ( String[] args ) {
// Déclarations !!
double Largeur = 7.0;
double Hauteur = 2.0 ; Rectangle
// Affichage !!
[Link]. println (" Surface du rectangle : "+ + Largeur : double
Surface (largeur, hauteur) ); + Hauteur : double
+ Surface () : double
}
// Méthode !!
double Surface (double l, double h){
return (l × h)
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

INTRODUCTION
7

 Java utilise les notions usuelles de la programmation orientée objet :

 Encapsulation

 Abstraction

 Héritage

 Polymorphisme

 Générésités

 …….

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


GÉNÉRALITÉS
INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

HISTORIQUE DE JAVA
9

Différentes langage de programmation

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

HISTORIQUE DE JAVA
10

C : 1975-2000
JAVA : 2001-2018
Python : 2019-2021

Evolution de différentes langage de programmation

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

HISTORIQUE DE JAVA
11

The Green Project


1991

Lancement
Langage portable =
1995

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

HISTORIQUE DE JAVA
12

OAK

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

HISTORIQUE DE JAVA
13

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

HISTORIQUE DE JAVA
14

2010

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

HISTORIQUE DE JAVA
15

 L’histoire de JAVA a commencée depuis 1991 et lancé 1995 par SUN Microsystems sous un projet nommé

(‘‘Green Project’’).

 Son premier nom était OAK.

 Langage de programmation inspiré du C++

 Libre depuis novembre 2006

 Racheté par Oracle en 2010

 Un langage accompagné d’un ensemble énorme de bibliothèques standard couvrant de très nombreux

domaines.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PRÉSENTATION DE JAVA
16

 Pas de pointeur
Simple  Pas d’héritage multiple
permettre d'accéder aux fichiers
à partir de n'importe quelle
machine sur Internet.
Distribué Robuste

 concept de Garbage Collector


 puissante allocation de mémoire
être modifiées sans avoir à
modifier le programme qui
les utilise

Dynamique Sur

systèmes sans virus

Multi-thread Portable
décomposée en unités d’exécution
fonctionnant simultanément s'exécuter dans différentes plateformes.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PRÉSENTATION DE JAVA
17

 Il est basé sur une architecture logicielle nécessitant une machine virtuelle java (JVM).

JAVAC JVM
[Link] (Compilateur) [Link] (machine virtuelle)
(Code source) (bytecode)
-
------ < =>,)‘& 1001000101
%$#!^]\[
------ < =>,)‘&
%$#!^]\[
------ < =>,)‘&

Architecture du langage JAVA

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PLATE-FORMES JAVA
18

 Java SE : “Standard Edition” :

 Java ME : “Micro Edition”. Edition qui sert à écrire des applications embarquées

 Ex. : téléphone portable, carte à puce

 Java EE : “Enterprise Edition”. Rajoute certaines API et fonctionnalités pour les entreprises.

 Java Fx: Créer des applications Internet riches à l'aide d'une API d'interface utilisateur légère. C'est
un ajout récent à la famille des plates-formes Java.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PLATEFORME JAVA - OUTILS -


19

?
?

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PLATEFORME JAVA
20

JRE

JVM
+ JDT
+
API

JDK

 JVM signifie Java Virtual Machine permet de traduire Byte Code en code de la machine hôte (host machine).

 JRE signifie Java Runtime Environment, il comprend JVM et un certain nombre de bibliothèques Java qui
aident à exécuter des programmes écrits en langage Java.

 API : est l'abréviation Application Programming Interface c'est une large collection de software composants
groupés en bibliothèques appelés packages.

 JDK est l'abréviation de Java Development Kit, il se compose de 2 composants JRE et JDT.

 JDT est l'abréviation de Java Development Tools fournissent des outils pour le développement
d'applications Java, tels que Javac aide à compiler le code source des programmeurs en Byte Code.
SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi
INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PLATE-FORMES JAVA
21

 Installation :
 Le JDK peut être téléchargé gratuitement à partir du site de Oracle ([Link])
 Exécuter [Link]. Le JDK sera installé dans le répertoire c:program files\java et
installe également jre1.8 dans le même dossier.

 Les programmes nécessaire au développement java sont placés dans le répertoire c:\jdk1.5\bin a savoir:
 [Link] Compilateur java.

 [Link]: Interpréteur du bytecode java.


 [Link] Pour tester les applets java.

 [Link] : Débogueur java.


 [Link] désassembleur du bytecode.

 [Link] : Générer la documentation de vos programmes java. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

JAVA : ENTRÉES / SORTIES


22

 L’aspect le plus utile de la classe System est les variables qu’elle déclare, qui permettent d’avoir une
interaction avec le système. On y trouve les variables in, out et err.

 La variable in représente le flux d’entrée standard du système, alors que la variable out représente le flux
de sortie standard. La variable err est le flux d’erreur standard. ( les flux vont être détailler prochainement )

 Pour afficher une chaine de caractère :

[Link]("Chaine de caractère") ;

 Pour afficher une erreur :

[Link]("Erreur à l’ouverture") ;

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


1ÉRE APPLICATION
SUR MACHINE
INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

NOTRE PREMIER PROGRAMME EN JAVA


24

public class Bonjour {

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

 Le main est le point d’entrée pour l’exécution d’une application Java.

 La classe contenant la méthode statique main doit obligatoirement être public pour que la machine
virtuelle y ait accès.

 Le profil de cette méthode est public static void main ( String [ ] args )

 public : pour qu’elle puisse être exécutée par la machine virtuelle java (JVM).

 static : pour que l’exécution puisse avoir lieu avant même la création d’une instance de la classe.

 args : tableau d’objets String (chaînes de caractères) contenant les arguments de la ligne de
commande

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

STRUCTURATIONS D’UN PROGRAMME


25

 Structure d’un programme en P.O.O

 Programme Java utilise un ensemble de classes

 Une classe regroupe un ensemble d’attributs et de méthodes

 Les classes sont regroupées par package


Package
Sous package
Classe n

Classe 2

Classe 1 Classe 1

Attributs

Attributs
Méthodes

Méthodes Interfaces

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PACKAGES
26

 Un Package est une collection nommé de classes, d’interfaces et de sous-packages. Il permet de les
regrouper sémantiquement.
 Exemples :
 AWT : Abstract Windows Toolkit
 Réseau : Sockets (serveurs, clients), Web …
 Entrées/Sorties : [Link]
 SQL
 Swing, SWT, … java

SQL util awt net lang

Connection Date event Button Socket String


PreparedStatement Scanner List. URL Thread
… … … … … …

 Exemple
 [Link] ;  [Link] ;
 [Link] ;  [Link];

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

PACKAGES (QUELQUES APIS DE BASE)


27

java

SQL util awt net lang

Connection Date event Button Socket String


PreparedStatement Scanner List. URL Thread
… … … … … …

[Link] dateDuJour = new


[Link]();
[Link](dateDuJour);
Ou
import [Link];
Date dateDuJour = new Date();
[Link](dateDuJour);
Ou
import [Link].* ;
Date dateDuJour = new Date();
[Link](dateDujour);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


INTRODUCTION GÉNÉRALITÉS 1ERE APPLICATION 2EME APPLICATION QCM

JAVA : ENTRÉES / SORTIES


28

 L’aspect le plus utile de la classe System est les variables qu’elle déclare, qui permettent d’avoir une
interaction avec le système. On y trouve les variables in, out et err.

 La variable in représente le flux d’entrée standard du système, alors que la variable out représente le flux de
sortie standard. La variable err est le flux d’erreur standard. ( les flux vont être détailler prochainement )

 Pour afficher une chaine de caractère :

[Link]("Chaine de caractère") ;

 Pour afficher une erreur :

[Link]("Erreur à l’ouverture") ;

 Pour lire une chaine de caractère :

 Importer la bibliothèque [Link];


nextInt
Scanner s = new Scanner([Link]);
nextLine
int i = s. nextInt();
nextDouble

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST-Safi


2ÉME APPLICATION
SUR MACHINE
Université Cadi Ayyad
Ecole Supérieure de Technologie – Safi

Cours 2 Cours de la programmation orientée objet (JAVA)

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

paradigme objet

El Abdellaoui Saïd Programmation Orientée Objet : Java 2020 / 2021


SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi
LE PARADIGME OBJET
CLASS & OBJET
INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

CONCEPTS DES LANGAGES OBJET ( CLASS & OBJET )


3

Description

Class Objet

Instance

❑ Classe est un type abstrait caractérisé par des propriétés (Attributs et méthodes).

 Syntaxe :
class nom_de_la_class {

// Corps de la classe }
 Exemple
class Rectangle {
// Attributs !!
double largeur = 11.0;
double hauteur = 7.0;
// Méthode !!
double surface () {
return (largeur × hauteur) }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

CONCEPTS DES LANGAGES OBJET ( CLASS & OBJET )


4

Description

Class Objet

Instance

❑ Objet d’une classe est appelé une instance.

 Syntaxe :

nom_de_la_class nom_Objet= new nom_de_la_class();

 Exemple :

Rectangle R1= new Rectangle();

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

CLASS & OBJET : AUTREMENT DIT


5

Description (Class, …) Instanciation (Objet : main)

R1

Class Rectangle
C1

H =3.0
L=2.7 R2
Class Cercle Rayon =0

….1 H =6.9
… L=7.3

…..

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

TYPE OBJET : AUTREMENT DIT


6

Types de données
en java

Types Objets
primitifs (instances de classe)

❑ Java manipule différemment les valeurs des types primitifs et les objets : les variables contiennent des
valeurs de types primitifs ou des références aux objets

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


EXERCICES
INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

CLASSES D’OBJETS (EXEMPLE)


8

❑ Exemple :

 Définir une classe Velo :

◼ Attributs : vitesse

◼ Méthodes : Accélérer, Freiner et ImprimeEtat

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


RÈGLES
RAPPELS CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBALE TD
D’ASSOCIATIONS

REPRÉSENTATION UML D’UNE CLASSE


9

❑ Une classe est représentée par un rectangle à 3 compartiments :

Rectangle Nom de la classe

+ Hauteur : float
Attributs
+ Langeur : float

+ Rectangle (float H,float L)


+ Surface() : float Méthodes
+ Afficher( ) : void
+ Périmètre ( ) : float

❑ Dans java, il existe 4 niveaux de protection:


▪ private (-) Un membre privé
▪ protected (#) un membre protégé
▪ public (+) accès à partir de toute entité interne ou externe à la classe
▪ Autorisation par défaut dans java, en l'absence des trois autorisations précédentes, l'autorisation par
défaut est package.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


RÈGLES
RAPPELS CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBALE TD
D’ASSOCIATIONS

REPRÉSENTATION UML D’UNE CLASSE


10

❑ Définir une classe Velo :

 Attributs : vitesse

 Méthodes : Accélérer, Freiner et ImprimeEtat

❑ La représentation de la classe Velo:

Velo

+vitesse : int

+ Accelerer(int incr) : void


+ Freiner(int decr) : void
+ ImprimeEtat( ) : void

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

DÉFINITION D’UNE CLASSE


11

[Link] [Link]
class Velo { public class DemoVelo {
// Attributs public static void main (String [ ] args) {
int vitesse = 0; // Génère 2 objets différents du type Velo
// Méthodes Velo V1 = new Velo();
void Accelerer(int increment) { Velo V2 = new Velo();
vitesse = vitesse + increment; } // Invoque les méthodes
[Link](10);
void Freiner(int decrement) { [Link]();
vitesse = vitesse – decrement; } [Link](20);
[Link](); }
Void ImprimeEtat() { }
[Link](" Vitesse = " + vitesse);
}  Affichage :
} ◼ vitesse: 10 V1

◼ vitesse: 20
vitesse
V2
 Chaque objet (V1 et V2) instance de la classe Velo = 010
possédera sa propre vitesse
vitesse
= 020

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


LE PARADIGME OBJET

CONSTRUCTEURS
INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

CONSTRUCTEUR DE CLASSE
13

 Un constructeur est une méthode :


◼ appelée automatiquement au moment de la création de l’objet.
◼ aide à initialiser les attributs de la classe.

 Règles des constructeurs en java :


◼ Les constructeurs en java portent le nom de la classe.
◼ Les constructeurs n’ont pas de type de retour.
◼ Une même classe peut avoir plusieurs constructeurs qui doivent se distinguer par leurs paramètres.
 Si aucun constructeur n’est défini par le programmeur, java considère que la classe est munie d’un
constructeur par défaut par défaut..
 Exemple :
class Rectangle { Rectangle R1 = new Rectangle ();
// Attributs !! \\ Constructeur par defaut par defaut
double largeur = 11.0;
double hauteur = 7.0; Rectangle R1 = new Rectangle (4.1, 7.3);
// Constructeur!! \\ Constructeur
public Rectangle (double l, double h) {
Largeur = l; R1
hauteur = h; }
}
Largeur =4.1
Hauteur= 7.3

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


LE PARADIGME OBJET
DECONSTRUCTEURS
INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

DESTRUCTEUR DE CLASSE
15

❑ Quand un objet n’est plus utilisé (aucune variable du programme ne contient une référence sur
cet objet), il est automatiquement détruit et la mémoire est récupérée (garbage collector)

❑ Un destructeur peut être utilisé pour libérer les ressources spécifiques (déconnexion d’une base
de données, fermeture d’un fichier, ...).

❑ Il est appelé lorsque le ‘garbage collector’ récupérera la mémoire.

❑ Syntaxe de la méthode destructeur est :


void finalize ()

❑ Exemple
class Rectangle {
// Attributs !!
double largeur = 11.0;
double hauteur = 7.0;
// Constructeur!!
public Rectangle (double l, double h) {
Largeur = l
hauteur = h }
// Deconstructeur !!
public void finalize() {
[Link](”finalisation de ” + this); }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


INTRODUCTION GÉNÉRALITÉS SYNTAXE DE BASE LE PARADIGME OBJET QCM EXERCICES

EXEMPLE
16

class Point { class PointDemo {


private double x; public static void main (String args[]) {
private double y;
Point p1 = new Point(1,1);
public Point(double x, double y) { Point p2 = new Point(2,2);
this.x = x; [Link]();
this.y = y; [Link]();
} [Link](10,10);
public void translater(double dx,double dy){ p1 = null;
x += dx; [Link](); //Appel de garbage collector
y += dy; [Link]();
} [Link]();
}
public void Afficher() { }
[Link] "Point[x:"+x+",y:"+y+"]";
} Point[x:1.0, y:1.0]
Point[x:2.0, y:2.0]
public void finalize() { finalisation de Point[x:11.0,
[Link]("finalisation de"+this); y:11.0]
} null
} Point[x:2.0, y:2.0]

▪ gc : forcer la récupération de place (Garbage collection)


SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi
RÈGLES
RAPPELS CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBALE TD
D’ASSOCIATIONS

ATTRIBUTS
17

❑ Les modificateurs d’accès aux attributs :

Modificateur Classe Paquetage Sous-classe Autre

private Oui Non Non Non


Attributs / Méthodes

aucun Oui Oui Non Non

protected Oui Oui Oui Non

public Oui Oui Oui Oui

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


RÈGLES
RAPPELS CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBALE TD
D’ASSOCIATIONS

ATTRIBUTS
18

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


EXEMPLE GLOBALE
EXEMPLE GLOBAL
CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAE STATIQUUE ET TOSTRING() TD

EXEMPLE D’UNE CLASSE


19

Classe Voiture
Classe Voiture Attributs
Type : String
Modèle : int
Matricule : String
Couleur : String
Vitesse Max : Float
Méthodes
Demarrer()
Accelerer()
Changer_couleur()
Recuperer_modele()

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

IMPLÉMENTATION DE CLASSE
20

Classe Voiture [Link]


Class voiture{
Attributs String Type;
Type : String int Modele;
Modèle : int String Matricule;
Matricule : String String Couleur;
Couleur : String float Vitesse_max;
Vitesse Max : Float …
/* Déclaration des méthodes */
Méthodes void Changer_couleur(String C){
Couleur=C;
Demarrer()
Accelerer() }
Changer_couleur() …
Recuperer_modele() }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

INSTANCE DE LA CLASSE
21

Classe Voiture
Attributs
Type : String
Modèle : int
Matricule : String
Couleur : String
Vitesse Max : Float
Méthodes
Demarrer()
Accelerer()
Changer_couleur()
Recuperer_modele()

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

CONSTRUCTEUR DE LA CLASSE
22

class voiture{
/* Attributs*/
String Type; int Modele; String Matricule;
String Couleur; float Vitesse_max;
/* Constructeurs*/
[Link]

voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr;
Couleur=Clr; Vitesse_max=Vmax;
}
voiture(String Tp, int Mdl, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Couleur=Clr; Vitesse_max=Vmax;
}

}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

INSTANCIATION D’UN OBJET


23

 Instanciation d’un objet avec des constructeurs :

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

Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);

Voiture y = new Voiture ("HondaCivic", 2008, "18-5562", "Grise" ,210);


}
}

Type :Peugeot 206 Type :HondaCivic


Modèle :2006 Modèle :2008
Matricule :22-1445 Matricule :18-5562
Couleur :Bleu Couleur :Grise
Vitesse Max :210 y
x Vitesse Max :180

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

INSTANCIATION D’UN OBJET


24

 Instanciation d’un objet avec des constructeurs :

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

Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);


Voiture y = new Voiture ("HondaCivic", 2008, "18-5562", "Gris" ,210);
Voiture z = new Voiture ("RenaultClio", 2012, "rouge" ,185);
}
}

Type : Renault Clio


Modèle : 2012
z Matricule: " "
Couleur : Rouge
Vitesse Max : 185

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

INSTANCIATION D’UN OBJET


25

 Instanciation d’un objet avec le constructeur par défaut par défaut :

class Test{
public static void main (String [] args){
Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
[Link]

Voiture y = new Voiture ("HondaCivic", 2008, "18-5562", "Gris" ,210);


Voiture z = new Voiture ("RenaultClio", 2012, "rouge" ,185);
Voiture w = new Voiture();
}
}

Erreur !!! Type :


Modèle :
Matricule:
Couleur :
Vitesse Max :

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

INSTANCIATION D’UN OBJET


26

 Instanciation d’un objet avec le constructeur par défaut par défaut :

public class voiture{


/* Attributs*/
String Type; int Modele; String Matricule;
String Couleur; float Vitesse_max;
/* Constructeurs*/
[Link]

voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr;
Couleur=Clr; Vitesse_max=Vmax;
}
voiture(String Tp, int Mdl, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Couleur=Clr; Vitesse_max=Vmax;
}
voiture(){ // ajouter un constructeur par défaut sans arguments }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

INSTANCIATION D’UN OBJET


27

 Instanciation d’un objet avec le constructeur par défaut par défaut :

class Test{
public static void main (String [] args){
Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
[Link]

Voiture y = new Voiture ("HondaCivic", 2008, "18-5562", "Gris" ,210);


Voiture z = new Voiture ("RenaultClio", 2012, "rouge" ,185);
Voiture w = new Voiture();
}
}

Type :
Modèle :
Matricule:
Couleur :
Vitesse Max :

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

VISIBILITÉ DES ATTRIBUTS


28

 Affichage d’un attribut sans modificateur :

public class voiture{


/* Attributs*/
String Type; int Modele; String Matricule;
String Couleur; float Vitesse_max;
/* Constructeurs*/
[Link]

voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr; Couleur=Clr; Vitesse_max=Vmax;
}
public static void main (String [] args){
/* Création d’une instance*/
voiture x = new voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
/* Affichage d’un attribut */
[Link]("Le type de x est"+ [Link]);
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

VISIBILITÉ DES ATTRIBUTS


29

 Affichage d’un attribut avec le modificateur public :

public class voiture{


/* Attributs*/
public String Type; public int Modele; public String Matricule;
public String Couleur; public float Vitesse_max;
/* Constructeurs*/
[Link]

voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr;
Couleur=Clr; Vitesse_max=Vmax; }
public static void main (String [] args){
/* Création d’une instance*/
voiture x = new voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
/* Affichage d’un attribut */
[Link]("Le type de x est"+ [Link]);
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

VISIBILITÉ DES ATTRIBUTS


30

 Affichage d’un attribut avec le modificateur public :

public class voiture{


/* Attributs*/
[Link]

public String Type; public int Modele; public String Matricule;


public String Couleur; public float Vitesse_max;
/* Constructeurs*/
voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr; Couleur=Clr; Vitesse_max=Vmax;
}

public class Teste{


public static void main (String [] args) {
/* Création d’une instance*/
[Link]

voiture x = new voiture ("Peugeot206",2006,"22-1445","Bleu" ,180);


/* Affichage d’un attribut */
[Link]("Le type de x est"+ [Link]);
}
}
SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi
CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

VISIBILITÉ DES ATTRIBUTS


31

 Affichage d’un attribut avec le modificateur private :

public class voiture{


/* Attributs*/
[Link]

private String Type; public int Modele; public String Matricule;


public String Couleur; public float Vitesse_max;
/* Constructeurs*/
voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr; Couleur=Clr; Vitesse_max=Vmax;
}

public class Teste{


public static void main (String [] args) {
/* Création d’une instance*/
[Link]

voiture x = new voiture ("Peugeot206",2006,"22-1445","Bleu" ,180);


/* Affichage d’un attribut */
[Link]("Le type de x est"+ [Link]);
}
}
SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi
CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

ACCESSEURS ET MODIFICATEURS
32

 Étant un attribut de type type1 :


private type1 Nom_Variable;
 Définir accesseur (Getter) pour cet attribut private

public type1 nom_accesseur() {


return Nom_Variable; }
SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi
CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

VISIBILITÉ DES ATTRIBUTS


33

public class voiture{


private String Type; private int Modele; private String Matricule;
[Link]

private String Couleur; private float Vitesse_max;


voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax) {
Type=Tp; Modele=Mdl; Matricule=Mtr; Couleur=Clr; Vitesse_max=Vmax;}

public String getType() { return Type;}


}

public class Teste{


public static void main (String [] args){
[Link]

/* Création d’une instance*/


Voiture x = new Voiture ("Peugeot206", 2006, "22-1445","Bleu" ,180);
/* Affichage d’un attribut */
[Link]("Le type de x est"+ [Link]() );
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

ACCESSEURS ET MODIFICATEURS
34

 Modification d’un attribut avec le modificateur public :

public class voiture{


public String Type; private int Modele; private String Matricule;
[Link]

private String Couleur; private float Vitesse_max;

voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr;
Couleur=Clr; Vitesse_max=Vmax;
}

public class Teste{


public static void main (String [] args){
[Link]

/* Création d’une instance*/


Voiture x = new Voiture ("Peugeot206",2006,"22-1445","Bleu" ,180);
/* Changer un attribut */
[Link]="Peugeot306" ;
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

ACCESSEURS ET MODIFICATEURS
35

 Modification d’un attribut avec le modificateur private :

public class voiture{


private String Type; private int Modele; private String Matricule;
[Link]

private String Couleur; private float Vitesse_max;

voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr;
Couleur=Clr; Vitesse_max=Vmax;
}

public class Teste{


public static void main (String [] args){
[Link]

/* Création d’une instance*/


Voiture x = new Voiture ("Peugeot206",2006,"22-1445","Bleu" ,180);
/* Changer un attribut */
[Link]="Peugeot306" ;
}
Erreur !!!

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

ACCESSEURS ET MODIFICATEURS
36

 Étant un attribut de type type1 :

private type1 Nom_Variable;

 Définir accesseur (Getter) pour cet attribut private

public type1 nom_accesseur() {


return Nom_Variable;
}

 Définir modificateur (Setter) pour cet modifier l’attribut private:

public void nom_modificateur(type1 arg1){


Nom_Variable=arg1;
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

ACCESSEURS ET MODIFICATEURS
37

 Modification d’un attribut avec le modificateur private :

public class voiture{


private String Type; private int Modele; private String Matricule;
[Link]

private String Couleur; private float Vitesse_max;


voiture(String Tp, int Mdl, String Mtr, String Clr, float Vmax){
Type=Tp; Modele=Mdl; Matricule=Mtr; Couleur=Clr; Vitesse_max=Vmax;
}
public void setType(String newType) { Type=newType; }

public class Teste{


public static void main (String [] args){
[Link]

/* Création d’une instance*/


Voiture x = new Voiture ("Peugeot206", 2006,"22-1445","Bleu" ,180);
/* Changer un attribut */
[Link]("Peugeot306");
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


AUTRES
CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

MÉTHODE TOSTRING()
39

 La représentation d’un objet sous forme de chaîne de caractères se fait avec la méthode toString().
 La méthode toString() est définie dans la classe Object ; en conséquence toutes les classes Java en hérite.
 La méthode toString() définie dans la classe Object, admet pour prototype :

public String toString();


Si vous affichez un objet, le compilateur java appelle en interne la méthode toString() sur l’objet. Donc, une
redéfinition de la méthode toString() est souhaitable.
Quand on redéfinit la méthode to String, on fait en sorte qu'elle renvoie une chaîne de caractères servant à
décrire l'objet concerné.

[Link](p1); //le compilateur appel [Link]()

 Si la méthode n’est pas redéfinie, elle renvoie le nom de la classe de l'objet concerné suivi de
l'adresse de cet objet.

Nom_Package.Nom_Class@15db9742
 Sinon, elle invoque la méthode redéfinie

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

MÉTHODE TOSTRING()
40

class Person {
private String name; address;
private int age;
Person(String name, String address, int age){
[Link] = name; [Link] = address; [Link] = age; }
//la méthode d’ffichage de l’objet
public void Affiche(){
[Link] (name+" "+address+" "+age ) ; }
}

public class Demo_Person {


public static void main(String args[]){
Person p1 = new Person("Alex", "Paris", 18);
Person p2 = new Person("Bob", "Lile", 25);
//le compilateur appel ici [Link]()
[Link]();
[Link](); } Alex Paris 18
Bob Lile 25
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

MÉTHODE TOSTRING()
41

class Person {
private String name; address;
private int age;
Person(String name, String address, int age){
[Link] = name; [Link] = address; [Link] = age; }
//surcharger la méthode toString()
public String toString(){
return name+" "+address+" "+age; }
}

public class Demo_Person {


public static void main(String args[]){
Person p1 = new Person("Alex", "Paris", 18);
Person p2 = new Person("Bob", "Lile", 25);
//le compilateur appel ici [Link]()
[Link](p1);
[Link](p2); } Alex Paris 18
Bob Lile 25
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

MOT STATIQUE
42

 Déclaration est précédée du modificateur static.


 Méthodes de classe : dont l’invocation peut être effectuée sans passer par l’envoi d’un
message à l’une des instances de la classe.
 Variables de classe : définies et existent indépendamment des instances
 Méthodes de classe
public class Personne { public class Demo_Personne {
String nom,prénom;
public static void main(String[] args) {
int âge; int i=0;
[Link]();
public Personne(String nom, String prénom, int âge){
Personne P1=new Personne("","",5);
[Link] = nom;
[Link]();
[Link]énom= prénom;
this. âge = âge; }
}
public Personne(){
[Link] = "hamidi";
[Link]énom= "Mohamed"; appel numéro
this. âge = 22;} appel numéro

static void affichage(){


[Link]("appel numéro "); }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

MOT STATIQUE
43

 Déclaration est précédée du modificateur static.


 Méthodes de classe : dont l’invocation peut être effectuée sans passer par l’envoi d’un
message à l’une des instances de la classe.
 Variables de classe : définies et existent indépendamment des instances
 Accès aux membres statiques :
 N’est pas conditionné par l’existence d’instances de la classe,
 Directement par leur nom dans le code de la classe où ils sont définis, en les préfixant du nom
de la classe en dehors du code de la classe
 [Link]
 [Link]éthode(liste de paramètres)

Exemple :
[Link]
[Link](x)
[Link](90) ...

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

ATTRIBUTS DE CLASSE
44

 Le modificateur static permet la création d’attributs de classe (aussi appelés attributs statiques et
variables de classe).
 La valeur d’un attribut de classe est partagé par touts les objets de la classe.
 Tout objet de la classe peut changer sa valeur.
 Les attributs de classe peuvent être manipulés sans la création d’un objet !
• ++[Link];
 Exemple : public class Demo_Velo {

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


...
public static int numVelos = 0; [Link]([Link]);
...
public Velo() { [Link] ++;
++numVelos; [Link]([Link]);
}
public Velo(int i) { Velo V1=new Velo(3);
numVelos+=i; [Link]([Link]);
}
0 [Link] ++;
} 1
4 [Link]([Link]);}
5 }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


CLASS & OBJET CONSTRUCTEUR DECONSTRUCTEUR EXEMPLE GLOBAL STATIQUUE ET TOSTRING() TD

ATTRIBUTS DE CLASSE
45

public class Personne {


String nom,prénom;
int âge;
static int nbPersonnes=0;
public Personne(String nom, String prénom, int âge){
[Link] = nom;
[Link]énom= prénom;
this. âge = âge;
nbPersonnes++; }

public Personne(){ nbPersonnes+=3; }


} public class Demo_Personne {
Public static void main(String args []){
[Link]([Link]);
 Aute exemple :
[Link] ++;
[Link]([Link]);

Personne P1=new Personne();


[Link]([Link]);

Personne P2=new Personne("","",5);


[Link]([Link]);

[Link] ++;
[Link]([Link]); }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


Université Cadi Ayyad
Ecole Supérieure de Technologie – Safi

Cours 3 Cours de la programmation orientée objet (jaVa)

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

Héritage

El Abdellaoui Saïd Programmation Orientée Objet : Java 2020 / 2021


SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi
REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Introduction
2

Class Guerrier
Class Voleur
- String nom
- Int energie - String nom
- Int duree_vie - Int energie
- Arme arme - Int duree_vie

- Rencontrer (Personnage) -Rencontrer (Personnage)


-a

-Voler (Personnage)
En commun

Class Magicien Class Sorcier


- String nom - String nom
- Int energie - Int energie
- Int duree_vie - Int duree_vie
- Baguette bag - Baguette bag
- Baton baton

-Rencontrer (Personnage) -Rencontrer (Personnage)

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Introduction
3

Class Personnage
- String nom
- Int energie
- Int duree_vie
+ Void rencontrer (personnage)

Class voleur Class Magicien Class Guerrier

+ Void voler (personnage) - Baguette baguette - Arme arme

Class Sorcier
- Baton baton

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Héritage
4

 L’héritage permet de créer des classes plus spécialisées, appelées sous-classes, à partir de classes plus
générales déjà existantes, appelées super-classes.

Classe mère

Spécialisation Généralisation

Sous classe

 Nouvelle classe est nommée sous-classe ou classe dérivée


 Classe originale est nommée super-classe ou classe de base ou classe mère.

 Syntaxe :

class Nom_SousClasse extends Nom_SuperClasse {}

 Il faut assurer un lien sémantique et un lien physique.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Héritage
5
 Lorsqu’une sous-classe C1 est créée à partir d’une super-classe C,
 Le type est hérité : un C1 est (aussi) un C
C
 C1 va hériter de l’ensemble :
 des attributs de C

 des méthodes de C (sauf les constructeurs)


C1
 Les attributs et méthodes de C vont être disponibles pour C1 sans que l’on
ait besoin de les redéfinir explicitement dans C1

 Exemple :
Class
Personnage

Class Guerrier

 Le type est hérité : un Guerrier est (aussi) un Personnage (lien sémantique).

 Guerrier va hériter de l’ensemble des attributs et des méthodes de Personnage (sauf cons).

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS
Héritage
6

 Voila la syntaxe de l’ensemble des classes :

class Personnage{
String nom
int energie, duree_vie;
public void rencontrer(Personnage p) {
[Link] ("Saluer !! "); } }

class Voleur extends Personnage{ class Magicien extends Personnage{


// ... Baguette baguette;
public void rencontrer(Personnage p) { public void rencontrer(Personnage p) {
// redéfinition // redéfinition
@Override } } @Override } }

class Guerrier extends Personnage{ class Sourcier extends Magicien {


Arme arme Baton baton;
public void rencontrer(Personnage p) {
public void rencontrer(Personnage p) {
// redéfinition
// redéfinition
@Override } }
@Override } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Héritage
7
 La visibilité en héritage

Classe mère
A

Attributs Attributs
Sous classe
+ double x; B
+ int a;
- int y;
+ float b;
# string z;

Méthodes Méthodes
… +int f(){ … }

 Attention !
 l’héritage doit être utilisé pour décrire une relation « est-un » ("is-a")

 Il ne doit jamais décrire une relation « a-un »/« possède-un » ("has-a" )

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Héritage
8
 La visibilité en héritage

Attributs
Classe mère
public double x; A B obj = new B();
private int y;
protected string z;
obj
Méthodes Sous classe
… B

Attributs public double x;


private int y;
int a; protected string z;
float b;
Accès int a;
possible float b;
Méthodes int f(){ … } Accès
impossible
int f(){ … }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Héritage
9
 La visibilité en héritage

Attributs
Classe mère B objB = new B();
public double x; A A objA = new A();
private int y;
protected string z;

Méthodes Sous classe


… B

 Une référence à une sous classe de base peut être affectée à


une référence à une classe mère.
Attributs objA = objB;

int a;  Opération inverse est non permise :


float b;
objB = objA;

Méthodes  Solution possible :

int f(){ … } objB = (B) objA;

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Modificateurs d’accès (Rappel)


10

A l’intérieur d’une classe, on peut accéder à tous les attributs et les méthodes directement par leur
nom (accès direct)
 L’accès aux attributs et aux méthodes à l’extérieur des classes java dépond des modificateurs
d’accès. Ces modificateurs définissent divers degrés d’accès aux membres des classes.
 Il existe 4 modificateurs d’accès :
 public : visibilité totale à l’intérieur et à l’extérieur de la classe (mot-clé public)
 privé : visibilité uniquement à l’intérieur de la classe (mot-clé private)
 par défaut (aucun modificateur) : visibilité depuis toutes les classes du même paquetage.
 Un troisième type d’accès régit l’accès aux attributs/méthodes au sein d’une hiérarchie de classes :
 protégé : assure la visibilité des membres d’une classe dans les classes de sa descendance (et
dans les autres classes du même paquetage). Le mot clé est «protected».

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE & MASQUAGE TD
& HÉRITAGE & HÉRITAGE & GETCLASS

Redéfinition & Masquage


11

Class Personnage
- String nom
- Int energie
- Int duree_vie

+Void rencontrer (personne)

Class voleur Class Magicien Class Guerrier

Void voler (personne&) - Baguette baguette - Arme arme

+Void rencontrer (personne)

Class Sorcier

- Baton baton

 Masquage : un identificateur qui en cache un autre -- > pour les variables (« shadowing »)
 Redéfinition : une méthode déjà définie dans une super-classe a une nouvelle définition dans une sous-classe
-- > pour les méthodes (« shadowing ») en utilise le mot @override

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE & MASQUAGE TD
& HÉRITAGE & HÉRITAGE & GETCLASS

Redéfinition & Masquage


12

Redéfinition : Une sous-classe peut redéfinir une méthode déjà définie dans la super-classe.

Class Personnage
class Personnage{
- String nom //...
- Int energie public void rencontrer ( Personnage perso ) {
- Int duree_vie [Link] (" Saluer !! "); }
+Void rencontrer (personne) }

class Guerrier extends Personnage{


Class Guerrier //...
public void rencontrer ( Personnage perso ) {
- Arme arme [Link] ("Frapper !! ");
+Void rencontrer (personne) }

class Demo_Personnages{
public static void main ( string [] args) {

Personnage P = new Personnage();


Guerrier G = new Guerrier();

[Link](G);
[Link](P);
}

 Qu’est ce que va se passer si jamais G est déclaré comme Personnage ?

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE & MASQUAGE TD
& HÉRITAGE & HÉRITAGE & GETCLASS

Redéfinition & Masquage


13

Masquage : Une sous-classe peut accéder et utiliser une méthode de la super-classe.

 Il est parfois souhaitable d’accéder à une méthode/un attribut masquée


 Exemple : Le Guerrier commence par rencontrer le personnage comme le fait n’importe quel
personnage ( le salué) avant de le frapper !
 Pour accéder aux attributs masqués et aux méthodes redéfinies de la super-classe : On utilise le mot réservé
super comme suit :
super. méthode ou attribut

 Exemple :

class Guerrier extends Personnage{


//...
public void rencontrer ( Personnage perso ) {
[Link] (perso) ; //salutation d'usage !!
[Link] ("Frapper !! ");
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Constructeurs & Héritage


14

 Lors de l’instanciation d’une sous-classe, il faut initialiser :


 Les attributs propres à la sous-classe
 Les attributs hérités des super-classes

 L’invocation du constructeur de la super-classe se fait au tout début du corps du constructeur au moyen du


mot réservé super .

SousClasse (liste de tout les paramètres) {


/* les parametres de la super-classe et dela
SousClasse */
super(Arguments);
// initialisation des attributs de SousClasse ici
}

 Lorsque la super-classe admet un constructeur par défaut, l’invocation explicite de ce constructeur dans la
sous-classe n’est pas obligatoire
 Le compilateur se charge de réaliser l’invocation du constructeur par défaut

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Constructeurs & Héritage


15

[Link]
Classe mère

Généralisation
Spécialisation

A Constructeurs

public A(){ … }
public A(type1 arg1){…}
Sous classe public A(type1 arg1,type2 arg2){…}

B

[Link]  Première instruction de constructeur de la sous


classe est appel du constructeur de la classe mère en
Constructeurs utilisant ‘super’,

public B(){ super(); …}


public B(){super(arg1); …}
public B(){super(arg1,arg2); …}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Constructeurs & Héritage


16

[Link]
Classe mère

Généralisation
Spécialisation

A Constructeurs

public A(){ … }
public A(type1 arg1){…}
Sous classe public A(type1 arg1,type2 arg2){…}

B

[Link]  Si on utilise pas ‘super’ pour appeler un


constructeurs de la classe mère, le compilateur
Constructeurs introduit un appel du constructeur par défaut.

public B(){
// super();

}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Constructeurs & Héritage


17

 Si la classe mére n’admet pas de constructeur par défaut, l’invocation explicite d’un de ses constructeurs est
obligatoire dans les constructeurs de la sous-classe
 La sous-classe doit admettre au moins un constructeur explicite.

class FigureGeometrique{
private Position position;
public FigureGeometrique (double x, double y)
{ position= new Position(x, y); }
}

Class Rectangle extends FigureGeometrique{


private double largeur;
private double hauteur;
public Rectangle (double x, double y, double l, double h) {
super(x,y);
largeur =l ; hauteur= h; } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Constructeurs & Héritage


18

 Autre exemple ( qui ne fait pas la même chose ) :

class FigureGeometrique{
private Position position;
public FigureGeometrique ()
{ position= new Position(0.0, 0.0); }
// ...
}

Class Rectangle extends FigureGeometrique{


private double largeur;
private double hauteur;
public Rectangle(double l, double h) {
largeur =l ;
hauteur= h;
} // ...
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Ordre d’appel des constructeurs


19

Hiérarchie de classes Constructeurs Instance (monc) ordre

A(……){
a1=… a1
a2=… a2 1
}

B(……){
a1 b1
super(……)
b1=… a2
2
}

C(……){
super(……) a1 b1 c1
c1=… 3
c2=… a2 c2
}

C monc= new C(…);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE TD
& MASQUAGE & HÉRITAGE & HÉRITAGE & GETCLASS

Conseils
20

 Chaque constructeur d’une sous-classe doit appeler super(...)


 Les arguments fournis à super doivent être ceux d’au moins un des constructeur de la super-classe.
 L’appel doit être la toute 1re Instruction
 Erreur si l’appel vient plus tard ou 2 fois
 Aucune autre méthode ne peut appeler super(...)
 Et si l’on oublie l’appel à super(...) ?
 Appel automatique à super()
 Pratique parfois, mais erreur si le constructeur par défaut n’existe pas
 Rappel : Le constructeur par défaut est particulier
 Il existe par défaut pour chaque classe qui n’a aucun autre constructeur
 Il disparaît dès qu’il y a un autre constructeur
 Pour éviter des problèmes avec les hiérarchies de classes, dans un premier temps
 Toujours déclarer au moins un constructeur
 Toujours faire l’appel à super(...)

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE & HÉRITAGE
TD
& MASQUAGE & HÉRITAGE & GETCLASS

Final & Héritage


21

 Pour éviter qu’une classe soit héritable, ou méthode non-redéfinissable, on utilise ‘final’

Classe mère
final class A

Sous classe
class B

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE & HÉRITAGE
TD
& MASQUAGE & HÉRITAGE & GETCLASS

Final & Héritage


22

 Une méthode finale ne peut être redéfinie dans les sous classes : Définir le comportement une fois pour toute de
tous les objets dérivant de la classe A.

Classe mère
final [type] fct(){ … }

Spécialisation Redéfinission Généralisation


impossible
Sous classe

 Un attribut déclarée ‘final’ ne peut être modifié par les sous classes : on fixe une fois pour toute la valeur d’attribut.

Classe mère
final [type] attribut=val;

Spécialisation Réinitialisation Généralisation


impossible

Sous classe
attribut = val;

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


AUTRES
REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE & GETCLASS
TD
& MASQUAGE & HÉRITAGE & HÉRITAGE

Mot clé : instanceof


24

Classe mère

Généralisation
Spécialisation
A

Sous classe
B

 Parfois, il est utile de connaître la classe d’instance de chaque objet instancié : ‘instanceof’

True
Objet instanceof
false
NomClasse
 Exemple : True
X = objB instanceof A
A objA = new A(); True
X = objB instanceof B
B objB = new B();
X= objA instanceof A True
boolean X;
X = objA instanceof B false

SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi


REDÉFINITION CONSTRUCTEURS FINAL INSTANCEOF
INTRODUCTION HÉRITAGE & GETCLASS
TD
& MASQUAGE & HÉRITAGE & HÉRITAGE

Mot clé : getClass


25

Classe mère

Généralisation
Spécialisation
A

Sous classe
B

 Récupérer directement la classe d’un objet : ‘getClass’

A objA = new A(); [Link]([Link]());


B objB = new B(); [Link]([Link]());

class
A
class
B
SAID EL ABDELLAOUI Programmation Orientée Objet : Java EST - Safi
TD 2
Université Cadi Ayyad
Ecole Supérieure de Technologie – Safi

Cours 4 Cours de la programmation orientée objet (jaVa)

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

polymorphisme & ColleCtions

El Abdellaoui Saïd Programmation Orientée Objet : Java 2020 / 2021


SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021
POLYMORPHISME
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

INTRODUCTION
3

Class Personnage
- String nom
- Int energie
- Int duree_vie

Void rencontrer (personnage)

Class voleur Class Magicien Class Guerrier


Void voler (personnage) - Baguette baguette - Arme arme

Class Sorcier
- Baton baton

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

INTRODUCTION
4

class Personnage{ class Guerrier extends Personnage{


// ... // ...
public void rencontrer(Personnage p) { public void rencontrer(Personnage p) {
[Link](" Saluer!"); } } [Link]("Frapper!"); } }

Class Personnage
class Rencontre { - String nom
public static void main(String [] args) { - Int energie
Personnage v =new Personnage(...); - Int duree_vie
Guerrier g =new Guerrier(...); Void rencontrer (personnage)
[Link](v);
}
} Class Guerrier
- Arme arme

 Quelle méthode rencontrer() va être exécutée ?


 C’est celle de guerrier car la méthode est appliqué sur l’objet de type guerrier

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

INTRODUCTION : SOUCI !!!!


5
 Autre écriture :
class Rencontre {
public static void main(String [] args) { !!!!
Personnage v =new Personnage(...);
Personnage g =new Guerrier(...);
Quelle méthode
rencontrer() va être
[Link](v); } } exécutée ?!!!
Personnage g = new Guerrier(...);

type apparent type effectif

 Le choix de type à considérer déponds de la résolution adoptée par le langage :


1. Résolution statique des liens : Le type apparent (type de déclaration) est déterminant (C++)
 unPersonnage est déclarée comme une variable de type Personnage
 Choix de la méthode de la classe Personnage (le personnage saluera le personnage)

2. Résolution dynamique des liens : Le type effectif (type de creation ) est déterminant (java)
 unPersonnage contient la référence à un objet de type Guerrier
 Choix de la méthode de la classe Guerrier (le personnage frappera le personnage)

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

SOLUTION
6

class Personnage{ class Guerrier extends Personnage{


// ... // ...
public void rencontrer(Personnage p) { public void rencontrer(Personnage p) {
[Link](" Saluer!"); } } [Link]("Frapper!"); } }

Class Personnage
class Rencontre { - String nom
public static void main(String [] args) { - Int energie
Personnage v =new Personnage(...); - Int duree_vie
Guerrier g =new Guerrier(...); Void rencontrer (personnage)
[Link](v);
}
} Class Guerrier
- Arme arme
Exécution : Frapper!

A JAVA met en œuvre le principe de « résolution dynamique des liens »


retenir

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

Autre exemple !!
7

Personnages :

.rencontrer(P) .rencontrer(P) .rencontrer(P) .rencontrer(P) .rencontrer(P) .rencontrer(P)

Exécution : Voler ! Frapper! sourciller! Voler! sourciller! ….!

public static void main (String [] args) {


Personnage P = new Personnage(...);
Personnage [] personnages = new Personnage[10];
personnages[0] = new Voleur(...);
personnages[1] = new Guerrier(...);
personnages[2] = new Sorcier(...);
//…
for (Personnage element : personnages)
{[Link] (P); }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

POLYMORPHISME (UNIVERSEL D’INCLUSION)


8

Résumé

 Les deux ingrédients :


 héritage du type dans une hiérarchie de classes,
 et résolution dynamique des liens
Permettent de mettre en œuvre ce que l’on appelle le polymorphisme.

 Le polymorphisme est peut être vu comme la capacité de choisir dynamiquement la méthode qui
correspond au type effectif (de création) de l’objet
 Le polymorphisme ! Un même code s’exécute de façon différente selon la donnée à laquelle il
s’applique.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS
MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

Introduction
10

Tableaux

Statique Dynamique

 Une fois la taille est fixé au cours  Sa taille peut croit ou décroît
d’initialisation on peut plus la pendant que le programme
modifier pendant le programme s’exécute.
s’exécute

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

INTRODUCTION
11

Tableaux Statiques

 Dans un tableau statique , une fois la taille est fixé au cours d’initialisation on ne peut plus la
modifier pendant l’exécution du programme
 Pour afficher les éléments d’un tableau, on fait appel à la boucle for :

for ( int element : monTableau ) {


[Link] ( element ) ;}
/ / OU BIEN :
for ( int i =0; i < monTableau .length ; ++ i ) {
[Link] ( monTableau [ i ]) ;}

 Exemple dans le cas d’héritage :

FigureGeometrique [] monTableau =new FigureGeometrique [10];


FigureGeometrique
//Affichage
for ( FigureGeometrique element : monTableau ) {
[Link] ( element ) ;}
Rectangle

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020


2020// 2021
2021
MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

COLLECTIONS
12

Tableaux Dynamique

 Un tableau dynamique est une collection de données homogènes dont le nombre peut varier au cours du
déroulement du programme. On peut par exemple retirer ou ajouter des éléments au tableau.
 Ensemble des classes gérant un stock d’objet Java :

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

COLLECTIONS
13

Interface List : collection d’éléments ordonnés et éventuellement dupliqués


Interface Set : collection restrictive, ses éléments sont non dupliqués (n’autorise pas 2 fois la même valeur) et non ordonnés.
Interface Map : collection particulière, ses éléments sont indexés ( clé-valeur)
Classe HashMap : Stocke des couples (clef, élément) dans une table d’index.
Classe ArrayList : Stocke les éléments dans un tableau.
Classe LinkedList : Stocke les éléments dans une liste chaînée.
Classe HashSet : Stocke les éléments dans une HashMap, chaque élément étant à la fois clef et index.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

COLLECTIONS : ARRAYLIST
14

Importation :
 Il faut importer au début du programme la bibliothèque adéquate par la ligne :
import [Link];

Déclaration :

 une variable correspondant à un tableau dynamique se déclare de la façon suivante ;

ArrayList <type > monTabDynamique ;

 Exemple :
ArrayList <String > Tableau;

Déclaration et initialisation :

 On peut remplacer type par n’importe quel autre type évolué comme String, Integer, Double ...

ArrayList <type> monTabDynamique = new ArrayList < type >() ;

Méthodes spécifiques :
 Résumé des méthodes applicables sous la forme :
[Link](args);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

COLLECTIONS : ARRAYLIST
15

Quelques Méthodes prédéfinies :

Nom de la méthode Action

size() donne la taille actuelle du tableau

get(i) Donne l’élément d’indice i

set(i,valeur) Affecte valeur à la case i du tableau

isEmpty() True si vide et faulse sinon

clear() Transforme en tableau vide

add(valeur) Ajoute valeur à la fin du tableau

remove(i) Supprime l’élément d’indice i

contains(valeur) True si le tableau contient un élément


Egal à valeur

[Link](args);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

COLLECTIONS : ARRAYLIST
16

import [Link];
 Exemples :
class ArrayListEemple1 {
public static void main (String[ ]args){

false ArrayList<Integer> monTab = new ArrayList<Integer> ();


true [Link](2000); [Link](2000);
//Comparaison
[Link]([Link](0)==[Link](1));
[Link]([Link](0).equals([Link](1)); } }

import [Link];
class ArrayListEemple2 {
public static void main (String[ ]args){
[un, deux] ArrayList<String> liste = new ArrayList<String>();
un deux deux [Link]( "un" ); [Link]( "deux" );
[ premier , deux]
[Link](liste); // [un, deux]
for ( String v :liste){ [Link] ( v+ " "); }
[Link] ([Link](1));
[Link](0, " premier " );
[Link](liste); } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

[Link]érateur
17

 Un itérateur est un objet qui a pour rôle de parcourir une collection.


 permettant une meilleure stabilité et une réutilisabilité accrue.
 Fait partie du package [Link]

LinkedList L = new LinkedList();


Voiture x = new Voiture("Peugeot206",2006, "22-1445", "Bleu",180);
[Link](x);
[Link](new Voiture("HondaCivic",2008, "18-5562", "Gris",210));
[Link] li=[Link]();
[Link]("Parcours en utilisant un iterator");
while([Link]())
[Link]([Link]());

SAID
Saïd EL
ELABDELLAOUI
ABDELLAOUI Programmation
OrientéeOrientée Objet : Java
Objet : Java 2020
2017
2020// 2021
2021
2018
COLLECTIONS SPÉCIALES
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

Type des collections


19

Tableaux

Statique Dynamique

Ordinaire Dans une classe à part

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

Type des collections


20

Tableaux

Statique Dynamique

Ordinaire Dans une classe à part


public static void main (String [] args){

Personnage []personnages=new Personnage[3];


personnages[0] = new Voleur(...);
personnages[1] = new Guerrier(...);
personnages[2] = new Sorcier(...);

for (Personnage element: personnages)


{[Link]();}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

Type des collections


21

Tableaux

Statique Dynamique

Ordinaire Dans une classe à part

public static void main (String [] args){

ArrayList <Personnage> personnages = new ArrayList < Personnage >()

[Link](new Voleur(...));
[Link](new Guerrier...)); [Link](new Sorcier(...));

for (Personnage element: personnages)


{[Link]();}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

Type des collections


22

Tableaux

Statique Dynamique

Ordinaire Dans une classe à part

class Personnages {
//attribut public class Demo_Personnage {
ArrayList <Personnage> personnages; public static void main (String [] args){
//Constructeur
Personnages (){ Personnages P = new Personnages();
personnages = new ArrayList < Personnage >();} [Link]( new Voleur(...));
//Méthodes [Link]( new Guerrier(...));
public void Ajouter(Personnage P){ [Link]( new Sorcier(...));
if (p!=null) [Link](p) } P. Afficher();
public void Afficher(){ }
for (Personnage element: personnages) }
{[Link](element);} }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


MÉTHODES ABSTRAITES
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

BESOIN DE MÉTHODES ABSTRAITES : EXEMPLE


24

 Exemple :
class FigureFermee {
//...
// difficile à définir à ce niveau !..
public double surface(...) {
???
}
// ...pourtant la méthode suivante en aurait besoin !
public double volume(double hauteur) {
return hauteur×surface(); }
}

 Définir surface de façon arbitraire sachant qu’on va la redéfinir plus tard n’est pas une bonne solution (source
d’erreurs) !

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

BESOIN DE MÉTHODES ABSTRAITES : EXEMPLE


25

 Première solution :
 Ajouter une méthode quelconque définie arbitrairement :

class Personnage{
// ...
// On n'affiche rien : corps de la méthode vide
public void afficher(){ }
// ...
}
☞ Mauvais modèle de la réalité

 Bonne solution : Signaler que la méthode doit exister dans chaque sous-classe sans qu’il soit
nécessaire de la définir dans la super-classe
☞ Déclarer la méthode comme abstraite

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

MÉTHODES ABSTRAITES : DÉFINITION ET SYNTAXE


26

 Syntaxe :
abstract Type nom_methode (liste d’arguments);

 Exemples :
abstract class FigureFermee{
public abstract double surface();
public abstract double perimetre();
// On peut utiliser une méthode abstraite :
public double volume (double hauteur) {
return hauteur×surface(); }
}

abstract class Personnage{


// ...
public abstract void afficher();
// … }

26
SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

CLASSES ABSTRAITES
27

 Une classe abstraite ne peut ê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.

class jeu {

 Exemple : private ArrayList<Personnage>persos;


public void afficher(){
for(Personnage unPerso : persos){ [Link]()} }
public void ajouterPersonage(…) {//…}
}

Une autre équipe crée la sous-classe Guerrier de Personnage et veut l’utiliser :

Jeu jeu= new Jeu();


[Link] (new Guerrier(...));

 S’ils ont oublié de définir la méthode afficher, le code ci-dessus génère une erreur de
compilation car on ne peut pas créer d’instance de Guerrier :
Guerrier is abstract; cannot be instantiated

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

MÉTHODES ABSTRAITES : AUTRES EXEMPLES


28

class Cercle extends FigureFermee { class Polygone extends FigureFermee {


private double rayon; private ArrayList <double> cotes;
} }
public double surface() { public double perimetre() {
return [Link]×rayon×rayon; double p=0.0;
} for (double cote : cotes) {
p+ =cote;
public double perimetre() { }
return 2.0×[Link]×rayon; return p;
} }

Cercle n’est pas une classe abstraite Polygone reste par contre une classe abstraite

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS CLASSE OBJECT TD
SPÉCIALES ABSTRAIRES

CONSTRUCTEURS ET POLYMORPHISME
29

 Un constructeur n’est pas prévu qu’il ait un comportement polymorphique.


 Il est cependant possible d’invoquer une méthode polymorphique dans le corps d’un constructeur.
☞ Ceci est cependant déconseillé: la méthode agit sur un objet qui n’est peut-être alors que partiellement initialisé !!

abstract class A
{
public abstract void m(); // méthode invocable de manière polymorphique
public A() { m(); }
}

class B extends A{
private int b;
public B() { b=1; }
public void m() { // A() est invoquée implicitement juste avant
[Link]("b vaut : "+b);
}
}

class Test{
public static void main(String []args ) {
B b= new B(); // définition de m pour la classe B
}
}:

affiche : b vaut 0

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


INTRODUCTION POLYMORPHISME MÉTHODES ABSTRAIRE CLASSE OBJECT INTERFACES QCM TD

POO : EXEMPLE D’ABSTRACTION


30

[Link]
Attributs
Abstract Poids : double
Couleur : String
Méthodes
Crier() : void

[Link] [Link] [Link]


Attributs Attributs Attributs
… … …
Méthodes Méthodes Méthodes
… … …

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


INTRODUCTION POLYMORPHISME MÉTHODES ABSTRAIRE CLASSE OBJECT INTERFACES QCM TD

POO : EXEMPLE D’ABSTRACTION


31

Abstract class animal


Attributs
Poids : double
Couleur : String
Méthodes Redéfinition de la fonction
Crier pour chaque
Crier() : void Sous-classe

[Link] [Link] [Link]


Attributs Attributs Attributs
Poids : double Poids : double Poids : double
Couleur : String Couleur : String Couleur : String

Méthodes Méthodes Méthodes


Crier() : void Crier() : void Crier() : void

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


CLASSES DE BASE
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Java : Class Object


33

 Il existe en Java une super-classe commune à toutes les classes : la classe Object qui constitue le sommet
de la hiérarchie.
 Permet à tout les objets d’utiliser les différentes méthodes de la classe mère.
 Fait partie du package ‘[Link]’

finalize() toString() hashCode()

clone() getClass()

notify() equals(Object O) wait()

 Possibilité de redéfinir les méthodes héritées :


 Il est donc possible d’affecter une instance de n’importe quelle classe à une variable de type Object :

Object v=new UneClasse(...); // OK

SAID
Saïd EL
ELABDELLAOUI
ABDELLAOUI Programmation
OrientéeOrientée Objet : Java
Objet : Java 2020
2017
2020// 2021
2021
2018
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode toString()
34

class Voiture{
[Link]

/* Définitions d’attributs et des méthodes de la classe Voiture


public String toString(){
return "Voiture de type " + [Link]() + " de " + [Link](); }
}

Voiture de type Peugeot206 de 2006

class Test{
Public static void main(String[] args){
Voiture V1 = new Voiture("Peugeot206",2006, "22-1445", "Bleu",180);
[Link]

[Link](V1); // [Link]([Link]());
}
}

Voiture de type Peugeot206 de 2006

SAID
Saïd EL
ELABDELLAOUI
ABDELLAOUI Programmation
OrientéeOrientée Objet : Java
Objet : Java 2020
2017
2020// 2021
2021
2018
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode equals ()
35

 equals() est une méthode utilisée pour comparer deux objets pour l'égalité. L'implémentation par défaut
de la méthode equals() dans la classe Object renvoie true si et seulement si les deux références
pointent vers la même instance. Il se comporte donc comme la comparaison par == .

 L’entête proposée pour la méthode equals est comme suit :

public boolean equals(Object arg)

 On redéfinit (« override ») une méthode d’instance si les paramètres et leurs types sont identiques et les
types de retour compatibles :

public boolean equals(Object arg)

 Si c’est le même nom de méthode seulement, on surcharge (« overload ») :

public boolean equals(UneClasse arg)

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode equals ()
36

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

Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);


Voiture y = new Voiture ("HondaCivic", 2008, "18-5562", "Gris" ,210);
boolean b = [Link](y);
[Link](b);
}
false
}

Voiture x Voiture y
--------- ---------
Type : Peugeot206 Type : HondaCivic
Modele : 2006 Modele : 2008
--------- ---------

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020


2020// 2021
2021
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode equals ()
37

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

Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);


Voiture y = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
boolean b = [Link](y);
[Link](b);
}
false
}

Voiture x Voiture y
--------- ---------
Type : Peugeot206 Type : HondaCivic
Modele : 2006 Modele : 2008
--------- ---------

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020


2020// 2021
2021
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode equals ()
38

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

Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);


Voiture y = x;
boolean b = [Link](y);
[Link](b);
True
}
}

x y

Type : Peugeot206
Modele : 2006
---------

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020


2020// 2021
2021
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode equals ()
39

 Même si x et y sont créés avec les mêmes champs, ils pointent vers deux objets différents en mémoire. Par
conséquent, l'implémentation equals() par défaut equals() évaluée à false .
 Pour comparer le contenu d'un objet à l'égalité, equals() doit être redéfinie.
[Link]

///
@Override
public boolean equals(Voiture obj1) {
return ([Link] == [Link] && [Link] == [Link] && [Link] == [Link]
&& [Link] == [Link] && this.Vitesse_max == obj.Vitesse_max); }

///
[Link]

Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);


Voiture y = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
[Link]([Link](y) ); }

Exécution : True

Attention Mais c’est pas une redéfinition ; paramètre

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020


2020// 2021
2021
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode equals ()
40

 Même si x et y sont créés avec les mêmes champs, ils pointent vers deux objets différents en mémoire. Par
conséquent, l'implémentation equals() par défaut equals() évaluée à false .
 Pour comparer le contenu d'un objet à l'égalité, equals() doit être redéfinie.

///
@Override
[Link]

public boolean equals(Object obj1) {


if (obj1 == null || getClass() != [Link]()) { return false; }
else {
Voiture obj = (Voiture)obj1;
return ([Link] == [Link] && [Link] == [Link] && [Link] == [Link]
&& [Link] == [Link] && this.Vitesse_max == obj.Vitesse_max); }

///
[Link]

Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);


Voiture y = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
[Link](boolean b = [Link](y); ); }

Exécution : True

Attention Maintenant c’est une redéfinition

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020


2020// 2021
2021
COLLECTIONS MÉTHODES
INTRODUCTION POLYMORPHISME COLLECTIONS
SPÉCIALES ABSTRAIRES
CLASSE OBJECT TD

Méthode hashcode()
41

class Test{
Public static void main(String[] args){
Voiture x = new Voiture ("Peugeot206", 2006, "22-1445", "Bleu" ,180);
[Link]

Voiture y = x;
boolean b = [Link](y);
[Link](b);
[Link]([Link]());
[Link]([Link]()); }
}

true
19770577
19770577

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020


2020// 2021
2021
TD 3
Université Cadi Ayyad
Ecole Supérieure de Technologie – Safi

Cours 5 Cours de la programmation orientée objet (jaVa)

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

interfaCe & exCeption

El Abdellaoui Saïd Programmation Orientée Objet : Java 2020 / 2021


INTERFACES
ENCORE UN JEU
3

 Supposons que l’on souhaite programmer un jeu mettant en scène les entités suivantes :

1. Balle 2. Raquette 3. Filet 4. Joueur

 Chaque entité sera principalement dotée d’une méthode evolue() : gérant l’évolution de l’entité dans le jeu.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


PREMIÈRE ÉBAUCHE DE CONCEPTION
4

class Entite

+ void evolue( )

class Balle class Raquette class Filet class joueur

 Si 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 ) : on veut par exemple pouvoir
les contrôler avec la souris …. et d’autres non : (Joueur, Filet)

Comment organiser tout cela ?!!

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


JEU VIDÉO IMPOSSIBLE
5

 Idéalement, il nous faudrait mettre en place une hiérarchie de classes telle que celle-ci :

class Entite Class Interactif


+ Void evolue(…) + Void gestionClic (…)

class Balle class Raquette class Filet class joueur

Class Graphique
+ Void dessiner(…)
 Mais ….Java ne permet que l’héritage simple : chaque sous-classe ne peut avoir qu’une seule classe parente
directe !
 Imposer un contenu commun à des sous-classes en dehors d’une relation d’héritage est le rôle joué par la
notion d’interface en Java.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


ALTERNATIVE POSSIBLE DE JEU VIDÉO
6

Class Entite interface Interactif


+void evolue(…) +Void gestionClic (…)

class Balle class Raquette class Filet class joueur

interface Graphique
+Void dessiner(…)
 Interface ≠ Classe
 Objectifs d’utilisation des interfaces :
 Une interface permet de remédier le problème de limitation de l’héritage multiple
 Une interface permet d’imposer à certaines classes d’avoir un contenu particulier et
unifier sans que ce contenu ne fasse partie d’une classe.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


INTERFACES
7

 Syntaxe :
interface UneInterface {
//constantes ou méthodes abstraites
}

 Exemple :

interface Graphique{ interface Interactif{


void dessiner(); void gestionClic();
} }

 Une interface est une « classe» purement abstraite dont toutes les méthodes sont abstraites et
publiques ( les mots-clés abstract et public sont optionnels sans la déclaration des méthodes).
 Il ne peut y avoir de constructeur dans une interface.  Impossible de faire new.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


INTERFACES
8

 Attribution d’une interface à une classe :

Class Une Classe implements Interface { ... }

 Exemple : class Rectangle extends FigureFermé implements


Figure{
public interface Figure { @Override
public void dessiner(); void dessiner(){
public void deplacer(int x, int y); // Dessiner un Rectangle }
public Position getPosition(); @Override
} void deplacer(int x, int y){
//Deplacer un Rectangle }
@Override
Position getPosition() {
//Retourner une postion du Rectangle }
}

Lorsqu'une classe C implémente une interface I elle doit redéfinir toutes les méthodes de I, sinon elle
doit être abstraite et il faut dans ce cas la définir abstraite.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


INTERFACES
9

 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 l’interface)

 Exemple :

Graphique graphique; class Entite interface Graphique


Balle balle = new Balle(..); +void evolue(…) +void dessiner(…)
graphique = balle;

// Autre exemple !
Graphique graphique;
Entite entite = new Balle(..); class Balle
// transtypage indispensable !
graphique = (Graphique) entite;

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


PLUSIEURS INTERFACES
10

 Une classe peut implémenter plusieurs interfaces (mais étendre une seule classe)
 Séparer les interfaces par des virgules

 Exemple :

class Balle extends Entite implements Graphique, Interactif {


//code de la classe
}

 On peut déclarer une hiérarchie d’interfaces :


 Mot-clé extends
 La classe qui implémente une interface reçoit aussi le type des super-interfaces

interface Interactif{ //...}


interface GerableParSouris extends Interactif{ //... }
interface GerableParClavier extends Interactaif{ //... }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


INTERFACE-RÉSUMÉ
11

 Une interface fournit un ensemble de services.


 Composée d’un ensemble de méthodes abstraites et de constantes "static" et "final" .
 Une classe peut implémenter une ou plusieurs interfaces.
 Une interface est un moyen d’attribuer des composants communs à des classes non-liées par une
relation d’héritage :
 Ses composants seront disponibles dans chaque classe qui l’implémente.
 Composants possibles :
1. Variables statiques finales (assez rare)  Ambiguïté possible, nom unique exigé
2. Méthodes abstraites (courant)
 Chaque classe qui implémente l’interface sera obligée d’implémenter chaque méthode
abstraite déclarée dans l’interface si elle veut pouvoir être instanciée
 Une façon de garantir que certaines classes ont certaines méthodes, sans passer par des
classes abstraites
 Aucune ambiguïté car sans instructions

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


INTERFACE-RÉSUMÉ
12

 Nous avons vu que l’héritage permet de mettre en place une relation de type « est-un » entre
deux classes.
 Lorsqu’une classe a pour attribut un objet d’une autre classe, il s’établit entre les deux classes
une relation de type « a-un » moins forte que l’héritage (on parle de délégation).
 Une interface permet d’assurer qu’une classe se conforme à un certain protocole.
 Elle met en place une relation de type « se-comporte-comme » : une Balle « est-une » entité
du jeu, elle « se-comporte-comme » un objet graphique et comme un objet interactif.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


GESTION DES ERREURS
INTRODUCTION
14

 Une exception est une erreur qui se produit dans un programme et qui conduit à son arrêt.

 Exemple 2 :

double Division (double x, double y) {


if ( x != 0.0 ) { return y / x ; }
else {
[Link]("Erreur : division par 0");
return ??? }
}  Exemple 1 :

int i=1, j=0;


[Link]("Le resultat de division est"+(i/j));
Qu’est ce qu’il va retourner en cas
Problème d’erreur ?… [Link]("Suite du programme … !"); Code
ignoré
….

Dés que l’exception est levé, le


programme s’arrête,
Problème et l’exécution ne continuera pas
jusqu’au bout !!!

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


GESTION DES ERREURS
15

 Les exceptions permettent d’anticiper les erreurs qui pourront potentiellement se produire lors de
l’utilisation d’une portion de code.

 But : améliorer la robustesse des programmes en :


 Séparant le code de traitement des erreurs du code " effectif "
 Fournissant le moyen de forcer une réponse à des erreurs particulières.
 Exemple : On veut écrire une fonction qui calcule la division de deux nombres réels quand c’est
possible :
Division

Entrée : x, y
Sortie : y/x
Si x=0
Erreur
Sinon
retourner y/x

 Mais que faire concrètement en cas d’erreur.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


NOUVELLE ECRITURE
16

 Nous allons capturer l’erreur avec un bloc try {…}catch{…}, puis réaliser un traitement en conséquence

public static void main (String[] args) {


int j = 20, i = 0; // initialiser deux variables de type int
try {
[Link](j/i); //isoler le code susceptible de lever une exception.
} catch (ArithmeticException e) {
// le code lève une exception, e est un objet.
[Link]( "Division par zéro! "); //exécuter en cas d’erreur
}
[Link](" Salam à tous !");
}

 Déroulement du programme
1) Nous isolons le code susceptible de lever une exception :
[Link](j/i);
1) Une exception de type ArithmeticException est levée lorsque le programme atteint cette ligne.
2) Le bloc catch contient un objet de type ArithmeticException en paramètre. Nous l’avons appelé "e".
3) L’exception étant capturée, l’instruction du bloc catch s’exécute !
4) Le message d’erreur personnalisé s’affiche alors à l’écran.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


SYNTAXE DE LA GESTION DES EXCEPTIONS
17

 On cherche à remplir 4 taches élémentaires :


1. Indique les endroits réceptifs aux erreurs (Marquer )
2. Leur associer (à chaque endroit réceptif) un moye de gérer les erreurs qui se présentent
3. Indique une erreur (Signaler )
4. éventuellement, faire le ménage après un bloc réceptif aux erreurs

 On a donc 4 mots clé du langage java dédiés à la gestion des exceptions :

try : Indique un bloc réceptif aux erreurs

catch : Gère les erreurs associées (i.e. les ‘attrape’ pour les traiter)

throw : Indique l’erreur ‘lancer l’exception’

finally : (optionnel) indique ce qu’il faut faire après un bloc réceptif

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


TRY ET CATCH
18

TRY :
 try introduit un bloc réceptif aux exceptions lancées par des instructions, ou des méthodes appelées
à l’intérieur de ce bloc (ou même des méthodes appelées par des méthodes appelées par des méthodes
… à l’intérieur de ce bloc)
 Exemple : try { Y=f(x); // f pouvant lancer une exception }

CATCH :
 catch est le mot-clé introduisant un bloc dédié à la gestion d’une ou plusieurs exceptions.
 Tout bloc try doit toujours être suivi d’au moins un bloc catch gérant les exceptions pouvant être lancées
dans ce bloc try.
 Si une exception est lancée mais n’est pas interceptée par le catch correspondant, le programme s’arrête
(message ‘Exception in thread….’) et affichage de la trace d’exécution.
 Syntaxe :
catch (type nom) {…..}

Intercepte toutes les exceptions de type type lancées depuis le bloc try précédant type peut-être une classe
prédéfini de la hiérarchie d’exceptions de java ou une classe d’exception créée par le programmeur.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


THROW
19

THROW :
 throw est l’instruction qui signale l’erreur au reste du programme. Fréquemment utiliser pour les
teste de condition

 Exemple 1 :
Objet : exception

throw new Exception (" Quelle erreur ") ;

L’objet est de type Exception, il est ‘lancé’ au reste du programme pour être ‘attrapé ‘

 Exemple 2 :

if (…) {
throw new Exception (" Quelle erreur !! ");
}
//….

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


THROWS
20

 Une méthode lançant une exception sans la traiter localement doit généralement informer qu’elle le fait.
 Ceci se fait en ajoutant une clause throws à l’entête de la méthode
 Syntaxe :

Type methode (…) throws Exception1, Exception2,….

 Exemple :

double Inverse (int x) throws Exception


{
if (x==0){
throw new Exception ("Une division par zéro" );
}
return 1/x;
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


EXEMPLE ÉVOLUÉ (AVEC DES GRAPHIQUES)
21

 Nous allons capturer l’erreur avec un bloc try {…}catch{…}, puis réaliser un traitement en conséquence

import [Link].*;
public class teste {
public static void main (String[] args) {
int j = 20, i = ?; // initialiser deux variables de type int

JOptionPane jop1= new JOptionPane();


try {
int s= j/i; //String s= [Link](j/i);
[Link](null,"La Division est= "+j/i,"Info. :",JOptionPane.INFORMATION_MESSAGE);
} catch (ArithmeticException e) {
// le code lève une exception, e est un objet.
// exécuter en cas d’erreur

[Link](null ,"Division par zéro","Info. :",JOptionPane.ERROR_MESSAGE);


}
[Link]("Salam à tous !"); }
}

i = 0 i = 1

Salam à tous ! Salam à tous !

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


HIÉRARCHIE PARTIELLE DE THROWABLE
22

 exception est une classe de [Link] qui possède de nombreuses sous-classes et qui hérite de Throwable.

Throwable

….. Error Exception

VirtualMachineErroe RuntimeException IOException …..

OutOfMemoryError IndexOutOfBoundException IllegalArgumentException …..

ArrayIndexOutOfBoundException NumberFormatException

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


LES SOUS CLASSES DE THROWABLE
23

Chaque sous-classe de Throwable décrit une erreur précise


 La classe Error :
 Erreur fatale.
 Pas censée être traitée par le programmeur
 La classe Exception : 74 sous-classes directes (hormis les RuntimeException)
 Circonstance exceptionnelle
 Souvent une erreur (mais pas toujours)
 Doit être traitée par le programmeur («checked exceptions »)
 La classe RuntimeException : 49 sous-classes directes
 Exception dont le traitement n’est pas vérifié par le compilateur
 Peut être traitée par le programmeur (« unchecked exceptions»)

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


LA CLASSE [Link]
24

public class Throwable extends Object

 Deux constructeurs :
 Erreur avec ou sans message

public Throwable()
public throwable(String message)

 Deux méthodes (parmi d’autres):


 Accès au message d’erreur

public String getMessage ()

Affichage du chemin vers l’erreur

public void printStackTrace()

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


NOUVELLE ECRITURE
25

 Utilisation des méthodes de Throwable :


 getMessage ()

public static void main (String[] args) {


int j = 20, i = 0; // initialiser deux variables de type int
try {
[Link](j/i);//isoler le code susceptible de lever une exception.
} catch (ArithmeticException e) {
// le code lève une exception, e est un objet.
[Link]([Link]()); // il affiche: / by zero
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


NOUVELLE ECRITURE
26

 Utilisation des méthodes de Throwable :


 printStackTrace ()

public static void main (String[] args) {


int j = 20, i = 0; // initialiser deux variables de type int
try {
[Link](j/i);//isoler le code susceptible de lever une exception.
} catch (ArithmeticException e) {
// le code lève une exception, e est un objet.
[Link](); /* [Link]: / by zero
at [Link] ([Link] : 5)*/
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


UTILISATION DE PLUSIEURS CATCH
27

try {
if (age >= 150)
{ throw new Exception ("age trop grand"); }
if (x == 0.0)
{ throw new ArithmeticException ("Division par zero"); }
}
// Il faut commencer de l’exception la plus précise à la plus générale
catch (ArithmeticException e){
[Link]([Link]());
[Link](); }

catch (Exception e){


[Link] ("Qui peut vivre si vieux"); }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


TRY / THROW / CATCH DANS LA MÊME MÉTHODE
28

int XFUNCTION (int max) throws Exception {


int nb = 1;
do{
[Link](" Donnez un entier : ");
try { // scanner ici
int i =[Link]();
return i;
} catch(InputMismatchException e) {
[Link](" Il faut un nombre entier. Recommencez !!");
//[Link]();
++nb; }
} while (nb <= max) ;
throw new Exception (" Saisie échouée");
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


FLOT D’EXÉCUTION
29

 Un bloc catch n’est exécuté que si une exception e type correspondant a été lancée depuis le
bloc try correspondant.
Sinon le bloc catch est simplement ignoré.

 En l’absence du bloc finally, si un bloc catch est exécuté, le déroulement continue ensuite
normalement après ce bloc catch ( ou après le dernier des blocs catch du même bloc try,
lorsqu’il y en plusieurs).

 En aucun cas l’exécution se reprend après le throw!

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


FINALLY
30

 Un bloc finally est optionnel, il suit les blocs catch


 Il est utilisé lorsque vous voulez exécuter un bloc d’ instruction indépendamment du résultat de
try/catch.
 But : faire le ménage (fermer des fichiers, des connexions ect…)

class Inverse {
public static void main (String [] args){
try { int b = [Link](args[0]);
int c=100/b;
[Link]("Inverse *100 =" +c); }
4.1
catch(NumberFormatException e1) {
[Link](" Il faut un nombre entier !!");}
0
catch(ArithmeticException e2) {
[Link](" Parti vers l infini !!"); } 4

finally { [Link](" Passage obligé !!"); } .


} }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


FINALLY
31

 Exemple d’exécution :

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


EXCEPTION PERSONNALISÉES
32

 Il est possible de programmer ses propres classes d’exception


 Sous-classe de Exception ( ou d’une autre sous-classe d’exception existante )
 Contenu minimal

class MonException extends Exception {


public MonException() {
super (" mon message par défaut" );
}
public MonException( String message) {
super (message);
}
}

 Permet de préserver le comportement attendu de getMessage()

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2020 / 2021


EXPLICATION PRATIQUE
Université Cadi Ayyad
Ecole Supérieure de Technologie – Safi

Cours 5 Cours de la programmation orientée objet (jaVa)

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

interfaCes graphiques

El Abdellaoui Saïd Programmation Orientée Objet : Java 2020 / 2021


SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2019
GÉNÉRALITÉS
3

 Partie I : Construire fenêtre graphique : Objets graphiques, Affichage….

 Partie II : Programmation par événement : Comment faire pour que le programme réagisse?

 Partie III : Connexion avec la base de donnée

BD

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
ARTIE NTERFACES GRAPHIQUES
GÉNÉRALITÉS
5

 Java propose des boîtes à outils graphiques :


 AWT ( Abstract Window ToolKit) : qui contient des composants qui font appel aux composants
graphiques de l’OS.
 SWING : qui contient des composants écrit complètement avec java et son indépendant de l’OS.
 JAVAFx : est un Framework Java permettant de construire des RIA (Rich Internet Application)
et des interfaces graphiques

OS AWT : Composants légers


JVM SWING : Composants lourds
Application

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
HIÉRARCHIE GRAPHIQUE
6

Définir des fenêtres :


JFrame, Jwindow, JApplet, JDialog

3 niveaux
Composer la fenêtre :
JPanel, JScrollPane, JSplitPane, …

Eléments de base :
JButton, JCheckBox, JTextField, JTextArea, …

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
Niveau I :
NOTRE 1ERE INTERFACE
8

import [Link].*;
public class HelloWorld {
public static void main (String[] args) {
JFrame f = new JFrame("Hello World");
// [Link]("Hello World");
//Composants ajoutés au frame courant.
[Link](300,200); Définir la taille
[Link](JFrame.EXIT_ON_CLOSE);
300px
[Link](true);
} }

200px

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
D’AUTRE MANIER PLUS PRATIQUE - HÉRIAGE DU CLASS JFRAME -
9

import [Link].*;
public class HelloWorld extends JFrame{
helloWord(){
setTitle ("Hello World"); // ou [Link] ("Hello World");
setSize(300,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

public static void main (String[] args) {


new helloWord(); } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
MÉTHODES SWING
10

o setLocation (int,int) : Modifier la position de la fenêtre.


o setAlwaysOnTop (boolean) : Toujours au premier plan.
o setResizable (boolean) : Permettre ou interdire le redimensionnement de la fenêtre.
o setTitle (String) : Modifier le titre.
o setVisible (boolean) : La visibilité de la fenêtre.
o setDefaultCloseOperation (f.HIDE_ON_CLOSE) : cacher la fenêtre
 (f.DISPOSE_ON_CLOSE); détruire l’objet fenêtre
 (f.DO_NOTHING_ON_CLOSE); ne rien faire
 (f.EXIT_ON_CLOSE); terminer l’application
o setSize() : Dimensions de la fenêtre.
o setBackground([Link]) : Modifier la couleur d’arrière-plan.
o setBounds (x, y, larg, long) la position et la taille de la composante.
o setIconImage([Link]().getImage(icô[Link])) icône de l’application.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
LES COMPOSANTS DU PAQUETAGE [Link]
11

[Link]
 JFrame hérite de Frame
Component
 JButton , JLabel, JMenu
Container [Link] JTextField, etc. héritent

Top-level containers
tous de la classe de base
Window JWindow
JComponent qui fait parti
Frame JFrame
de swing.
Dialog JDialog  JComponent hérite
indirectement de
JComponent

Composants & autres containers


Component qui est un
Dialog élément de AWT.
AbstractButton

JBotton

JMenuItem

JFileChooser

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
Niveau II :
JPANAL
13

 Un JPanel est un composant de type conteneur.


 Il accueille d’autres objets de même type ou des objets de type composant (boutons, cases cocher , etc)

import [Link].*;
import [Link].*;
public class Exemple extends JFrame {
public Exemple(){
setTitle("Mon cadre");
setSize(400,100);
JPanel pan= new JPanel(); //Instanciation d’un objet JPanel
[Link]([Link]);//definition de la couleur de fond.
add(pan); //equivalent à [Link](pan);
setVisible(true);
}
public static void main (String[] args) { new Exemple(); }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
Niveau III :

ES COMPOSANTES DE BASES
JLABEL
15

 Avec un JLabel, on peut créer un texte "étiquette" et/ou une image. On peut également intègre du HTML,
spécifier la position du texte par rapport à l’image ou spécifier l’emplacement par rapport à son conteneur.
 Quelques méthodes publiques de cette classe :
o JLabel(string, Icon, Int) // Création d’un Jlabel
o Void setText(string) // Modifie le texte du Jlabel
o String getText() // Retourne le texte du Jlabel
o Void seticon(Icon) //Spécifier la position du texte par rapport à l’icône
 Void setHorizontalTextPosition(int)
 Void setVerticalTextPosition(int)
o Void setToolTipText(string) //Associe un info bulles
 Étiquette pouvant contenir du texte et image :

JLabel jl = new JLabel ("Label 1");


 [Link]([Link]());
 [Link](new ImageIcon("[Link]"));
 [Link]([Link])
 [Link]([Link]);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JLABEL
16

 Exemple :

public class LabelPanel extends JFrame{


JLabel testLabel;
public LabelPanel () {
testLabel = new JLabel (" Icon Big Label") ;
[Link] (" a Label with Icone") ;
// Créer une nouvelle fonte
Font serif32Font = new Font ("Serif" , [Link],32) ;
// Donner une fonte au contenu du Label
[Link] (serif32Font) ;
// Créer une icône
Icon soundIcon = new ImageIcon ("images :[Link] ") ;
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON
17

 Issue du package [Link]


 Création :

JButton jb= new JButton("OK"); //ou


JButton jb = new JButton("OK", new ImageIcon("[Link]"));

o [Link](new ImageIcon("[Link]")); // affichage d’image lors du survole


o [Link](new ImageIcon("[Link]")); // affichage d’image lors du pressage
o [Link](new ImageIcon("[Link]"));
o [Link](new ImageIcon ("[Link]"));
o [Link]('o'); // ALT + o
o [Link](false);
o [Link]([Link]);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON
18

 Le bouton est centré sur le conteneur. Par défaut, Jpanel gère la mise en page.

 Dans cet exemple, on utilise la pane de JFrame. Le bouton occupe l’espace totale de la fenêtre.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
LES LAYOUT MANAGERS (1)
19

 Java utilise les layout managers pour gérer la position des éléments sur la fenêtre.
 Tous ces Layout Managers se trouvent dans le package [Link].
 Pour utiliser layout manager on utilise la fonction suivante:
 Syntaxe :

void setLayout(LayoutManager obj)

 Swing possède plusieurs gestionnaires de placement qui implémente des modèles de disposition courants :

Classe Description
Dispose les composants d’un container les uns derrière les autres en ligne et à
[Link] leur taille préférée, en retournant à la ligne si le container n’est pas assez large.

Dispose les composants d’un container dans une grille dont toutes les cellules
[Link] ont les mêmes dimensions.

Dispose cinq composants maximum dans un container, deux au bords supérieur


et inférieur à leur hauteur préférée, deux au bords gauche et droit à leur largeur
[Link]
préférée, et un au centre qui occupe le reste de l’espace.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON
20

 Exemple :

import [Link].*;
import [Link].*;
public class Exemple extends JFrame{
private JPanel pan= new JPanel();
private JButton bouton = new JButton ("OK");
public Exemple(){
setTitle("Mon bouton");
setSize(300,150);
[Link](bouton);// ajout du bouton au pan
add(pan); // ajout du pan au cadre
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main (String[] args) {new Exemple(); }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
LES LAYOUT MANAGERS (ALLER PLUS LOIN)
21

 Swing possède plusieurs gestionnaires de placement qui implémente des modèles de disposition courants :

Classe Description
Affiche un composants d’un à la fois parmi l’ensemble des composants d’un
[Link] container (pratique pour créer des panneaux comme ceux de la boite de
dialogue de préférences d’Eclipse).
Dispose les composants en ligne à leur hauteur préférée ou en colonne à leur
[Link]
largeur préférée.
Dispose les composants d’un container dans une grille dont les cellules
peuvent avoir des dimensions variables. La position et les dimensions de la
[Link]
cellule d’un des composant varient en fonction de sa taille préférée et des
contraints de classe Java .[Link] qui lui sont associées.
Dispose les composants d’un container en fonction de leur taille préférée et
[Link] de contraintes qui spécifient comment ces composants sont rattachés les uns
par rapport aux autres.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
LES LAYOUT MANAGERS (1)
22

 FlowLayout
 C’est le gestionnaire de placement par défaut d’un JPanel
 Il place les objets sous leur taille préférée de gauche à droit et de haut en bas
 On ne passe à la prochaine ligne que quand l’espace restant sur la ligne n’est plus suffisant pour
contenir le composant.

 Syntaxe :

[Link](new FlowLayout());
[Link](B1); //JButton B1= new JButton("button 1")

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (1’)
23

 Positionnement les composants de base :

import [Link].*;
import [Link].*;
import [Link].*;
public class Fenetre1 extends JFrame{
JButton b1 = new JButton("bouton N1"); JButton b2 = new JButton("bouton N2");
JButton b3 = new JButton("bouton N3"); JButton b4 = new JButton("bouton N4");
JPanal P= new JPane();
public Fenetre1 {
setTitle("Hello World"); setSize(300,200);
[Link](new FlowLayout());
[Link](bouton);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
setLocationRelativeTo([Link]());
setDefaultCloseOperation(3);
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
LES LAYOUT MANAGERS (1)
24

 BorderLayout
 Il place les composants dans une région de notre choix ( NORTH, WEST, CENTER, EAST, SOUTH).
 Si la région n’est pas spécifiée, la composant est positionné au centre.

 Syntaxe :

[Link](new BorderLayout());
[Link](B1, [Link]);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (1’)
25

 Positionner les composant de base :

import [Link].*; import [Link].*; import [Link].*;


public class Exemple extends JFrame{
private JPane P = new JPane ();
private JButton nord = new JButton(" Nord ");
private JButton ouest = new JButton(" Ouest ");
private JButton sud = new JButton(" sud ");
private JButton centre = new JButton(" centre ");
private JButton est = new JButton(" est ");
public Exemple() {
setTitle("Border Layout"); setSize(300,250);
setDefaultCloseOperation(EXIT_ON_CLOSE);
[Link](new BorderLayout());
[Link](nord, [Link]); [Link](ouest, [Link]);
[Link](sud, [Link]); [Link](centre, [Link]);
[Link](est, [Link]);
setVisible(true); }
public static void main (String[] args) { new Exemple(); } } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (1’)
26

 On utilise dans cet exercice le pane de JFrame :

import [Link].*;
import [Link].*;
public class Exemple extends JFrame{
private JButton b1 = new JButton(" Centre ");
public Exemple() {
setTitle("Border Layout"); setSize(300,250);
setLocationRelativeto(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new borderLayout()); //la layout utiliser
//On ajoute les boutons au content pane de la JFrame
getContentPane().add(b1, [Link]);
getContentPane().add(new JButton(" ouest"), [Link]);
getContentPane().add(new JButton(" sud"), [Link]);
getContentPane().add(new JButton("nord"),[Link]);
getContentPane().add(new JButton(" est"), [Link]);
setVisible(true); }
public static void main (String[] args) { new Exemple(); } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (2)
27

 GridLayout

 Ajoute les composants suivant une grille définie par un nombre de lignes et de colonnes.

 Syntaxe :

[Link](new GridLayout(3, 2));


[Link](new Jbutton("button 1"));

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (1’)
28

 Positionner les composant de base :

import [Link].*; import [Link].*;


public class Exemple extends JFrame{
private JButton b1 = new JButton(" Centre ");
private JPane P = new JPane ();
public Exemple() {
setTitle("Grid Layout"); setSize(300,250);
setLocationRelativeto(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
[Link](new GridLayout(3,2)); //3lignes et 2 colonnes
//On ajoute les boutons au content pane de JFrame
[Link](b1, [Link]);
[Link](new JButton("1"));//add(new JButton("1"))
[Link](new JButton("2")); getContentPane().add(new JButton("3"));
[Link](new JButton("4")); getContentPane().add(new JButton("5"));
setVisible(true); }
public static void main (String[] args) { new Exemple(); } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (3)
29

 BoxLayout

 Avec, vous pourrez ranger vos composants à la suite soit sur une ligne, soit sur une colonne. Le mieux,
c'est encore un exemple de rendu (voir figure suivante) avec un code

 Syntaxe :

[Link](new BoxLayout(P, BoxLayout.LINE_AXIS));


[Link](new Jbutton("button 1"));

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (3’)
30

Class TEST extends Jframe {


public TEST() {
//On définit le layout en lui indiquant qu'il travaillera en ligne
JPanel P= new JPanel ();
[Link](new BoxLayout(P, BoxLayout.LINE_AXIS));
JButton bouton1 = new JButton("bouton 1"); JButton bouton2 = new JButton("bouton 2");
[Link](bouton1); [Link](bouton2); //[Link](new JButton("Bouton1"));
//2eme en ligne
JPanel P1= new JPanel ();
[Link](new BoxLayout(P1, BoxLayout.LINE_AXIS));
JButton bouton3 = new JButton("bouton 3"); JButton bouton4 = new JButton("bouton 4");
[Link](bouton3); [Link](bouton4);
//On positionne maintenant ces trois lignes en colonne
JPanel P3= new JPanel ();
[Link](new BoxLayout(P3, BoxLayout.PAGE_AXIS));
[Link](P1);[Link](P)
// Ajout
add(P3);

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JBUTTON : LES LAYOUT MANAGERS (3’)
31

class TEST extends JFrame{


public TEST() {
setTitle("Une fenetre dynamique");
//On définit le layout en lui indiquant qu'il travaillera en ligne
Box P = [Link]();
[Link](new JButton("bouton 1"));
[Link](new JButton("bouton 2"));
//2eme en ligne
Box P1 = [Link]();
[Link](new JButton("bouton 3"));
[Link](new JButton("bouton 4"));
//On positionne maintenant ces trois lignes en colonne
Box P3 = [Link]();
[Link](P);[Link](P1);
// Ajout
add(P3); setSize(500, 300); setLocationRelativeTo([Link]());
setDefaultCloseOperation(3);
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
EXERCICE
32

 Pour d’obtenir le schéma suivant on doit combiner l’ensemble de ces gestionnaires

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
1ERE ÉTAPE
33

 1ere Etape : Au début, on utilise un pan avec BorderLayout avec les bordures Centre EST et Sud comme
illustré sur la figure suivante
import [Link];
import [Link].*;
public class sport1 extends JFrame {
private JButton sud = new JButton ("sud");
private JButton centre = new JButton ("centre");
private JButton est = new JButton ("est");
private JPanel pan1 = new JPanel();
public sport1(){
setTitle("Mélange de Layouts ");
setSize(300,250);
add(pan1);
[Link](new BorderLayout());
[Link](sud,[Link]);
[Link](centre,[Link]);
[Link](est,[Link]);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) { new
sport1(); } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
2EME ÉTAPE
34

 2éme Etape : On ajoute un autre pan BorderLayout avec les bordures Nord, Centre et Sud2

import [Link]; et on le place au centre du premier pan


import [Link].*;
public class sport2 extends JFrame {
private JButton sud1 = new JButton ("sud1");
private JButton sud2 = new JButton ("sud2");
//…… bouttons (sud, centre, est) et pan1
private JPanel pan2 = new JPanel();
public sport2(){
// La Premiere division
[Link](new BorderLayout());
[Link](sud1,[Link]);
[Link](est,[Link]);
[Link](pan2,[Link]);//ajout de pan
// La Deuxieme division
[Link](new BorderLayout());
[Link](north,[Link]);
[Link](centre,[Link]);
[Link](sud2,[Link]);
add(pan1);
//…… visibility … }
public static void main(String[] args) {
new sport2(); } }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
3EME ÉTAPE
35

 3éme Etape : On ajoute un autre pan GridLayout avec 5 linges et 1 colonne et on le place au nord du
2eme pane

//…… Debut
// La Premiere division
//……
// La Deuxieme division
//…
// La Troisieme division

[Link](pan3,[Link]);
[Link](new GridLayout(5,1));

[Link](new JButton("nom1"));
[Link](new JButton("nom2"));
[Link](new JButton("prenom1"));
[Link](new JButton("prenom2"));
[Link](new JButton("adresse"));

//…Reste

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
4EME ÉTAPE
36

 4éme Etape : Après on ajoute un autre pan4 de type GridLayout avec 9 ligne et 1 colonne et on le place à
l’est de pan1.

//…… Debut
//…
// La Quatrieme division

[Link](pan4,[Link]);
[Link](new GridLayout(9,1));

[Link](new JButton("tennis"));
[Link](new JButton("squash"));
[Link](new JButton("natation"));
[Link](new JButton("athletisme"));
[Link](new JButton("randonnée"));
[Link](new JButton("foot"));
[Link](new JButton("basket"));
[Link](new JButton("volley"));
[Link](new JButton("pelanque"));
//…Reste

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
5EME ÉTAPE
37

 5éme et 6éme Etape : Après on ajoute un autre pan4 de type GridLayout avec 9 ligne et 1 colonne et on le
place à l’est de pan1.
public sport5(){
//….
// La Premiere division
[Link](new BorderLayout());
[Link](pan6,[Link]); // changement
// La Deuxieme division
[Link](pan5,[Link]);
// La Troisieme et Quatrieme division
// ……
// La Cinquieme division

[Link](new FlowLayout());
[Link](new JButton("sexe"));
[Link](new JButton("homme"));
[Link](new JButton("femme"));

// La sixième division
[Link](new FlowLayout());
[Link](new JButton("ok"));
[Link](new JButton("annuler"));

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
6EME ÉTAPE
38

 Dernière Etape : Attributions des composantes de bases

public sport5(){
//….
// La Premiere division
[Link](new BorderLayout());
[Link](pan6,[Link]); // changement
// La Deuxieme division
[Link](pan5,[Link]);
// La Troisieme et Quatrieme division
// ……
// La Cinquieme division

[Link](new FlowLayout());
[Link](new JButton("sexe"));
[Link](new JButton("homme"));
[Link](new JButton("femme"));

// La sixième division
[Link](new FlowLayout());
[Link](new JButton("ok"));
[Link](new JButton("annuler"));

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
7EME ÉTAPE
39

 Dernière Etape : Attributions des composantes de bases

public sport5(){
//….
// La Premiere division
[Link](new BorderLayout());
[Link](pan6,[Link]); // changement
// La Deuxieme division
[Link](pan5,[Link]);
// La Troisieme et Quatrieme division
// ……
// La Cinquieme division

[Link](new FlowLayout());
[Link](new JButton("sexe"));
[Link](new JButton("homme"));
[Link](new JButton("femme"));

// La sixième division
[Link](new FlowLayout());
[Link](new JButton("ok"));
[Link](new JButton("annuler"));

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
ARTIE ROGRAMMATION ÉVÈNEMENTIELLE
L’INTERCEPTION DES ACTIONS DE L’UTILISATEUR
41

Des La Machine
Seuls les
L Virtuelle
événements événements
’utilisateur reçoit tous
sont alors écoutés
réalise une les événements
générés sont
action
transmis

Source de Événements Écouteurs


l’événement
ActionEvent, ActionListener,
JButton, JTextField…
MouseEvent… MouseListener

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
L’INTERCEPTION DES ACTIONS DE L’UTILISATEUR
42

Action

événement

Botton
Listener

.addXXXListener(.......)
Capturer et gérer
l’événement
Généralisation

 Les sources d’ évènement procèdent des méthodes addXXXListener() qui leur permettent d’enregistrer les
écouteurs d’ vènement sélectionnés de type XXXListener.
 Lorsqu’un évènement arrive à la source, celle-ci envoie une notification à tous mes objets écouteurs
recensés pour cet évènement.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
L’INTERCEPTION DES ACTIONS DE L’UTILISATEUR
43

Evénement

Botton
Listener

.addXXXListener(.......)
Capturer et gérer
l’événement
Généralisation

 Pour gérer cet événement dans une application, il faut :


1. Créer une classe implémentant l'interface XXXListener
2. Brancher un bouton sur un écouteur addXXXListner
3. Redéfinir la réponse aux événements utilisateur, produits dans l'interface, dans sa/ses propres
méthode(s)

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
GESTION DES ÉVÉNEMENTS
44

 Dans JAVA, pour qu’un objet puisse répondre à un événement, il faut lui attacher un écouteur (Listener).
 Ces évènements sont gérés par AWT

Listeners : interface

WindowListener MouseListener
ActionListener KeyListener
Pour gérer les Pour gérer les
événements Pour gérer les évènements de
Pour gérer les
sur la fenêtre évènements produits la souris
évènements
sur les composantes du clavier
graphiques

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
GESTIONNAIRE D'ÉVÉNEMENT ACTIONLISTENER
45

ActionListener

 ActionListener est une interface qui définit une seule méthode:

public void actionPerformed (ActionEvent e);

 L'événement actionPerformed est produit quand on valide une action par un clique ou par la touche
de validation du clavier.
 Pour gérer cet événement dans une application, il faut :
1. Créer une classe implémentant l'interface ActionListener
2. Brancher un bouton sur un écouteur addActinListner
3. Redéfinir la réponse aux événements utilisateur, produits dans l'interface, dans la méthode
actionPerformed.
Quand on clique, par exemple, sur un bouton qui est branché sur cet écouteur, la méthode
actionPerformed de l'écouteur s'exécute.
 La classe implémentant cette interface s'appelle un listener (écouteur) ou un gestionnaire
d'événements.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
L’INTERCEPTION DES ACTIONS DE L’UTILISATEUR
46

import [Link].*; import [Link].*;


import [Link].*;//package pour les événements
public class Exemple extends JFrame implements ActionListener { 1.
private JTextField saisie= new JTextField(20);
private JButton BVider = new JButton("Vider");
private JPanel pan= new JPanel();

public Exemple(){
setTitle(" Vider un TextField ");
[Link](new FlowLayout());
[Link](this); // la fenêtre est écouteur 2.
[Link](saisie); [Link](BVider); add(pan);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);// La sixième division
}

Public void actionPerformed (ActionEvent e){ 3.


[Link](""); }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
VERSION AMÉLIORÉ (CLASS ADAPTATIVE)
47

import [Link].*; import [Link].*; import [Link].*;


class Exemple extends JFrame {
private JTextField saisie= new JTextField(20);
private JButton BVider = new JButton("Vider");
private JPanel pan= new JPanel();

public Exemple(){
setTitle(" Vider un TextField ");
[Link](new FlowLayout());
[Link]( new ActionListener() {
@Override
2. & 3.
public void actionPerformed(ActionEvent e) {
[Link](""); }
}
);
[Link](saisie); [Link](BVider); add(pan);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);// La sixième division
} }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
EXPLICATION
48

 Un composant enregistre des auditeurs d’évènements(Listeners).

 Lorsqu’un événement se produit dans un composant, il est envoyés aux Listeners enregistrés.

 Chaque auditeur définit les actions à exécuter dans des méthodes aux noms prédéfinis.

 Exemple :

 Un Bouton enregistre des ActionListener

 Lors d’un clic sur un bouton, un ActionEvent est envoyé aux ActionListener enregistrés.

 Ceci provoque l’exécution de la méthode actionPerformed de chaque ActionListener.

 Associer événement au bouton

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
L’INTERCEPTION DES ACTIONS DE L’UTILISATEUR
49

import [Link].*; import [Link].*; import [Link].*;


public class TestEvent extends Frame {
Label l=new Label("Votre Nom:");
TextField t=new TextField (12); List liste =new List(); Panel p=new Panel();
Button b =new Button ("Ajouter"); Button b2 =new Button ("Quitter");
public TestEvent(){
add(p); [Link](new FlowLayout ());
[Link](l); [Link](t); [Link](b); [Link](b2); [Link](liste);

[Link](new ActionListener() {
public void actionPerformed(ActionEvent e) {
[Link] ([Link]());//Lire le contenu du t et l’ajouter à la liste
}});
[Link](new ActionListener() {
public void actionPerformed(ActionEvent e) {
[Link](0); }});
setBounds(10,10,250,250);
setVisible(true); }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
GESTIONNAIRE D'ÉVÉNEMENT ACTIONLISTENER
50

Remarques :

 L'interface ActionListener utilisée dans l'exemple n'est pas limitée aux clic sur des boutons, elle peut être
utilisée dans bien d'autres situations, par exemple:
 Lors de la sélection d'un élément de menu.
 Lors de la sélection d'un élément dans une liste avec un double-clique.
 Lorsque la touche "Entrée" est activée dans un champ de texte. On peut ajouter la ligne:
[Link](this);
 Lorsqu'un composant Timer déclenche l'écoulement d'un temps donné.
 En résumé, ActionListener s'utilise de la même manière dans toutes les situations qu'on vient d'évoquer;
unique méthode actionPerformed() reçoit en paramètre un objet de type ActionEvent. Cet objet fournit des
informations sur l'événement qui a été déclenché.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
GESTION DES ÉVÉNEMENTS
51

 Dans JAVA, pour qu’un objet puisse répondre à un événement, il faut lui attacher un écouteur (Listener).
 Ces évènements sont gérés par AWT

Listeners : interface

WindowListener MouseListener
ActionListener KeyListener
Pour gérer les Pour gérer les
événements Pour gérer les évènements de
Pour gérer les
sur la fenêtre évènements produits la souris
évènements
sur les composantes du clavier
graphiques

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
GESTIONNAIRE D'ÉVÉNEMENT ACTIONLISTENER
52

MouseListener

 MouseListener est une interface qui définit 5 méthodes:

public void mouseEntered (MouseEvent e);


public void mouseExited (MouseEvent e);
public void mousePressed (MouseEvent e);
public void mouseReleased(MouseEvent e);

 Pour gérer cet événement dans une application, il faut


1. Créer une classe implémentant l'interface MouseListener
2. Brancher un bouton sur un écouteur addMouseListner
3. Redéfinir la réponse aux événements utilisateur, produits dans l'interface, dans ses 4
méthodes.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
MOUSE LISTENER (1)
53

import [Link].*;
import [Link].*;
import [Link].*;//package pour les événements
public class Exemple extends JFrame implements MouseListener {
private JLabel saisie= new JLabel("clique Coordonnées : ");
private JPanel pan= new JPanel();

public Exemple1(){
setSize(300,300);
setTitle(" Vider un TextField ");
setDefaultCloseOperation(EXIT_ON_CLOSE);
[Link](new FlowLayout());
[Link](saisie);
add(pan);
[Link](this);// la fenetre est ecouteur
setVisible(true);
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
MOUSE LISTENER (2)
54

@Override
public void mouseClicked(MouseEvent e) {
JOptionPane jop1= new JOptionPane();
[Link](null,"x = "+[Link]()+" Y= "+[Link]()); }

@Override
public void mouseEntered(MouseEvent arg0) { }
@Override
public void mouseExited(MouseEvent arg0) { }
@Override
public void mousePressed(MouseEvent arg0) { }
@Override
public void mouseReleased(MouseEvent arg0) { }
}

public class EXO2{ public static void main(String[] args) {new Exemple1();} }

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
MOUSE LISTENER (1)
55

public class TestEvent extends JFrame {


private JLabel saisie= new JLabel("clique Coordonnées : ");
private JPanel pan= new JPanel();
public TestEvent(){
setSize(300,300); setTitle(" Vider un TextField ");
setDefaultCloseOperation(EXIT_ON_CLOSE);
[Link](new FlowLayout());
[Link](saisie); add(pan);
[Link](new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
JOptionPane jop1= new JOptionPane();
[Link](null,"x = "+[Link]()+" Y= "+[Link]());
}});// la fenetre est ecouteur
setVisible(true);
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
AUTREMENT - RÉSUMÉ -
56

1) Importer le groupe de classes [Link]

2) La classe doit déclarer qu’elle utilisera une ou plusieurs interfaces d’écoute : par exemple
ActionListener

3) Appel à la méthode addActionListener() pour que le composant possède un écouteur pour


l’événement utilisateur concerné c-a-d préciser la classe qui va recevra et gérera l’événement .

4) Implémenter les méthodes déclarées dans les interfaces ,par exemple :actionPerformed()

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
JMENU
57

 Une instance de JMenuBar par Jframe


 setJMenuBar(JMenuBar mb);
 Plusieurs Jmenu par JMenuBar
 add(JMenu jm);
 Plusieurs JMenuItem/JCheckboxMenu par Jmenu
 add(JMenuItem mi);
 addSeparator();

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
CONTENEURS
58

Dialog Frame
Tabbed Pane Split pane

Tool bar

Internal frame

Layered pane

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
AUTRES COMPOSANTS DE BASE
59

File chooser Color chooser

Progress bar

Tool tip

Slider

Tree

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2018 / 2021


2020 2019
Université Cadi Ayyad
Ecole Supérieure de Technologie – Safi

Cours 7 Cours de la programmation orientée objet (JAVA)

Pr. EL ABDELLAOUI SAID


[Link]@[Link]

JDBC

El Abdellaoui Saïd Programmation Orientée Objet : Java 2021 / 2022


PLAN
2

• 1 : Présentation

• 2 : Java DataBase Connectivity(JDBC)

• 3 : Connexion à une base de données

• 4 : Les requêtes de sélection

• 5 : Les requêtes de mise à jour

• 6 : Déconnexion

• 7 : SQLException

• 8 : Instruction SQL paramétrée

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


PRÉSENTATION
3

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


JAVA DATABASE CONNECTIVITY (JDBC)
4

 JDBC (Java DataBase Connectivity): c’est la relation entre Java et les bases de données.

 JDBC : un driver (pilote) fournit des outils pour traiter les BD.
 JDBC permet à un programme java d’interagir localement ou à distance avec une base de données relationnelle.
 Fonctionne selon le principe Client-Serveur

SGBD
Programme
(ex :phpMyAdmin,MySQL…)
JAVA

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


GÉNÉRALITÉS
5

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


GÉNÉRALITÉS
6

DriverManager

getConnection()

Canal de
Connection Connection Connection communication TCP
vers une BD
createStatement()

Statement Statement Statement Statement Gérer les requêtes


SQL
executeQuery ()

Resultset Resultset Gère l’accès aux


Resultset
tuples d’un résultat

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


JAVA DATABASE CONNECTIVITY (JDBC)
7

 JDBC permet à un programme java d’interagir localement ou à distance avec une base de données relationnelle.
 Fonctionne selon le principe Client-Serveur

SGBD
Programme
(ex :phpMyAdmin,MySQL…)
JAVA

 Les 3 opération suivantes doivent être réalisées :


1. Installer un server de BD : phpMyAdmin, MySQL etc .
2. Charger le diver JDBC.
3. Etablir la connexion avec la base de donnés pour l’interroger.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


OPERATIONS
8

 Opération 1 :
 Télécharger phpMyAdmin du site officiel de phpMyAdmin
 Installer phpMyAdmin
 Utiliser un serveur de base de données de votre choix : XAMPP, MySQL ,oracle…ect
 Préparation :
 Créer une base de donnée nommé «BDTest» contenant une table nommée «Personne». Cette table
contient 3 champs : Nom(Varchar(10)), Prenon(Varchar(10)) et Age(int)).
 Remplissez

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


OPERATIONS
9

 Opération 2 :
 Télécharger le driver JDBC nommé "mysql-connector-java" du site officiel de MySQL . C’est un dossier
compressé. Après décompression ,vous allez trouver le fichier jar correspondant au driver.
 Ajouter le driver JDBC à votre projet comme suit :
Cliquer avec le bouton droit de la souris sur le nom du projet dans l’explorateur
Eclipse -> Propriétés->Java Build Path -> onglet Librairies->cliquer sur le bouton ’’add external JAR’’-
>sélectionner le driver JDBC de Mysql.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


OPERATIONS
10

 Opération 3:
 Ouvrir le projet auquel nous avons ajouter le driver.
 Ajouter des classes au projets et via des instruction Java,
 Le programme peut:

 Charger le driver JDBC

 Etablir la connexion avec la BD

 Exécuter des requêtes SQL

 Traiter les données retrouvées

 Effectuer des traitements des données

 Fermer la connexion

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


ARCHITECTURE D’UNE APPLICATION JDBC
11

 Architecture globale d’une application JDBC :

import [Link]; //gestion des pilotes


import [Link]; //une connexion à la BD
import [Link]; // requêtes
import [Link]; //un résultat (lignes / colonnes)
import [Link]; // Erreur

public class BaseSQL {


DriverManager
public BaseSQL() {
try{
getConnection()
//Chargement pilote
//Ouverture de connexion Connection
//Exécution d’une requête
//Traitement des résultats
//Traitements des données
//Fermeture de la connexion

} catch (Exception ex){ }


}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


ARCHITECTURE D’UNE APPLICATION JDBC
12

 Chargement pilote JDBC :

(1) [Link]("[Link]");

 Ouverture d’une connexion avec la base de données :


 On fournit l’url de la base , le nom d’utilisateur et le mot de passe.

(2) String url="jdbc :SousProtocole :SourceDeDonnées";


Connection con=[Link](url,"Utilisateur","MotDePasse");

 Exemple :

String url="jdbc:mysql://localhost/BDTest";
con= [Link](url,"root","");

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


EXEMPLE
13

import [Link]; //gestion des pilotes


import [Link]; //une connexion à la BD
import [Link]; // requêtes

public class BaseSQL {


private Connection con;

public BaseSQL() {
try{
//Chargement pilote
[Link]("[Link]");
//Ouverture de connexion
String url="jdbc:mysql://localhost/BDTest";
con= [Link](url,"root","");
[Link]("connexion bien rétablie !!");
//Exécution d’une requête
//Traitements des données
//Fermeture de la connexion
} catch (Exception ex){ [Link]("Erreur :"+ex);
}
public static void main(String [] args ) {new BaseSQL ();}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


ARCHITECTURE D’UNE APPLICATION JDBC
14

 Architecture globale d’une application JDBC :

import [Link]; //gestion des pilotes


import [Link]; //une connexion à la BD
import [Link]; // requêtes
import [Link]; //un résultat (lignes / colonnes)
import [Link]; // Erreur

public class BaseSQL {


DriverManager
public BaseSQL() {
try{
getConnection()
//Chargement pilote
//Ouverture de connexion Connection
//Exécution d’une requête
createStatement()
//Traitement des résultats
//Traitements des données
Statement Statement Statement
//Fermeture de la connexion
executeQuery ()
} catch (Exception ex){ }
} Resultset Resultset

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


ARCHITECTURE D’UNE APPLICATION JDBC
15

 Exécuter d’une requête :


 Pour réaliser des requêtes, on utilise un objet st de type Statement.

(3) st =[Link]();

 Le résultat d’une requête est récupéré par un objet res de type interface ResultSet et permet d’accéder aux
données extraites grâce à la requête.

(4) ResultSet res = [Link]("select * from tab") ;

 Traiter les résultats :²


 Après la requête, le "curseur" est positionné juste avant la première ligne du résultat.
 La méthode next() permet d’avancer d’enregistrement en enregistrement séquentiellement :

(5) [Link]();

 Pour récupérer les données dans chaque colonne, l’interface ResultSet propose plusieurs méthodes adaptées
aux types des données récupérées :

getString(NumCol),getInt(NumCol),getDate(NumCol).

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


EXEMPLE
16

//……
import [Link];
public class BaseSQL {
//……
private ResultSet rs;
private Statement st;
public BaseSQL() {
try{ //……
//Exécuter d’une requête
st =[Link]();
String requete = "select * from Personne";
rs = [Link](requete);
//Traiter les résultats (affichage)
[Link]("Enregistrements de la table");
while([Link]()){
String Nom = [Link]("nom");
String Prenom = [Link]("prenom");
int Age = [Link]("age");
[Link]( "Nom: "+Nom+" Prenom: "+Prenom+ "Age: "+Age);
}
//Fermeture de la connexion
} catch (Exception ex){//…… }
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


ARCHITECTURE D’UNE APPLICATION JDBC
17

 Architecture globale d’une application JDBC :


import [Link]; //gestion des pilotes
import [Link]; //une connexion à la BD
import [Link]; // requêtes
import [Link]; //un résultat (lignes / colonnes)
import [Link]; // Erreur
public class BaseSQL {
public BaseSQL() {
DriverManager
try{
//Chargement pilote
getConnection()
//Ouverture de connexion
//Exécution d’une requête Connection

//Traitements des résultats createStatement()


//Traitements des données
//Fermeture de la connexion Statement Statement Statement

} catch (Exception ex){ } executeQuery ()

} Resultset Resultset

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


EXEMPLE
18

 Fermeture de la connexion :

 La méthode close() permet de libérer les ressources prises par la création d’objets de type ResultSet ,
Statement et Connection.
(6) [Link]();

 Elle existe pour chacune de ces interfaces. Elle est le plus souvent employé pour une Connection, car
elle libère en même temps toutes les ressources qui lui sont associées.
//……
import [Link];

public class BaseSQL {


//……
public BaseSQL() {
try{ //……
//Fermeture de la connexion
if(con != null){
[Link]();
}

} catch (Exception ex){//…… }


}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


ARCHITECTURE D’UNE APPLICATION JDBC
19

 Architecture globale d’une application JDBC :

import [Link]; //gestion des pilotes


import [Link]; //une connexion à la BD
import [Link]; // requêtes
import [Link]; //un résultat (lignes / colonnes)
import [Link]; // Erreur

public class BaseSQL {


DriverManager
public BaseSQL() {
try{
getConnection()
//Chargement pilote
//Ouverture de connexion Connection
//Exécution d’une requête
createStatement()
//Traitements des résultats
//Traitements des données
Statement Statement Statement
//Fermeture de la connexion
executeQuery ()
} catch (Exception ex){ }
} Resultset Resultset

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR
20

 La mise à jour d'une base de données peut être effectuée par une requête SQL de type :
 INSERT,
 UPDATE ,
 DELETE
à travers la méthoed executeUpdate("Requête") sur un objet de type Statement.
 Le résultat renvoyé par l'exécution de la requête indiquera le nombre de lignes mises à jour dans la
base, contrairement à une requête de sélection qui renvoie un ResultSet.

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR
21

 Ajout d’un enregistrement :

import [Link];
//……
public class BaseSQL {
//……
private Statement st;
//String N="", P=""; int A;

public BaseSQL () {
try {
//……
String requete1="INSERT INTO Personne VALUES('saber','Mohammed',20)";
// pour ajouter des valeurs non déterminées:
String requete="INSERT INTO Personne(nom, prenom, age)"+
"VALUES('"+N+"','"+P+"','"+A+"')";

[Link](requete1);

}catch (SQLException e1) { [Link]();}


}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR
22

 Modification d’un enregistrement :

try{
String requete2= "update Personne set age=21 where prenom='mohammed'";
int b =[Link] (requete2);
[Link]( " Enregistrement modifiée.");
}catch(Exception ex){
[Link]("Erreur: "+ex);}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR
23

 Modification de la base de données :

 On peut ajouter une nouvelle table Personne à la BD :


 La table Personne contient 4 attributs et une clé primaire non nulle et auto-incrémentée.

try {
st = [Link]();
String requete3 = "CREATE TABLE Personne(id int not null auto_increment,nom
VARCHAR (15), prenom varchar (15), age(INT), primary key(id))";

[Link](requete3);

}catch(Exception ex){
[Link]("Erreur: "+ex);
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR
24

 Suppression d’un enregistrement :

try{
String requete4 = "delete from Personne where prenom = 'mohammed'";
[Link](requete4);
[Link]("Enregistrement supprimé. ");
}catch(Exception ex){
[Link]("Erreur: "+ex);}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


EXEMPLE APPLICATIF
LES REQUÊTES DE MISES À JOUR (AJOUT)
26

 Ajout d’un enregistrement :

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR (AJOUT)
27

 Interface Graphique

import [Link].*; //TextFields


import [Link].*; nomT= new JTextField(6);
import [Link].*; prenomT =new JTextField(6);
import [Link].*; ageT= new JTextField(6);
import [Link]; //Boutton d'ajout
Ajoute = new JButton("Ajouter");
public class Exemplejout
extends JFrame implements ActionListener //Paneau
{ j1= new JPanel();
JLabel nom,prenom, age; [Link](new GridLayout(4, 2));
JTextField nomT, prenomT,ageT; [Link](nom); [Link](nomT);
JButton Ajoute; JPanel j1; [Link](prenom); [Link](prenomT);
String nom_, prenom_,age_; [Link](age); [Link](ageT);
Connection con; [Link](Ajoute);
public Exemplejout( ) { add(j1);
setTitle("Exemple d'Ajout");
setSize(530, 220); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null); [Link](this);
//Labels }
nom = new JLabel("nom");
prenom = new JLabel("prenom");
age = new JLabel("age");

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
28

 Ajout d’un enregistrement :


public void actionPerformed(ActionEvent e) {

//Recupération des données entrées


String nom= [Link]();
String prenom= [Link]();
int age=[Link]([Link]());

// établir la Connexion et traiter les données


if([Link]()== Ajoute){
try{
String url ="jdbc:mysql://localhost/BDTest";
[Link]("[Link]");
con =[Link](url,"root","");
Statement st = [Link]();
[Link]("connexion est bien etablie");
String requete = "INSERT INTO Personne
VALUES('"+nom_+"','"+prenom_+"','"+age_+"')";
int nb=[Link](requete);
[Link]( "Enregistrement Ajouté.");
}catch(Exception e1){
[Link]();}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


ALLER PLUS LOIN
LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
30

 Modification d’un enregistrement :

public void actionPerformed(ActionEvent e) {


String nom= [Link]();
String prenom= [Link]();
int age=[Link]([Link]());
[Link](""+nom+" "+prenom+" "+age); //tester

if([Link]()==modif){

try{//Connexion
String url ="jdbc:mysql://localhost/BDTest";
[Link]("[Link]");
con =[Link](url,"root","");
Statement st = [Link]();
[Link]("connexion est bien etablie");
String requete= "update Personne set age=21 where prenom='mohammed'";
[Link] (requete);
[Link]( "Enregistrement modifiée.");
}catch(Exception e1){
[Link]();}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
31

 Supprimer d’un enregistrement :

public void actionPerformed(ActionEvent e) {


String nom= [Link]();

if([Link]()==supp){

try{//Connexion
String url ="jdbc:mysql://localhost/test";
[Link]("[Link]");
con =[Link](url,"root","");
Statement st = [Link]();
[Link]("connexion est bien etablie");
String requete = "delete from Personne where nom = '"+ nom +"' ";
[Link](requete);
[Link]("Enregistrement supprimé. ");
}catch(Exception e1){
[Link]();}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


AMÉLIORATION
LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
33

 Remarque : On remarque qu’il y a du redondance dans la partie de la connexion pour chaque bouton, pour ce
fait, on va créer une classe nommée BDSQL qui va retourner un élément de type

 Schéma Globale :

Class Class Class


Class Personne
BDSQL Window Main

Connection : con
nom: String
prenom : String Window() Main()
BaseSQL()
Age : int
finalize()
Insert(…)

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
34

 BASESQL
import [Link];
import [Link];
import [Link];
import [Link];
public class BaseSQL {
private Connection con;
public BaseSQL(){
try{
[Link]("[Link]");
String url="jdbc:mysql://localhost/javadb";
con=[Link](url,"root","");
[Link]("Connexion bien");
}catch(Exception ex){
[Link]("Erreur:"+ex);
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
35

 BASESQL
public void Insert(Personne P) throws SQLException {
String requete1 ="INSERT INTO Personne Value('" + [Link] + "','" +
[Link] + "'," + [Link] + ")";
//[Link](requete1);
Statement st = [Link]();
[Link](requete1);
}

@Override
protected void finalize() throws Throwable {
[Link]();
if(con == null) return;
[Link]();
[Link]("connextion close");

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
36

 Personne

public class Personne {


public String nom,prenom;
public int age;
}

 Main

public class Main {

public static void main(String[] args) {


new Window();
}
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022


LES REQUÊTES DE MISES À JOUR (AJOUT : 2ÉME FAÇON)
37

 Window
import [Link]; [Link](new
import [Link].*; ActionListener(){
import [Link]; @Override
import [Link].*; public void actionPerformed(ActionEvent o){
public class Window extends JFrame { Personne p = new Personne();
private JTextField j1 = new JTextField (""); [Link] = [Link]();
private JTextField j2 = new JTextField (""); [Link] = [Link]();
private JTextField j3 = new JTextField (""); [Link] = [Link]([Link]());
private JButton ajouter = new JButton("Ajouter");
JPanel pan = new JPanel(); BaseSQL b = new BaseSQL();
public Window(){ try {
setSize(300,300);setTitle("Exemple de Mysql"); [Link](p);
[Link](new GridLayout(4,2)); } catch (SQLException e) {
[Link](new JLabel("Nom:")); [Link](j1); // TODO Auto-generated catch block
[Link](new JLabel("Prenom:"));[Link](j2); [Link]();
[Link](new JLabel("Age:")); [Link](j3); } finally {
[Link](ajouter); b = null;
[Link]();
} });
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

SAID EL ABDELLAOUI Programmation Orientée Objet : Java 2021 / 2022

Vous aimerez peut-être aussi