Sie sind auf Seite 1von 61

Programmation oriente objet

- JAVA 2e anne

Sabeur ELKOSANTINI
Oracle Certified Java Programmer
Sabeur.Elkosantini@isima.rnu.tn

S. Elkosantini

Objectifs du cours

Objectifs :

Etre capable de dvelopper une application en Java.

Avoir les connaissances de base et ncessaires pour passer lexamen de


certification.

S. Elkosantini

Bibliographie

Livres

Michel Divay , Java et la programmation oriente objet , Dunod eds, 2006.


Sun Certified Java Programmer for Java 6: study guide, Kathy Sierra et Bert
Bates, Edition Mc Graw Hill.

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

Autres supports de cours

Cours de Jean-Michel DOUDOUX :

Cours de Mickal BARON :

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

http://mbaron.ftp-developpez.com/javase/java.pdf

S. Elkosantini

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Polymorphisme
5 : Hritage
6 : Exception

S. Elkosantini

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Polymorphisme
5 : Hritage
6 : Exception

S. Elkosantini

Introduction

Historique de la POO

Les annes 60 : le langage Simula-67, langage de simulation informatique

Les annes 70 : SmallTalk , apparition des concepts de base :

Les premiers pas de la programmation oriente objet

objet, encapsulation, polymorphisme, hritage , etc.

Les annes 80 : La Monte en puissance de lorient objet

Apparition de nouveaux langages : Objective C ,C++, Eiffel, Common Lisp Object


System

S. Elkosantini

Introduction

Historique de la POO

Les annes 90 : lge d'or de l'extension de la POO :

Standardisation de C++

Apparition du langage de programmation Java

Depuis, volution de loriente objet:

Analyse par objet (AOO).


La conception oriente objet COO
Les bases de donnes orientes objets (SGBDOO)

S. Elkosantini

Introduction

Programmation procdurale Vs Programmation OO

Programmation procdurale (C, Cobol, Fortran, Pascal, etc.) :

Programmes structurs en procdures et fonctions,

Des problmes en cas de modification de la structures des donnes,

Chaque fonction ou procdure rsout une partie du problme,

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

Unit logique : objet,

Programmation par composants ,

Facilit de lvolution du code,

Amliorer la conception et la maintenance des grands systmes,

S. Elkosantini

Introduction

Programmation par Objets ?

Unit logique : lobjet

Objet est dfini par :

Une identit : permet de distinguer un objet dun autre objet.


Un tat : reprsent par des attributs (variables) qui stockent des
valeurs.

Un comportement : dfini par des mthodes (procdures) qui


modifient des tats.

Moto
Couleur : noir
Vitesse : 150 Km/h
Acclrer
Freiner
S. Elkosantini

Introduction

Les langages de programmation

S. Elkosantini

10

Introduction

Qualits majeures de Java

Simple (compar C++)

Gre les dbordements mmoire.


Gre lui-mme la dsallocation mmoire (ramasse-miettes).
Pas de manipulation explicite de pointeurs.
Pas de surcharge doprateurs.

Fondamentalement Orient-Objet : pas de fonctions/procdures : que


des mthodes !

Portable : principe de machine virtuelle

S. Elkosantini

11

Introduction

Le principe de la machine virtuelle

S. Elkosantini

12

Introduction

Un programme Java, pour voir


dition du programme source :
// Exemple de programme minimal : Salut.java
import java.io.*;
//.
public class Salut {
public static void main (String args[]) {
System.out.println("Salut tout le monde");
}
}

Compilation :

C:\Temp\> javac Salut.java

Excution :

D:\Temp\> java Salut

gnration du fichier ..

S. Elkosantini

13

Introduction

Java Vs C++

En C++:
// Exemple de programme minimal : Salut.cpp
#include <stdio.h>
//
void main () {
printf("Salut tout le monde");
}

En Java:
// Exemple de programme minimal : Salut.java
import java.io.*;
//.
public class Salut {
public static void main (String args[]) {
System.out.println("Salut tout le monde");
}
}
S. Elkosantini

14

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Polymorphisme
5 : Hritage
6 : Exception

S. Elkosantini

15

Les premiers pas en Java

Plan

Les oprateurs mathmatiques , logiques et de conversion

Les boucles et les structures de contrles

Les tableaux

Les commentaires

S. Elkosantini

16

Les premiers pas en Java

La structure dun programme Java

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);


}
}

Nom du fichier = nom de la classe


S. Elkosantini

17

Les premiers pas en Java

Les types primitifs

Ne 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)

Boolens : boolean (true ou false)

Caractres : char

Quelle est la
diffrence ??

Dclaration en java :
Int a, b, c ;
float x;
char ch
Boolens u, b;

Des erreurs ??!!

S. Elkosantini

18

Les premiers pas en Java

Les types primitifs

Source : http://www.ntu.edu.sg/

S. Elkosantini

19

Les premiers pas en Java

Les constantes

Le mot cl final permet de dclarer une constante: la valeur ne doit pas tre
modifie pendant lexcution du programme.

Dclaration en java :
final int PI=3.14, NB ;
PI=PI+1;
NB=10;

Le rsultat de linstruction est .

S. Elkosantini

20

Les premiers pas en Java

Les oprateurs et laffectation

Les oprateurs mathmatiques

Oprateur

Exemple

Equivalent

Note = 18

Note = 18

+=

Note+ = 2

Note = Note + 2

-=

Note- = 2

Note = Note - 2
Note = Note * 1.5

*=

Note* = 1.5

/=

Note/ = 2

Note = Note / 2

%=

Note% = 2

Note = Note % 2

^=

Note^ = 2

Note = Note ^ 2

int nb1, nb2;


float nb3;
Nb3 = nb1/nb2
Quel est le type du rsultat de
lopration ?

float nb1;
int nb2;
nb1 + nb2 = .

S. Elkosantini

21

Les premiers pas en Java

Les oprateurs et laffectation

Priorit

()

++ , --

*,/,%

+,-

<,>

==,!=

&&, ||

=, += , -=
Plus faible

Plus fort

Les instructions
Quel est le rsultat de chaque
final int N=50;
instruction ??
short p=10;
char c=2*N+3; // la variable c contient .
byte b= 10*N; // le rsultat est .
S. Elkosantini

22

Les premiers pas en Java

Les oprateurs et laffectation

lincrmentation et la dcrmentation automatique


Incrmentation : Nb++ ou ++Nb
Dcrmentation : Nb-- ou --Nb

Quelle est la diffrence ??

j=i++;

Lire la valeur de i et laffecter j


A la prochaine lecture de i, on lincrmente

j=++i;

Lire et incrmenter i
Affecter la nouvelle valeur de i j

S. Elkosantini

23

Les premiers pas en Java

Les oprateurs et laffectation

lincrmentation et la dcrmentation automatique


int a,b;
a = 10;
b = a+1;
System.out.println("a ="+a+" b ="+b);
int a,b;
Quel est le rsultat ??
a = 10;
b = a++;
System.out.println("a ="+a+" b ="+b);
int a,b;
a = 10;
b=a++;
System.out.println("a ="+a+" b ="+(++b));
S. Elkosantini

24

Les premiers pas en Java

Les oprateurs et laffectation

lincrmentation et la dcrmentation automatique

int a,b;
a = 10;
b=++a;
System.out.println("a ="+a+" b ="+b);

S. Elkosantini

25

Les premiers pas en Java

Les oprateurs et laffectation

Autres oprateurs
Oprateur
&&

Loprateur ET logique

||

Loprateur OU logique

==

Oprateur dgalit

!=

Oprateur de diffrence

Loprateur ngation

double nb1;
double nb2;
boolean res1, res2;
res1 = ( nb1==nb2)
res2= ( nb1==nb2) && (nb1>10)

S. Elkosantini

26

Les premiers pas en Java

Les oprateurs et laffectation

Les oprateurs de conversion (cast)

Casting implicite : conversions qui se produisent automatiquement.

Casting explicite: conversion force avec possibilit de perte de prcisions.

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

