Vous êtes sur la page 1sur 68

Initiation au langage Java

26/04/2012 23:17:53

Le langage Java
Langage de programmation
Dvelopp par SUN microsystems en 1995 Initialement orient web Syntaxe proche du langage C Cest un langage interprt et compil

Cest un langage orient-objet

26/04/2012 23:17:53

Rappel sur Programmation Oriente Objet (POO)

26/04/2012 23:17:53

Programmation oriente-objet
Cest avant tout une dmarche de conception de programme qui se focalise sur les objets dvelopper plutt que sur les traitements.
1. 2. 3. 4. Identifier les objets du programme Identifier les donnes ncessaires chaque objet (Attributs) Identifier des mthodes de traitement de chaque objet Dvelopper des classes dobjets
4

26/04/2012 23:17:53

Exemple: gestion dune bibliothque


Avec une programmation procdurale (ex: C), on cherchera crire des fonctions pour :
Rechercher un livre daprs son titre, son auteur, Enregistrer le prt dun livre Enregistrer le retour dun livre Identifier les lecteurs en retard Crer un nouveau lecteur Enregistrer un nouveau livre Afficher la liste des livres emprunts par un lecteur
5

26/04/2012 23:17:53

Exemple: gestion dune bibliothque


Avec un langage de programmation orientobjet, on dfinit le contenu des classes dobjets manipuls :
La classe Livre qui a un titre, un auteur, un emprunteur et des mthodes empruntPar(Lecteur l), rendu(), estEnRetard(), La classe Lecteur qui a un nom, une adresse, une liste de livres emprunts et des mthodes emprunte(Livre l), retourne(Livre l), Dautres classes telles que DVD, StatutLecteur, Bibliothque, CatgorieLivre, Employ,
26/04/2012 23:17:53 6

Classe
Une classe est un type complexe de donnes. On dclare des variables dont le type est une classe comme pour les types primitifs:
int monEntier; Livre monLivre;

Cest au concepteur de la classe dcrire toutes les oprations qui lui sont applicables En Java, un programme est uniquement constitue de classes.
26/04/2012 23:17:53 7

Exemple: la classe Livre


Donnes
class Livre { String titre; int numero; Lecteur emprunteur;
String getTitre() { return titre; }

Mthodes
boolean estEmprunte() { if (emprunteur == null) return false; else return true; } }
26/04/2012 23:17:53 8

Droits d'accs
Une variable ou une mthode a un type d'accs qui la rend accessible ou non en fonction de la classe o elle est appele. public, ex: public String getTitre() {} La mthode est accessible par toutes les classes. private, ex: private String titre; La variable n'est accessible que dans sa classe. protected, ex: protected String nomCategorie;

26/04/2012 23:17:53

Exemple: droits d'accs


