cours poo2

47
1 Programmation orientée objet II Programmation orientée objet II 2 e année S.I.L Sabeur ELKOSANTINI A. U. : 08-09 S. Elkosantini S. Elkosantini 1 Sabeur ELKOSANTINI [email protected] Bibliographie ) Livres Livres Michel Divay , « Java et la programmation orientée objet », Dunod eds, 2006. R d P lk J Phili R t illé Li l Sit i P ti Renaud Pawlak , Jean-Philippe Retaillé , Lionel Seinturier, « Programmation orientée aspect pour Java / J2EE », Eyrolles eds, 2004. Bruce Eckel, « Thinking in Java », 2nd revision, 2000 (Disponible sur internet). ) Autres supports de cours Autres supports de cours Cours de Jean-Michel DOUDOUX : A. U. : 09-10 S. Elkosantini S. Elkosantini 2 http://www.jmdoudoux.fr/java/dej/ Cours de Mickaël BARON : http://mbaron.ftp-developpez.com/javase/java.pdf Plan Chapitre 1 : Introduction Chapitre 2 : Les premiers pas en Java Chapitre 3 : POO avec Java A. U. : 09-10 S. Elkosantini S. Elkosantini 3 Plan Chapitre 1 : Introduction Chapitre 2 : Les premiers pas en Java Chapitre 3 : POO avec Java A. U. : 09-10 S. Elkosantini S. Elkosantini 4

Upload: remix-mixdox

Post on 31-Oct-2015

195 views

Category:

Documents


0 download

DESCRIPTION

Programmation Orientee Objets JAVA

TRANSCRIPT

Page 1: Cours POO2

1

Programmation orientée objet IIProgrammation orientée objet II

2e année S.I.L

Sabeur ELKOSANTINI

A. U. : 08-09 S. ElkosantiniS. Elkosantini 1

Sabeur [email protected]

Bibliographie

LivresLivresMichel Divay , « Java et la programmation orientée objet », Dunod eds, 2006.

R d P l k J Phili R t illé Li l S i t i P ti Renaud Pawlak , Jean-Philippe Retaillé , Lionel Seinturier, « Programmation

orientée aspect pour Java / J2EE », Eyrolles eds, 2004.

Bruce Eckel, « Thinking in Java », 2nd revision, 2000 (Disponible sur internet).

Autres supports de coursAutres supports de coursCours de Jean-Michel DOUDOUX :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 2

http://www.jmdoudoux.fr/java/dej/

Cours de Mickaël BARON :http://mbaron.ftp-developpez.com/javase/java.pdf

Plan

Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec Java

A. U. : 09-10 S. ElkosantiniS. Elkosantini 3

Plan

Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec Java

A. U. : 09-10 S. ElkosantiniS. Elkosantini 4

Page 2: Cours POO2

2

Introduction

Historique de la POOHistorique de la POO

Les années 60 : le langage Simula 67 langage de simulation informatiqueLes années 60 : le langage Simula-67, langage de simulation informatique

Les premiers pas de la programmation orientée objet

Les années 70 : SmallTalk , apparition des concepts de base :

objet, encapsulation, polymorphisme, héritage , etc.

Les années 80 : La Montée en puissance de l’orienté objet

A. U. : 09-10 S. ElkosantiniS. Elkosantini 5

Les années 80 : La Montée en puissance de l orienté objetApparition de nouveaux langages : Objective C ,C++, Eiffel, Common Lisp Object

System

Introduction

Historique de la POOHistorique de la POO

L é 90 l’â d' d l' t i d l POO Les années 90 : l’âge d'or de l'extension de la POO :

Standardisation de C++

Apparition du langage de programmation Java

Depuis, évolution de l’orientée objet:

Analyse par objet (AOO).

A. U. : 09-10 S. ElkosantiniS. Elkosantini 6

La conception orientée objet COO

Les bases de données orientées objets (SGBDOO)

Introduction

Programmation procédurale Vs Programmation OOProgrammation procédurale Vs Programmation OOProgrammation procédurale (C, Cobol, Fortran, Pascal, etc.) :

P t t é éd t f tiProgrammes structurés en procédures et fonctions,

Des problèmes en cas de modification de la structures des données,

Chaque fonction ou procédure résout une partie du problème,

Programmation OO (Java, C++, C#, Delphi, etc.):

Unité logique : objet,

A. U. : 09-10 S. ElkosantiniS. Elkosantini 7

Programmation par « composants »,

Facilité de l’évolution du code,

Améliorer la conception et la maintenance des grands systèmes,

Introduction

Programmation par Objets ?Programmation par Objets ?

Unité logique : l’objet

Objet est défini par :

Une identité : permet de distinguer un objet d’un autre objet.

Un état : représenté par des attributs (variables) qui stockent des

valeurs.

Un comportement : défini par des méthodes (procédures) qui

A. U. : 09-10 S. ElkosantiniS. Elkosantini 8

modifient des états. Moto

Couleur : noirVitesse : 150 Km/h

Accélérer Freiner

Page 3: Cours POO2

3

Introduction

Le langage Java : historiqueLe langage Java : historique

1990 - Sté Sun Microsystems (James Gosling, Naughton, Sheridan) : projet de

langage petits systèmes

1991 : Introduction du langage « Oak »

1993 : Essor d’Internet : adapter Java au Web

1993 à 1995 : adaptation d’Oak pour le Web (Exécution d’applets)

A. U. : 09-10 S. ElkosantiniS. Elkosantini 9

1995 : présentation de Java TM par Sun et mise à disposition gratuite du JDK sur

le net

Introduction

Le langage JavaLe langage Java

Présente dans de très nombreux domaines d’application : des serveurs

d’applications aux téléphone portables et cartes à puces (JME)

Quelques chiffres (Java One 2005):

• 4,5 millions de développeurs Java

• 700 millions de PC équipés d'une JVM

• 708 millions de téléphones Java

A. U. : 09-10 S. ElkosantiniS. Elkosantini 10

• 600 millions de périphériques mobiles

• 1 milliard de Java Cards

Introduction

Qualités majeures de JavaQualités majeures de Java

Simple (comparé à C++)p ( p )Gère les débordements mémoire.

Gère lui-même la désallocation mémoire (ramasse-miettes).

Pas de manipulation explicite de pointeurs.

Pas de surcharge d’opérateurs.

Fondamentalement Orienté-Objet : pas de fonctions/procédures : que

A. U. : 09-10 S. ElkosantiniS. Elkosantini 11

des méthodes !

Portable : principe de machine virtuelle

Introduction

Le principe de la machine virtuelle Le principe de la machine virtuelle

A. U. : 09-10 S. ElkosantiniS. Elkosantini 12

Page 4: Cours POO2

4

Introduction

Le principe de la machine virtuelle Le principe de la machine virtuelle

A. U. : 09-10 S. ElkosantiniS. Elkosantini 13

Le byte-code est :

proche d'un langage machine

indépendant de la plateforme d'exécution (matériel + OS)

Introduction

Un programme Java, pour voir …Un programme Java, pour voir …

A. U. : 09-10 S. ElkosantiniS. Elkosantini 14

Source : cours de Genoud

Introduction

Un programme Java, pour voir …Un programme Java, pour voir …

// Exemple de programme minimal : Salut.javaÉdition du programme source :// p p g jimport java.io.*; //….

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

System.out.println("Salut tout le monde");}

}

Compilation C \T \ j S l j é é i d fi hi

A. U. : 09-10 S. ElkosantiniS. Elkosantini 15

Compilation : C:\Temp\> javac Salut.java génération du fichier …..

Exécution : D:\Temp\> java Salut

Introduction

Java Vs C++Java Vs C++

En C++:

// Exemple de programme minimal : Salut java

En Java:

// Exemple de programme minimal : Salut.cpp#include <stdio.h> //……

void main () {std::cout<<"Salut tout le monde";

}

A. U. : 09-10 S. ElkosantiniS. Elkosantini 16

// Exemple de programme minimal : Salut.javaimport java.io.*; //………….

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

System.out.println("Salut tout le monde");}

}

Page 5: Cours POO2

5

Introduction

Les différentes application JavaLes différentes application JavaLes applications indépendantes:

Les applets : Programmes exécutées dans l’environnement d’un navigateur Web

A. U. : 09-10 S. ElkosantiniS. Elkosantini 17

et chargés au travers de pages HTML

Introduction

Les différentes plateformes JavaLes différentes plateformes Java

Fourni les compilateurs, outils, runtimes, et APIs pour écrire, déployer, etFourni les compilateurs, outils, runtimes, et APIs pour écrire, déployer, et

exécuter des applets et applications dans la langage de programmation

Java

Destinée au développement d’applications « d’entreprise » («business

applications») robustes et interopérables. Simplifier le développement et

le déploiement d’applications distribuées et articulées autours du web.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 18

Environnement d’exécution optimisé pour les dispositifs « légers » :

• Carte à puce (smart cards)

• Téléphones mobiles

• Assistants personnels (PDA)

Introduction

Les différentes plateformes Java : organisationLes différentes plateformes Java : organisation

JDK

JRE

A. U. : 09-10 S. ElkosantiniS. Elkosantini 19

JRE (Java Runtime Environnement) pour l'exécution de code java compilé