S. Elkosantini

27

Les premiers pas en Java

Les oprateurs et laffectation

Les oprateurs bits bits


Oprateur
&

Loprateur ET

Loprateur OU

Oprateur OU exclusif

Loprateur ngation

Nb1
Nb2

00000101
00000011

Nb1 & Nb2

Nb1 | Nb2

Nb1 ^ Nb2

~Nb1

Exemple :

S. Elkosantini

28

Les premiers pas en Java

Les oprateurs et laffectation

Les oprateurs de dcalage :

Manipules des bits,

Utilisables uniquement avec des types primitifs entiers,

Les oprateurs sont :

Nb << n : dcalage vers la gauche du nombre Nb de n bits

Nb >> n : dcalage vers la droite du nombre Nb de n bits

Exemple :
N=10000101

N<< 2

donne ........

int N = 6;

N>>1

donne .......

S. Elkosantini

29

Les premiers pas en Java

Les boucles et les structures de contrles


if else

Syntaxe:
Le bloc else est optionnel
if (condition logique)
Instructions excutes si la condition logique est vraie
else
Instructions excutes si la condition logique est fausse

Exemple 1:

If (moyenne >= 10)


System.out.println( ltudiant a russi);
else
System.out.println( ltudiant doit repasser ses examens);
S. Elkosantini

30

10

Les premiers pas en Java

Les oprateurs et laffectation

Loprateur conditionnel ternary:


X = (condition) ? Valeur affecter x si vrai : valeur affecter x si faux

Exemple
int nombreAnimaux = 3;
String statut = (nombreAnimaux<4) ? "peu d'animaux": "trop d'animaux";
System.out.println("le statut du troupe est " + statut);

S. Elkosantini

31

Les premiers pas en Java

Les boucles et les structures de contrles


if else

Exercice 1:

Ecrire la partie du programme Java qui vrifie si un entier n est paire ou


impaire et affiche le rsultat.

S. Elkosantini

32

Les premiers pas en Java

Les boucles et les structures de contrles

switch casedefault

Syntaxe:

switch(expression)
{case constante_1: suite dinstructions;
...
case constante_n: suite dinstructions;
default : suite dinstruction;}

expression doit tre de type char, byte, short, int

S. Elkosantini

33

11

Les premiers pas en Java

Les boucles et les structures de contrles


switch casedefault

Exercice 2:
Ecrire la partie du programme Java qui affiche:
o
Trs bien si la note est A,
o
Bien si la note est B,
o
Insuffisant si la note est C,
o
un message derreur sinon

S. Elkosantini

34

Les premiers pas en Java

Les boucles et les structures de contrles

Les boucles itratives

while :

while ( condition logique) {


... // code a excuter dans la boucle
}

do while :

do {
Bloc dinstructions ;
}
while ( condition logique)

S. Elkosantini

35

Les premiers pas en Java

Les boucles et les structures de contrles

Les boucles itratives

Tous les champs sont optionnels.

for :

for (initialisation du compteur ; condition ; modification) {


... // code a excuter dans la boucle
}

Exemple 2:

for (i = 0 ; i > 10; i++ )


{
System.out.println (i);
}

Quel est le rsultat de la boucle ?

S. Elkosantini

36

12

Les premiers pas en Java

Les boucles et les structures de contrles

Les boucles itratives

Une autre forme de for :

expression est un tableau

for (dclaration : expression) {


... // code a excuter dans la boucle
}

Exemple 3:

int [] a = {1,2,3,4};
for(int n : a)
System.out.print(n);

S. Elkosantini

37

Les premiers pas en Java

Les boucles et les structures de contrles

Exercice :
On dnomme nombre de Armstrong un entier naturel qui est gal la somme des
cubes des chiffres qui le composent. Ecrire un programme Java qui affiche de tels
nombres. Ex : 153 = 13 + 53 + 33

S. Elkosantini

38

Les premiers pas en Java

Les boucles et les structures de contrles

break et continue

break : permet de sortir dune boucle sans excuter la suite des instructions

continue : arrte l'excution de l'itration courante, et l'excution reprend en


dbut de boucle avec l'itration suivante

S. Elkosantini

39

13

Les premiers pas en Java

Les boucles et les structures de contrles

break et continue

switch (variable) {
case valeur1 : Liste d'instructions; break;
case valeur2 : Liste d'instructions; break;
case valeurN... : Liste d'instructions; break;
default: Liste d'instructions }

for (int x=1; x<=10; x++) {


a = x-7;
if (a == 0) {
System.out.println("division par 0");
break;
}
System.out.println(1.0/a); }
S. Elkosantini

40

Les premiers pas en Java

Les boucles et les structures de contrles

break et continue

x=1;
for (int x=0; x<=10; x++) {
if (x == 7) {
System.out.println("Division par zro!");
continue;
}
double a = 1.0/(x-7);
System.out.println(a);
}

S. Elkosantini

41

Les premiers pas en Java

Les boucles et les structures de contrles

Les tiquettes (Labels)

N'importe quelle instruction peut tre tiquetes

etiquette : instruction

boucleFor :
for (int i=0;i<10;i++)

S. Elkosantini

42

14

Les premiers pas en Java

Les boucles et les structures de contrles

Break et continue avec les tiquettes


System.out.println("Sortir des boucles quand i=2 et j=2:");
here: for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if ((i == 2) && (j == 2)) {
System.out.print("[Sortir des 2 boucles]");
break here;
}
System.out.print("[i:" + i + ",j:" + j + "]");
}
}

S. Elkosantini

43

Les premiers pas en Java

Les boucles et les structures de contrles

Break et continue avec les tiquettes


System.out.println("Sortir des boucles quand i=2 et j=2:");
here: for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if ((i == 2) && (j == 2)) {
System.out.print("[continue to here]");
continue here;
}
System.out.print("[i:" + i + ",j:" + j + "]");
}
}

S. Elkosantini

44

Les premiers pas en Java

Les tableaux

Tableau unidimensionnels
Dclaration :
ou

int [] tab;
int tab[];

NULL

tab

Pas de dimensions dans la dclaration


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

tab

Allocation dans la mmoire selon le type du tableau


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

tab

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


S. Elkosantini

45

15

Les premiers pas en Java

Les tableaux

Tableau multidimensionnels
Dclaration :

type [][] tab;

NULL

tab

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


tab

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

tab

S. Elkosantini

46

Les premiers pas en Java

Les tableaux

Exercice 3:
Soit T une matrice carre de 3 lignes et 3 colonnes. Ecrire un algorithme qui affiche un
message informant si la matrice est symtrique ou pas.

S. Elkosantini

47

Les premiers pas en Java

Les tableaux

Exercice 4:
Ecrire un algorithme qui tri un tableau en utilisant la mthode de tri par insertion.

S. Elkosantini

48

16

Les premiers pas en Java

Les commentaires
Importance des commentaire

Clart du code

Rutilisation facile du code

Gnration automatique du javadoc ou le Help du programme dvelopp

Deux types de commentaire

Commentaire classique /* */ ou //

Gnration dun fichier (HTML) de documentation /** */


/**
* Ceci est un commentaire pour Javadoc

* @author Sabeur
* @version 2.0
*/
S. Elkosantini

49

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Encapsulation et surcharge
5 : Hritage
6 : Exception

S. Elkosantini

50

Objet, classe et instanciation

Notion dobjet

Un objet est dfini la fois par des informations : donnes ou attributs ou


variables dinstances ; et des comportements : traitements ou mthodes ou
oprations.
Moto
Couleur
Vitesse_limite
Acclrer
Freiner

Objet Moto

S. Elkosantini

51

17

Objet, classe et instanciation

Notion de classe

Lorsque des objets ont les mmes attributs et comportements : ils sont regroups
dans une famille appele : Classe

Les objets appartenant celle-ci sont les instances de cette classe.


Linstanciation est la cration dun objet dune classe.
Moto

Moto

Couleur : noir
Vitesse_limite : 200

