68911725-coursJava
Transcript of 68911725-coursJava
-
7/31/2019 68911725-coursJava
1/68
26/04/2012 23:17:53 1
Initiation au langage Java
-
7/31/2019 68911725-coursJava
2/68
26/04/2012 23:17:53 2
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
-
7/31/2019 68911725-coursJava
3/68
26/04/2012 23:17:53 3
Rappel sur ProgrammationOriente Objet (POO)
-
7/31/2019 68911725-coursJava
4/68
26/04/2012 23:17:53 4
Programmation oriente-objet
Cest avant tout une dmarche deconception de programme qui sefocalise sur les objets dvelopper
plutt que sur les traitements.
1. Identifier les objets du programme
2. Identifier les donnes ncessaires chaque objet (Attributs)3. Identifier des mthodes de traitement de chaque objet
4. Dvelopper des classesdobjets
-
7/31/2019 68911725-coursJava
5/68
26/04/2012 23:17:53 5
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
-
7/31/2019 68911725-coursJava
6/68
26/04/2012 23:17:53 6
Exemple: gestion dune bibliothque
Avec un langage de programmation orient-objet, on dfinit le contenu des classesdobjets manipuls :
La classe Livre qui a un titre, un auteur, un emprunteur et desmthodes empruntPar(Lecteur l), rendu(), estEnRetard(), La classe Lecteur qui a un nom, une adresse, une listedelivres
emprunts et des mthodes emprunte(Livre l), retourne(Livre
l), Dautres classes telles que DVD, StatutLecteur, Bibliothque,CatgorieLivre, Employ,
-
7/31/2019 68911725-coursJava
7/68
26/04/2012 23:17:53 7
Classe
Une classe est un type complexe de donnes.On dclare des variables dont le type est uneclasse comme pour les types primitifs:
int monEntier; Livre monLivre;
Cest au concepteur de la classe dcrire toutesles oprations qui lui sont applicables
En Java, un programme est uniquementconstitue de classes.
-
7/31/2019 68911725-coursJava
8/68
26/04/2012 23:17:53 8
Exemple: la classe Livre
class Livre {String titre;int numero;Lecteur emprunteur;
String getTitre() {return titre;}
boolean estEmprunte() {
if (emprunteur == null)return false;else return true;
}}
Donnes
Mthodes
-
7/31/2019 68911725-coursJava
9/68
26/04/2012 23:17:53 9
Droits d'accs
Une variable ou une mthode a un type d'accs qui la rendaccessible ou non en fonction de la classe o elle est appele.
public, ex: publicStringgetTitre() {}
La mthode est accessible par toutes les classes.
private, ex: privateStringtitre;
La variable n'est accessible que dans sa classe.
protected, ex: protectedStringnomCategorie;
-
7/31/2019 68911725-coursJava
10/68
26/04/2012 23:17:53 10
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 MauvaisExemple {
public String getDescription(Livre l) {
String str = l.titre;
if (l.estEmprunte())str = str + " emprunte";
else
str = str + "libre;
return str;
}
}
public class BonExemple {
public String getDescription(Livre l){
String str = l.getTitre();if (l.estEmprunte())
str = str + "emprunte";
else
str = str + " libre";
return str;
}
}
-
7/31/2019 68911725-coursJava
11/68
26/04/2012 23:17:53 11
Objet
Un objet est une instancedune classe:Livre monLivre = new Livre();
Lobjet monLivre a toutes les propritsde sa classe. Par exemple :monLivre.titre
monLivre.estEmprunte()
-
7/31/2019 68911725-coursJava
12/68
26/04/2012 23:17:53 12
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 plusieursconstructeurs (avec des paramtres
dentre diffrents);
Il faut au moins un constructeur dans une classe pour pouvoir
instancier des objets.
-
7/31/2019 68911725-coursJava
13/68
26/04/2012 23:17:53 13
Constructeur Livre
class Livre {Livre() {
titre = null;emprunteur = null;
numero = 0;}
Livre(String t, int n) {titre = t;numero = n;
emprunteur = null;}
}
Livre monLivre;
monLivre = new Livre();
Livre unLivre;
unLivre = new Livre("Java",123);
-
7/31/2019 68911725-coursJava
14/68
26/04/2012 23:17:53 14
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();}}
-
7/31/2019 68911725-coursJava
15/68
26/04/2012 23:17:53 15
Syntaxe du langage
-
7/31/2019 68911725-coursJava
16/68
26/04/2012 23:17:53 16
Types primitifs
Mme typesqu'en C:
int
float double short long char void
Plus deux nouveaux types : boolean
byte
Plus la classe : String
Dclaration :
int monEntier; String chaine;
boolean test;
-
7/31/2019 68911725-coursJava
17/68
-
7/31/2019 68911725-coursJava
18/68
26/04/2012 23:17:53 18
Structures de contrle
Instruction itrative
while {bloc}
Exemple :
while ( i < biblio.nbLivres() ) {Livre l = biblio.getLivre(i);l.setDisponible(true);i++;
}
-
7/31/2019 68911725-coursJava
19/68
26/04/2012 23:17:53 19
Structures de contrle
Instruction itrative
for (; ; ) {bloc}
Exemple :
for (int i = 0; i < biblio.nbLivres(); i++ ) {Livre l = biblio.getLivre(i);
l.setDisponible(true);}
-
7/31/2019 68911725-coursJava
20/68
26/04/2012 23:17:53 20
Structures de contrle
Instruction de choix multiple
switch () {case : case : default:
}
Exemple :
switch (l.getCategorie()) {case 1: l.setDuree(15);
break;case 2: l.setDuree(20);
break;default: l.setDuree(30);}
-
7/31/2019 68911725-coursJava
21/68
26/04/2012 23:17:53 21
Environnement Java
-
7/31/2019 68911725-coursJava
22/68
26/04/2012 23:17:53 22
Packages
Un package regroupe des classes et des sous-packages sous un thme prcis. Exemple :
Le packagejava contient des classes de base dulangage.
Le packagejava.net contient des classe pour laprogrammation rseau.
Pour crer un package, vous devez prciser son nom au dbutd'une classe.
package bibliotheque;
public class Livre {}
-
7/31/2019 68911725-coursJava
23/68
26/04/2012 23:17:53 23
Recommandations de dveloppement
Le code source d'une classe doit tre enregistrdans un fichier de mme nom que la classe. Ex:
Livre.java
Toutes les classes d'un package doivent tre dansun rpertoire de mme nom que le package. Ex:
C:\MesProgs\src\exemples\bibliotheque\Livre.java
En gnral, chaque nom de classe commence parune majuscule.
-
7/31/2019 68911725-coursJava
24/68
26/04/2012 23:17:53 24
Import
Pour utiliser une classe d'un autrepackage, il faut l'importer.
package exemples.bibliotheque;
import java.util.*;/* import java.util.Vector; marche aussi */
Public class Livre {
Vector liste;
}
-
7/31/2019 68911725-coursJava
25/68
26/04/2012 23:17:53 25
Langage interprt ?
Compilateur
Interprteur
Systme d'exploitation
Code source
Bytecode
Code machine
-
7/31/2019 68911725-coursJava
26/68
26/04/2012 23:17:53 26
Compilation
Le code source est compil par l'instructionjavacjavac Livre.java
Deux options sont ncessaires pour Enregistrer le bytecode dans autre un rpertoire
javac d Compiler si des classes d'autres packages sont utilises
javac classpath
Exemple :
javac d C:\MesProgs\classes -classpath C:\MesProgs\src Livre.java
-
7/31/2019 68911725-coursJava
27/68
26/04/2012 23:17:53 27
Excution
Une classe excutable se lance avec l'instructionjava suivie deson nom complet (avec son package).
java exemples.bibliotheque.Livre
Une options est ncessaire si des classes d'autres packages sontutilises:
java classpath
Exemple :java -classpath C:\MesProgs\classes exemples.bibliotheque.Livre
-
7/31/2019 68911725-coursJava
28/68
26/04/2012 23:17:53 28
Documentation
Une documentation HTML peut tre gnre pour dcrire despackages par l'instructionjavadoc
l'optiond existe aussi pour spcifier un rpertoire dedestination
javadoc d C:\MesProgs\doc exemples
Les fichiers sources doivent tre correctement comments pourcrer une vritable documentation.
-
7/31/2019 68911725-coursJava
29/68
26/04/2012 23:17:53 29
Tags de documentation
@author pour afficher les noms desauteurs 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'autresclasses
-
7/31/2019 68911725-coursJava
30/68
26/04/2012 23:17:53 30
Application Programming Interface(API)
-
7/31/2019 68911725-coursJava
31/68
26/04/2012 23:17:53 31
Application Programming Interface
L'API (Application Programming Interface) dsigne unensemble de classes gnriques utilisables par un dveloppeurJava.
L'API du SDK 1.4 a t tendue de manire incrmentaledepuis la version 1.02 du JDK.
Le code source des classes est disponible.
-
7/31/2019 68911725-coursJava
32/68
26/04/2012 23:17:53 32
Packages java, javax et org
L'API du SDK 1.4 est dcoupe en packages qui regroupentles 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)
-
7/31/2019 68911725-coursJava
33/68
26/04/2012 23:17:53 33
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
-
7/31/2019 68911725-coursJava
34/68
26/04/2012 23:17:53 34
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);
-
7/31/2019 68911725-coursJava
35/68
26/04/2012 23:17:53 35
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);
-
7/31/2019 68911725-coursJava
36/68
26/04/2012 23:17:53 36
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);
-
7/31/2019 68911725-coursJava
37/68
26/04/2012 23:17:53 37
Attributs d'instance ou de classe
Une variable ou mthode appartient uneinstance sauf si elle est static auquel cas elleappartient la classe.
Attribut d'instance
public String getTitre() s'appelle sur un objet
Livre monLivre = newLivre();
monLivre.getTitre();Livre.getTitre();
Attribut de classe
Class Integer {static int MAX_VALUE}s'appelle sur une classe
int val = Integer.MAX_VALUE;
-
7/31/2019 68911725-coursJava
38/68
26/04/2012 23:17:53 38
La relation d'hritage
-
7/31/2019 68911725-coursJava
39/68
26/04/2012 23:17:53 39
Introduction
Premier niveau d'abstraction : Distinction entre instance et classe
La proprit d'hritage permet de gnraliser plusieurs classespour manipuler des entits un plus haut niveau d'abstraction.Par exemple, des classes Voiture, Camion, Moto peuvent tregnralises en une classe Vhicule.
Avantages : Effectuer un mme traitement sur des objets de classesdiffrentes;
viter la redondance de structure.
-
7/31/2019 68911725-coursJava
40/68
26/04/2012 23:17:53 40
Introduction
String nom;String prenom;String adresse;Statut statut;Livre[] emprunts;
Lecteur
String nom;String prenom;String adresse;
Employ
String nom;String prenom;String adresse;
String nom;String prenom;String adresse;
Concrtement, l'hritage consiste factoriser des attributscommuns plusieurs classes.
-
7/31/2019 68911725-coursJava
41/68
26/04/2012 23:17:53 41
Introduction
String nom;String prenom;String adresse;
Personne
Statut statut;
Livre[] emprunts;
Lecteur Employ
Les classes Lecteur et Employ hritent de la classe Personne
-
7/31/2019 68911725-coursJava
42/68
26/04/2012 23:17:53 42
Hritage des donnes
double solde;Client proprietaire;
Compte
double txInteret;CompteEpargne
Si la classe CompteEpargne hrite de laclasse Compte, les donnes de Compteseront encapsules dans CompteEpargne.
Les instances de Compte ont les donnes : solde propritaire
Les instances de CompteEpargne ont lesdonnes : solde propritaire txInteret
-
7/31/2019 68911725-coursJava
43/68
26/04/2012 23:17:53 43
Hritage des mthodes
double solde;Client proprietaire;void passer(Ordre)
double consulter()
Compte
double txInteret;double ajoutInteret()
CompteEpargne
Les mthodes de la classe Compte sontencapsules dans la classe CompteEpargne.
Les instances de Compte peuvent invoquer
les mthodes : void passer(Ordre) double consulter()
Les instances de CompteEpargne peuventinvoquer les mthodes : void passer(Ordre) double consulter() double ajoutInteret()
-
7/31/2019 68911725-coursJava
44/68
26/04/2012 23:17:53 44
Hritage des mthodes
public class Compte {public void passer(Ordre o) {
if (o.debiteur = = this) {solde = soldeo.montant;
} else { solde = solde + o.montant;}
}
}Problme: si la classe CompteEpargne doit calculer des intrtstemporaires aprs chaque Ordre, la mthode passer(Ordre) deCompte n'est pas valide.
Heritage impossible ? Modification de Compte ?
-
7/31/2019 68911725-coursJava
45/68
26/04/2012 23:17:53 45
Surcharge de mthodes
La surcharge est la pratique consistant criredans une classe B, hritant d'une classe A, une
mthode qui existe dans la classe A.double solde;Client proprietaire;void passer(Ordre)
double consulter()
Compte
double txInteret;double ajoutInteret()
CompteEpargne
Pour qu'une mthode de B surcharge une mthode de
A, il faut que leurs signatures soient exactementidentiques (nom, type des paramtres d'entre, typede retour).
Les instances de CompteEpargne peuvent invoquer lesmthodes :
consulter() de la classe Compte ajoutInteret() et passer(Ordre) de la classe
CompteEpargnevoid passer(Ordre)
-
7/31/2019 68911725-coursJava
46/68
26/04/2012 23:17:53 46
Exemple de surcharge
public class CompteEpargne extends Compte {
public CompteEpargne(float sol, Client prop) {
super(sol,prop);}
}
public void passer(Ordre o) {
int periode = calculerPeriode();
float interets = (solde * txInteret) * (periode/365);interetsTemporaires = interetsTemporaires + interets;
super.passer(o);
}
-
7/31/2019 68911725-coursJava
47/68
26/04/2012 23:17:53 47
Polymorphisme
Exemple : Tous les objets instances de la classe Compte ou d'une sous-classe de Compte ont une mthode passer(Ordre).
L'appel la mthode passer(Ordre) effectue un traitementdpendant de la classe de l'objet par lequel elle est invoque.
Le polymorphisme est la facult d'effectuer un traitementdiffrent pour l'appel d'un mme symbole. Le traitement dpend du receveur
Il n'est parfois pas important de connatre la nature prcise dutraitement.
-
7/31/2019 68911725-coursJava
48/68
26/04/2012 23:17:53 48
Polymorphisme
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);
}
}
Les comptes dbiteur et crditeur d'un objet Ordre peuvent tredes objets de la classe Compte ou d'une sous-classe de Compte(CompteEpargne, CompteCheque, )
-
7/31/2019 68911725-coursJava
49/68
26/04/2012 23:17:53 49
L'hritage est transitif
double solde;Client proprietaire;void passer(Ordre)
Compte
double txInteret;double ajoutInteret()void passer(Ordre)
CompteEpargne
Date duree;void passer(Ordre)
CompteEpargneBloque
La classe Compte encapsule :solde, propritairepasser(Ordre) [de Compte]
La classe CompteChque encapsule :solde, propritairepasser(Ordre) [de Compte]retirer(double)
La classe CompteEpargne encapsule : solde, propritaire, txInteret passer(Ordre) [de CompteEpargne] double ajoutInteret()
La classe CompteEpargneBloqueencapsule :
solde, proprietaire, txInteret,duree
void passer(Ordre) [deCompteEpargneBloque]
double ajoutInteret()
retirer(double)
CompteCheque
-
7/31/2019 68911725-coursJava
50/68
26/04/2012 23:17:53 50
Interfaces & classes abstraites
-
7/31/2019 68911725-coursJava
51/68
26/04/2012 23:17:53 51
Hritage multiple
Certains langages de programmation orient-objet autorisent uneclasse hriter de plusieurs classes.
Rectangle
String description() {return "4 angles droit";}
Losange
String description() {return "4 cts gaux";}
CarreSi description() n'est pas surcharge quelle mthode doit tre appele pour lesobjets de la classe Carr ?
-
7/31/2019 68911725-coursJava
52/68
26/04/2012 23:17:53 52
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 compilateursC++).
Le problme de l'hritage multiple concerne les traitements et nonles signatures de mthode. Le langage Java :
interdit l'hritage multiple; propose d'utiliser des interfaces pour simuler l'hritage
multiple.
-
7/31/2019 68911725-coursJava
53/68
26/04/2012 23:17:53 53
Interfaces
Une interface dfinit les mthodes que certaines classesdoivent 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 lesmthodes 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.
-
7/31/2019 68911725-coursJava
54/68
-
7/31/2019 68911725-coursJava
55/68
26/04/2012 23:17:53 55
Exemple d'interface
PersonneString nom;String adresse;
Employdouble salaire;double getSalaire() {}
ClientExterneCompte compte;Compte getCompte() {}
ClientInterneCompte compte;Compte getCompte() {}
Client
Compte renvoieCompte();
-
7/31/2019 68911725-coursJava
56/68
26/04/2012 23:17:53 56
Exemple d'interface
public interface Client {
public Compte renvoieCompte();
}
public class ClientExterne extends Personne implements Client {
private Compte compte;
public Compte renvoieCompte() {
return compte;
}}
-
7/31/2019 68911725-coursJava
57/68
26/04/2012 23:17:53 57
Niveaux d'abstraction des objets
Classe abstraite
DonnesPas de donnes
Pas de mthodes
Traitements des mthodes
Signatures des mthodes
Classe Interface Classe
Classe Classe
Interface
?
Classe abstraite
Classe abstraiteClasse abstraite
Classe abstraite
Classe abstraite
-
7/31/2019 68911725-coursJava
58/68
26/04/2012 23:17:53 58
Classes abstraites
Une classe abstraite est une classe dont certaines mthodes nesont 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 doitimplmenter toutes ses mthodes abstraites (sans traitement)ou tre elle aussi abstraite.
-
7/31/2019 68911725-coursJava
59/68
26/04/2012 23:17:53 59
Exemple de classe abstraite
ClientInterne
Compte compte;
Compte getCompte() {}verserSalaire() {
compte.credite(salaire);}
Employe
verserSalaire() {
envoyerCheque(salaire);}
Salarie
double salaire;
double getSalaire() {
return salaire;
}
verserSalaire();
-
7/31/2019 68911725-coursJava
60/68
26/04/2012 23:17:53 60
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);
}}
-
7/31/2019 68911725-coursJava
61/68
-
7/31/2019 68911725-coursJava
62/68
26/04/2012 23:17:53 62
Notion d'exception
En Java, les erreurs se produisent lors d'uneexcution 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
-
7/31/2019 68911725-coursJava
63/68
26/04/2012 23:17:53 63
Classes d'exceptions
Une classe d'exception hrite de java.lang.Throwable.
Elle correspond un type d'erreur et encapsule des informationsrelatives l'erreur qui s'est produit.
La mthode public String getMessage() renvoie une chane decaractres dcrivant l'exception.
IndexOutOfBoundsException
NullPointerException
NumberFormatException
ClassCastException
-
7/31/2019 68911725-coursJava
64/68
26/04/2012 23:17:53 64
Dclaration des exceptions possibles
Chaque mthode doit dclarer dans sa signature lesexceptions qu'elle peut mettre.La liste des exceptions possible est indique la fin de
la signature par throws suivi des classes d'exceptionsconcernes.
public static int parseInt(String s) throws NumberFormatException
{
}
-
7/31/2019 68911725-coursJava
65/68
26/04/2012 23:17:53 65
mission et cration d'exceptions
Lorsqu'une erreur est dtecte dans une mthode, il faut :1. Crer un objet d'une classe d'exception2. mettre l'exception
int getValue(int pos) throws IndexOutOfBoundsException {
if (pos > tab.length)
throw new IndexOutOfBoundsException("trop grand");
else return tab[pos];}
-
7/31/2019 68911725-coursJava
66/68
26/04/2012 23:17:53 66
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.
-
7/31/2019 68911725-coursJava
67/68
26/04/2012 23:17:53 67
Propagation d'exceptions
public int ajouter(int a, String str) throws NumberFormatException
int b = Integer.parseInt(str);
a = a + b;
return a;
}
-
7/31/2019 68911725-coursJava
68/68
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;}