JDK (Java Developper's Kit) outils de base pour le développement d'applications Java

Introduction

Les différentes plateformes Java : organisationLes différentes plateformes Java : organisation

Plateforme définie par SUN pour le développement d’applications réparties

Basée sur un ensemble de technologies Java

• Servlets, JSP(Java Server Pages), JSF (Java Server Faces) : pages web

dynamiques

• EJB (Entreprise Java Beans) : objets métiers

• JDBC : API d'accès à des SGBD

• JNDI (Java Naming an Directory Interface) : API pour nommage des objets

A. U. : 09-10 S. ElkosantiniS. Elkosantini 20

JNDI (Java Naming an Directory Interface) : API pour nommage des objets

• JTA (Java Transaction API) ; API pour gestion des transactions

• JAAS (Java Authentication and Authorization Service)

• Et de nombreuses autres…

S'appuie sur un modèle d'architecture multi-tiers (multi-couches)

Page 6: Cours POO2

6

Plan

Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec Java

A. U. : 09-10 S. ElkosantiniS. Elkosantini 21

Les premiers pas en Java

PlanPlanPlanPlan

Les opérateurs mathématiques , logiques et de conversion

Les boucles et les structures de contrôles

Les tableaux

Les commentaires

A. U. : 09-10 S. ElkosantiniS. Elkosantini 22

Les commentaires

Les premiers pas en Java

La structure d’un programme JavaLa structure d’un programme Java

i t j i *…

import java.io.*;

public class Salut {

public static void main (String args[]) {

afficher (5);

}

public void afficher (int val ) {

System.out.println(‘’ le nombre à afficher est ‘’ +val);

……

A. U. : 09-10 S. ElkosantiniS. Elkosantini 23

System.out.println( le nombre à afficher est val);

}

}

Nom du fichier = nom de la classe

Les premiers pas en Java

Les types primitifsLes types primitifsNe pas confondre les types primitifs et les objets

Les types primitifs :

Entiers : byte (1 octet) - short (2 octets) - int (4 octets) - long (8 octets)

Flottants : float (4 octets) - double (8 octets)

Booléens : boolean (true ou false)

Caractères : char

Quelle est la différence ??

A. U. : 09-10 S. ElkosantiniS. Elkosantini 24

Déclaration en java :Int a, b, c ;float x;char chBooléens u, b;

Des erreurs ??!!

Page 7: Cours POO2

7

Les premiers pas en Java

Les valeurs flottantesLes valeurs flottantesUtilise la norme IEEE 754 pour représenter les valeurs à virgule flottanteUtilise la norme IEEE 754 pour représenter les valeurs à virgule flottante.

Calcul sécurisé :

–Existe +0.0 et -0.0

+Infinity et -Infinity

NaN (Not A Number)

double[] values={ 0.0, -0.0};for(double v:values) {System.out.println(3/v);System.out.println(v/0.0);}

A. U. : 09-10 S. ElkosantiniS. Elkosantini 25

3.0 est un double (64bits), 3.0f (ou 3.0F) est un float (32 bits)

InfinityNaN-InfinityNaN

Résultat :

Les premiers pas en Java

Infini et Infini et NaNNaNLa norme IEEE 754 introduit trois valeurs particulieres par types de flottants

+Infinity est le résultat de i/0 avec i positif

-Infinity est le résultat de i/0 avec i négatif

NaN est le résultat de 0/0

A. U. : 09-10 S. ElkosantiniS. Elkosantini 26

x == x est faux si x vaut Double.NaN

On doit tester NaN avecFloat.isNaN() ou Double.isNaN()

Les premiers pas en Java

Les constantesLes constantesLe mot clé final permet de déclarer une constante: la valeur ne doit pas être Le mot clé final permet de déclarer une constante: la valeur ne doit pas être

modifiée pendant l’exécution du programme.

Déclaration en java : final int n=10, m ;n=n+1;

L é lt t d l’i t ti t

A. U. : 09-10 S. ElkosantiniS. Elkosantini 27

Le résultat de l’instruction est …….

Il est impossible de créer ou d'obtenir un tableau de valeurs constantes en Java !!

Les premiers pas en Java

Les opérateurs et l’affectationLes opérateurs et l’affectation

Les opérateurs mathématiques

Opérateur Exemple Equivalent à

= Note = 18 Note = 18

+= Note+ = 2 Note = Note + 2

-= Note- = 2 Note = Note - 2

*= Note* = 1.5 Note = Note * 1.5

/= Note/ = 2 Note = Note / 2

double nb1;float nb2;

nb1/nb2 = …..

Quel est le type du résultat de l’opération ?

float nb1;

A. U. : 09-10 S. ElkosantiniS. Elkosantini 28

%= Note% = 2 Note = Note % 2

^= Note^ = 2 Note = Note ^ 2

float nb1;int nb2;

nb1 + nb2 = …….

Page 8: Cours POO2

8

Les premiers pas en Java

Les opérateurs et l’affectationLes opérateurs et l’affectationPriorité

Les instructions

() ++ , -- * , / , % + , - < , > ==,!= &&, || =, += , -=

Plus fort Plus faible

A. U. : 09-10 S. ElkosantiniS. Elkosantini 29

final int N=50;short p=10;char c=2*N+3; // la variable c contient ….byte b= 10*N; // le résultat est ….

Quel est le résultat de chaque instruction ??

Les premiers pas en Java

Les opérateurs et l’affectationLes opérateurs et l’affectation

l’incrémentation et la décrémentation automatique

Incrémentation : Nb++ ou ++Nb

Décrémentation : Nb-- ou --Nb Quelle est la différence ??

i=2;j=i++; Quelles sont les valeurs de i et j

dans les deux cas ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 30

i=2;j=++i;

Les premiers pas en Java

Les opérateurs et l’affectationLes opérateurs et l’affectationAutres opérateurs

double nb1;Opérateur

&& L’opérateur ET logique

|| L’opérateur OU logique

== Opérateur d’égalité

!= Opérateur de différence

! L’opérateur négation

double nb1;double nb2;boolean res1, res2;

res1 = ( nb1==nb2) res2= ( nb1==nb2) && (nb1>10)

A. U. : 09-10 S. ElkosantiniS. Elkosantini 31

Les opérateurs de conversion (cast)

int i = 200;long l = (long)i;long l2 = (long)200;

……

Les premiers pas en Java

Les opérateurs et l’affectationLes opérateurs et l’affectationConversion de types primitifs

byte b=3; // ok car -128<=3<=127int i=b;float f=i; // ok mais peut-être pertedouble d=2.0int j=d; // erreur de compilationint j2=(int)d; // ok

A. U. : 09-10 S. ElkosantiniS. Elkosantini 32

Source : cours de Genoud

Page 9: Cours POO2

9

Les premiers pas en Java

Les opérateurs et l’affectationLes opérateurs et l’affectation

Les opérateurs bits à bitsOpérateurOpérateur

& L’opérateur ET

| L’opérateur OU

^ Opérateur OU exclusif

~ L’opérateur négation

Exemple : Nb1Nb2

0000010100000011

A. U. : 09-10 S. ElkosantiniS. Elkosantini 33

p Nb2 00000011Nb1 & Nb2 ……….Nb1 | Nb2 ……….Nb1 ^ Nb2 ……….

~Nb1 ……….

Les premiers pas en Java

Les opérateurs et l’affectationLes opérateurs et l’affectationLes opérateurs de décalage :

M i l d bitManipules des bits,

Utilisables uniquement avec des types primitifs entiers,

Les opérateurs sont :

o Nb << n : décalage vers la gauche du nombre Nb de n bits

o Nb >> n : décalage vers la droite du nombre Nb de n bits

A. U. : 09-10 S. ElkosantiniS. Elkosantini 34

Exemple : N=10000101 N<< 2 donne ........

int N = 6; N>>1 donne .......

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesif… else…

Syntaxe:if (condition logique)

Instructions exécutées si la condition logique est vraieelse

Instructions exécutées si la condition logique est fausse

Exemple 1:

A. U. : 09-10 S. ElkosantiniS. Elkosantini 35

Exemple 1: If (moyenne >= 10)

System.out.println(‘’ l’étudiant a réussi’’);else

System.out.println(‘’ l’étudiant doit repasser ses examens’’);

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesif… else…

Exercice 1:Ecrire la partie du programme Java qui vérifie si un entier n est paire ou

impaire et affiche le résultat.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 36

Page 10: Cours POO2

10

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôles

switch case defaultswitch… case…default

Syntaxe:switch(expression)

{case constante_1: suite d’instructions; break;...

case constante_n: suite d’instructions; break;default : suite d’instruction;}

A. U. : 09-10 S. ElkosantiniS. Elkosantini 37

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesswitch… case…default

Exercice 2:Exercice 2:Ecrire la partie du programme Java qui affiche: o « Très bien » si la note est ‘A’,o « Bien » si la note est ‘B’,o « Insuffisant » si la note est ‘C’,o un message d’erreur sinon

A. U. : 09-10 S. ElkosantiniS. Elkosantini 38

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôles

L b l ité tiLes boucles itératives

while … :while ( condition logique) { ... // code a exécuter dans la boucle }

do … while :do {

A. U. : 09-10 S. ElkosantiniS. Elkosantini 39

do { Bloc d’instructions ; } while ( condition logique)

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôles

Les boucles itératives

for… :for (initialisation du compteur ; condition ; modification) { ... // code a exécuter dans la boucle }

Exemple :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 40

for (i = 0 ; i > 10; i++ ) {System.out.println (i);}

Quel est le résultat de la boucle ?

Page 11: Cours POO2

11

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôles

Les boucles itératives

for… :for (decl/var :array/iterable) { ... // code a exécuter dans la boucle }

Exemple :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 41

public static void main(String[] args) {for(String s:args)System.out.println(s);}

Les premiers pas en Java

Les boucles et le calcul flottantLes boucles et le calcul flottant

IEEE 754, pour chaque opération +, −, *, /

– On calcul le résultat précis infinie

– On arrondie au nombre représentable le plus proche

Attention à l'utilisation des flottants dans les boucles

A. U. : 09-10 S. ElkosantiniS. Elkosantini 42

for(double v=0.0;v!=1.0;v=v+1.0) {System.out.println(v);}// Boucle infinie// utilisé plutot '<'

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesExercice :

La suite de Syracuse avec p > 1 est définie de la façon suivante : La suite de Syracusep avec p > 1 est définie de la façon suivante :

a0 = p

an+1 = an/2 si an est pair

an+1 = 3 × an + 1 si an est impair

Ecrire une méthode static int syracuse (int p, int n) qui calcule la valeur du nieme

terme de la suite Syracuse

A. U. : 09-10 S. ElkosantiniS. Elkosantini 43

terme de la suite Syracusep.

Les premiers pas en Java

Les boucles et les structures de contrôlesLes boucles et les structures de contrôles

break et continue

break : permet de sortir d’une boucle sans exécuter la suite des instructions

continue : arrête l'exécution de l'itération courante, et l'exécution reprend en

début de boucle avec l'itération suivante

A. U. : 09-10 S. ElkosantiniS. Elkosantini 44

Page 12: Cours POO2

12

Les premiers pas en Java

Les tableaux Les tableaux Tableau unidimensionnels

NULLDéclaration : int [] tab;ou int tab[];

NULLtab

Pas de dimensions dans la déclaration

Dimensionnement: int [] tab = new int [3] tab

. . .

A. U. : 09-10 S. ElkosantiniS. Elkosantini 45

Allocation dans la mémoire selon le type du tableau

Initialisation: tab [0]=3; tab [1]=2; tab [2]=1 tab3 2 1

ou autrement , int [] tab={3,2,1};

Les premiers pas en Java

Les tableaux Les tableaux Tableau multidimensionnels

NULLDéclaration : type [][] tab; NULLtab

Dimensionnement: tab = new type [2][3]; tab . . .

. . .

.

.ou aussi

A. U. : 09-10 S. ElkosantiniS. Elkosantini 46

tab = new type [2];tab [0] = new type[2];tab [1] = new type[3]

tab .

.

. .

. . .

Les premiers pas en Java

Les tableaux Les tableaux Exercice 3:

Soit T une matrice carrée de 3 lignes et 3 colonnes. Ecrire un algorithme qui affiche un

message informant si la matrice est symétrique ou pas.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 47

Les premiers pas en Java

Les tableaux Les tableaux Exercice 4:

Ecrire un algorithme qui tri un tableau en utilisant la méthode de tri par insertion.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 48

Page 13: Cours POO2

13

Les premiers pas en Java

Les vecteursLes vecteursLa classe vecteur permet de gérer des listes contenant plusieurs typesp g p yp

La taille du vecteur est dynamique, contrairement à celle d’un tableau.

Déclaration : Vector v = new Vector()Vector v = new Vector(5)

Quel est la différence ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 49

Ajout d’élément dans le vecteur :

v.addElement(new Integer(1)); // Ajouter un premier élément v.addElement(new Float(1.9999)); // Ajouter un autre élément for (int i=2; i<10; i++) { int lastInt = ((Number) v.lastElement()).intValue(); v.addElement(new Integer(i + lastInt)); } // Ajouter d’autres éléments

Les premiers pas en Java

Les commentairesLes commentairesImportance des commentaire

Clareté du code

Réutilisation facile du code

Génération automatique du javadoc ou le Help du programme développé

Deux types de commentaire

Commentaire classique /* …*/ ou // …

A. U. : 09-10 S. ElkosantiniS. Elkosantini 50

Génération d’un fichier (HTML) de documentation /** …*/

/** * Ceci est un commentaire pour Javadoc* @author Sabeur * @version 2.0 */

?

Plan

Chapitre 1 : IntroductionChapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : Le concept d’objetsChapitre 4 : POO avec JavaChapitre 5 : … et avec C++

A. U. : 09-10 S. ElkosantiniS. Elkosantini 51

POO avec Java

Les objets et les classes en JavaLes objets et les classes en Java

Moto

Moto

CouleurVitesse_limite

Accélérer Freiner

…L’implémentation de cette classe en Java est :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 52

Page 14: Cours POO2

14

POO avec Java

La visibilité des variables et des attributsLa visibilité des variables et des attributs

A. U. : 09-10 S. ElkosantiniS. Elkosantini 53

Les paramètres sont aussi considérés comme des variables locales

POO avec Java

La visibilité des variables et des attributsLa visibilité des variables et des attributs

public class LocalVariable {private static double sum(double[] values) {double sum=0.0;for(double v:values) {sum+=v;} // v n'est plus accessiblereturn sum; // values et sum pas accessible}private static void test(int i) {for(int i=0;i<5;i++) // erreur

A. U. : 09-10 S. ElkosantiniS. Elkosantini 54

Une variable à pour portée le bloc dans lequel elle est définie

for(int i=0;i<5;i++) // erreurdoIt(i);}}

POO avec Java

Les méthodesLes méthodes

En Java, il est impossible de définir du code hors d'une méthode. Ja a, est poss b e de dé du code o s d u e ét ode.

Une méthode est séparée en 2 parties :

La signature (types des paramètres, type de retour).

Le code de la méthode.int valeur(){

int amortissement; amortissement = 0.05;

P i P i * i * A

A. U. : 09-10 S. ElkosantiniS. Elkosantini 55

Le code d'une méthode est constitué de différents blocs imbriqués. Chaque

bloc définit et utilise des variables locales.

return Prix – Prix * amortissement * Age;}

POO avec Java

… et le constructeur en Java… et le constructeur en Java

Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit au C aque appe à u co st ucteu c ée u ou e objet ( sta ce) qu obé t au

patron défini par la classe :

• l’instance créée aura les attributs et le comportement définis dans la classe.

• réservation d’un espace mémoire pour la mémorisation de l’état.

Le constructeur est généralement l’occasion d’initialiser les attributs («

personnaliser » l’état de l’instance).

A. U. : 09-10 S. ElkosantiniS. Elkosantini 56

Il peut y avoir plusieurs constructeurs pour une même classe.

Plusieurs initialisations possibles.

Page 15: Cours POO2

15

POO avec Java

… et le constructeur en Java… et le constructeur en Java

L t ti JAVA La construction en JAVA :new + nom de la classe (paramètres)

C’est le constructeur

Produit p1 = new Produit (« Portable », 1) ;

A. U. : 09-10 S. ElkosantiniS. Elkosantini 57

p ( , ) ;Produit p2 = new Produit () ;

Comment programmer la classe Produit ??

POO avec Java

… et le constructeur en Java… et le constructeur en JavaMoto

Et si les paramètres du constructeur CouleurVitesse_limite

MotoAccélérer Freiner L’implémentation de cette classe en Java est :

Et si les paramètres du constructeur portent le même nom que les attributs ??

A. U. : 09-10 S. ElkosantiniS. Elkosantini 58

POO avec Java

L’instanciationL’instanciation

Moto

Le mot clef new est utilisépour créer une instance dynamique d'un objet à chaque fois qu'on en a

besoin.

Moto : Kawasaki Moto : Yamaha

C l

CouleurVitesse_limite

Accélérer Freiner

besoin.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 59

Couleur : noirVitesse_limite : 200

Accélérer Freiner

Couleur : rougeVitesse_limite : 250

Accélérer Freiner

POO avec Java

Le cycle de vie d’un objetLe cycle de vie d’un objet

La création d’un objet ou, autrement dit, …..a c éat o d u objet ou, aut e e t d t, …..

Objet obj ; NULLobj

Cette opération déclare uniquement le nom et le type de l’objet. Les attributs et les

méthodes ne sont pas encore créer.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 60

p

Page 16: Cours POO2

16

POO avec Java

Le cycle de vie d’un objetLe cycle de vie d’un objet

La création d’un objet ou, autrement dit, …..a c éat o d u objet ou, aut e e t d t, …..

Objet obj ; NULLobj

Objet obj = new Objet() ; Attribut 1Attribut 2

… Méthode 1

obj

A. U. : 09-10 S. ElkosantiniS. Elkosantini 61

C’est à ce moment que l’allocation mémoire est réalisée

POO avec Java

Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java

Accès aux attributs et méthodes d’un objet à partir d’un autre objet .ccès aux att buts et ét odes d u objet à pa t d u aut e objet .

Nomobjet.Nommethode() ;Nomobjet.NomAttribut;

L’envoi de messages entre objets :

…….

Il ne faut pas oublié les paramètres dans les

A. U. : 09-10 S. ElkosantiniS. Elkosantini 62

Il ne faut pas oublié les paramètres dans les messages

Les cascades sont possibles : Magasin.produit.nom

POO avec Java

Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java

Dans le traitement de l’une de ses méthodes, un objet peut avoir à s’envoyer a s e t a te e t de u e de ses ét odes, u objet peut a o à s e oye

un message (pour accéder à un de ses attributs ou invoquer une des ses

méthodes).

Utilisation de l’auto-référence, en java : this.

Exemple : on se place dans une méthode de la classe Moto :

• Lors du traitement, l’objet appelant la méthode est une instance de la classe

A. U. : 09-10 S. ElkosantiniS. Elkosantini 63

, j pp

Moto.

this.Freiner() signifie « envoyer à this (= moi-même) le message Freiner() »

POO avec Java

Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java

L’appel à l’objet courant : utilisation du mot clé thisappe à objet cou a t : ut sat o du ot c é this

this.methode() ;this.attribut;

Exemple d’utilisation

public class Moto {int Vitesse;int Prix;

A. U. : 09-10 S. ElkosantiniS. Elkosantini 64

int Prix;

Moto( int Vitesse , int Prix){……

}

Page 17: Cours POO2

17

POO avec Java

Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java

Si pas d’ambiguïté, le mot clé this peut être oublié : S pas d a b gu té, e ot c é t s peut êt e oub é :

this.Freiner () ; Freiner();this.Prix; Prix;

Exercice 5 :

Ecrire une classe Livre, caractérisée par les attributs titre, auteur et année et par les

méthodes suivantes :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 65

méthodes suivantes :

- Une méthode affichant les caractéristiques d’un livre

- Une méthode qui prend en paramètre un livre et qui permet d’afficher les deux

livres et de le comparer le nom du livre passé en paramètre.

POO avec Java

Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java Exercice 6 :

Créer une classe Segment qui est définie par ses extrémités (des points) et par sa g q p ( p ) p

couleur. Avec cette classe, on peut calculer la longueur d’un segment, le déplacer

et changer sa couleur.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 66

POO avec Java

La surcharge La surcharge La surcharge de méthodes : un mécanisme donnant la possibilité d'appeler

plusieurs méthodes avec le même nom.

int somme( int p1, int p2){ return (p1 + p2); }

float somme( float p1 float p2){

Exemple : la surcharge de

la méthode somme

Des méthodes surchargées peuvent avoir des types de retour différents à condition qu’elles aient des arguments différents.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 67

float somme( float p1, float p2){ return (p1 + p2); }

float somme( float p1, float p2, float p3){ return (p1 + p2 + p3); }

int somme( float p1, int p2){ return (int(p1) + p2); }

POO avec Java

La surchargeLa surchargeExercice 7:

1. Créez une classe avec un constructeur par défaut qui imprime un message.

2. Ajoutez à cette classe un constructeur surchargé qui prend un String en argument et

qui l'imprime avec votre message.

3. Créez, dans le programme principale, deux instances de cette objet pour tester les

deux constructeurs.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 68

Page 18: Cours POO2

18

POO avec Java

La manipulation des objetsLa manipulation des objets

L’affectation et la comparaison :a ectat o et a co pa a so :

Objet a= new Objet ();Objet b= new Objet ();a = b ;

Quel est la différence entre les deux instances a et b ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 69

POO avec Java

La manipulation des objetsLa manipulation des objets

L’affectation et la comparaison :a ectat o et a co pa a so :

Objet a = new Objet ();Objet b = new Objet ();boolean rep = (a == b) ;

Que signifie cette comparaison ?

Vérifier si les deux objets ont la même référence.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 70

POO avec Java

La manipulation des objetsLa manipulation des objets

L’affectation et la comparaison :Quel est le résultat de l’instruction

BMW==Mercedes ?a ectat o et a co pa a so :

Voiture : BMW

Puissance : 9Couleur: noir

Accélérer Freiner

Voiture : Mercedes

Puissance: 9Couleur : noir

Accélérer Freiner

A. U. : 09-10 S. ElkosantiniS. Elkosantini 71

Comment créer deux objets avec la même référence

Les deux objets ont les mêmes valeurs d’attributs mais la référence est différente.

POO avec Java

La destruction des objetsLa destruction des objets

Le destructeur de classe consiste en une méthode qui sera appelée lors de e dest ucteu de c asse co s ste e u e ét ode qu se a appe ée o s de

toute destruction d'un objet.

Avant que l'objet ne soit recyclé par le ramasse-miettes, le système appelle la

méthode finalize :

finalize est une méthode dans laquelle on pourra implémenter proprement la

fermeture éventuelle de fichiers/sockets ouverts ou tout autres opérations.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 72

En Java, le ramasse-miettes (ou le garbage collector), est un mécanisme qui

s’occupe de la libération ou non d’une zone mémoire. C’est un mécanisme

automatique.

Le système essaye d'abord d'appeler l'objet finalize avant de jeter l'objet

Page 19: Cours POO2

19

POO avec Java

La destruction des objetsLa destruction des objets

class Moto{{

int vitesse;String couleur;

Moto(){

…..

System.out.println("L'objet a été créé");}

A. U. : 09-10 S. ElkosantiniS. Elkosantini 73

}

void finalize(){

System.out.println("Objet nettoyé de la mémoire");}

}

POO avec Java

Encapsulation Encapsulation en Javaen Java

Compte_BancaireIl existe trois niveaux de visibilité : - Num_RIB- Nom- Montant

+ Créditer()+ Débiter()

ex ste t o s eaux de s b té :

Privé : en Java, private

publique: en Java, public

protégé: en Java, protected

public String var1;public int methode1();

A. U. : 09-10 S. ElkosantiniS. Elkosantini 74

p ()

protected char var2;protected void methode2();

private int var3;private void methode3();

POO avec Java

Encapsulation Encapsulation en Javaen Java

L’idée de restreindre la visibilité des méthodes et des attributs : dée de est e d e a s b té des ét odes et des att buts :

• Rendre privé les attributs caractérisant l’état de l’objet et de fournir des méthodes

publiques permettant de modifier/accéder à l’attributs.

Des getters et des setters

A. U. : 09-10 S. ElkosantiniS. Elkosantini 75

Attribut Montant : getMontant () : le getter setMontant (…) : le setter

POO avec Java

Encapsulation Encapsulation en Javaen Java

Exemple : Application pour la gestion des comptes en banques. xe p e : pp cat o pou a gest o des co ptes e ba ques.

• La classe Banque ayant comme attribut solde.

• Dans un premier temps, l’attribut est déclaré comme publique.

Quel est l’inconvénient d’un tel programme ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 76

Quelle amélioration proposez-vous ?

Page 20: Cours POO2

20

POO avec Java

L’accès aux classes en JavaL’accès aux classes en Java

On ne peut pas rendre une classe privé ou protégé, parce que …….

Comment rendre une classe privé ou protégé en Java ?

On peut rendre une classe (d’une bibliothèque) publique.

La classe de la bibliothèque est accessible pour les utilisateurs.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 77

Que se passe t-il si on ne mets rien avant le mot class ?

POO avec Java

Encapsulation Encapsulation en Javaen Java + Compte_Bancaire- Num_RIB- Nom- Montant

+ Créditer()+ Débiter()

Implémenter cette

classe en java

A. U. : 09-10 S. ElkosantiniS. Elkosantini 78

POO avec Java

Le mot clé Le mot clé staticstatic

A éth d i tt ib t ’ t ibl t l’i t i ti d l Aucune méthodes ni attributs n’est accessible avant l’instanciation de la

classe en utilisant le mot clé … .

La zone mémoire n’est pas encore allouée.

Les méthodes et les attributs sont alors associés à l’objet et non à la classe.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 79

… et si on veut que la donnée ou la méthode n'est pas spécifiquement

rattachée à un objet instance d’une classe ?

Utilisation du mot clé static

POO avec Java

Le mot clé Le mot clé staticstatic

class StaticTest {{static int i = 47;}

StaticTest st1 = new StaticTest();StaticTest st2 = new StaticTest();

Et dans une autre classe:

A. U. : 09-10 S. ElkosantiniS. Elkosantini 80

Comment incrémenter l’attribut i ?

Page 21: Cours POO2

21

POO avec Java

L’héritageL’héritageForme

Rectangle Triangle CercleEn Java, en utilisant le mot clé extends

class Forme{

// ….{

class Rectangle extends Forme

Et le mot clé protected ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 81

g{

// ….{

class Triangle extends Forme{

// ….{

C’est quoi une méthode finald’une classe mère?

POO avec Java

L’héritageL’héritageForme

dessiner ()effacer()

deplacer()t l ()

L’implémentation en Java de la classe Trianglegetcouleur()setcouleur()

Carre TriangleRetournerHor()RetournerVer()

Cercle

A. U. : 09-10 S. ElkosantiniS. Elkosantini 82

POO avec Java

L’héritage : le polymorphismeL’héritage : le polymorphismeForme

dessiner ()effacer()

deplacer()getcouleur()

L’implémentation en Java de la classe Trianglegetcouleur()setcouleur()

Carredessiner()effacer()

Triangledessiner()effacer()

Cercledessiner()effacer()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 83

POO avec Java

L’héritage à plusieurs niveauxL’héritage à plusieurs niveauxForme

dessiner ()effacer()

deplacer()getcouleur()

L’implémentation en Java de la classe Triangle rectanglegetcouleur()setcouleur()

Carredessiner()effacer()

Triangledessiner()effacer()

Cercledessiner()effacer()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 84

Triangle isocèle

Triangle rectangle

Page 22: Cours POO2

22

POO avec Java

L’héritage : la redéfinition et le polymorphismeL’héritage : la redéfinition et le polymorphisme

L défi iti défi i d éth d hé ité d l lLa redéfinition : redéfinir des méthodes héritées de la super-classe.

La sous-classe doit impérativement conserver la déclaration de la méthode

parent (même type et nombre de paramètres et valeur de retour)

Le polymorphisme : ajoute des méthodes dans la sous-classe.

Exemple : Touts les classes de Java héritent de la classe Object. Il héritent

ainsi des méthodes telles que getClass() clone() toString() Forme

A. U. : 09-10 S. ElkosantiniS. Elkosantini 85

ainsi des méthodes telles que getClass(), clone(), toString().dessiner ()effacer()

Triangledessiner()

dessiner(int p)Redéfinition

Polymorphisme

POO avec Java

L’héritage : l’accès aux méthodes de la super classeL’héritage : l’accès aux méthodes de la super classe

Pour invoquer une méthode d'une classe parent, il suffit d'indiquer la

méthode préfixée par super.

class Forme{

void effacer (){{ System.out.println(‘’la forme est effacée’’);}}

class Rectangle extends Forme

A. U. : 09-10 S. ElkosantiniS. Elkosantini 86

class Rectangle extends Forme{

void effacer (){{

System.out.println(‘’le rectangle est effacé’’);super.effacer();

}}

Quel est le résultat ?

POO avec Java

L’héritage : l’accès au constructeur de la super classeL’héritage : l’accès au constructeur de la super classePour appeler le constructeur de la classe parent il suffit d'écrire

super(paramètres) avec les paramètres adéquats.

class Moto{

Moto (){this(0,100) ;}

class Quad extends Moto{int nb-roues;

Quad (int k int p){

Il est obligatoire dans un constructeur d'une classe fille de faire appel

explicitement ou implicitement au constructeur de la classe mère.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 87

Moto (int km){this(km,100) ;}

Moto (int km, int prix){this.km = km ;this.prix=prix;} }

Quad (int k, int p){super(k, p);nb_roues = 4; }

}

Et s’il n’y a pas de constructeur dans la classe mère ?

POO avec Java

L’héritage : le transtypageL’héritage : le transtypageLe transtypage : Traiter un type dérivé comme s'il était son type de base.

Appelé aussi transtypage ascendant, surtypage ou pcasting.

Changer un type vers son type de base revient à remonter dans le

diagramme d'héritage : c’est le transtypage « ascendant ».

Créer trois objets de type cercle, carré et triangle. Ecrire dans la classe principale les méthodes permettant d’afficher la couleur de chaque instance.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 88

Page 23: Cours POO2

23

POO avec Java

L’héritage : le transtypageL’héritage : le transtypageLe transtypage en java :

Forme f = new Triangle () ;

On créé un objet Triangle appelé f et qui est assignée au type Forme, ce

qui semblerait être une erreur (assigner un type à un autre).

Formedessiner ()effacer()Selon le diagramme suivant, quelle

méthode dessiner () va être exécuter ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 89

Carredessiner()effacer()

Triangledessiner()effacer()

Cercledessiner()effacer()

méthode dessiner () va être exécuter ?

f.dessiner() ;

POO avec Java

L’héritage : le transtypageL’héritage : le transtypageLa classe mère Forme établit l'interface commune pour toutes les classes

filles .

toutes les formes peuvent être dessinées et effacées.

Les classes dérivées redéfinissent ces méthodes pour fournir un

comportement unique pour chaque type de forme spécifique.

Forme f = new Triangle () ;L’i t f

A. U. : 09-10 S. ElkosantiniS. Elkosantini 90

Implémentation

Interface

Classe Forme

Implémentation

InterfaceClasse Triangle L’instance f

Interface

Implémentation

POO avec Java

L’héritage : le transtypageL’héritage : le transtypagePour l’exemple suivant :

Formedessiner ()effacer()

getcouleur()

Implémentation

InterfaceClasse Forme Carre

dessiner()effacer()

Triangledessiner()effacer()

Cercledessiner()effacer()

Forme f = new Trianglerectangle () ;

I lé t ti

InterfaceClasse Trianglerectangle

A. U. : 09-10 S. ElkosantiniS. Elkosantini 91

L’instance f Interface

Implémentation

Triangle isocèle

Triangle rectangle

Implémentation

Selon le diagramme suivant, quel est le résultat de l’instruction f.dessiner() ?

POO avec Java

L’héritage : le transtypageL’héritage : le transtypageRécapitulation : Dans quel cas le transtypage et le polymorphisme sont

utilisés ?

………………….class Emloye {String nom;int id, salaire;

public Emloye(String n) {nom=n;

class magasinier extends Employe {public magasinier(String n) {

super (n);salaire = 250;

}void affiche ()

{

A. U. : 09-10 S. ElkosantiniS. Elkosantini 92

}{

System.out.println("Je suis un magasinier");}

Dans le programme principal, créer un magasinier en utilisant le transtypage et exécuter la méthode affiche de l’objet créer. Quel est le résultat ?

Page 24: Cours POO2

24

POO avec Java

L’héritageL’héritage

Exercice 8: Créer une hiérarchie d'héritage de Rongeur: Souris, Gerbille, et

Hamster. Dans la classe de base, fournir des méthodes qui sont communes à tous

les Rongeurs, et les redéfinir dans les classes dérivées pour exécuter des

comportements différents dépendant du type spécifique du Rongeur. Créer un

tableau de Rongeur, le remplir avec différent types spécifiques de Rongeurs, et

appeler vos méthodes de la classe de base pour voir ce qui arrive.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 93

POO avec Java

L’héritageL’héritageExercice 9:

Ecrivez les classes nécessaires au fonctionnement du programme suivant. Donnez uniquement le nom des classes et les méthodes (sans détailler le contenu).

bli l T tB ti t { public class TestBatiments { public static void main(String args[]){

Batiments[] B=new Batiments[3] ;B [0] = new Appartement(‘’Atef’’) ;B [1] = new Villa(‘’Walid’’) ;B [2] = new Studio(‘’Anis’’) ;For (int i = 0; i<3 ; i++)

B [i].affiche() ; }

A. U. : 09-10 S. ElkosantiniS. Elkosantini 94

}}

Le résultat de ce programme est :L’appartement appartient à AtefLa villa appartient à WalidLe studio appartient à Anis

POO avec Java

Classes abstraitesClasses abstraites

Formepérimètre ()périmètre ()

Carrepérimètre ()

Trianglepérimètre ()

Cerclepérimètre ()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 95

Comment implémenter la méthode périmètre () de la classe Forme ?

La méthode périmètre () ne peut pas être implémenté dans la déclaration de la classe Forme, car on ne sait pas comment calculer le périmètre d'une

forme quelconque

POO avec Java

Classes abstraitesClasses abstraites

Il faut donner la signature de la méthode périmètre () mais pas son g p () pimplémentation dans la classe Forme

C’est une méthode abstraite

S t b t t bli d bl é i èt ( )

A. U. : 09-10 S. ElkosantiniS. Elkosantini 96

Syntaxe : abstract public double périmètre ( ) ;

• L’implémentation de la méthode sera dans les classes filles permettant ainsi de

spécifier un comportement différent pour chacune des classes

Page 25: Cours POO2

25

POO avec Java

Classes abstraitesClasses abstraites

• Une classe abstraite est une classe contenant au moins une méthode abstraite

Exemple:

est appelée une classe abstraite

abstract public class Forme {private String nom;public Forme (Forme nom) { this.nom=nom; }

A. U. : 09-10 S. ElkosantiniS. Elkosantini 97

p ( ) { }abstract public double perimetre( ) ;public void dessiner ( ){System.out.println ( " Je suis " + this . nom) ; }}

POO avec Java

Classes abstraitesClasses abstraites L’implémentation des classes filles :

public class Cercle extends Forme{private double rayon ;private double rayon ;public Cercle ( double rayon ){super ( " cercle " ) ; this . rayon = rayon ; }public double perimetre ( ){ return 2 * Double.PI * this.rayon ; } }

public class Rectangle extends Forme{pr ivate double l a r g e u r ;pr ivate double l o n g u e u r ;

A. U. : 09-10 S. ElkosantiniS. Elkosantini 98

pr ivate double l o n g u e u r ;public Rectangle ( double l a r g e u r , double l o n g u e u r ){super ( " rectange " ) ; this . l a r g e u r = l a r g e u r ;this . l o n g u e u r = l o n g u e u r ; }public double perimetre( ){ return (this . l a r g e u r + this . l o n g u e u r)/2 ; } }

POO avec Java

Classes abstraitesClasses abstraites

La présence d’une méthode virtuelle pure dans une classe a 3 conséquences:

La classe ne peut plus être instanciée,

Une classe abstraite n'existe que pour être héritée,

Toute classe fille de cette classe doit redéfinir la méthode en question,

Une classe fille héritant d'une classe mère abstraite doit implémenter

A. U. : 09-10 S. ElkosantiniS. Elkosantini 99

p

toutes ses méthodes abstraites, sinon elle est aussi une classe abstraite.

Une méthode static ne peut être abstraite car on ne peut redéfinir une méthode static)?

POO avec Java

Classes abstraitesClasses abstraitesExemple 2 :

bli b t t l C t I f B { Méth d b t it public abstract class CentreInfoBourse {private URL[] urlsCentre;. . .abstract protected String lireDonnees(String[] titres);

public String calcule(String[] titres) {. . .donnees = lireDonnees(titres);

Méthode non abstraite malgré qu’elle utilise une méthode abstraite

Méthode abstraite

A. U. : 09-10 S. ElkosantiniS. Elkosantini 100

donnees = lireDonnees(titres);// Traitement effectué sur donnees// indépendant du site boursier

. . .

Page 26: Cours POO2

26

POO avec Java

Classes abstraitesClasses abstraitesExemple 2 :

public class LesEchos extends CentreInfoBourse {. . .public String lireDonnees(String[] titres) {// Implantation pour le site des Echos. . .

}Implémentation de la méthode abstraite

La classe mère définit la structure globale de la classe.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 101

Elle laisse aux classes filles le soin de définir des méthodes (méthode

lireDonnees).

POO avec Java

Classes interfacesClasses interfaces

Une interface est une « classe » purement abstraite dont toutes les méthodes

sont abstraites et publiques.

Une interface est un prototype de classe. Elle définit la signature des méthodes qui doivent être implémentées dans les classes construites à

partir de ce prototype

A. U. : 09-10 S. ElkosantiniS. Elkosantini 102

Une interface est une classe purement abstraite dont toutes les méthodes sont abstraites et publiques et sans attributs (les mots-clés abstract et

public sont optionnels).

Syntaxe : inter face NomInterface { . . . }

POO avec Java

Classes interfacesClasses interfaces

public interface Figure {p blic abstract oid dessiner ()public abstract void dessiner ();public abstract void deplacer(int x, int y);public abstract Position getPosition();

}public interface Comparable {/** renvoie vrai si this est plus grand que o */boolean plusGrand(Object o);

}

A. U. : 09-10 S. ElkosantiniS. Elkosantini 103

Les mots-clés abstract et public sont optionnels

POO avec Java

Classes interfacesClasses interfaces

Comment implémenter les méthodes d’une pinterface?

Une classe implémente une interface A si elle déclare « implements A » dans

son en-tête.

S t l Cl i l t I t f { }

A. U. : 09-10 S. ElkosantiniS. Elkosantini 104

Syntaxe : class Classe implements Interface{ . . . }

La classe doit implémenter toutes les méthodes de l'interface, sinon elle doit être déclarée abstract

Page 27: Cours POO2

27

POO avec Java

Classes interfacesClasses interfaces

Une classe peut implémenter plusieurs interfaces .

Syntaxe : class A implements Inter1, Inter2,...{ . . . }

Une classe peut hériter d'une autre classe et implémenter une ou plusieurs

interfaces.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 105

Syntaxe : class A extends B implements Inter1, Inter2 ,...{ . . . }

POO avec Java

Classes interfacesClasses interfaces

Une interface peut remplacer une classe pour déclarer une variable, un

paramètre, une valeur de retour, etc.

Exemple Figure f;

f contiendra des objets dont la classe implémentera l'interface Comparable.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 106

Exemple Figure f=new Cercle();

POO avec Java

Classes interfacesClasses interfaces

Une interface ne possède pas de d'attribut. Les interfaces ne sont pas instanciables

(comme les classes abstraites).

Une interface n'a pas de constructeurs.

Une interface peut définir des constantes, c'est-à-dire définir des variables

déclarées publiques, statiques et finale et ayant une valeur constante d'affectation.

Exemple : public static final float PI = 3.14f;

A. U. : 09-10 S. ElkosantiniS. Elkosantini 107

On ne donne que la signature des méthodes qui sont nécessairement des

méthodes d'instance publiques et abstraites : abstract public int f();

Une interface peut hériter d'une autre interface : inter face interface1 extends

interface2 { . . .}.

POO avec Java

Classes interfacesClasses interfaces

A quoi sert les interfaces en Java ?

Pour palier le manque d’héritage multiple en Java.

Pour offrir la possibilité d’avoir un comportement unique pour certaines

classes. Exemple : véhicule et voiture et camion.

Dissimuler l’implémentation des méthodes

Favoriser la réutilisation : si le type d'un paramètre d'une méthode est une

A. U. : 09-10 S. ElkosantiniS. Elkosantini 108

interface, cette méthode peut s'appliquer à toutes les classes qui

implémentent l'interface, et pas seulement à toutes les sous-classes d'une

certaine classe

Page 28: Cours POO2

28

Plan

Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec JavaChapitre 4 : Autres notions JavaChapitre 5 : Connexion aux bases de donnéesChapitre 5 Interfaces graphiq es a ec Ja a

A. U. : 09-10 S. ElkosantiniS. Elkosantini 109

Chapitre 5 : Interfaces graphiques avec Java

Autres notions Java

instanceofinstanceof

L’ é t i t f t d i à ll l ti t L’opérateur instanceof permet de savoir à quelle classe appartient une

instance

Si x est une instance d’une sous-classe B de A :

« x instanceof A » renvoie true

P t t i bj t t d l ê l l’ bj t t il f t

A. U. : 09-10 S. ElkosantiniS. Elkosantini 110

Pour tester si un objet o est de la même classe que l’objet courant, il ne faut

donc pas utiliser instanceof mais le code suivant :

if (o != null && o.getClass() == this.getClass())

Autres notions Java

instanceofinstanceofclass B{ …} class D extends B{ }class D extends B{…} class C {…}

B b = new B(); D d = new D(); C c = new C(); b instanceof B // …b instanceof D // …d instanceof B // …d instanceof D // …

A. U. : 09-10 S. ElkosantiniS. Elkosantini 111

b = d; b instanceof B // …b instanceof D // …c instanceof B // … :

// …

Autres notions Java

L’objet StringL’objet String

C’ t l idé é t i lC’est une classe considérée comme type simple.

Ce n’est pas un type primitif.

Initialisation : String txt= « c’est un texte »;

Longueur : txt.length();

A. U. : 09-10 S. ElkosantiniS. Elkosantini 112

Comparaison : txt .equals (« Hello!! »);

Accès aux caractères : txt.charAt(5);

Concaténation : String mot= « en français »;

String txt2 = txt+mot;

Page 29: Cours POO2

29

Autres notions Java

L’objet StringL’objet String

Exercice 8: Exercice 8:

Ecrire un programme qui permet d’afficher les mots d’une phrase. Les mots de la

phrases sont séparés par un espace puis « ; ».

A. U. : 09-10 S. ElkosantiniS. Elkosantini 113

Autres notions Java

Les packagesLes packages

U k t bl d l i i t ê Un package est un ensemble de classes voisines, couvrant me même

domaine et associées à une fonctionnalité.

Définition d’un package : package nom du package;

Les classes doivent être sauvegarder dans le même répertoire.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 114

Définition d un package : package nom_du_package;

Cette instruction est la première ligne dans les classes concernées.

Autres notions Java

Les packagesLes packages

Exemple de package Java :

java.lang

javax.swing

java.net

Pour utiliser les packages dans une classe :

Le package par défaut: java.lang

A. U. : 09-10 S. ElkosantiniS. Elkosantini 115

p g p j g

Pour les autres, il faut le signaler en utilisant le mot clé import

import monpackage.*; //ou

import monpackage.nomclasse;

import TP1.Ex1.*;

Autres notions Java

Les exceptionsLes exceptions

Les exceptions représentent le mécanisme de gestion des erreurs intégré au

langage java.

Une exception est un signal qui indique que quelque chose d’exceptionnel

(comme une erreur) s’est produit. Elle interrompt le flot d’exécution normal du

programme.

class Forme{ Quel est le résultat ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 116

{Public static void main (String arg[])

{ int a=3,b=0;System.out.println( a/b);}}

Que est e ésu tat ?

Exception in thread "main" java.lang.ArithmeticException: /by zeroat Forme.main(Forme.java:4)

Page 30: Cours POO2

30

Autres notions Java

Les exceptionsLes exceptions

Il existe 3 trois types d'exceptions organisés comme ceci :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 117

Autres notions Java

Les exceptionsLes exceptions

Les Error correspondent à des exceptions qu'il est rare d'attraper.

Les RuntimeException que l'on peut rattraper mais que l'on n'est pas

obligé.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 118

Les Exception que l'on est obligé d'attraper (try/catch) ou de dire

que la méthode appelante devra s'en occuper (throws).

Autres notions Java

Les exceptionsLes exceptions

Les exceptions levées par la VM correspondent :

– Erreur de compilation ou de lancement

NoClassDefFoundError, ClassFormatError

– problème d'entrée/sortie :

IOException, AWTException

– problème de ressource :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 119

p

OutOfMemoryError, StackOverflowError

– des erreurs de programmation (runtime)

NullPointerException, ArrayIndexOutOfBoundsException, ArithmethicException

POO avec Java

Les exceptions : capturer et attraperLes exceptions : capturer et attraper

Si un bloc de programme ou une méthode génère une exception elle doit

supposer qu'elle sera intercepté et levée.

Un bloc d’instruction peut être surveillé.

On peut attraper une exception avec l’instruction try.

try {// bloc d’instruction

A. U. : 09-10 S. ElkosantiniS. Elkosantini 120

Mais, quoi faire avec cette exception détectée ?

La gestion des exceptions avec l’instruction catch.

Page 31: Cours POO2

31

Autres notions Java

Les exceptions : capturer et attraperLes exceptions : capturer et attraper

try {// bloc d’instruction} catch (Type1 id1){ //instruction à faire en cas d’erreur de type 1 }

A. U. : 09-10 S. ElkosantiniS. Elkosantini 121

Autres notions Java

Les exceptions : capturer et attraperLes exceptions : capturer et attraper

public class Forme{public static void main(String[] args) {int a = 3;int b = 0;try {System.out.println("résultat = " + (i / j));}catch (ArithmeticException e) {

l ( h )

A. U. : 09-10 S. ElkosantiniS. Elkosantini 122

System.out.println (« erreur arithmétique »);}}}

Autres notions Java

Les exceptions : capturer et attraperLes exceptions : capturer et attraper

S’il y a plusieurs types d’exceptions à intercepter, il faut définir autant de

catch que de type d’exceptions.

try {// bloc d’instruction} catch (Type1 id1){ //instruction à faire en cas d’erreur de type 1 }catch (Type2 id2){ //i t ti à f i d’ d t 2 }

A. U. : 09-10 S. ElkosantiniS. Elkosantini 123

{ //instruction à faire en cas d’erreur de type 2 }catch (Type3 id3){ //instruction à faire en cas d’erreur de type 3 }

Un type d'exception donné ne doit pas venir après un type d'une exception d'une

super classe.

Autres notions Java

Les exceptions : Mais, c’est quoi une exception ?Les exceptions : Mais, c’est quoi une exception ?

En Java, les exception sont des objets ayant des méthodes et attributs.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 124

Source : cours de M. Baron

Page 32: Cours POO2

32

Autres notions Java

Les exceptions : capturer et attraperLes exceptions : capturer et attraper

public class Forme{public static void main(String[] args) {int a = 3;int b = 0;try {System.out.println("résultat = " + (i / j));}catch (Exception e) {}

A. U. : 09-10 S. ElkosantiniS. Elkosantini 125

}catch (ArithmeticException e) {System.out.println (« erreur arithmétique »);}}}

Autres notions Java

Les exceptions : Lancer ou déclencherLes exceptions : Lancer ou déclencher

Une méthode déclare qu’elle peut lancer une exception par le mot clé

throws.

Déclaration : Moto (String couleur, int vitesse) throws MotoErr{...}

L é i d’ ll i ili l lé th

A. U. : 09-10 S. ElkosantiniS. Elkosantini 126

La création d’une nouvelle exception en utilisant le mot clé throw.

Déclaration : Moto (String couleur, int vitesse) throws MotoErr{If (vitesse <0) throw new MotoErr();…}

Autres notions Java

Les exceptions : Lancer ou déclencherLes exceptions : Lancer ou déclencherSi une méthode peut lancer une méthode, il

faut utiliser try catch lors de son appel faut utiliser try … catch lors de son appel dans un autre programme

public static void main(String[] args) {try {Moto kawazaki=new Moto(‘’Rouge’’, -15);e.freiner();}catch (MotoErr e) {

A. U. : 09-10 S. ElkosantiniS. Elkosantini 127

catch (MotoErr e) {System.out.println (‘’erreur d’instanciation‘’);}}

Mais, c’est quoi MotoErr ?

Autres notions Java

Les exceptions : Lancer ou déclencherLes exceptions : Lancer ou déclencher

A. U. : 09-10 S. ElkosantiniS. Elkosantini 128

Page 33: Cours POO2

33

Autres notions Java

Les exceptions Les exceptions

Exercice 9:

Définissez une référence objet et initialisez la à null. Essayez d'appeler cette méthode

grâce à cette référence. Maintenant enveloppez le code dans une clause try-catch

afin de capter l'exception.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 129

Autres notions Java

Les exceptions : Le bloc Les exceptions : Le bloc finallyfinally

Sert à exécuter un code quoi qu'il arrive (fermer un fichier, une connexion,

libérer une ressources)

Déclaration : try{…}finally{}

L h ' bli i

A. U. : 09-10 S. ElkosantiniS. Elkosantini 130

Le catch n'est pas obligatoire.

Autres notions Java

Les exceptions : Le bloc Les exceptions : Le bloc finallyfinally

Exemple :

ReentrantLock lock = new ReentrantLock();lock.lock();try {doSomething();} finally {lock.unlock()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 131

}

Autres notions Java

Les fluxLes flux

Pour obtenir des données, un programme ouvre un flux de données sur une

source de données (fichier, clavier, mémoire, etc).

De la même façon pour écrire des données dans un fichier, un programme

ouvre un flux de données.

Java fournit un paquetage java.io qui permet de gérer les flux de données en

entrée et en sortie, sous forme de caractères (exemple fichiers textes) ou

A. U. : 09-10 S. ElkosantiniS. Elkosantini 132

sous forme binaire (octets, byte).

Java emploie un stream (flux en anglais) entre la source et la destination

des données. Toute opération d'entrée/sortie en Java suit le schéma suivant

Page 34: Cours POO2

34

Autres notions Java

Les fluxLes flux

Toute opération d'entrée/sortie en Java suit le schéma suivant :

Ouverture d'un flux;

Lecture ou écriture des données;

Fermeture du flux.

java.io fournit toutes les classes nécessaires à la création, lecture, écriture et

traitement des flux.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 133

Il y a un grand nombre de classes intervenant dans la manipulation des flux

(plus de 50).

Autres notions Java

Les fluxLes flux

Java fournit quatre hiérarchies de classes pour gérer les flux de données:

Pour les flux binaires :

o La classe InputStream et ses sous-classes pour lire des octets

(FileInputStream)

o La classe OuputStream et ses sous-classes pour écrire des octets

(FileOuputStream).

A. U. : 09-10 S. ElkosantiniS. Elkosantini 134

Pour les flux de caractères :

o La classe Reader et ses sous-classes pour lire des caractères

(BufferedReader, FileReader).

o La classe Writer et ses sous-classes (BufferedWriter, FileWriter).

Autres notions Java

Les flux de caractèresLes flux de caractèresExemple : lecture à partir du clavier :

class Test { Le casting d’un objetd t I tStclass Test {

public static void main(String[] argv) {System.out.println("Veuillez saisir votre nom :");String inputLine = " ";try {

BufferedReader is = new BufferedReader(new InputStreamReader(System.in));String inputLine;

inputLine = is.readLine();is.close();

} catch (Exception e) {

de type InputStreamen Reader

Lire la ligne jusqu’au caractère « retour chariot »

……

A. U. : 09-10 S. ElkosantiniS. Elkosantini 135

System.out.println("Intercepté : " + e);}

if (inputLine != null)System.out.println("Votre nom est :" + inputLine);

}}

Autres notions Java

Les flux de caractèresLes flux de caractèresExemple : lecture à partir du clavier avec la classe java.util.scanner:

import java.util.Scanner;

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

System.out.println("Entrez votre nom :");

Scanner input = new Scanner(System in);

A. U. : 09-10 S. ElkosantiniS. Elkosantini 136

Scanner input new Scanner(System.in);

String nom = input.nextLine();

System.out.println("Bonjour " + nom);}

Page 35: Cours POO2

35

Autres notions Java

Les flux de caractèresLes flux de caractères

Exemple : lecture à partir du clavier avec la classe System.in.read():

Renvoie une valeur de type byte que l’on convertira en caractère

par un opérateur cast.

char c = (char)System.in.read();

A. U. : 09-10 S. ElkosantiniS. Elkosantini 137

Autres notions Java

Les flux de caractèresLes flux de caractères

Exemple : lecture à partir du clavier avec la classe System.in.read():

char c;String chaine = "";while ((c = (char)System.in.read()) != ’\n’)chaine=chaine+c;

A. U. : 09-10 S. ElkosantiniS. Elkosantini 138

Autres notions Java

Les flux de caractèresLes flux de caractèresExemple : lecture à partir d’un fichier et écriture dans un autre :

class Test {public static void main(String[] argv) {try {FileReader in = new FileReader("a_lire.txt");

FileWriter out = new FileWriter("a_ecrire.txt");int c;while ((c = in.read()) != -1) {

out.write(c);}

Reader

Transfert de données de in vers out

Writer

Flux de caractères

A. U. : 09-10 S. ElkosantiniS. Elkosantini 139

}in.close();out.close();

} catch (Exception e) {System.out.println("Intercepté : " + e);

}}}

Fermeture des deux flux

Autres notions Java

Les flux de caractèresLes flux de caractèresExemple : lecture à partir d’un fichier et écriture dans un autre :

class Test {class Test {public static void main(String[] argv) {try {FileInputStream = new FileInputStream("a_lire.txt");FileOutStream out = new FileOutStream("a_ecrire.txt");

int c;while ((c = in.read()) != -1) {

out.write(c);} Quelle est la différence entre ce programme

A. U. : 09-10 S. ElkosantiniS. Elkosantini 140

}in.close();

out.close();} catch (Exception e) {

System.out.println("Intercepté : " + e);}

}}

Quelle est la différence entre ce programme et le programme précédent ?

Page 36: Cours POO2

36

Autres notions Java

Les fichiersLes fichiersLa classe File permet de gérer l’accès aux fichiers et aux répertoires.

Un répertoire est géré aussi comme un fichier.

La classe File appartient au package java.io.

File monFichier = new File("Note.txt");Déclaration :

Il s’agit de la création de l’objet File et non du fichier physique.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 141

du fichier physique.

monFichier.createNewFile();

Création du fichier portant le nom Note.txt.

Autres notions Java

Les fichiersLes fichiersQuelques méthodes :

boolean canRead() : vérifie si le fichier peut être lu

boolean canWrite() : vérifie si le fichier peut modifié

boolean delete() : supprime le fichier ou le répertoire

String getPath() : renvoie le chemin du fichier ou du répertoire

String[] list() : renvoie la liste des fichiers et des répertoires contenu dans le

A. U. : 09-10 S. ElkosantiniS. Elkosantini 142

réportoire

Il ne faut pas confondre les classes FileReader et FileInputStream et la classe

File.

Autres notions Java

Les fichiersLes fichiersAutres méthodes :

nom du fichier : getName()

chemin local vers le fichier : getPath()

chemin absolu vers le fichier :

getAbsolutePath()/getAbsoluteFile()/isAbsolute()

chemin canonique :getCanonicalPath()/getCanonicalFile()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 143

chemin vers le répertoire père : getParent()/getParentFile()

isDirectory() teste si un fichier est un répertoire

Plan

Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec JavaChapitre 4 : Autres notions Java Chapitre 5 : Connexion aux bases de donnéesChapitre 6 Interfaces graphiq es a ec Ja a

A. U. : 09-10 S. ElkosantiniS. Elkosantini 144

Chapitre 6 : Interfaces graphiques avec Java

Page 37: Cours POO2

37

Connexion aux bases de données

IntroductionIntroduction

Utilisation de l ’API JDBC pour les bases de données : p

JDBC pour Java DataBase Connectivity

API permet à des applications Java d'accéder à des bases de

données relationnelles quelconques

L ’API Fournit un ensemble de classes et d ’interfaces permettant

l’utilisation sur le réseau d’un ou plusieurs SGBD à partir d’un

A. U. : 09-10 S. ElkosantiniS. Elkosantini 145

l utilisation sur le réseau d un ou plusieurs SGBD à partir d un

programme Java.

Connexion aux bases de données

Le piloteLe pilote

BDJDBC

OracleMysqlSQLServerSybaseInformixDB2

Driver spécifique pour chaque

SGBD

C i l l é i i

A. U. : 09-10 S. ElkosantiniS. Elkosantini 146

Contient toutes les classes nécessaire pour communiquer avec

une base de données

Tous les drivers :

http://developers.sun.com/product/jdbc/drivers

Connexion aux bases de données

Architecture JDBCArchitecture JDBC

A. U. : 09-10 S. ElkosantiniS. Elkosantini 147

Connexion aux bases de données

Les étapes principalesLes étapes principales

Importer le package

java.sql

Charger le driver JDBC

Etablir la connexion à la

base de données

Créer une zone de description d’une requête

A. U. : 09-10 S. ElkosantiniS. Elkosantini 148

Exécuter la requête

Traiter les données

retournées

Fermer les différents

connexions

Page 38: Cours POO2

38

Connexion aux bases de données

JDBCJDBC

Charger le driver JDBC :

Importer le package

java sql

charger le driver JDBCCharger le driver JDBC :

Utilisation de la méthode forName de la classe Class• Oracle :

Class.forName("oracle.jdbc.driver.OracleDriver");• SQL Server 2000:

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");• Pont ODBC-JDBC

Class forName("sun jdbc odbc JdbcOdbcDriver");

java.sql

A. U. : 09-10 S. ElkosantiniS. Elkosantini 149

Class.forName( sun.jdbc.odbc.JdbcOdbcDriver );

Connexion aux bases de données

JDBCJDBC

Charger le driver JDBC :

Importer le package

java sql

charger le driver JDBCCharger le driver JDBC :

Utilisation de la méthode forName de la classe Class

Quand une classe Driver est chargée, elle doit créer une instance

d ’elle même et s ’enregistrer auprès du DriverManager

Certains compilateurs refusent cette notation et demande plutôt :

java.sql

A. U. : 09-10 S. ElkosantiniS. Elkosantini 150

try{

Class.forName (" driver_name ").newInstance();}

catch (ClassNotFoundException a) {System.out.println ("Driver non trouve");}

Connexion aux bases de données

JDBCJDBC

Etablir la connexion à la base de données :

Importer le package

java.sql

Charger le driver JDBC

Etablir la connexion à la

base de données

Etablir la connexion à la base de données :

Pour établir la connexion avec un SGBD, il faut préciser :

l ’URL de la base de données : jdbc:<sous-protocole>:<nom-BD>

le nom de la base de données

le login utilisé ainsi que son mot de passe

S l " db f l //h 33"

A. U. : 09-10 S. ElkosantiniS. Elkosantini 151

String strUrl = "jdbc:microsoft:sqlserver://hostname:1433";

Connection connect = DriverManager.getConnection(strUrl ,user,password);

Le DriverManager essaye tous les drivers qui se sont enregistrés (chargement en mémoire avec Class.forName()) jusqu’à ce qu’il trouve

un driver qui peut se connecter à la base

Connexion aux bases de données

JDBCJDBC

Etablir la connexion à la base de données :

Importer le package

java.sql

Charger le driver JDBC

Etablir la connexion à la

base de données

Etablir la connexion à la base de données :

try{

String strUrl = "jdbc:microsoft:sqlserver://hostname:1433";Connection connect = DriverManager.getConnection(strUrl ,user,password);}

catch (SQLException c) {System out println ("Connexion refuse ou base inconnu "+c);}

A. U. : 09-10 S. ElkosantiniS. Elkosantini 152

System.out.println ( Connexion refuse ou base inconnu +c);}catch (Exception d) {

System.out.println ("Probleme sur connexion");}

Page 39: Cours POO2

39

Connexion aux bases de données

JDBCJDBC

Créer une zone de description d’une requête :

Importer le package

java.sql

Charger le driver JDBC

Etablir la connexion à la

base de données

Créer une zone de description d’une requête

Créer une zone de description d une requête :

En utilisant la classe statement.

L ’objet Statement possède les méthodes nécessaires pour réaliser les

requêtes sur la base associée à la connexion dont il dépend

A partir de l ’objet Connexion, on récupère le Statement associé

A. U. : 09-10 S. ElkosantiniS. Elkosantini 153

Statement st= connexion.createStatement();

Connexion aux bases de données

JDBCJDBC

Exécuter la requête :

Importer le package

java.sql

Charger le driver JDBC

Etablir la connexion à la

base de données

Créer une zone de description d’une

requête

Exécuter la requête

Exécuter la requête :

3 types d ’exécution :

executeQuery() : pour les requêtes (SELECT) qui retournent un ResultSet

(tuples résultants)

executeUpdate() : pour les requêtes (INSERT, UPDATE, DELETE, CREATE

TABLE, DROP TABLE) qui retournent un entier (nombre de tuples traités)

A. U. : 09-10 S. ElkosantiniS. Elkosantini 154

execute() : pour requêtes inconnus. Renvoie true si la requête a donné lieu à la

creation d ’un objet ResultSetResultSet rs = st.executeQuery("SELECT nom, prenom FROM clients " +

"WHERE nom='itey ’ ORDER BY nom");

Connexion aux bases de données

JDBCJDBC

Exécuter la requête :

Importer le package

java.sql

Charger le driver JDBC

Etablir la connexion à la

base de données

Créer une zone de description d’une

requête

Exécuter la requête

Exécuter la requête :

ResultSet rs = st.executeQuery("SELECT nom, prenom FROM clients " +"WHERE nom='itey ’ ORDER BY nom");

int nb = st.executeUpdate("INSERT INTO dept(DEPT) VALUES(06)");

A. U. : 09-10 S. ElkosantiniS. Elkosantini 155

try { ResultSet rs = st.executeQuery( "SELECT * FROM MyTable" );catch (Exception e){System.out.println(e);}

Connexion aux bases de données

JDBCJDBC

Traiter les données retournées :

Importer le package java.sql

Charger le driver JDBC

Etablir la connexion à la base de

données

Créer une zone de description d’une

requête

Exécuter la requêteTraiter les données retournées

Traiter les données retournées :

L ’objet ResulSet (retourné par l ’exécution de executeQuery() ) permet

d ’accéder aux champs des tuples sélectionnés

seules les données demandées sont transférées en mémoire par le driver

JDBC

L f it ité ti t li li l éth d t()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 156

Le parcours se fait itérativement ligne par ligne par la méthode next()

retourne false si dernier tuple lu, true sinon

chaque appel fait avancer le curseur sur le tuple suivant

initialement, le curseur est positionné avant le premier tuple

Page 40: Cours POO2

40

Connexion aux bases de données

JDBCJDBC

Traiter les données retournées :

Importer le package java.sql

Charger le driver JDBC

Etablir la connexion à la base de

données

Créer une zone de description d’une

requête

Exécuter la requêteTraiter les données retournées

Traiter les données retournées :On peut identifier chaque colonne de la base de donnée

Par son indexPar son nom

L ’accès aux valeurs des colonnes se fait par les méthodes de la forme

getXXX()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 157

Lecture du type de données XXX dans chaque colonne du tuple

courantint val = rs.getInt(3) ; // accès à la 3e colonneString prod = rs.getString("PRODUIT")

Connexion aux bases de données

JDBCJDBC

Traiter les données retournées :

Importer le package java.sql

Charger le driver JDBC

Etablir la connexion à la base de

données

Créer une zone de description d’une

requête

Exécuter la requêteTraiter les données retournées

Traiter les données retournées :Parcourir les résultats d’une requête

String req= "SELECT note, nom FROM Etudiant ";ResultSet rs = st.executeQuery(req);

while(rs.next()) {(" ")

A. U. : 09-10 S. ElkosantiniS. Elkosantini 158

int i = rs.getInt(" note");String s = rs.getString(" nom");}

Connexion aux bases de données

JDBCJDBC

Traiter les données retournées :

Importer le package java.sql

Charger le driver JDBC

Etablir la connexion à la base de

données

Créer une zone de description d’une

requête

Exécuter la requêteTraiter les données retournées

Traiter les données retournées :

Correspondance des types

A. U. : 09-10 S. ElkosantiniS. Elkosantini 159

Connexion aux bases de données

JDBCJDBC

F l diff i

Importer le package

java.sqlCharger le driver

JDBC

Etablir la connexion à la

base de données

Créer une zone de description d’une requête

Exécuter la requête

Traiter les données

retournées

Fermer les différents

connexions

Fermer les différents connexions :Il faut fermer proprement les différentes connexion ouverts

Sinon le garbage collector s ’en occupera mais moins efficace

A. U. : 09-10 S. ElkosantiniS. Elkosantini 160

Chaque objet (de type Connection, resultset ou statement) possède une méthode close()

resultset.close();statement.close();connection.close();

Page 41: Cours POO2

41

Connexion aux bases de données

Exemple completExemple completImporter le package

java.sqlCharger le driver

JDBC

Etablir la connexion à la

base de données

Créer une zone de description d’une requête

Exécuter la requête

Traiter les données

retournées

Fermer les différents

connexionstry {Class.forName ("org.gjt.mm.mysql.Driver").newInstance();}

Ch catch (ClassNotFoundException a) { System.out.println ("Driver non trouve"); }catch (Exception b) { System.out.println ("Probleme sur chargement de driver JDBC"); }

try{conn = DriverManager.getConnection ("jdbc:mysql://127.0.0.1/cbr", "root", "mysql");stmt = conn.createStatement(); }catch (SQLException c) { System.out.println ("Connexion refuse ou base inconnu "+c); }catch (Exception d) { System.out.println ("Probleme sur connexion");}

try{String req= "SELECT nom FROM Etudiant ";

Charger le pilote

Connexion

A. U. : 09-10 S. ElkosantiniS. Elkosantini 161

try{String req= SELECT nom FROM Etudiant ;ResultSet rs = stmt .executeQuery(req);while(rs.next()) {

System .out.println(rs.getString(" nom"));}catch (SQLException c) { System.out.println (« problème SQL"+c); }

rs.close(); stmt .close(); conn.close();

Préparer, exécuter et traiter la requête

Fermer la connexion

Plan

Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec JavaChapitre 4 : Autres notions Java Chapitre 5 : Connexion aux bases de donnéesChapitre 6 Interfaces graphiq es a ec Ja a

A. U. : 09-10 S. ElkosantiniS. Elkosantini 162

Chapitre 6 : Interfaces graphiques avec Java

Interfaces graphiques avec Java

IntroductionIntroductionJava gère aussi les interfaces graphiques,

Fenêtres graphiques : menu, barre d’outils, boutons, zone texte, etc.

Gestion de la souris

Gestion du clavier

Java offre deux bibliothèques principales pour les interfaces

graphiques :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 163

La bibliothèque java.awt : le début du graphique avec Java. Disponible

depuis Java 1.1

La bibliothèque javax.swing : plus léger que awt et donc moins de

ressource mémoire. Disponible depuis Java 2, améliore et étend les

possibilités de AWT.

Interfaces graphiques avec Java

ExempleExempleJMenubar

JTabbedPaneJTree JFrame

A. U. : 09-10 S. ElkosantiniS. Elkosantini 164

JScrollPane JFileChooser

Page 42: Cours POO2

42

Interfaces graphiques avec Java

Architecture d’un objet swingArchitecture d’un objet swing

Un objet swing est constitué principalement de :

Un composant mère, appelé aussi le composant top-level.

Des composants conteneurs intermédiaires,

Des composants élémentaires,

Que veut dire un composant en Java ?

A. U. : 09-10 S. ElkosantiniS. Elkosantini 165

JComponentgetBorder()

getGraphics()print()

repaint()setVisible()

Interfaces graphiques avec Java

La classe La classe JComponentJComponent

C’est la classe de base de tout composants swing sauf le composant

top-level :

Tous les composants Swing héritent de la classe Jcomponent.

Les composants ont des Tool Tips.

Les composants ont des bordures.JComponent

A. U. : 09-10 S. ElkosantiniS. Elkosantini 166

JMenuBar JProgressBar JScrollPane

Interfaces graphiques avec Java

… et pour le composant top… et pour le composant top--levellevel

Les composants top-level ne sont pas des classes JComponant.

La bibliothèque swing propose trois composants top level :

JFrame, JDialog et JApplet

Les composants top-level possèdent un « content pane » qui contient

tous les composants visibles d’un top-level.

U t t l l t t i b d

A. U. : 09-10 S. ElkosantiniS. Elkosantini 167

Un composant top-level peut contenir une barre de menu

Interfaces graphiques avec Java

Un exemple :Un exemple : JFrame

JMenuBar

Top-level

Composant conteneurfe

nêtr

e

JLabel

conteneur

s co

mpo

sant

s de

la f

A. U. : 09-10 S. ElkosantiniS. Elkosantini 168

ContentPane

JProgressBar Composants élémentairesLes

diff

éren

ts

Page 43: Cours POO2

43

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JFrameJFrame

Un composant graphique de type JFrame est une fenêtre contenant

une barre de titre, une bordure, trois boutons (minimiser, agrandir

et fermer) et le content pane qui contiendra tout les composants

élémentaires.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 169

JFramesetTitle()

getMenuBar()getContainPane()

setJMenuBar(JMenuBar m)remove()

Un aperçu de la classe JFrame :

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JFrameJFrame

Code Java :

JFrame fenetre = new JFrame ();fenetre.setTitle("Comopsant JFrame");fenetre.setSize(250,150);fenetre.setVisible(true);

J

Ou aussi :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 170

JFrame fenetre = new JFrame ("Comopsant JFrame");

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JFrameJFrame

ou aussi créer une classe qui hérite de la classe JFrame:

public class Fenetre extends JFrame {Fenetre() {

this.setTitle("Composant JFrame version 2");this.setVisible(true);

}

}D l i t l l’i t i l l F t t

A. U. : 09-10 S. ElkosantiniS. Elkosantini 171

Dans le main, on peut par exemple, l’instancier la classe Fenetre et changer sa taille :

public static void main(String[] args) {……..

}

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JFrameJFrame

Changement de l’icône de la fenêtre

ImageIcon image = new ImageIcon(« image.gif");fenetre.setIconImage(image.getImage());

Position de la fenêtre dans l’écran

fenetre.setLocation (20,50);

x

y

A. U. : 09-10 S. ElkosantiniS. Elkosantini 172

yCentrer la fenêtre dans l’écran

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();fenetre.setLocation(dim.width/2 - f.getWidth()/2, dim.height/2 - f.getHeight()/2);

Page 44: Cours POO2

44

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JDialogJDialog

C’est la classe principale permettant de créer des boites de

dialogues.

Utilisable pour créer des boites de dialogues personnalisées ou pour

utiliser celles qui sont déjà définies en utilisant la classe

JOptionPane.

Comme JFrame JDialog contient un conteneur principale (content

A. U. : 09-10 S. ElkosantiniS. Elkosantini 173

Comme JFrame, JDialog contient un conteneur principale (content

pane) qui doit regrouper tout les autres composant élémentaires.

Boite de dialogue prédéfinie avec la classe JOptionPane

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JDialogJDialog

Code Java :

JDialog dialogue = new JDialog();dialogue.setTitle("Ceci est une boite de dialogue");dialogue.setSize(250,150);dialogue.setVisible(true);

J

ou aussi créer une classe qui hérite de la classe :

A. U. : 09-10 S. ElkosantiniS. Elkosantini 174

ou aussi créer une classe qui hérite de la classe … :

……….…….

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JAppletJApplet

Une applet est un programme Java s'exécutant sur une page WEB.

Le recours aux applets est l’un des moyens de dynamiser le HTML.

Les applets sont créées à partir d'une classe Java JAppelet.

Contrairement au JFrame et Jdialog, le composant top-level Japplet

est destiné pour créer des interfaces graphiques dans les pages web.

A. U. : 09-10 S. ElkosantiniS. Elkosantini 175

Une fois l’applet est créer en Java et compilée, elle doit être insérée

dans une page HTML.Exemple

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JAppletJApplet

Code Java :

public class Exemple extends JApplet{JLabel helloLabel = new JLabel ("Bonjour, vous me voyez ?");JButton b= new JButton ("OK");

// Méthode appelée par le navigateur lorsque l'applet est chargée public void init (){

this.getContentPane().setBackground(Color.yellow) ;this.getContentPane().setLayout(null);helloLabel.setSize(200,100);

A. U. : 09-10 S. ElkosantiniS. Elkosantini 176

helloLabel.setSize(200,100);helloLabel.setLocation(10,10);this.getContentPane().add (helloLabel); b.setSize(100,100);b.setLocation(210,10);this.getContentPane().add(b);

} }

Page 45: Cours POO2

45

Interfaces graphiques avec Java

Les composants topLes composants top--levellevel : : JAppletJApplet

Et dans le fichier HTML:

<HTML><HEAD>

<TITLE>Applet HTML Page</TITLE></HEAD><BODY><H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3><P><APPLET code= "Exemple class" width=350 height=200></APPLET>

A. U. : 09-10 S. ElkosantiniS. Elkosantini 177

<APPLET code Exemple.class width 350 height 200></APPLET></P></BODY></HTML>

Interfaces graphiques avec Java

RécapitulationRécapitulation JFrame Top-levelComposant conteneur

intermédiairesfenê

tre

intermédiaires

s co

mpo

sant

s de

la f

A. U. : 09-10 S. ElkosantiniS. Elkosantini 178

Composants élémentairesLes

diff

éren

ts

Interfaces graphiques avec Java

Les composants conteneurs intermédiairesLes composants conteneurs intermédiaires

Swing propose plusieurs conteneurs intermédiaire:

JPanel

JTabbedPane

JScrollPane

JOptionPane

JTabbedPane

A. U. : 09-10 S. ElkosantiniS. Elkosantini 179

JToolBar

JMenuBar

….

Interfaces graphiques avec Java

Les composants conteneurs intermédiaires : Les composants conteneurs intermédiaires : JPanelJPanel

Le conteneur JPanel est le plus générique. On peut, par exemple,

choisir sa couleur de fond, lui ajouter des composant, modifier la

disposition de ses composants, etc.

Ce JPanel contient 2 composants élémentaires

JPanel

A. U. : 09-10 S. ElkosantiniS. Elkosantini 180

JPaneladd(Component c)

SetLayout(LayoutManager m)findComponentAt(int x , int y)

….

Page 46: Cours POO2

46

Interfaces graphiques avec Java

Les composants conteneurs intermédiaires : Les composants conteneurs intermédiaires : JScrollPaneJScrollPane

Un JScrollPane est un conteneur qui offre des ascenseurs, il permet

de visionner un composant plus grand que lui.

JScrollPane

A. U. : 09-10 S. ElkosantiniS. Elkosantini 181

JScrollPaneadd(Component c)

SetLayout(LayoutManager m)….

Interfaces graphiques avec Java

Les composants conteneurs intermédiaires : Les composants conteneurs intermédiaires : JtoolbarJtoolbar et et JMenuBarJMenuBar

Une JToolBar est une barre de d’outil

Une JMenuBar est une barre de menu JMenuBar

JToolBar

A. U. : 09-10 S. ElkosantiniS. Elkosantini 182

JToolBar

…………

Interfaces graphiques avec Java

Les composants conteneurs intermédiaires : Les composants conteneurs intermédiaires : JtoolbarJtoolbar et et JMenuBarJMenuBar

Code Java :

JFrame fenetre = new JFrame ();

JMenuBar jMenuBar1 = new javax.swing.JMenuBar();Menu jMenu1 = new javax.swing.JMenu();

jMenu1.setText("Fichier");

jMenuBar1.add(jMenu1);

M jM 2 j i JM ()

A. U. : 09-10 S. ElkosantiniS. Elkosantini 183

Menu jMenu2 = new javax.swing.JMenu(); jMenu2.setText("Menu");jMenuBar1.add(jMenu2);

fenetre.setJMenuBar(jMenuBar1);

Interfaces graphiques avec Java

Les composants conteneurs intermédiaires : Les composants conteneurs intermédiaires : JtoolbarJtoolbar et et JMenuBarJMenuBar

Code Java :

jToolBar1 = new javax.swing.JToolBar();

jButton1 = new javax.swing.JButton();jButton1.setIcon(new javax.swing.ImageIcon("d:\\livre histoire.gif"));jToolBar1.add(jButton1);

A. U. : 09-10 S. ElkosantiniS. Elkosantini 184

jButton2 = new javax.swing.JButton();jButton2.setText("Coller");

jToolBar1.add(jButton2);

jSeparator1 = new javax.swing.JSeparator();jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);jToolBar1.add(jSeparator1);

Page 47: Cours POO2

47

Interfaces graphiques avec Java

RécapitulationRécapitulation JFrame Top-levelComposant conteneur

intermédiairesfenê

tre

intermédiaires

s co

mpo

sant

s de

la f

A. U. : 09-10 S. ElkosantiniS. Elkosantini 185

Composants élémentairesLes

diff

éren

ts

Interfaces graphiques avec Java

Les composants élémentairesLes composants élémentaires

Swing propose plusieurs conteneurs intermédiaire:

boutons, CheckBox, Radio

Combo box

List, menu

TextField, TextArea, Label

FileChooser, ColorChooser,

A. U. : 09-10 S. ElkosantiniS. Elkosantini 186

….

Fin Fin du coursdu cours

A. U. : 08-09 S. ElkosantiniS. Elkosantini 187