Couleur : rouge
Vitesse_limite : 250

Acclrer
Freiner

Acclrer
Freiner

S. Elkosantini

52

Objet, classe et instanciation

Classe, objet et instanciation


Moto

..

Deux instances dune mme classe


peuvent avoir des attributs avec des
valeurs diffrentes mais partagent les
mmes mthodes.

Couleur
Vitesse_limite

Acclrer
Freiner

.
Moto : Kawasaki

Moto : Yamaha

Couleur : noir
Vitesse_limite : 200

Couleur : rouge
Vitesse_limite : 250

Acclrer
Freiner

Acclrer
Freiner

S. Elkosantini

53

Objet, classe et instanciation

Les objets et les classes en Java

Moto
Couleur
Vitesse_limite

Limplmentation de cette classe en Java est :

S. Elkosantini

Acclrer
Freiner

54

18

Objet, classe et instanciation

La visibilit des variables et des attributs

Les paramtres sont aussi considrs comme


des variables locales
S. Elkosantini

55

Objet, classe et instanciation

La 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 accessible
return sum; // values et sum pas accessible
}
private static void test(int i) {
for(int i=0;i<5;i++) // erreur
doIt(i);
}
Une variable pour porte le bloc dans
}
lequel elle est dfinie

S. Elkosantini

56

Objet, classe et instanciation

Les mthodes

En Java, il est impossible de dfinir du code hors d'une mthode.

Une mthode est spare en 2 parties :

La signature (types des paramtres, type de retour).

Le code de la mthode.
int valeur(){
int amortissement;
amortissement = 0.05;
return Prix Prix * amortissement * Age;
}

Le code d'une mthode est constitu de diffrents blocs imbriqus. Chaque


bloc dfinit et utilise des variables locales.
S. Elkosantini

57

19

Objet, classe et instanciation

Les mthodes dune classes

On distingue trois types de mthodes dans une classe:

Les constructeurs qui permettent dinitialiser les attributs dune classe

Un constructeur est une mthode


particulire, sans valeur de retour, portant
le mme nom que la classe
Dclaration :

Moto (String nouvelleCouleur){


couleur= nouvelleCouleur;
}

S. Elkosantini

58

Objet, classe et instanciation

Les mthodes dune classes

Une classe peut avoir plusieurs constructeurs ou aucun :

Dans ce dernier cas, Java fournit un constructeur par dfaut: cest--dire un


constructeur sans arguments et initialise chaque champs par la valeur par dfaut nulle

Dclaration :

Moto (){
// constructeur cre par dfaut
}

Ds quune classe possde au moins un constructeur, le constructeur par dfaut


ne sera pas disponible sauf si la classe possde un constructeur sans arguments

S. Elkosantini

59

Objet, classe et instanciation

Les mthodes dune classes


Chaque appel un constructeur cre un nouvel objet (instance) qui obit au
patron dfini par la classe :

linstance cre aura les attributs et le comportement dfinis dans la classe.

rservation dun espace mmoire pour la mmorisation de ltat.

Le constructeur est gnralement loccasion dinitialiser les attributs (


personnaliser ltat de linstance).

Il peut y avoir plusieurs constructeurs pour une mme classe.

Plusieurs initialisations possibles.

S. Elkosantini

60

20

Objet, classe et instanciation

et le constructeur en Java

La construction en JAVA :
new + nom de la classe (paramtres)
Cest le constructeur
Produit p1 = new Produit ( Portable , 1) ;
Produit p2 = new Produit () ;
Comment programmer
la classe Produit ??

S. Elkosantini

61

Objet, classe et instanciation

et le constructeur en Java
Moto

Et si les paramtres du constructeur


portent le mme nom que les attributs ??

Limplmentation de cette classe en Java est :

Couleur
Vitesse_limite
Moto
Acclrer
Freiner

S. Elkosantini

62

Objet, classe et instanciation

Le mot clef new est utilis


pour crer une instance dynamique
d'un objet chaque fois qu'on en a
besoin.

Linstanciation
Moto
Couleur
Vitesse_limite
Acclrer
Freiner

Moto : Kawasaki

Moto : Yamaha

Couleur : noir
Vitesse_limite : 200

Couleur : rouge
Vitesse_limite : 250

Acclrer
Freiner

Acclrer
Freiner

S. Elkosantini

63

21

Objet, classe et instanciation

Stack (Pile) and Heap (Tas)


public void Method1() {
// Line 1
int i=4;
// Line 2
int y=2;
//Line 3
class1 cls1 = new class1();
}

S. Elkosantini

64

Objet, classe et instanciation

Les mthodes dune classes

Les mthodes get et set utiliss en cas de protection des attributs:

Les mthodes daccs qui permettent de renvoyer les informations relatives un objet

int getVitesse(){
return vitesse;
}

Dclaration :

Les mthodes daltration qui modifient ltat dun objet (les valeurs de certains
champs), donc elles comportent certains contrlent pour valider les nouvelles
valeurs.

void setVitesse (int nouvelleVitesse){


vitesse = nouvelleVitesse;
}

Dclaration :

S. Elkosantini

65

Objet, classe et instanciation

Le cycle de vie dun objet


La cration dun objet ou, autrement dit, ..
Objet obj ;

obj

NULL

Cette opration dclare uniquement le nom


et le type de lobjet. Les attributs et les
mthodes ne sont pas encore crer.

S. Elkosantini

66

22

Objet, classe et instanciation

Le cycle de vie dun objet

La cration dun objet ou, autrement dit, ..


Objet obj ;

obj

Objet obj = new Objet() ;


obj

NULL

Attribut 1
Attribut 2

Mthode 1

Cest ce moment que lallocation mmoire


est ralise

S. Elkosantini

67

Objet, classe et instanciation

Les objets, les classes et linstanciation en Java

Accs aux attributs et mthodes dun objet partir dun autre objet .
Nomobjet.Nommethode() ;
Nomobjet.NomAttribut;

Lenvoi de messages entre objets :


.
Il ne faut pas oubli les paramtres dans les
messages

Les cascades sont possibles : Magasin.produit.nom

S. Elkosantini

68

Objet, classe et instanciation

Les objets, les classes et linstanciation en Java

Dans le traitement de lune de ses mthodes, un objet peut avoir senvoyer


un message (pour accder un de ses attributs ou invoquer une des ses
mthodes).

Utilisation de lauto-rfrence, en java : this.

Exemple : on se place dans une mthode de la classe Moto :

Lors du traitement, lobjet appelant la mthode est une instance de la classe


Moto.
this.Freiner()

signifie

envoyer this (= moi-mme) le message


Freiner()

S. Elkosantini

69

23

Objet, classe et instanciation

Les objets, les classes et linstanciation en Java

Lappel lobjet courant : utilisation du mot cl this


this.methode() ;
this.attribut;