public class Livre { private String titre; private int numero; Lecteur emprunteur; public String getTitre() { return titre; } public boolean estEmprunte() { if (emprunteur == null) return false; else return true; } } public class BonExemple public class MauvaisExemple{{ public String getDescription(Livre public String getDescription(Livre l) { l) { String str = l.titre; String str = l.getTitre(); if (l.estEmprunte()) if (l.estEmprunte()) str = str + " emprunte"; str = str + " else emprunte"; else str = str + "libre; return str; str = str + " libre"; } return str; } }

26/04/2012 23:17:53

10

Objet
Un objet est une instance dune classe:
Livre monLivre = new Livre();

Lobjet monLivre a toutes les proprits de sa classe. Par exemple :


monLivre.titre monLivre.estEmprunte()

26/04/2012 23:17:53

11

Constructeur
Linstanciation dune classe en un objet fait appel une mthode constructeur qui effectue des oprations dinitialisation.
Un constructeur a le mme nom que sa classe; Un constructeur na pas de valeur de retour; Il peut exister plusieurs constructeurs (avec des paramtres dentre diffrents); Il faut au moins un constructeur dans une classe pour pouvoir instancier des objets.
26/04/2012 23:17:53 12

Constructeur Livre
class Livre { Livre() { titre = null; emprunteur = null; numero = 0; }

Livre(String t, int n) { titre = t; numero = n; emprunteur = null; }


}
26/04/2012 23:17:53

Livre monLivre; monLivre = new Livre(); Livre unLivre; unLivre = new Livre("Java",123);

13

Mthode main
Une classe excutable dispose d'une mthode: public static void main(String[ ] args)

La mthode main est la premire excute au dbut du programme


public class Enregistrement { public static void main(String[ ] args) { Lecteur l = new Lecteur("Youssef"); l.inscrit(); } }
26/04/2012 23:17:53 14

Syntaxe du langage

26/04/2012 23:17:53

15

Types primitifs
Mme types qu'en C: int float double short long char void
26/04/2012 23:17:53

Plus deux nouveaux types : boolean byte Plus la classe : String Dclaration : int monEntier; String chaine; boolean test;
16

Structures de contrle
Instruction conditionnelle
if <condition> {bloc_si_vrai} else {bloc_si_faux} Exemple :

if ( emprunteur.getStatut() = = "employe") { unLivre.setDateRetour(30); } else { unLivre.setDateRetour(15); }


26/04/2012 23:17:53 17

Structures de contrle
Instruction itrative
while <condition> {bloc} Exemple : while ( i < biblio.nbLivres() ) { Livre l = biblio.getLivre(i); l.setDisponible(true); i++; }
26/04/2012 23:17:53 18

Structures de contrle
Instruction itrative
for (<init>; <condition>; <increment>) {bloc} Exemple : for (int i = 0; i < biblio.nbLivres(); i++ ) { Livre l = biblio.getLivre(i); l.setDisponible(true); }

26/04/2012 23:17:53

19

Structures de contrle
Instruction de choix multiple
switch (<variable>) { Exemple : case <val1>: <bloc1> case <val2>: <bloc2> switch (l.getCategorie()) { case 1: l.setDuree(15); break; default: <bloc> case 2: l.setDuree(20); } break; default: l.setDuree(30); }
26/04/2012 23:17:53 20

Environnement Java

26/04/2012 23:17:53

21

Packages
Un package regroupe des classes et des souspackages sous un thme prcis. Exemple :
Le package java contient des classes de base du langage. Le package java.net contient des classe pour la programmation rseau.

Pour crer un package, vous devez prciser son nom au dbut d'une classe. package bibliotheque; public class Livre { }
26/04/2012 23:17:53 22

Recommandations de dveloppement
Le code source d'une classe doit tre enregistr
dans un fichier de mme nom que la classe. Ex: Livre.java

Toutes les classes d'un package doivent tre dans


un rpertoire de mme nom que le package. Ex: C:\MesProgs\src\exemples\bibliotheque\Livre.java

En gnral, chaque nom de classe commence par


une majuscule.

26/04/2012 23:17:53

23

Import
Pour utiliser une classe d'un autre package, il faut l'importer.
package exemples.bibliotheque;

import java.util.*; /* import java.util.Vector; marche aussi */


Public class Livre { Vector liste; }
26/04/2012 23:17:53 24

Langage interprt ?
Code source Compilateur Bytecode

Interprteur Code machine


Systme d'exploitation
26/04/2012 23:17:53 25

Compilation
Le code source est compil par l'instruction javac javac Livre.java Deux options sont ncessaires pour Enregistrer le bytecode dans autre un rpertoire javac d <rpertoire> <code source> Compiler si des classes d'autres packages sont utilises javac classpath <rpertoires> <code source> Exemple : javac d C:\MesProgs\classes -classpath C:\MesProgs\src Livre.java

26/04/2012 23:17:53

26

Excution
Une classe excutable se lance avec l'instruction java suivie de son nom complet (avec son package). java exemples.bibliotheque.Livre Une options est ncessaire si des classes d'autres packages sont utilises: java classpath <rpertoires> <classe excutable> Exemple :
java -classpath C:\MesProgs\classes exemples.bibliotheque.Livre

26/04/2012 23:17:53

27

Documentation
Une documentation HTML peut tre gnre pour dcrire des packages par l'instruction javadoc l'option d existe aussi pour spcifier un rpertoire de destination javadoc d C:\MesProgs\doc exemples

Les fichiers sources doivent tre correctement comments pour crer une vritable documentation.

26/04/2012 23:17:53

28

Tags de documentation
@author pour afficher les noms des
auteurs de la classe @param pour dcrire les paramtres d'entre d'une mthode @return pour dcrire la valeur de retour

d'une mthode
@see pour crer un lien vers d'autres classes
26/04/2012 23:17:53 29

Application Programming Interface (API)

26/04/2012 23:17:53

30

Application Programming Interface


L'API (Application Programming Interface) dsigne un ensemble de classes gnriques utilisables par un dveloppeur Java.

L'API du SDK 1.4 a t tendue de manire incrmentale depuis la version 1.02 du JDK. Le code source des classes est disponible.

26/04/2012 23:17:53

31

Packages java, javax et org


L'API du SDK 1.4 est dcoupe en packages qui regroupent les classes par thme. Au plus haut niveau : le package java contient des classes couramment utilises le package javax contient des extensions plus spcialises le package org contient des extensions proposes par

d'autres organisations (comme l'Object Management Group)

26/04/2012 23:17:53

32

Quelques packages
java.lang : classes de base du langage
java.util : classes utilitaires java.io : classes de gestion des entres/sorties java.net : classes pour la programmation rseau java.awt : classes graphiques javax.swing : autres classes graphiques
26/04/2012 23:17:53 33

Classe java.lang.String
Reprsente une chane de caractres Constructeurs:
String s = new String(); String s = new String("hello");

Quelques mthodes:
int length();
char charAt(int pos); boolean equals(Object o);

int indexOf(char c);


String substring(int debut, int fin);
26/04/2012 23:17:53 34

Classe java.util.Vector
Reprsente un ensemble ordonn d'lments Constructeur : Vector v = new Vector(); Quelques mthodes: int size(); boolean isEmpty(); boolean contains(Object o); Object elementAt(int pos); void setElementAt(Object o, int pos); void addElement(Object o);
26/04/2012 23:17:53 35

Classe java.lang.Math
Pas de constructeur Uniquement des mthodes et variables static: Math.PI, Math.E

double cos(double a);


double sqrt(double a); double pow(double a, double b);

int round(float a);


int max(int a, int b);

26/04/2012 23:17:53

36

Attributs d'instance ou de classe


Une variable ou mthode appartient une instance sauf si elle est static auquel cas elle appartient la classe.
Attribut d'instance public String getTitre() s'appelle sur un objet Livre monLivre = newLivre(); monLivre.getTitre(); Livre.getTitre();
26/04/2012 23:17:53 37

Attribut de classe Class Integer { static int MAX_VALUE} s'appelle sur une classe

int val = Integer.MAX_VALUE;

La relation d'hritage

26/04/2012 23:17:53

38

Introduction
Premier niveau d'abstraction : Distinction entre instance et classe La proprit d'hritage permet de gnraliser plusieurs classes pour manipuler des entits un plus haut niveau d'abstraction. Par exemple, des classes Voiture, Camion, Moto peuvent tre gnralises en une classe Vhicule. Avantages : Effectuer un mme traitement sur des objets de classes diffrentes; viter la redondance de structure.
26/04/2012 23:17:53 39

Introduction
Concrtement, l'hritage consiste factoriser des attributs communs plusieurs classes.

Lecteur
String nom; String prenom; String adresse; Statut statut; Livre[] emprunts;

Employ
String nom; String prenom; String adresse;

26/04/2012 23:17:53

40

Introduction
Personne
String nom; String prenom; String adresse;

Lecteur
Statut statut; Livre[] emprunts;

Employ

Les classes Lecteur et Employ hritent de la classe Personne


26/04/2012 23:17:53 41

Hritage des donnes


Compte
double solde; Client proprietaire;

Si la classe CompteEpargne hrite de la classe Compte, les donnes de Compte seront encapsules dans CompteEpargne.

CompteEpargne
double txInteret;

Les instances de Compte ont les donnes : solde propritaire Les instances de CompteEpargne ont les donnes : solde propritaire txInteret
42

26/04/2012 23:17:53

Hritage des mthodes


Compte
double solde; Client proprietaire; void passer(Ordre) double consulter()

Les mthodes de la classe Compte sont encapsules dans la classe CompteEpargne. Les instances de Compte peuvent invoquer les mthodes : void passer(Ordre) double consulter() Les instances de CompteEpargne peuvent invoquer les mthodes : void passer(Ordre) double consulter() double ajoutInteret()
43

CompteEpargne
double txInteret; double ajoutInteret()

26/04/2012 23:17:53

Hritage des mthodes


public class Compte { public void passer(Ordre o) { if (o.debiteur = = this) { solde = solde o.montant; } else { solde = solde + o.montant; } } Problme: si classe CompteEpargne doit calculer des intrts la }

temporaires aprs chaque Ordre, la mthode passer(Ordre) de Compte n'est pas valide.
Heritage impossible ? Modification de Compte ?
26/04/2012 23:17:53

44

Surcharge de mthodes
Compte
double solde; Client proprietaire; void passer(Ordre) double consulter() La surcharge est la pratique consistant crire dans une classe B, hritant d'une classe A, une mthode qui existe dans la classe A. Pour qu'une mthode de B surcharge une mthode de A, il faut que leurs signatures soient exactement identiques (nom, type des paramtres d'entre, type de retour). Les instances de CompteEpargne peuvent invoquer les mthodes : consulter() de la classe Compte ajoutInteret() et passer(Ordre) de la classe CompteEpargne
45

CompteEpargne
double txInteret; double ajoutInteret() void passer(Ordre)
26/04/2012 23:17:53

Exemple de surcharge
public class CompteEpargne extends Compte { public void passer(Ordre o) { int periode = calculerPeriode(); float interets = (solde * txInteret) * (periode/365); interetsTemporaires = interetsTemporaires + interets; super.passer(o); } public CompteEpargne(float sol, Client prop) { super(sol,prop); } }
26/04/2012 23:17:53 46

Polymorphisme
Le polymorphisme est la facult d'effectuer un traitement diffrent pour l'appel d'un mme symbole. Le traitement dpend du receveur Exemple : Tous les objets instances de la classe Compte ou d'une sousclasse de Compte ont une mthode passer(Ordre). L'appel la mthode passer(Ordre) effectue un traitement dpendant de la classe de l'objet par lequel elle est invoque. Il n'est parfois pas important de connatre la nature prcise du traitement.
26/04/2012 23:17:53 47

Polymorphisme
Les comptes dbiteur et crditeur d'un objet Ordre peuvent tre des objets de la classe Compte ou d'une sous-classe de Compte (CompteEpargne, CompteCheque, )
public void passerListe(Ordre[ ] o) { for (int i = 0; i < o.length; i++) { Compte deb = o.debiteur; Compte cre = o.crediteur; deb.passer(o); cre.passer(o); } }
26/04/2012 23:17:53 48

L'hritage est transitif


Compte
double solde; Client proprietaire; void passer(Ordre)

CompteEpargne encapsule CompteEpargneBloque La classe CompteChque encapsule :: Compte encapsule : solde, encapsule : propritaire txInteret solde, propritaire, passer(Ordre)[de Compte] [de CompteEpargne] solde, proprietaire, txInteret, passer(Ordre) [de Compte] double ajoutInteret() duree retirer(double) void passer(Ordre) [de
CompteEpargneBloque]

CompteCheque
retirer(double)

CompteEpargne
double txInteret; double ajoutInteret() void passer(Ordre)

double ajoutInteret()

CompteEpargneBloque
Date duree; void passer(Ordre)

26/04/2012 23:17:53

49

Interfaces & classes abstraites

26/04/2012 23:17:53

50

Hritage multiple
Certains langages de programmation orient-objet autorisent une classe hriter de plusieurs classes. Rectangle
String description() { return "4 angles droit"; }

Losange
String description() { return "4 cts gaux"; }

Carre
Si description() n'est pas surcharge quelle mthode doit tre appele pour les objets de la classe Carr ?
26/04/2012 23:17:53 51

Hritage multiple
Les langages OO proposent des solutions diverses ce problme : Tout conflit provoque une erreur de compilation (AGL, certains compilateurs C++); Une priorit d'hritage est dfinie La rsolution des conflits est alatoire (certains compilateurs C++). Le problme de l'hritage multiple concerne les traitements et non les signatures de mthode. Le langage Java : interdit l'hritage multiple; propose d'utiliser des interfaces pour simuler l'hritage multiple.
26/04/2012 23:17:53 52

Interfaces
Une interface dfinit les mthodes que certaines classes doivent obligatoirement implmenter. Une interface : ne contient aucune donne; contient des signatures de mthodes; n'associe aucune implmentation ses mthodes. Si une classe implmente une interface, elle doit contenir les mthodes dcrites dans l'interface en y associant un traitement. une classe peut implmenter plusieurs interfaces; une interface ne peut pas tre instancie; une interface peut hriter d'une autre interface.
26/04/2012 23:17:53 53

Exemple d'interface
Personne
String nom; String adresse;

Employ
double salaire; double getSalaire() {}

Client
Compte compte; Compte getCompte() {}

Si un employ peut ou non tre aussi un client, comment faire ?

26/04/2012 23:17:53

54

Exemple d'interface
Client
Compte renvoieCompte();

Personne
String nom; String adresse;

ClientExterne
Compte compte; Compte getCompte() {}

Employ
double salaire; double getSalaire() {}

ClientInterne
Compte compte; Compte getCompte() {}

26/04/2012 23:17:53

55

Exemple d'interface
public interface Client { public Compte renvoieCompte(); }

public class ClientExterne extends Personne implements Client { private Compte compte; public Compte renvoieCompte() { return compte; } }

26/04/2012 23:17:53

56

Niveaux d'abstraction des objets


Pas de donnes Pas de mthodes Donnes

Classe Interface Classe abstraite


Classe Classe abstraite Interface Classe abstraite

Classe Classe abstraite


Classe Classe abstraite Classe ? abstraite

Traitements des mthodes

Signatures des mthodes

26/04/2012 23:17:53

57

Classes abstraites
Une classe abstraite est une classe dont certaines mthodes ne sont pas implmentes. Une classe abstraite ne peut pas tre instancie; Une classe abstraite peut hriter d'une classe (abstraite ou non) Une classe abstraite implmenter plusieurs interfaces (sans tre oblige d'implmenter leurs mthodes) Une classe peut hriter d'une seule classe (abstraite ou non) Si une classe hrite d'une classe abstraite, elle doit implmenter toutes ses mthodes abstraites (sans traitement) ou tre elle aussi abstraite.
26/04/2012 23:17:53 58

Exemple de classe abstraite


Salarie
double salaire; double getSalaire() { return salaire; } verserSalaire();

ClientInterne
Compte compte; Compte getCompte() {} verserSalaire() { compte.credite(salaire); }
26/04/2012 23:17:53

Employe
verserSalaire() { envoyerCheque(salaire); }

59

Exemple de classe abstraite


public abstract class Salarie { protected float salaire; public float renvoieSalaire { return salaire; } public abstract void verserSalaire(); }

public class ClientInterne extends Salarie { Compte compte;


public void verserSalaire() { compte.credite(salaire); } }
26/04/2012 23:17:53 60

Gestion des exceptions

26/04/2012 23:17:53

61

Notion d'exception
En Java, les erreurs se produisent lors d'une excution sous la forme d'exceptions. Une exception :
est un objet, instance d'une classe d'exception provoque la sortie d'une mthode correspond un type d'erreur contient des informations sur cette erreur

26/04/2012 23:17:53

62

Classes d'exceptions
Une classe d'exception hrite de java.lang.Throwable. Elle correspond un type d'erreur et encapsule des informations relatives l'erreur qui s'est produit. La mthode public String getMessage() renvoie une chane de caractres dcrivant l'exception.

IndexOutOfBoundsException NullPointerException NumberFormatException ClassCastException


63

26/04/2012 23:17:53

Dclaration des exceptions possibles


Chaque mthode doit dclarer dans sa signature les exceptions qu'elle peut mettre. La liste des exceptions possible est indique la fin de la signature par throws suivi des classes d'exceptions concernes.
public static int parseInt(String s) throws NumberFormatException { }
26/04/2012 23:17:53 64

mission et cration d'exceptions


Lorsqu'une erreur est dtecte dans une mthode, il faut : 1. Crer un objet d'une classe d'exception 2. mettre l'exception
int getValue(int pos) throws IndexOutOfBoundsException { if (pos > tab.length) throw new IndexOutOfBoundsException("trop grand");

else return tab[pos];


}

26/04/2012 23:17:53

65

Traitement des exceptions


Si une mthode peut mettre une exception (ou appelle une autre mthode qui peut en mettre une) il faut : soit propager l'exception (la mthode doit l'avoir dclare); soit intercepter et traiter l'exception.

26/04/2012 23:17:53

66

Propagation d'exceptions

public int ajouter(int a, String str) throws NumberFormatException int b = Integer.parseInt(str);

a = a + b;
return a; }

26/04/2012 23:17:53

67

Interception d'exceptions
public int ajouter(int a, String str) { try { int b = Integer.parseInt(str); a = a + b; } catch (NumberFormatException e) { System.out.println(e.getMessage()); } return a; }

26/04/2012 23:17:53

68