Exemple dutilisation
public class Moto {
int vitesse;
int prix;
Moto( int vitesse , int prix){

}
S. Elkosantini

70

Objet, classe et instanciation

Les objets, les classes et linstanciation en Java


Si pas dambigut, le mot cl this peut tre oubli :
this.freiner () ;
this.prix;

freiner();
prix;

Exercice 5 :
Ecrire une classe Livre, caractrise par les attributs titre, auteur et anne et par les
mthodes suivantes :
- Une mthode affichant les caractristiques dun livre
- Une mthode qui prend en paramtre un livre et qui permet dafficher les deux
livres et de le comparer le nom du livre pass en paramtre.

S. Elkosantini

71

Objet, classe et instanciation

Les objets, les classes et linstanciation en Java

Exercice 6 :
Crer une classe Segment qui est dfinie par ses extrmits (des points) et par sa
couleur. Avec cette classe, on peut calculer la longueur dun segment, le dplacer
et changer sa couleur.

S. Elkosantini

72

24

Objet, classe et instanciation

La manipulation des objets


Laffectation et la comparaison :
Objet a= new Objet ();
Objet b= new Objet ();
a=b;

Quel est la diffrence entre les deux


instances a et b ?

S. Elkosantini

73

Objet, classe et instanciation

La manipulation des objets


Laffectation et la comparaison :
Objet a = new Objet ();
Objet b = new Objet ();
boolean rep = (a == b) ;

Que signifie cette comparaison ?

Vrifier si les deux objets ont la mme rfrence.

S. Elkosantini

74

Objet, classe et instanciation

La manipulation des objets


Laffectation et la comparaison :

Quel est le rsultat de linstruction


BMW==Mercedes ?

Voiture : BMW

Voiture : Mercedes

Puissance : 9
Couleur: noir

Puissance: 9
Couleur : noir

Acclrer
Freiner

Acclrer
Freiner

Les deux objets ont les mmes valeurs dattributs mais la rfrence est diffrente.
Comment crer deux objets avec la
mme rfrence

S. Elkosantini

75

25

Objet, classe et instanciation

La destruction des objets

Le destructeur de classe consiste en une mthode qui sera appele lors de


toute destruction d'un objet.

Avant que l'objet ne soit recycl par le ramasse-miettes, le systme appelle la


mthode finalize :

finalize est une mthode dans laquelle on pourra implmenter proprement la


fermeture ventuelle de fichiers/sockets ouverts ou tout autres oprations.

En Java, le ramasse-miettes (ou le garbage collector), est un mcanisme qui


soccupe de la libration ou non dune zone mmoire. Cest un mcanisme
automatique.

Le systme essaye d'abord d'appeler l'objet finalize avant de jeter l'objet

S. Elkosantini

76

Objet, classe et instanciation

La destruction des objets


public void Method1() {
// Line 1
Moto m1 = new Moto ();
// Line 2
Moto m2 = new Moto();
//Line 3
m2=m1;
}

Line 1
m1 Line 2

Obj
m1

m2

Obj
m2

Line 2

Stack

Heap

S. Elkosantini

77

Objet, classe et instanciation

La destruction des objets


public static void main(String[] args)
{
Moto m1 = new Moto();
method(m1);
}
public static void method(Moto m) {
Moto m2 = m;
m2.avancer();
}

method

Line 1
m1

m
m2

Stack

S. Elkosantini

Obj
m1

Heap

78

26

Objet, classe et instanciation

La destruction des objets


class Moto
{
int vitesse;
String couleur;
Moto()
{
..
System.out.println("L'objet a t cr");
}
void finalize()
{
System.out.println("Objet nettoy de la mmoire");
}
}
S. Elkosantini

79

Objet, classe et instanciation

La destruction des objets

Pour forcer la destruction :

System.gc();
Il est dconseill de le faire.
JVM se chargera de la destruction
Mme avec cette instruction, la
destruction nest pas automatique;

S. Elkosantini

80

Objet, classe et instanciation

Les blocs dinitialisation (init block)

Les blocs dinitialisation sexcute lors du chargement de la classe (avant le


constructeur)

Une classe peut avoir autant de blocs dinitialisation quelle le dsire

Les blocs sont appeles dans leur ordre dapparition dans le code source, i.e. de
gauche droite et de haut en bas).

Aprs le chargement de la classe

class ... {
/* static variable with initial value */
int x = initial_value
/* ---- static initialization block
--- */
{ /* code executed once, when loaded */ }
}

Lors du chargement de la classe


S. Elkosantini

81

27

Objet, classe et instanciation

Les blocs dinitialisation (init block)


Quel est le rsultat ??
public class Exemple{
int var=0;
{
var=1;
System.out.println("bonjour"+var);
}
public Exemple() {
System.out.println("bonjour"+var);
}
public static void main (String[] arg){
Exemple g= new Exemple();

}}
S. Elkosantini

82

Objet, classe et instanciation

Les blocs dinitialisation (init block)


Quel est le rsultat ??
public class Exemple{
int var=0;
{
int var=1;
System.out.println("bonjour"+var);
}
public Exemple() {
System.out.println("bonjour"+var);
}
public static void main (String[] arg){
Exemple g= new Exemple();
}}
S. Elkosantini

83

Objet, classe et instanciation

Les blocs dinitialisation (init block)


Les blocs dinitialisation statiques sexcute avant mme le main

public class Exemple{


static {
System.out.println("bonjour Static");
}
public Exemple() {
System.out.println("bonjour constructeur");
}
public static void main (String[] arg){
System.out.println("bonjour main");
Exemple g= new Exemple();
Exemple g2= new Exemple();
}}

S. Elkosantini

84

28

Objet, classe et instanciation

Le mot cl static

Aucune mthodes ni attributs nest accessible avant linstanciation de la


classe en utilisant le mot cl .

La zone mmoire nest pas encore alloue.

Les mthodes et les attributs sont alors


associs lobjet et non la classe.

et si on veut que la donne ou la mthode n'est pas spcifiquement


rattache un objet instance dune classe ?
Utilisation du mot cl static
S. Elkosantini

85

Objet, classe et instanciation

Le mot cl static
class StaticTest {
static int i = 47;
}

Et dans une autre classe:


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

Comment incrmenter lattribut i ?

S. Elkosantini

86

Objet, classe et instanciation

instanceof
Loprateur instanceof permet de savoir quelle classe appartient une
instance

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


x instanceof A renvoie true

Pour tester si un objet o est de la mme classe que lobjet courant, il ne faut
donc pas utiliser instanceof mais le code suivant :
if (o != null && o.getClass() == this.getClass())

S. Elkosantini

87

29

Objet, classe et instanciation

instanceof
class 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
b = d;
b instanceof B
b instanceof D
c instanceof B
//

//
//
//

//

//

//
// :

S. Elkosantini

88

Objet, classe et instanciation

La classe String
Cest une classe considre comme type simple.
Ce nest pas un type primitif.

Initialisation : String txt= cest un texte ;

Longueur : txt.length();

Comparaison : txt .equals ( Hello!! );

Accs aux caractres : txt.charAt(5);

Concatnation : String mot= en franais ;


String txt2 = txt+mot;
S. Elkosantini

89

Objet, classe et instanciation

La classe String

Exercice 8:
Ecrire un programme qui permet dafficher les mots dune phrase. Les mots de la
phrases sont spars par un espace puis ; .

S. Elkosantini

90

30

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Encapsulation et surcharge
5 : Hritage
6 : Exception

S. Elkosantini

91

Encapsulation et surcharge

Lencapsulation et la visibilit des attributs


De point de vue utilisation, un objet est une boite noire qui offre un certain
nombre de mthodes permettant dinteragir avec lui.

Peu importe comment il est construit en interne, la seule chose ncessaire pour
pouvoir utiliser un objet est de savoir ce quil peut faire et surtout comment lui
demander :

Exemple :un poste de TV est une boite noire ayant pour interface : un cran, des
HP et une tlcommande. Pour changer de chaine, il suffit de
.Peu importe ce qui se passe rellement en interne.

S. Elkosantini

92

Encapsulation et surcharge

Lencapsulation et la visibilit des attributs

Lensemble des mthodes proposes par un objet est appel linterface de cet
objet.

On dit quun objet est encapsul par son interface : la seule manire dinteragir
avec cet objet est dinvoquer une mthodes de son interface. Peu importe de quoi
cet objet est rellement constitu, ce qui est important cest les services (les
mthodes) quil peut fournir.
Interface
Objet

S. Elkosantini

93

31

Encapsulation et surcharge

Lencapsulation et la visibilit des attributs


Lencapsulation est un mcanisme consistant rassembler les donnes et les
mthodes au sein d'une structure en cachant l'implmentation de l'objet :

Empcher l'accs aux donnes par un autre moyen que les services proposs.

Garantir l'intgrit des donnes contenues dans l'objet .

Compte_Bancaire
Attributs privs

Mthodes publiques

- Num_RIB
- Nom
- Montant
+ Crditer()
+ Dbiter()

S. Elkosantini

94

Encapsulation et surcharge

Lencapsulation et la visibilit des attributs

Il existe quatre niveaux de visibilit (les modificateurs daccs) :

Publique : veut dire que les attributs ou les mthodes sont disponibles pour tout le
monde

Priv : veut dire quaucune autre classe ne peut accder au contenu de lattribut et
limplmentation de la mthode concern,

Protg : l'accs aux donnes est rserv aux fonctions des classes hritires, c'est-dire par les fonctions membres de la classe ainsi que des classes drives.

Par dfaut : de mme que le niveau protg sauf que laccs par une sous classe dun
package diffrent est restreint

S. Elkosantini

95

Encapsulation et surcharge

Encapsulation en Java
Il existe quatre niveaux de visibilit :

Priv : en Java, private

publique: en Java, public

protg: en Java, protected

Par dfaut : en java, ne rien mettre

Compte_Bancaire
- Num_RIB
- Nom
- Montant
+ Crditer()
+ Dbiter()

public String var1;


public int methode1();
protected char var2;
protected void methode2();
private int var3;
private void methode3();
S. Elkosantini

96

32

Encapsulation et surcharge

Encapsulation en Java
Lide de restreindre la visibilit des mthodes et des attributs :

Rendre priv les attributs caractrisant ltat de lobjet et de fournir des mthodes
publiques permettant de modifier/accder lattributs.

Des getters et des setters


Attribut Montant :

getMontant () : le getter
setMontant () : le setter

S. Elkosantini

97

Encapsulation et surcharge

Encapsulation en Java
Exemple : Application pour la gestion des comptes en banques.

La classe Banque ayant comme attribut solde.

Dans un premier temps, lattribut est dclar comme publique.

Quel est linconvnient dun tel


programme ?

Quelle amlioration proposez-vous ?

S. Elkosantini

98

Encapsulation et surcharge

Laccs aux classes en Java


Comment rendre une classe priv ou protg en Java ?

On ne peut pas rendre une classe priv ou protg, parce que .

On peut rendre une classe (dune bibliothque) publique.


La classe de la bibliothque est accessible pour les utilisateurs.

S. Elkosantini

99

33

Encapsulation et surcharge

Encapsulation en Java

+ Compte_Bancaire
- Num_RIB
- Nom
- Montant
+ Crditer()
+ Dbiter()

Implmenter cette
classe en java

S. Elkosantini

100

Encapsulation et surcharge

La surcharge des mthodes (overloading)

Redfinir une mthode dj existante dans la classe.

Les mthodes surcharges:

DOIT changer la liste des arguments,

PEUT changer le type de retour,

PEUT changer le modificateur daccs

PEUT dclarer une nouvelle (ou plus large) exception (checked exceptions).

Quand une mthode surcharge est invoque le compilateur slectionne


automatiquement la mthode dont le nombre est le type des arguments
correspondent au nombre et au type des paramtres passs dans lappel de la
mthode
S. Elkosantini

101

Encapsulation et surcharge

La surcharge (overloading)

La surcharge de mthodes : un mcanisme donnant la possibilit d'appeler


plusieurs mthodes avec le mme nom.
Des mthodes surcharges peuvent avoir des types de retour
diffrents condition quelles aient des arguments diffrents.

Exemple : la surcharge de
la mthode somme

public int somme( int p1, int p2){


return (p1 + p2); }
public float somme( float p1, float p2){
return (p1 + p2); }
private float somme( float p1, int p2){
return (int(p1) + p2); }
public float somme( float p1, float p2, float p3){
return (p1 + p2 + p3); }
S. Elkosantini

102

34

Encapsulation et surcharge

La surcharge (overloading)

Exercice 7:
1. Crez une classe avec un constructeur par dfaut 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. Crez, dans le programme principale, deux instances de cette objet pour tester les
deux constructeurs.

S. Elkosantini

103

Le concept dobjets

La surcharge des mthodes (overloading)

Exemple de surcharge : la surcharge de constructeurs


Dclaration :

Moto (int v){


vitesse = v;
}
Moto (int v; String c){
vitesse = v;
couleur= c;
}
Moto (String c){
couleur= c;
}

S. Elkosantini

104

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Encapsulation et surcharge
5 : Hritage
6: Classes abstraites et interfaces
6 : Exception

S. Elkosantini

105

35

Le concept dobjets

Lhritage

L'hritage est un mcanisme qui facilite la rutilisation du code et la gestion de


son volution. Elle dfinit une relation entre deux classes :

Une classe mre ou super classe

Une classe fille ou sous classe qui hrite de sa classe mre

les objets d'une classe fille ont accs aux donnes et aux mthodes de la classe parent et
peuvent les tendre.

Les sous classes peuvent redfinir les variables et les mthodes hrites.

Les mthodes des clases filles sont redfinies avec le mme nom, les mmes types et le
mme nombre d'arguments

S. Elkosantini

106

Le concept dobjets

Lhritage
la classe Etudiant :
no m
capital UV
d ipl m e

la classe Etudiant-Elu :
no m
capital UV
d ipl m e
Mandat
Syndicat

VrifierNo m
MajUV
ChangerDipl m e

VrifierNo m
MajUV
ChangerDipl m e
DmissionnerMandat
ChangerSyndicat

S. Elkosantini

107

Le concept dobjets

Lhritage
Lobjet Etudiant-Elu a les proprits (attributs et mthodes) de lobjet
Etudiant mais en plus possde dautres proprits.

La classe Etudiant-Elu est une spcialisation de la classe Etudiant. Cest une


sous classe de la classe Etudiant.

Les objets de la sous classe Etudiant-Elu hritent des attributs et des


mthodes de la classe Etudiant. La sous classe Etudiant-Elu pourra, si cela
est ncessaire pour ses besoins, redfinir une mthode hrite.
S. Elkosantini

108

36

Le concept dobjets

Lhritage
Chaque sous classe peut avoir une ou plusieurs sous classes formant ainsi
une hirarchie dobjet. On parle de classe anctre (ou mre) et de classes
descendant (ou fille).

Forme

Rectangle

Triangle

Cercle

Lhritage est un mcanisme qui permet dassurer une grande variabilit


dans la rutilisation des objets. Il existe deux concepts lies lhritage : les
classes abstraites et les interfaces.
S. Elkosantini

109

Le concept dobjets

Lhritage
Autre exemple : les formes gomtrique (utiliser dans les systmes daide
la conception des jeux vido)

Forme

Le type de base est la forme gomtrique

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

La classe drive est du mme type que la classe de base.


Les objets de la classe drive n'ont pas
seulement le mme type, ils ont aussi le
mme comportement, ce qui n'est pas
particulirement intressant

Carre

Triangle

Cercle

S. Elkosantini

110

Le concept dobjets

Lhritage
Pour diffrentier une classe drive dune classe parent :

ajouter dautres mthodes dans les classes drives: la classe de base n'tait pas
assez complte

Forme
dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

Il faut vrifier s'il ne faut pas


intgrer ces fonctions dans la classe
de base qui pourrait aussi en avoir
l'usage
Carre

S. Elkosantini

Triangle

RetournerHor()
RetournerVer()

Cercle

111

37

Le concept dobjets

Lhritage
Pour diffrentier une classe drive dune classe parent :

Redfinir autrement le comportement des classes drives. Cest--dire ..

Forme

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

il suffit de crer une nouvelle


dfinition pour la fonction
dans la classe drive
Carre

dessiner()
effacer()

Triangle

Cercle

dessiner()
effacer()

dessiner()
effacer()

S. Elkosantini

112

POO avec Java

Forme

Lhritage
Rectangle

Triangle

Cercle

En Java, en utilisant le mot cl extends


class Forme
{
// .
{

Et le mot cl protected ?

class Rectangle extends Forme


{
// .
{

Cest quoi une mthode final


dune classe mre?

class Triangle extends Forme


{
// .
{
S. Elkosantini

113

POO avec Java

Forme

Lhritage

Limplmentation en Java de la classe Triangle

Carre

S. Elkosantini

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

Triangle

RetournerHor()
RetournerVer()

Cercle

114

38

POO avec Java

Forme

dessiner ()
effacer()
Limplmentation en Java de la classe Triangle rectangle deplacer()
getcouleur()
setcouleur()

Lhritage plusieurs niveaux

Carre
dessiner()
effacer()

Triangle
dessiner()
effacer()

Triangle
rectangle

Cercle

dessiner()
effacer()

Triangle
isocle

S. Elkosantini

115

POO avec Java

Forme

Lhritage : le polymorphisme

Limplmentation en Java de la classe Triangle

Carre

dessiner()
effacer()

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

Triangle
dessiner()
effacer()

Cercle

dessiner()
effacer()

S. Elkosantini

116

POO avec Java

Lhritage : la redfinition et le polymorphisme


Le polymorphisme : redfinir des mthodes hrites de la super-classe.

La sous-classe doit imprativement conserver la dclaration de la mthode


parent (mme type et nombre de paramtres et valeur de retour)

La redfinition (la surcharge) : ajoute des mthodes dans la sous-classe.

Exemple : Touts les classes de Java hritent de la classe Object. Il hritent


ainsi des mthodes telles que getClass(), clone(), toString().

S. Elkosantini

117

39

POO avec Java

Lhritage : laccs aux mthodes de la super classe

Pour invoquer une mthode d'une classe parent, il suffit d'indiquer la


mthode prfixe par super.

class Forme
{
void effacer (){
{
System.out.println(la forme est efface);}
}
class Rectangle extends Forme
{
void effacer (){
{
System.out.println(le rectangle est effac);
super.effacer();
}
}

Quel est le rsultat ?

S. Elkosantini

118

POO avec Java

Lhritage : laccs au constructeur de la super classe

Pour appeler le constructeur de la classe parent il suffit d'crire


super(paramtres) avec les paramtres adquats.

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


explicitement ou implicitement au constructeur de la classe mre.
class Moto
{
Moto (){
this(0,100) ;}

class Quad extends Moto


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

Moto (int km){


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

Et sil ny a pas de constructeur


dans la classe mre ?
S. Elkosantini

119

POO avec Java

Lhritage : le transtypage
Le transtypage : Traiter un type driv 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'hritage : cest le transtypage ascendant .

Crer trois objets de type cercle, carr et triangle. Ecrire dans la classe principale
les mthodes permettant dafficher la couleur de chaque instance.

S. Elkosantini

120

40

POO avec Java

Lhritage : le transtypage
Le transtypage en java :

Forme f = new Triangle () ;

On cr un objet Triangle appel f et qui est assigne au type Forme, ce


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

dessiner ()
effacer()

Selon le diagramme suivant, quelle


mthode dessiner () va tre excuter ?
f.dessiner() ;

Triangle

Carre

Cercle

dessiner()
effacer()

dessiner()
effacer()

dessiner()
effacer()

S. Elkosantini

121

POO avec Java

Lhritage : le transtypage
La classe mre Forme tablit l'interface commune pour toutes les classes
filles .

toutes les formes peuvent tre dessines et effaces.

Les classes drives redfinissent ces mthodes pour fournir un


comportement unique pour chaque type de forme spcifique.
Forme f = new Triangle () ;

Classe Forme

Linstance f

Classe Triangle

Interface

Interface

Interface

Implmentation

Implmentation

Implmentation

S. Elkosantini

122

POO avec Java

Forme

Lhritage : le transtypage

dessiner ()
effacer()
getcouleur()

Pour lexemple suivant :


Forme f = new Trianglerectangle () ;
Interface

Implmentation
Interface

Classe Forme

Carre

dessiner()
effacer()

dessiner()
effacer()

Cercle

dessiner()
effacer()

Classe Trianglerectangle

Implmentation

Triangle
rectangle

Interface
Implmentation

Triangle

Linstance f

Triangle
isocle

Selon le diagramme suivant, quel est le


rsultat de linstruction f.dessiner() ?

S. Elkosantini

123

41

POO avec Java

Lhritage : le transtypage
Rcapitulation : Dans quel cas le transtypage et le polymorphisme sont
utiliss ?

class magasinier extends Employe {


public magasinier(String n) {
super (n);
salaire = 250;
}
void affiche ()
{
System.out.println("Je suis un magasinier");
}

class Emloye {
String nom;
int id, salaire;
public Emloye(String n) {
nom=n;
}

Dans le programme principal, crer un magasinier en utilisant le transtypage et


excuter la mthode affiche de lobjet crer. Quel est le rsultat ?

S. Elkosantini

124

POO avec Java

Lhritage
Exercice 8: Crer une hirarchie d'hritage de Rongeur: Souris, Gerbille, et
Hamster. Dans la classe de base, fournir des mthodes qui sont communes tous
les Rongeurs, et les redfinir dans les classes drives pour excuter des
comportements diffrents dpendant du type spcifique du Rongeur. Crer un
tableau de Rongeur, le remplir avec diffrent types spcifiques de Rongeurs, et
appeler vos mthodes de la classe de base pour voir ce qui arrive.

S. Elkosantini

125

POO avec Java

Lhritage

Exercice 9:
Ecrivez les classes ncessaires au fonctionnement du programme suivant. Donnez
uniquement le nom des classes et les mthodes (sans dtailler le contenu).
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() ;
}
}
Le rsultat de ce programme est :
Lappartement appartient Atef
La villa appartient Walid
Le studio appartient Anis
S. Elkosantini

126

42

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Encapsulation et surcharge
5 : Hritage
6: Classes abstraites et interfaces
6 : Exception

S. Elkosantini

127

Classes abstraites et interfaces

Classes abstraites
Forme
primtre ()

Triangle

Carre
primtre ()

primtre ()

Cercle
primtre ()

Comment implmenter la mthode primtre () de la classe Forme ?


La mthode primtre () ne peut pas tre implment dans la dclaration de
la classe Forme, car on ne sait pas comment calculer le primtre d'une
forme quelconque
S. Elkosantini

128

Classes abstraites et interfaces

Classes abstraites
Il faut donner la signature de la mthode primtre () mais pas son
implmentation dans la classe Forme

Cest une mthode abstraite

Syntaxe :

abstract public double primtre ( ) ;

Limplmentation de la mthode sera dans les classes filles permettant ainsi de


spcifier un comportement diffrent pour chacune des classes
S. Elkosantini

129

43

Classes abstraites et interfaces

Classes abstraites

La prsence dune mthode abstraite dans une classe a 3 consquences:

La classe ne peut plus tre instancie,

Une classe abstraite n'existe que pour tre hrite,

Toute classe fille de cette classe doit redfinir la mthode en question,

Une classe fille hritant d'une classe mre abstraite doit implmenter toutes
ses mthodes abstraites, sinon elle est aussi une classe abstraite.

Une mthode static ne peut tre abstraite car on ne peut pas redfinir
une mthode static?

S. Elkosantini

130

Classes abstraites et interfaces

Classes abstraites

Une classe abstraite est ne pour tre une classe mre

Elle peut contenir au (ou non) des mthodes abstraites.


Exemple:
abstract public class Forme {
private String nom;
public Forme (Forme nom) { this.nom=nom; }
abstract public double perimetre( ) ;
public void dessiner ( )
{System.out.println ( " Je suis " + this . nom) ; }
}

S. Elkosantini

131

Classes abstraites et interfaces

Classes abstraites

Limplmentation des classes filles :

public class Cercle extends Forme{


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 ;
public Rectangle ( double l a r g e u r , double l o n g u e
ur)
{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 ; } }
S. Elkosantini

132

44

Classes abstraites et interfaces

Classes abstraites

Exemple 2 :
Mthode abstraite
public abstract class CentreInfoBourse {
private URL[] urlsCentre;
...
abstract protected String lireDonnees(String[] titres);

public String calcule(String[] titres) {


...
donnees = lireDonnees(titres);
// Traitement effectu sur donnees
// indpendant du site boursier
...

Mthode non abstraite malgr


quelle utilise une mthode
abstraite

S. Elkosantini

133

Classes abstraites et interfaces

Classes abstraites

Exemple 2 :

public class LesEchos extends CentreInfoBourse {


...
public String lireDonnees(String[] titres) {
// Implantation pour le site des Echos
Implmentation de la mthode
...
abstraite
}
La classe mre dfinit la structure globale de la classe.
Elle laisse aux classes filles le soin de dfinir des mthodes (mthode
lireDonnees).

S. Elkosantini

134

Classes abstraites et interfaces

Classes interfaces
Une interface est une classe purement abstraite dont toutes les mthodes
sont abstraites et publiques.
Une interface est un prototype de classe. Elle dfinit la signature des
mthodes qui doivent tre implmentes dans les classes construites partir
de ce prototype

Une interface est une classe purement abstraite dont toutes les mthodes
sont abstraites et publiques et sans attributs (les mots-cls abstract et public
sont optionnels).
Syntaxe : inter face NomInterface { . . . }
S. Elkosantini

135

45

Classes abstraites et interfaces

Classes interfaces
A quoi sert les interfaces en Java ?

Pour palier le manque dhritage multiple en Java.

Pour offrir la possibilit davoir un comportement unique pour certaines


classes. Exemple : vhicule et voiture et camion.

Dissimuler limplmentation des mthodes

Favoriser la rutilisation : si le type d'un paramtre d'une mthode est une


interface, cette mthode peut s'appliquer toutes les classes qui
implmentent l'interface, et pas seulement toutes les sous-classes d'une
certaine classe

S. Elkosantini

136

Classes abstraites et interfaces

Classes interfaces

public interface Figure {


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);
}
Les mots-cls abstract et public sont optionnels

S. Elkosantini

137

Classes abstraites et interfaces

Classes interfaces
Comment implmenter les mthodes dune
interface?

Une classe implmente une interface A si elle dclare implements A dans


son en-tte.
Syntaxe : class Classe implements Interface{ . . . }

La classe doit implmenter toutes les mthodes de l'interface, sinon


elle doit tre dclare abstract

S. Elkosantini

138

46

Classes abstraites et interfaces

Classes interfaces
Une classe peut implmenter plusieurs interfaces .

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

Une classe peut hriter d'une autre classe et implmenter une ou plusieurs
interfaces.

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

S. Elkosantini

139

Classes abstraites et interfaces

Classes interfaces
Une interface peut remplacer une classe pour dclarer une variable, un
paramtre, une valeur de retour, etc.

Exemple Figure f;

f contiendra des objets dont la classe implmentera l'interface Comparable.

Exemple Figure f=new Cercle();

S. Elkosantini

140

Classes abstraites et interfaces

Classes interfaces
Une interface ne possde pas de d'attribut. Les interfaces ne sont pas instanciables
(comme les classes abstraites).

Une interface n'a pas de constructeurs.

Une interface peut dfinir des constantes, c'est--dire dfinir des variables
dclares publiques, statiques et finale et ayant une valeur constante d'affectation.
Exemple : public static final float PI = 3.14f;

On ne donne que la signature des mthodes qui sont ncessairement des


mthodes d'instance publiques et abstraites : abstract public int f();

Une interface peut hriter d'une autre interface : inter face interface1 extends
interface2 { . . .}.
S. Elkosantini

141

47

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Objet, classe et instanciation
4 : Encapsulation et surcharge
5 : Hritage
6: Classes abstraites et interfaces
6 : Exception

S. Elkosantini

142

Exceptions et flux

Les exceptions

Les exceptions reprsentent le mcanisme de gestion des erreurs intgr au


langage java.

Une exception est un signal qui indique que quelque chose dexceptionnel
(comme une erreur) sest produit. Elle interrompt le flot dexcution normal du
programme.
class Forme
{
Quel est le rsultat ?
Public static void main (String arg[])
{ int a=3,b=0;
System.out.println( a/b);
}
}
Exception in thread "main" java.lang.ArithmeticException: /
by zero
at Forme.main(Forme.java:4)
S. Elkosantini

143

Exceptions et flux

Les exceptions : capturer et attraper

Si un bloc de programme ou une mthode gnre une exception elle doit


supposer qu'elle sera intercept et leve.

Un bloc dinstruction peut tre surveill.

On peut attraper une exception avec linstruction try.

try {
// bloc dinstruction
Mais, quoi faire avec cette
exception dtecte ?

La gestion des exceptions avec linstruction catch.


S. Elkosantini

144

48

Exceptions et flux

Les exceptions : capturer et attraper

try {
// bloc dinstruction
}
catch (Type1 id1)
{ //instruction faire en cas derreur de type 1 }

S. Elkosantini

145

Exceptions et flux

Les exceptions : capturer et attraper


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

S. Elkosantini

146

Exceptions et flux

Les exceptions : capturer et attraper


Sil y a plusieurs types dexceptions intercepter, il faut dfinir autant de
catch que de type dexceptions.
try {
// bloc dinstruction
}
catch (Type1 id1)
{ //instruction faire en cas derreur de type 1 }
catch (Type2 id2)
{ //instruction faire en cas derreur de type 2 }
catch (Type3 id3)
{ //instruction faire en cas derreur de type 3 }
Un type d'exception donn ne doit pas venir
aprs un type d'une exception d'une
super classe.
S. Elkosantini

147

49

Exceptions et flux

Les exceptions : Mais, cest quoi une exception ?


En Java, les exception sont des objets ayant des mthodes et attributs.

Source : cours de M. Baron


S. Elkosantini

148

Exceptions et flux

Les exceptions : capturer et attraper


public class Forme{
public static void main(String[] args) {
int a = 3;
int b = 0;
try {
System.out.println("rsultat = " + (i / j));
}
catch (Exception e) {
}
catch (ArithmeticException e) {
System.out.println ( erreur arithmtique );
}
}
}
S. Elkosantini

149

Exceptions et flux

Les exceptions : Lancer ou dclencher


Une mthode dclare quelle peut lancer une exception par le mot cl
throws.
Dclaration :
Moto (String couleur, int vitesse) throws MotoErr{
...
}

La cration dune nouvelle exception en utilisant le mot cl throw.

Dclaration :
Moto (String couleur, int vitesse) throws MotoErr{
If (vitesse <0) throw new MotoErr();

}
S. Elkosantini

150

50

Exceptions et flux

Les exceptions : Lancer ou dclencher


Si une mthode peut lancer une mthode, il
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) {
System.out.println (erreur dinstanciation);
}
}
Mais, cest quoi MotoErr ?

S. Elkosantini

151

Exceptions et flux

Les exceptions : Le bloc finally


Sert excuter un code quoi qu'il arrive (fermer un fichier, une connexion,
librer une ressources)
Dclaration :

try{

}
finally{
}

Le catch n'est pas obligatoire.

S. Elkosantini

152

Exceptions et flux

Les exceptions : Le bloc finally

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

S. Elkosantini

153

51

Exceptions et flux

Les flux
Pour obtenir des donnes, un programme ouvre un flux de donnes sur une
source de donnes (fichier, clavier, mmoire, etc).

De la mme faon pour crire des donnes dans un fichier, un programme


ouvre un flux de donnes.

Java fournit un paquetage java.io qui permet de grer les flux de donnes en
entre et en sortie, sous forme de caractres (exemple fichiers textes) ou sous
forme binaire (octets, byte).

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


des donnes. Toute opration d'entre/sortie en Java suit le schma suivant

S. Elkosantini

154

Exceptions et flux

Les flux
Toute opration d'entre/sortie en Java suit le schma suivant :

Ouverture d'un flux;

Lecture ou criture des donnes;

Fermeture du flux.

java.io fournit toutes les classes ncessaires la cration, lecture, criture et


traitement des flux.

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


(plus de 50).

S. Elkosantini

155

Exceptions et flux

Les flux
Java fournit quatre hirarchies de classes pour grer les flux de donnes:

Pour les flux binaires :

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


(FileInputStream)

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


(FileOuputStream).

Pour les flux de caractres :

La classe Reader et ses sous-classes pour lire des caractres


(BufferedReader, FileReader).

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


S. Elkosantini

156

52

Exceptions et flux

Les flux de caractres

Exemple : lecture partir du clavier :

Le casting dun objet


class Test {
de type InputStream
public static void main(String[] argv) {
en Reader
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();
Lire la ligne jusquau caractre retour chariot
} catch (Exception e) {
System.out.println("Intercept : " + e);
}
if (inputLine != null)
System.out.println("Votre nom est :" + inputLine);
}
}

S. Elkosantini

157

Exceptions et flux

Les flux de caractres

Exemple : 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);
String nom = input.nextLine();
System.out.println("Bonjour " + nom);
}

S. Elkosantini

158

Exceptions et flux

Les flux de caractres

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

Renvoie une valeur de type byte que lon convertira en caractre


par un oprateur cast.

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

S. Elkosantini

159

53

Exceptions et flux

Les flux de caractres

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;

S. Elkosantini

160

Exceptions et flux

Les flux de caractres


Exemple : lecture partir dun fichier et criture dans un autre :
class Test {
public static void main(String[] argv) {
Reader
Flux de
try {
caractres
FileReader in = new FileReader("a_lire.txt");
Writer
FileWriter out = new FileWriter("a_ecrire.txt");
int c;
while ((c = in.read()) != -1) {
Transfert de donnes de in vers out
out.write(c);
}
in.close();
Fermeture des deux
out.close();
flux
} catch (Exception e) {
System.out.println("Intercept : " + e);
}
}
}
S. Elkosantini

161

Exceptions et flux

Les flux de caractres


Exemple : lecture partir dun fichier et criture dans un autre :
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 diffrence entre ce programme
in.close();
et le programme prcdent ?
out.close();
} catch (Exception e) {
System.out.println("Intercept : " + e);
}
}
}
S. Elkosantini

162

54

Plan

Chapitre
Chapitre
Chapitre
Chapitre
Chapitre
Chapitre

1 : Introduction
2 : Les premiers pas en Java
3 : Le concept dobjets
4 : POO avec Java
5 : Exceptions et flux
6 : Base de donnes (JDBC)

S. Elkosantini

163

Base de donnes (JDBC)

Introduction
Utilisation de l API JDBC pour les bases de donnes :

JDBC pour Java DataBase Connectivity

API permet des applications Java d'accder des bases de


donnes relationnelles quelconques

L API Fournit un ensemble de classes et d interfaces permettant


lutilisation sur le rseau dun ou plusieurs SGBD partir dun
programme Java.

S. Elkosantini

164

Base de donnes (JDBC)

Le pilote

JDBC

BD
Driver spcifique
pour chaque SGBD

Oracle
Mysql
SQLServer
Sybase
Informix
DB2

Contient toutes les classes ncessaire pour communiquer avec

une base de donnes

Tous les drivers :


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

165

55

Base de donnes (JDBC)

Architecture JDBC

S. Elkosantini

166

Base de donnes (JDBC)

Les tapes principales

S. Elkosantini

167

Base de donnes (JDBC)

JDBC

Charger le driver JDBC :

Utilisation de la mthode 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");

S. Elkosantini

168

56

Base de donnes (JDBC)

JDBC

Charger le driver JDBC :

Utilisation de la mthode forName de la classe Class

Quand une classe Driver est charge, elle doit crer une instance
d elle mme et s enregistrer auprs du DriverManager

Certains compilateurs refusent cette notation et demande plutt :

try
{
Class.forName (" driver_name ").newInstance();
}
catch (ClassNotFoundException a) {System.out.println ("Driver non
trouve");}
S. Elkosantini

169

Base de donnes (JDBC)

JDBC

Etablir la connexion la base de donnes :

Pour tablir la connexion avec un SGBD, il faut prciser :

l URL de la base de donnes : jdbc:<sous-protocole>:<nom-BD>

le nom de la base de donnes

le login utilis ainsi que son mot de passe

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


Connection connect = DriverManager.getConnection(strUrl
,user,password);
Le DriverManager essaye tous les drivers qui se sont enregistrs
(chargement en mmoire avec Class.forName()) jusqu ce quil trouve un
driver qui peut se connecter la base
S. Elkosantini

170

Base de donnes (JDBC)

JDBC

Etablir la connexion la base de donnes :

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);}
catch (Exception d) {System.out.println ("Probleme sur connexion"); }

S. Elkosantini

171

57

Base de donnes (JDBC)

JDBC

Crer une zone de description dune requte :

En utilisant la classe statement.

L objet Statement possde les mthodes ncessaires pour raliser les


requtes sur la base associe la connexion dont il dpend

A partir de l objet Connexion, on rcupre le Statement associ

Statement st= connexion.createStatement();

S. Elkosantini

172

Base de donnes (JDBC)

JDBC

Excuter la requte :

3 types d excution :

executeQuery() : pour les requtes (SELECT) qui retournent un ResultSet


(tuples rsultants)

executeUpdate() : pour les requtes (INSERT, UPDATE, DELETE, CREATE


TABLE, DROP TABLE) qui retournent un entier (nombre de tuples traits)

execute() : pour requtes inconnus. Renvoie true si la requte a donn lieu la


creation d un objet ResultSet

ResultSet rs = st.executeQuery("SELECT nom, prenom FROM clients " +


"WHERE nom='itey ORDER BY nom");
S. Elkosantini

173

Base de donnes (JDBC)

JDBC

Excuter la requte :

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)");


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

S. Elkosantini

174

58

Base de donnes (JDBC)

JDBC

Traiter les donnes retournes :

L objet ResulSet (retourn par l excution de executeQuery() ) permet


d accder aux champs des tuples slectionns

seules les donnes demandes sont transfres en mmoire par le driver


JDBC

Le parcours se fait itrativement ligne par ligne par la mthode 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

S. Elkosantini

175

Base de donnes (JDBC)

JDBC

Traiter les donnes retournes :

On peut identifier chaque colonne de la base de donne

Par son index


Par son nom

L accs aux valeurs des colonnes se fait par les mthodes de la forme
getXXX()

Lecture du type de donnes XXX dans chaque colonne du tuple


courant

int val = rs.getInt(3) ; // accs la 3e colonne


String prod = rs.getString("PRODUIT")
S. Elkosantini

176

Base de donnes (JDBC)

JDBC

Traiter les donnes retournes :

Parcourir les rsultats dune requte

String req= "SELECT note, nom FROM Etudiant ";


ResultSet rs = st.executeQuery(req);
while(rs.next()) {
int i = rs.getInt(" note");
String s = rs.getString(" nom");
}

S. Elkosantini

177

59

Base de donnes (JDBC)

JDBC

Traiter les donnes retournes :

Correspondance des types

S. Elkosantini

178

Base de donnes (JDBC)

JDBC
Fermer les diffrents connexions :

Il faut fermer proprement les diffrentes connexion ouverts


Sinon le garbage collector s en occupera mais moins efficace

Chaque objet (de type Connection, resultset ou statement) possde


une mthode close()
resultset.close();
statement.close();
connection.close();
S. Elkosantini

179

Base de donnes (JDBC)

Exemple complet

try {
Class.forName ("org.gjt.mm.mysql.Driver").newInstance();}
catch (ClassNotFoundException a) { System.out.println ("Driver non trouve"); }
catch (Exception b) { System.out.println ("Probleme sur chargement de driver JDBC"); }

Charger
le pilote

try{
conn = DriverManager.getConnection ("jdbc:mysql://127.0.0.1/cbr", "root", "mysql");
Connexion
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 ";
ResultSet rs = stmt .executeQuery(req);
while(rs.next()) {
System .out.println(rs.getString(" nom"));}
catch (SQLException c) { System.out.println ( problme SQL"+c); }
rs.close(); stmt .close(); conn.close();

Prparer, excuter et
traiter la requte

Fermer la connexion
S. Elkosantini

180

60

Fin du cours

S. Elkosantini

181

61

Das könnte Ihnen auch gefallen