Professional Documents
Culture Documents
Licence
Creative Commons
Contrat Paternit Partage des Conditions Initiales l'Identique
2.0 France
keulkeul.blogspot.com
http://creativecommons.org/licenses/by-sa/2.0/fr
Cours Java - M. Baron - Page 2
et Souris SmallTalk, archtype des langages objets Dveloppement par Apple des premiers Mac
Cours Java - M. Baron - Page 3
Dans les annes 90, vers une maturit des concepts objets
Standardisation de C++ Apparition de langages comme Java ou Python
Cours Java - M. Baron - Page 4
Programmation Structure
Unit logique : le module
keulkeul.blogspot.com
Une zone pour les variables Une zone pour les fonctions Chaque fonction rsout une partie du problme Structuration descendante du programmeCours Java - M. Baron - Page
5
Principes POO : programmation par objets Unit logique : lobjet Objet est dfini par
un tat un comportement une identit
tat : reprsent par des attributs (variables) qui stockent des valeurs
keulkeul.blogspot.com
Comportement : dfini par des mthodes (procdures) qui modifient des tats Identit : permet de distinguer un objet dun autre objet
Cours Java - M. Baron - Page 6
Principes POO Les objets communiquent entre eux par des messages Un objet peut recevoir un message qui dclenche
une mthode qui modifie son tat et / ou une mthode qui envoie un message un autre objet
keulkeul.blogspot.com
demarre
ma voiture
le moteur
Principes POO : notion de classe Les objets qui ont les mmes tats et les mmes comportements sont regroups : cest une classe Les classes servent de moules pour la cration des objets Un objet est une instance dune classe Un programme OO est constitu de classes qui permettent de crer des objets qui senvoient des messages
Nom de la classe Attributs keulkeul.blogspot.com
Voiture
- puissance : entier - estDemarree : boolen - vitesse : rel + deQuellePuissance() : entier
Principes POO Lensemble des interactions entre les objets dfini un algorithme Les relations entre les classes refltent la dcomposition du programme
Voiture
keulkeul.blogspot.com
Moteur
Internet : www.developpez.com
Organisation ...
Partie 1 : Introduction au langage JAVA Partie 2 : Bases du langage Partie 3 : Classes et objets Partie 4 : Hritage
keulkeul.blogspot.com
mbaron.developpez.com/javase/java
Dates cls
1991 : Introduction du langage Oak par James Gosling 1993 : Monte en puissance du Web grce Mosaic (lide dadapter Java au Web fait son chemin) 1995 : Ralisation du logiciel HotJava en Java permettant dexcuter des applets 1996 : NetscapeTM Navigator 2 incorpore une machine virtuelle Java 1.0 en version beta 1997 : Un premier pas vers une version industrielle Java 1.1 1999 : Version industrielle de Java
Cours Java - M. Baron - Page 13
keulkeul.blogspot.com
keulkeul.blogspot.com
Byte-Code Java
Code objet destin tre excut sur toute Machine Virtuelle Java Provient de la compilation du code source
Machines Virtuelles Java ... Navigateurs Web, Stations de travail, Network Computers WebPhones Tlphones portables Cartes puces
keulkeul.blogspot.com
...
Compilation en Byte-Code
A partir du code source Outil : compilateur Java
Byte Code
MonProgramme.class java
Diffrentes finalits
machine virtuelle
SDK (Software Development Kit) fournit un compilateur et une JRE (Java Runtime Environment) fournit uniquement une machine
keulkeul.blogspot.com
API (rfrence) : java.sun.com/j2se/1.5.0 Tutorial de Sun : java.sun.com/doc/bookstutorial Cours et exemples : java.developpez.com Forum : fr.comp.lang.java
Cours Java - M. Baron - Page 19
LAPI de Java
Packages
Classes
keulkeul.blogspot.com
Java en action
Auteur : Ian F. Darwin diteur : OReilly Edition : 2002 - 836 pages - ISBN : 2841772039
keulkeul.blogspot.com
Ouvrages de rfrence Ouvrages thmatiques aux ditions OReilly sur une slection des Packages Java (certains traduits en Franais)
Bases du langage
String[] argv
Permet de rcuprer des arguments transmis au programme au moment de son lancement
System.out.println("Ola ")
Mthode d'affichage dans la fentre console
Cours Java - M. Baron - Page 24
Compilation
Excution
java NomDeClasse
Types primitifs de Java Ne sont pas des objets !!! Occupent une place fixe en mmoire rserve la dclaration Types primitifs
Entiers : byte (1 octet) - short (2 octets) - int (4 octets) - long (8 octets) Flottants (norme IEEE-754) : float (4 octets) - double (8 octets) Boolens : boolean (true ou false) Caractres : char (codage Unicode sur 16 bits)
keulkeul.blogspot.com
Chacun des types simples possde un alter-ego objet disposant de mthodes de conversion ( voir dans la partie Classes et Objets) Lautoboxing introduit depuis la version 5.0 convertit de manire transparente les types primitifs en rfrences Cours Java - M. Baron - Page
26
Constantes
Ce sont des variables dont la valeur ne peut affecte qu'une fois
keulkeul.blogspot.com
Elles ne peuvent plus tre modifies Elles sont dfinies avec le mot cl final
final int n = 5; final int t; ... t = 8; n = 10; // erreur : n est dclar final
Itrations
Boucle : for (initialisation ; condition ; modification) { } Boucle (for each) : for (Type var : Collection) { } Tant que : while (condition) { } Faire jusqu : do { } while (condition)
keulkeul.blogspot.com
Nouveaut Java 5
Slection borne
Selon faire : switch ident { case valeur0 : case valeur1 : default: }
Penser vrifier si break est ncessaire dans chaque case
Cours Java - M. Baron - Page 28
keulkeul.blogspot.com
Oprateurs comparaisons
a==b, a!=b, a>b, a<b, a>=b, a<=b
Attention : erreur
boolean t = true; if (t == true) {...}
Oprateurs logiques
keulkeul.blogspot.com
Prfrer :
boolean t = true; if (t) {...}
Et : a && b , a & b Ou : a || b , a | b
keulkeul.blogspot.com
keulkeul.blogspot.com
a 1
b 2 a=b
a 2
b 2
Les tableaux en Java Les tableaux sont considrs comme des objets Fournissent des collections ordonnes dlments Les lments dun tableau peuvent tre
Des variables dun type primitif (int, boolean, double, char, ) Des rfrences sur des objets ( voir dans la partie Classes et Objets)
1 Dclaration = dterminer le type du tableau 2 Dimensionnement = dterminer la taille du tableau 3 Initialisation = initialiser chaque case du tableau
Cours Java - M. Baron - Page 33
null
keulkeul.blogspot.com
Alloue la mmoire en fonction du type de tableau et de la taille Initialise le contenu du tableau 0 pour les types simples
monTableau
0
Cours Java - M. Baron - Page 35
1 1 1
0 2 2
0 0 3
est quivalent
monTab = new int[3]; monTab[0] = 1; monTab[1] = 2; monTab[2] = 3; Cours Java - M. Baron - Page 36
2 Dimensionnement
monTableau = new int[3];
Ou 12 et 3
int[] monTab = {1, 2, 3};
3 Initialisation
monTableau[0] = 1; monTableau[1] = 2; monTableau[2] = 3;
keulkeul.blogspot.com
for (int i = 0; i < monTableau.length; i++) { System.out.println(monTableau[i]); } for (int current : monTableau) { System.out.println(curent); }
Les tableaux en Java : Multidimensionnels Tableaux dont les lments sont eux mmes des tableaux Dclaration
type[][] monTableau;
tab
null
Tableaux rectangulaires
Dimensionnement :
tab
. . null null
. .
. .
Tableaux non-rectangulaires
Dimensionnement :
keulkeul.blogspot.com tab
. .
. . .
Mise en forme
keulkeul.blogspot.com
viter
Cours Java - M. Baron - Page 40
Prfrer
Classes et Objets
Les objets sont des reprsentations dynamiques, du modle dfini pour eux au travers de la classe (instanciation)
Une classe permet d'instancier (crer) plusieurs objets Chaque objet est instance d'une classe et une seuleJava - M. Baron - Page Cours
42
Mthodes
keulkeul.blogspot.com
- Slecteur - Modificateurs
Visibilit
Cours Java - M. Baron - Page 43
Attributs
Slecteur
public void demarre() { estDemarree = true; } public void accelere(double v) { if (estDemarree) { vitesse = vitesse + v } } }
Cours Java - M. Baron - Page 44
keulkeul.blogspot.com
Modificateurs
keulkeul.blogspot.com
Voiture
instance of Relation dinstanciation
maClio
keulkeul.blogspot.com
maClio
tats des objets Chaque objet qui est une instance de la classe Voiture possde ses propres valeurs dattributs Voiture
instance of
ladaBerline110
keulkeul.blogspot.com
b a=b
Affectation et comparaison Lobjet maClio et saClio ont les mmes attributs (tats identiques) mais ont des rfrences diffrentes
maClio != saClio
Le test de comparaison (== et !=) entre objets ne concerne que les rfrence et non les attributs!!!!
Voiture
instance of
saClio
keulkeul.blogspot.com
b recopie
Renvoyer true si les objets a et b peuvent tre considrs comme identique au vu de leurs attributs
Recopie et comparaison dans les parties suivantes
Structure des objets Un objet est constitu dune partie statique et dune partie dynamique Partie statique
Ne varie pas dune instance de classe une autre Permet dactiver lobjet Constitue des mthodes de la classe
Partie dynamique
keulkeul.blogspot.com
Varie dune instance de classe une autre Varie durant la vie dun objet Constitue dun exemplaire de chaque attribut de la classe
Cours Java - M. Baron - Page 54
Utilisation
Usage des Mthodes et des Attributs (non recommand) Les attributs de lobjet peuvent tre modifis Les attributs (ou leurs drivs) peuvent tre consults
Lutilisation dun objet non construit provoque une exception de type NullPointerException
keulkeul.blogspot.com
Cration dobjets : droulement La cration dun objet partir dune classe est appele une instanciation Lobjet cr est une instance de la classe Dclaration
Dfinit le nom et le type de l objet Un objet seulement dclar vaut null (mot rserv du langage)
monObjet monObjet
null
Appelle de mthodes particulires : les constructeurs La cration rserve la mmoire et initialise les attributs
attribut 1 attribut n
Cration dobjets : ralisation La cration dun nouvel objet est obtenue par lappel new Constructeur(paramtres)
Il existe un constructeur par dfaut qui ne possde pas de paramtre (si aucun autre constructeur avec paramtre nexiste)
Les constructeurs portent le mme nom que la classe
public class TestMaVoiture {
Dclaration
keulkeul.blogspot.com
public static void main (String[] argv) { // Dclaration puis cration Voiture maVoiture; maVoiture = new Voiture(); // Dclaration et cration en une seule ligne Voiture maSecondeVoiture = new Voiture(); } }
Dclaration
// Dclaration dune deuxime voiture Voiture maVoitureCopie; // Attention!! pour linstant maVoitureCopie vaut null
// Cration par affectation dune autre rfrence maVoitureCopie = maVoiture; // maVoitureCopie possde la mme rfrence que maVoiture } ... }}
private boolean estDemarree; private double vitesse; public Voiture(int p) { puissance = p; estDemaree = false; vitesse = 0; } ... }
Dclaration
public static void main(String[] argv) // Dclaration puis cration Voiture maVoiture; maVoiture = new Voiture(7);
keulkeul.blogspot.com
Voiture maSecVoiture; // Sous entendu quil existe // explicitement un constructeur : Voiture(int) maSecVoiture = new Voiture(); // Erreur }
public class TestMaVoiture { public static void main (String[] argv) { // Dclaration puis cration Voiture maVoiture; maVoiture = new Voiture(7); Voiture maSecVoiture; maSecVoiture = new Voiture(); // OK } }
keulkeul.blogspot.com
keulkeul.blogspot.com
Accs aux attributs Pour accder aux donnes dun objet on utilise une notation pointe
identificationObjet.nomAttribut
public class TestMaVoiture { public static void main (String[] argv) { // Dclaration puis cration Voiture v1 = new Voiture(); Voiture v2 = new Voiture(); // Accs aux attributs en criture v1.puissance = 110; // Accs aux attributs en lecture System.out.println("Puissance de v1 = " } }
keulkeul.blogspot.com
+ v1.puissance);
Envoi de messages : appel de mthodes Pour demander un objet deffectuer un traitement il faut lui envoyer un message Un message est compos de trois parties
Une rfrence permettant de dsigner lobjet qui le message est envoy Le nom de la mthode ou de lattribut excuter Les ventuels paramtres de la mthode
keulkeul.blogspot.com
public static void main (String[] argv) { // Dclaration puis cration Voiture maVoiture = new Voiture(); // La voiture dmarre maVoiture.demarre(); keulkeul.blogspot.com if (maVoiture.deQuellePuissance() == 4) { System.out.println("Pas trs Rapide"); } // La voiture acclre maVoiture.acclre(123.5); } }
Les objets
Leur modification dans la mthode entrane celle de loriginal!!! Leur rfrence est recopie et non pas les attributs
Cours Java - M. Baron - Page 67
Voiture -
keulkeul.blogspot.com
Lobjet courant : attributs et mthodes Dsigne des variables ou mthodes dfinies dans une classe
public class Voiture { ... private boolean estDemarree; private double vitesse; public int deQuellePuissance() { ... } public void accelere(double vitesse) { if (estDemarree) { this.vitesse = this.vitesse + vitesse; } } keulkeul.blogspot.com }
Dsigne la variable
vitesse
Dsigne lattribut
vitesse
Dsigne lattribut
demarree
Association
Voiture
0..1 0..1
Conducteur
Agrgation
4..5 1 0..1
Roue
Moteur
Galerie
Cours Java - M. Baron - Page 71
Codage de l'association : composition L'objet de classe Voiture peut envoyer des messages l'objet de classe Moteur : Solution 1
Voiture
public class Voiture { private Moteur leMoteur; ... public Voiture(int p) { leMoteur = new Moteur(p); ... } ... }
Moteur
keulkeul.blogspot.com
Codage de l'association : composition L'objet de classe Moteur n'envoie pas de message l'objet de classe Voiture : Solution 1
Attribut qui stocke la puissance
Voiture
public class Moteur { private int puissance; ... public Moteur(int p) { puissance = p; ... } ... }
keulkeul.blogspot.com
Moteur
Codage de l'association : composition Il peut tre ncessaire que les deux objets en composition s'changent des messages : Solution 2
Lobjet Voiture voit lobjet Moteur Attribut qui stocke la rfrence du Moteur
Voiture
private Moteur leMoteur; ... public Voiture(int p) { leMoteur = new Moteur(p,this); ... } ... }
keulkeul.blogspot.com
Moteur
Codage de l'association : composition Il peut tre ncessaire que les deux objets en composition s'changent des messages : Solution 2
Lobjet Moteur voit lobjet Voiture Attribut qui stocke la puissance
Voiture
private int puissance; private Voiture laVoiture; ... public Moteur(int p, Voiture v) { puissance = p; laVoiture = v; ... } ... }
keulkeul.blogspot.com
Moteur
Codage de lassociation : agrgation L'objet de classe Galerie nenvoie pas de message lobjet de classe Voiture
Attribut qui stocke une rfrence de Galerie
public class Voiture { private Galerie laGalerie; ... public Voiture(Galerie g) { laGalerie = g; ... } ... }
Voiture
0..1
keulkeul.blogspot.com
Galerie
Destruction et ramasse-miettes La destruction des objets se fait de manire implicite Le ramasse-miettes ou Garbage Collector se met en route
Automatiquement
Prfrer dfinir une mthode et de Si plus aucune variable ne rfrence lobjet linvoquer avant que Si le bloc dans lequel il est dfini se termine tout objet ne soit plus rfrenc : Si lobjet a t affect null
Manuellement :
detruit()
Un pseudo-destructeur protected void finalize() peut tre dfini explicitement par le programmeur
Il est appel juste avant la libration de la mmoire par la machine virtuelle, mais on ne sait pas quand Conclusion : pas trs sr!!!!
Cours Java - M. Baron - Page 77
Destruction et ramasse-miettes
public class Voiture { private boolean estDemarree; ...
protected void finalize() { estDemarree = false; System.gc() System.out.println("Moteur arrt"); } public class TestMaVoiture { ... }
public static void main (String[] argv) { // Dclaration puis cration de maVoiture Voiture maVoiture = new Voiture(); maVoiture.demarre(); // maVoiture ne sert plus rien maVoiture = null; // Appel explicite du garbage collector System.gc(); // Fin du programme System.exit(0); System.out.println("Message non visible"); } }
ou
if (maVoiture.getClass() == Voiture.class) {...} // C est vrai // galement
Cours Java - M. Baron - Page 79
Surcharge La surcharge overloading nest pas limite aux constructeurs, elle est possible galement pour nimporte quelle mthode Possibilit de dfinir des mthodes possdant le mme nom mais dont les arguments diffrent Quand une mthode surcharge est invoque le compilateur slectionne automatiquement la mthode dont le nombre est
keulkeul.blogspot.com
le type des arguments correspondent au nombre et au type des paramtres passs dans lappel de la mthode
Des mthodes surcharges peuvent avoir des types de retour diffrents condition quelles aient des arguments diffrents
Cours Java - M. Baron - Page 80
Constructeurs multiples : le retour Appel explicite dun constructeur de la classe lintrieur dun autre constructeur
Doit se faire comme premire instruction du constructeur Utilise le mot-cl this(paramtres effectifs)
public class Voiture { ... public Voiture() { this(7, new Galerie()); } public Voiture(int p) { this(p, new Galerie()); } public Voiture(int p, Galerie g) { puissance = p; moteur = new Moteur(puissance); galerie = g; ... } ...
Exemple
Implantation du constructeur sans paramtre de Voiture partir du constructeur avec
keulkeul.blogspot.com
paramtres
Encapsulation Possibilit daccder aux attributs dune classe Java mais pas recommand car contraire au principe dencapsulation
Les donnes (attributs) doivent tre protgs et accessibles pour lextrieur par des slecteurs
Possibilit dagir sur la visibilit des membres (attributs et mthodes) dune classe vis vis des autres classes Plusieurs niveaux de visibilit peuvent tre dfinis en prcdant dun modificateur la dclaration dun attribut, mthode ou constructeur
private public protected A revoir dans la partie suivante
Cours Java - M. Baron - Page 83
keulkeul.blogspot.com
- private
Utilisable uniquement par les classes dfinies lintrieur dune autre classe. Une classe prive nest utilisable que par sa classe englobante Attribut restreint la classe o est faite la dclaration
attribut
keulkeul.blogspot.com
mthode
Une mthode prive ne peut plus tre invoque en dehors du code de la classe o elle est dfinie
Les chanes de caractres String Ce sont des objets traits comme des types simples ... Initialisation
String maChaine = "Bonjour!"; // Cela ressemble un type simple
Longueur
maChaine.length(); // Avec les parenthses car c'est une mthode
Comparaison
maChaine.equals("Bonjour!"); // Renvoi vrai
keulkeul.blogspot.com
Concatnation
String essai = "ess" + "ai"; String essai = "ess".concat("ai");
Les Chanes modifiables StringBuffer Elles sont modifiables par insertion, ajouts, conversions, etc On obtient une StringBuffer avec ses constructeurs
StringBuffer mCM = new StringBuffer(int length); StringBuffer mCM = new StringBuffer(String str);
Les chanes dcomposables StringTokenizer Elles permettent la dcomposition en mots ou lments suivant un dlimiteur
this is a test => this is a test
Un exemple
keulkeul.blogspot.com StringTokenizer st = new StringTokenizer("Bonjour, le monde|de|Java",", |"); while(st.hasMoreElements()) System.out.println("Element : " + st.nextElement());
Variables de classe Il peut tre utile de dfinir pour une classe des attributs indpendamment des instances : nombre de Voitures cres Utilisation des Variables de classe comparables aux variables globales Usage des variables de classe
Variables dont il nexiste quun seul exemplaire associ sa classe
keulkeul.blogspot.com
de dfinition Variables existent indpendamment du nombre dinstances de la classe qui ont t crs Variables utilisables mme si aucune instance de la classe nexiste
Cours Java - M. Baron - Page 89
Variables de classe Elles sont dfinies comme les attributs mais avec le mot-cl static
public static int nbVoitureCreees;
Pour y accder, il faut utiliser non pas un identificateur mais le nom de la classe
Voiture.nbVoitureCreees = 3;
keulkeul.blogspot.com
Il nest pas interdit dutiliser une variable de classe comme un attribut (au moyen d un identificateur) mais fortement dconseill
Cours Java - M. Baron - Page 90
Pour y accder, il faut utiliser non pas un identificateur dobjet mais le nom de la classe (idem variables de classe)
if (maVoiture.getWeightLimite() <= Galerie.MASSE_MAX) {...}
Cours Java - M. Baron - Page 91
keulkeul.blogspot.com
public static void main (String[] argv) { // Dclaration puis cration de maVoiture Voiture maVoiture = new Voiture(2500); ... System.out.println("Poids maxi:" + Voiture.PTAC_MAX); System.out.println(Voiture.nbVoitureCreees); ... } }
Elles sont dfinies comme les mthodes d'instances, mais avec le mot cl static
public static double vitesseMaxToleree() { return vitesseMaxAutorisee*1.10; }
keulkeul.blogspot.com
Pour y accder, il faut utiliser non pas un identificateur d'objet mais le nom de la classe (idem variables de classe)
Voiture.vitesseMaxToleree()
Cours Java - M. Baron - Page 93
keulkeul.blogspot.com
public class TestMaVoiture { public static void main (String[] argv) { // Dclaration puis cration de maVoiture Voiture maVoiture = new Voiture(2500); ... System.out.println("Nbre Instance :" + Voiture.getNbVoitureCreees()); } }
keulkeul.blogspot.com
Erreur : Utilisation d'un attribut non statique dans une zone statique
Mthodes de classe Rappel : les types simples (int, double, etc.) possde un alter-ego objet disposant de mthodes de conversion Par exemple la classe Integer encapsule le type int
Constructeur partir dun int ou dune chane de caractres
public Integer(int value); public Integer(String s);
Des mthodes de classe trs utiles qui permettent partir dune chane de caractres de transformer en type simple ou type object
String maValueChaine = new String("12313"); int maValuePrimitif = Integer.parseInt(maValueChaine);
Attention aux erreurs de conversion. Retour dune exception. Voir dans la dernire partie du cours Cours Java - M. Baron - Page 96
2 Dimensionnement
monTableau = new Voiture[3];
Ou 12 et 3
Voiture[] monTab = { new Voiture(5), new Voiture(7), new Voiture(8) };
3 Initialisation
monTableau[0] = new Voiture(5); monTableau[1] = new Voiture(7); monTableau[2] = new Voiture(8);
keulkeul.blogspot.com
Varargs : passage de paramtres en nombre indfini Varargs est une nouveaut Java 5 permettant de passer en paramtre un nombre indfini de valeurs de mme type Pour ceux qui ont connu le langage Turbo Pascal, lquivalent du System.out.println() le permettait dj Avant la version Java 5, il fallait passer en paramtre un tableau dun type donn pour raliser la mme chose
keulkeul.blogspot.com
Varargs : passage de paramtres en nombre indfini Du ct de la mthode o le varargs est dfini, les donnes sont manipules comme un tableau
public ajouterPassager(String... tab) { for (String current : tab) { System.out.println(current) } }
Du ct client qui fait un appel la mthode, les donnes peuvent tre envoyes comme un
Tableau
keulkeul.blogspot.com
Ensemble de paramtres
maVoiture.ajouterPassager("Tony", "Luck", "John");
Cours Java - M. Baron - Page 99
Varargs : passage de paramtres en nombre indfini Comme un varargs est considr comme un tableau le contenu peut tre vide
public Voiture(int... carac) { ... } public static void main(String[] argv) { new Voiture(); }
Si un varargs est accompagn dun ou plusieurs autres paramtres, le varargs doit obligatoirement tre plac en dernier
keulkeul.blogspot.com
Varargs : passage de paramtres en nombre indfini Problmatiques lies la surcharge dune mthode utilisant un varargs
Dans le cas de la surcharge dune mthode la mthode contenant le varargs a la priorit la plus faible
public class Voiture { public Voiture(int... carac) { } public Voiture(int caract1, int caract2) { ... }
keulkeul.blogspot.com
public static void main(String[] argv) { new Voiture(12, 23); new Voiture(12); } }
Cours Java - M. Baron - Page 101
Hritage
Intrts
Spcialisation, enrichissement : une nouvelle classe rutilise les attributs et les oprations d une classe en y ajoutant et/ou des oprations particulires la nouvelle classe
keulkeul.blogspot.com
Redfinition : une nouvelle classe redfinit les attributs et oprations dune classe de manire en changer le sens et/ou le comportement pour le cas particulier dfini par la nouvelle classe Rutilisation : vite de rcrire du code existant et parfois on ne possde pas les sources de la classe hriter Cours Java - M. Baron - Page
103
Spcialisation de la classe Voiture Un vhicule prioritaire est une voiture avec un gyrophare
Un vhicule prioritaire rpond aux mmes messages que la Voiture On peut allumer le gyrophare dun vhicule prioritaire
Une voiture lectrique est une voiture dont lopration de dmarrage est diffrente
Une voiture lectrique rpond aux mme messages que la Voiture On dmarre une voiture lectrique en activant un disjoncteur
Voiture Voiture
keulkeul.blogspot.com
+ demarre()
Relation dhritage
VehiculePrioritaire - gyrophare : boolen + allumeGyrophare() VoitureElectrique - disjoncteur : boolen + demarre()
Cours Java - M. Baron - Page 104
Classes et sous-classes Un objet de la classe VehiculePrioritaire ou VoitureElectrique est aussi un objet de la classe Voiture donc il dispose de tous les attributs et oprations de la classe Voiture
VehiculePrioritaire - gyrophare : boolen + allumeGyrophare()
Hrit de Voiture
- estDemarree : boolean - vitesse : flottant + deQuellePuissance() : entier + demarre() + accelere(flottant)
- puissance : entier
keulkeul.blogspot.com
Voiture est la classe mre et VehiculePrioritaire la classe fille Voiture est la super-classe de la classe VehiculePrioritaire VehiculePrioritaire est une sous-classe de Voiture
Attention
keulkeul.blogspot.com
Un objet de la classe VehiculePrioritaire ou VoitureElectrique est forcment un objet de la classe Voiture Un objet de la classe Voiture nest pas forcment un objet de la classe VehiculePrioritaire ou VoitureElectrique
Cours Java - M. Baron - Page 106
Gnralisation et Spcialisation La gnralisation exprime une relation est-un entre une classe et sa super-classe
Voiture
Super-classe
VehiculePrioritaire
Sous-classe
keulkeul.blogspot.com
Lhritage permet
de gnraliser dans le sens abstraction de spcialiser dans le sens raffinement
Raffinement
Abstraction
Ctac
Humain
keulkeul.blogspot.com
Baleine
Dauphin
Etudiant
Enseignant
Mobi Dick
Ecco
Raoul
Mickal
Voiture
Nessayez pas dhriter de plusieurs classes (extends Voiture, Sante, ) a ne fonctionne pas
Cours Java - M. Baron - Page 109
Voiture + demarre()
VehiculePrioritaire + allumeGyrophare()
public class VehiculePrioritaire extends Voiture { ... public void allumeGyrophare() { ... } }
keulkeul.blogspot.com
public class Ambulance extends VehiculePrioritaire { private String malade; ... public void chercher(String ma) { ... } }
Rappel de la surcharge : possibilit de dfinir des mthodes possdant le mme nom mais dont les arguments (paramtres et valeur de retour) diffrent
keulkeul.blogspot.com
Des mthodes surcharges peuvent avoir des types de retour diffrents condition quelles aient des arguments diffrents
Surcharge et redfinition Une voiture lectrique est une voiture dont lopration de dmarrage est diffrente
Une voiture lectrique rpond aux mme messages que la Voiture On dmarre une voiture lectrique en activant un disjoncteur
Voiture + demarre()
public class VoitureElectrique extends Voiture { private boolean disjoncteur; ... public void demarre() { disjoncteur = true; } ... }
keulkeul.blogspot.com
Redfinition de la mthode
Cours Java - M. Baron - Page 112
Surcharge et redfinition
public class Voiture { ... public void demarre() { ... } }
Ne pas confondre surcharge et redfinition. Dans le cas de la surcharge la sous-classe ajoute des mthodes tandis que la redfinition spcialise des mthodes existantes
Redfinition
public class VoitureElectrique extends Voiture { ... public void demarre() { ... } }
Surcharge
keulkeul.blogspot.com
public class VehiculePrioritaire extends Voiture { ... public void demarre(int code) { ... } }
VoitureElectrique possde
VehiculePrioritaire possde
public class VoitureElectrique extends Voiture { private boolean disjoncteur; ... public void demarre() { disjoncteur = true; super.demarre(); } ... }
estDemarree
keulkeul.blogspot.com
public class TestMaVoiture { public static void main (String[] argv) { // Dclaration puis cration VoitureElectrique laRochelle = new VoitureElectrique(...); laRochelle.demarre(); } }
Usage des constructeurs : suite Possibilit comme les mthodes de rutiliser le code des constructeurs de la super-classe Appel explicite dun constructeur de la classe mre lintrieur dun constructeur de la classe fille
Lappel au constructeur de la superclasse doit se faire absolument en Utilise le mot-cl super premire instruction super(paramtres du constructeur);
keulkeul.blogspot.com
Appel implicite d'un constructeur de la classe mre est effectu quand il n'existe pas d'appel explicite. Java insre implicitement l'appel super()
Cours Java - M. Baron - Page 116
keulkeul.blogspot.com
public Voiture(int p, Galerie g) { puissance = p; moteur = new Moteur(puissance); galerie = g; public class VoiturePrioritaire ... extends Voiture { } ... private boolean gyrophare; }
keulkeul.blogspot.com
Usage des constructeurs : suite Rappel : si une classe ne dfinit pas explicitement de constructeur, elle possde alors un constructeur par dfaut
Sans paramtre Qui ne fait rien Inutile si un autre constructeur est dfini explicitement
public class A { public A() { public void afficherInformation() { super(); System.out.println("Des Informations..."); } } } public class B extends A { private String pInfo; keulkeul.blogspot.com public B(String pInfo) { this.pInfo = pInfo; } } public class Test { public static void main (String[] argv) { new B("Message du main"); } } super();
La classe Object : le mystre rsolu La classe Object est la classe de plus haut niveau dans la hirarchie d'hritage
Toute classe autre que Object possde une super-classe Toute classe hrite directement ou indirectement de la classe Object Une classe qui ne dfinit pas de clause extends hrite de la classe Object
public class Voiture extends Object { ... keulkeul.blogspot.com public Voiture(int p, Galerie g) { puissance = p; moteur = new Moteur(puissance); galerie = g; ... } ... }
extends Object
Aprs redfinition
keulkeul.blogspot.com
.ln(maVoiture.toString()); public class Test { public static void main (String[] argv) { public String toString() { Voiture maVoiture = new Voiture(5); return("Puissance:" + p); System.out.println(maVoiture); } } }
Redfinition de la mthode
String toString()
Droits daccs aux attributs et mthodes Exemple de la Voiture : les limites rsoudre
demarre() est disponible dans la classe VehiculePrioritaire
Cest--dire que lon peut dmarrer sans donner le code !!! Solution : protger la mthode demarre() de la classe Voiture
Ralisation
Utilisation du mot-cl protected devant la dfinition des mthodes et/ou attributs Les membres sont accessibles dans la classe o ils sont dfinis, dans Voiture toutes ses sous-classes
# demarre() keulkeul.blogspot.com
VehiculeElectrique + demarre()
keulkeul.blogspot.com
keulkeul.blogspot.com
Hritage et Polymorphisme
Rappel
voitureLarochelle est une instance de la classe VoitureElectrique
keulkeul.blogspot.com
Mais aussi
voitureLarochelle est une instance de la classe Voiture
Cours Java - M. Baron - Page 127
voitureLarochelle
keulkeul.blogspot.com
voitureLarochelle
Voiture
keulkeul.blogspot.com
Remarque : Quel code va tre effectivement excut lorsque le message demarre() est envoy voitureLarochelle ??
+ demarre()
voitureLarochelle
voitureLarochelle.demarre()
keulkeul.blogspot.com
VoitureElectrique
Constat : Cest la mthode demarre() de VoitureElectrique qui est appele. Puis elle appelle (par super) la mthode de la super-classe
Point
Pointcol
keulkeul.blogspot.com
Point
Pointcol
keulkeul.blogspot.com
compilation On parle de liaison tardive, lien dynamique, dynamic binding, latebinding ou run-time binding
Surclassement (compilation)
Une variable maVoit est dclare comme tant une rfrence vers un objet de la classe Voiture Un objet de la classe VoitureElectrique est cr Pour le compilateur maVoit reste une rfrence dun objet de la classe Voiture, et il empche daccder aux mthodes spcifiques
keulkeul.blogspot.com
VoitureElectrique
Dveloppement plus rapide Plus grande simplicit et meilleure organisation du code Programmes plus facilement extensibles Maintenance du code plus aise
Cours Java - M. Baron - Page 136
keulkeul.blogspot.com
Si un nouveau type de Forme est dfini, le code de la classe Stockage nest pas modifi
public class Test { public static void main (String[] argv) { Stockage monStock = new Stockage(10); monStock.ajouter(new Cercle(...)); monStock.ajouter(new Rectangle(...)); Rectangle monRect = new Rectangle(...); Forme tonRect = new Rectangle(...); monStock.ajouter(monRect); monStock.ajouter(tonRect);
keulkeul.blogspot.com
} }
ClasseA
Pour que le cast fonctionne, il faut qu lexcution le type effectif de monObj soit compatible avec le type ClasseB
keulkeul.blogspot.com
ClasseB
keulkeul.blogspot.com
Attention si la compatibilit est fausse et si le cast est effectu une exception de type ClassCastException est leve
La mthode equals() Deux possibilits pour comparer des objets dune classe
Crer une mthode ad-hoc boolean comparer(MaClasse c) {} qui compare les attributs Redfinir la mthode boolean equals(Object o) pour garder la compatibilit avec les autres classes de Java Re-implmenter la mthode boolean equals(Object o) en comparant les attributs (en utilisant une conversion de type explicite)
keulkeul.blogspot.com Object + boolean equals(Object)
Rappel de la classe
Voiture
Voiture maVoit = (Voiture)o; return this.puissance == maVoit.puissance && this.estDemarree == maVoit.estDemarree && this.vitesse == maVoit.vitesse; } ... }
keulkeul.blogspot.com
public class Test { public static void main (String[] argv) { Voiture maVoit = new Voiture(...); VoitureElectrique maVoitele = new VoitureElectrique(...); maVoit.equals(maVoitele); --> TRUE } }
Attention : lgalit de rfrence == vrifie si les rfrences sont les mmes, cela ne compare pas les attributs
Classes abstraites : intrts On ne connat pas toujours le comportement par dfaut dune opration commune plusieurs sous-classes
Exemple : toit dune voiture dcapotable. On sait que toutes les dcapotables peuvent ranger leur toit, mais le mcanisme est diffrent dune dcapotable lautre Solution : on peut dclarer la mthode abstraite dans la classe mre et ne Pas lui donner dimplantation par dfaut
On ne peut pas instancier une classe abstraite car au moins une de ses mthodes na pas dimplmentation Toutes les classes filles hritant de la classe mre abstraite doivent implmenter toutes ses mthodes abstraites ou sinon elles sont aussi abstraites Cours Java - M. Baron - Page 143
Classes abstraites et Java Le mot cl abstract est utilis pour spcifier quune classe est abstraite Une classe abstraite se dclare ainsi
public abstract class NomMaClasse { ... }
Pour crer une mthode abstraite, la signature (nom et paramtres) est dclare sans spcifier le corps et en ajoutant le mot cl abstract
Cours Java - M. Baron - Page 144
hritent de VoitureDecapotable
C3Pluriel DeuxChevaux - capoteAttache : boolen + replieLeToit() - arceauxRetirs : boolen + replieLeToit()
Mthode abstraite
} keulkeul.blogspot.com
public class C3Pluriel extends VoitureDecapotable { private boolean arceauxRetirs; public void replieLeToit() { this.toitReplie = true; this.arceauxRetirs = true; } }
keulkeul.blogspot.com
public abstract class Forme { private int positionx, positiony; public void deplacer(double dx, double dy){ x += dx; y += dy; } public abstract double primtre(); public abstract double surface(); }
Pas dimplmentation !!
Cours Java - M. Baron - Page 148
Exemple
Les choses Demarrable doivent possder une mthode demarre()
Voiture Demarrable << Interface >> + demarre Ordinateur
Lorsquon dfinit une classe, on peut prciser quelle implmente une ou plusieurs interface(s) donne(s) en utilisant une fois le mot cl implements
public class NomClasse implements Interface1,Interface3, ... { ... }
keulkeul.blogspot.com
Si une classe hrite dune autre classe elle peut galement implmenter une ou plusieurs interfaces
public class NomClasse extends SuperClasse implements Inter1, ... { ... } Cours Java - M. Baron - Page 150
Une interface ne possde pas de mot cl abstract Les interfaces ne sont pas instanciables (Mme raisonnement avec les
keulkeul.blogspot.com
classes abstraites)
NomInterface jeTente = new NomInterface(); // Erreur!!
Notion dinterface et Java Toute classe qui implmente linterface doit implmenter toutes les mthodes dfinies par linterface
Voiture Demarrable << Interface >> + demarre
public interface Demarrable { public void demarre(); }
Ordinateur
public class Voiture implements Demarrable { ... public void demarre() { moteurAllum = true; } }
public class Ordinateur implements Demarrable { ... public void demarre() { estDemarree = true; } }
Notion dinterface et Java Tout objet instance dune classe qui implmente linterface peut tre dclar comme tant du type de cette interface
public class Test { public static void main (String[] argv) { // Dclaration dun objet de type Demarrable Demarrable dem1; // Cration dun objet Voiture dem1 = new Voiture(); // Dclaration et cration dun objet Personne Personne pers1 = new Personne(dem1); pers1.mettreEnRoute(); // Dclaration dun objet de type Demarrable Demarrable dem2; // Cration dun objet Ordinateur dem2 = new Ordinateur(); // Dclaration et cration dun objet Personne Personne pers2 = new Personne(dem2); pers2.mettreEnRoute(); } }
keulkeul.blogspot.com
Notion dinterface et Java Exemple : une Voiture et un Ordinateur sont des objets
Demarrable
public class Person { private Demarrable objetDemarrable; public Person(Demarrable dem) { objetDemarrable = dem; } public void mettreEnRoute() { objetDemarrable.demarre(); } }
keulkeul.blogspot.com
Une personne peut dmarrer Voiture et Ordinateur sans connatre leur nature exacte
Cours Java - M. Baron - Page 154
La dfinition de mthodes de linterface mre NomInte1 sont reprises dans linterface fille NomInte2. Toute classe qui implmente linterface fille doit donner une implmentation toutes les mthodes mmes celle hrites
keulkeul.blogspot.com
Utilisation
Les interfaces
Elles ne sont pas implmentes Toute classe qui implmente une ou plusieurs interfaces doit implmenter toutes leurs mthodes (abstraites) Cours Java - M. Baron - Page
156
recopie
Utiliser linterface Cloneable pour garder la compatibilit avec les autres classes de Java Implmenter la mthode protected Object clone() de linterface
keulkeul.blogspot.com
Cloneable
public class Voiture implements Demarrable, Cloneable { protected Object clone() { Voiture copie; copie = new Voiture(this.puissance, (Galerie)laGalerie.clone()); return copie; } }
Classe interne
Les fichiers .class qui possdent dans leur nom un $ ne sont pas des fichiers temporaires!!!
Cours Java - M. Baron - Page 159
Les indispensables
Les packages Le langage Java propose une dfinition trs claire du mcanisme dempaquetage qui permet de classer et de grer les API externes Les API sont constitues
API
0..*
Paquetage
0..*
Classe
0..*
Mthode Attribut
0..* 0..*
Interface
keulkeul.blogspot.com
Un package est donc un groupe de classes associes une fonctionnalit Exemples de packages
java.lang : rassemble les classes de base Java (Object, String, ) java.util : rassemble les classes utilitaires (Collections, Date, ) java.io : lecture et criture Cours Java - M. Baron - Page
161
Les packages : ok, mais pourquoi faire? Lutilisation des packages permet de regrouper les classes afin dorganiser des libraires de classes Java Exemple : la classe Date est dfinie deux fois
keulkeul.blogspot.com
Les packages : utilisation des classes Lorsque, dans un programme, il y a une rfrence une classe, le compilateur la recherche dans le package par dfaut (java.lang) Pour les autres, il est ncessaire de fournir explicitement linformation pour savoir o se trouve la classe :
Utilisation dimport (classe ou paquetage)
import mesclasses.Point; import java.lang.String; // Ne sert rien puisque par dfaut import java.io.ObjectOutput;
ou
keulkeul.blogspot.com import mesclasses.*; import java.lang.*; // Ne sert rien puisque par dfaut import java.io.*;
Les packages : leur existence physique A chaque classe Java correspond un fichier A chaque package (sous-package) correspond un rpertoire
Exemple : mesclassses.Voiture
Voiture.java
Package Classe
Le nom des packages est toujours crit en minuscules
mesclasses
mesclasses
Les packages : hirarchie de packages A une hirarchie de packages correspond une hirarchie de rpertoires dont les noms concident avec les composants des noms de package Exemple : la classe String
java
lang keulkeul.blogspot.com
util
math
dans le rpertoire src du rpertoire Java Les bytecodes (*.class) se trouvent dans larchive rt.jar du rpertoire Java
String.java
Les packages : cration et conseils Quand vous crer un projet nommez le package de plus haut (voiture) niveau par le nom du projet (Voiture)
Sources
Voiture
Package voiture :
voiture
keulkeul.blogspot.com
Vos packages. A la racine de Voiture vous pouvez y placer des informations daides lutilisation de votre package. (Fichier de lancement par exemple)
modele
Les packages : cration et conseils Pour spcifier une classe quelle appartient un package utiliser le mot cl package Le mot cl package est
package voiture.modele; toujours plac en public class VoitureElectrique { premire instruction ... dune classe } package voiture.modele; public class Voiture { ... } package voiture.test; import voiture.modele.VoitureElectrique; import voiture.modele.Voiture; import ... public class Test1 { public static void main(String[] argv) { ... } }
keulkeul.blogspot.com
Ne confondez pas hritage et package. Pas la mme chose. VoitureElectrique est dans le mme package que Voiture
Les packages : compilation et excution tre plac dans la racine du rpertoire Voiture
Voiture
keulkeul.blogspot.com
Lexcution se fait en indiquant la classe principale avec son chemin La sparation entre
java voiture.test.Test
Les packages : visibilit Linstruction import nomPackage.* ne concerne que les classes du package indiqu. Elle ne sapplique pas aux classes des sous-packages
Packages diffrents Essai utilise les classes Date du package java.util et
public class Essai { ... keulkeul.blogspot.com public Essai() { Date myDate = new Date(...); ZipFile myZip = new ZipFile(...); ... } ... }
et
*/
Premire ligne : uniquement /** Suivantes : un espace suivi dune toile Dernire ligne : uniquement
keulkeul.blogspot.com /** * Description de la mthode * Autres caractristiques */ public Voiture(...) { ... } } */
Utilisation
Lentit documente est prcde par son commentaire Suivre la description des mthodes, classes,
keulkeul.blogspot.com
Utilisation de tags dfinit par javadoc permettant de typer certaines informations (utilisation possible de balise html)
@author @version @param @since @return @throws @deprecated @see
Nom du ou des auteurs Identifiant de version Nom et signification de largument (mthodes uniquement) Version du JDK o cest apparu (utilis par SUN) Valeur de retour Classe de lexception et conditions de lancement Provoque les avertissements de dsapprobation Cours Java - M. Baron - Page 171 Rfrence croise
keulkeul.blogspot.com
Javadoc et les commentaires Exemple : aperu html de la description de la classe Object gnre avec javadoc
keulkeul.blogspot.com
Utilisation de loutil jar Pour crer un fichier .jar contenant les fichiers du rpertoire courant
jar cvf hello.jar .
MANIFEST.MF
Exception Dfinition
Une exception est un signal indiquant que quelque chose dexceptionnelle (comme une erreur) sest produit. Elle interrompt le flot dexcution normal du programme
A quoi a sert
Grer les erreurs est indispensable : mauvaise gestion peut avoir des consquences catastrophiques (Ariane 5) Mcanisme simple et lisible Regroupement du code rserv au traitement des erreurs Possibilit de rcuprer une erreur plusieurs niveaux dune application (propagation dans la pile des appels de mthodes)
keulkeul.blogspot.com
Vocabulaire
Lancer ou dclencher (throw) une exception consiste signaler les erreurs Capturer ou attraper (catch) une exception permet de traiter les Cours Java - M. Baron - Page erreurs
176
keulkeul.blogspot.com
appel de mthode transmission d'exception
Mthode n Mthode n
bloc 2.2
Exception : lancer ou dclencher Une mthode dclare quelle peut lancer une exception par le mot cl throws Permet au
public Point(int x, int y) throws ErrConst { ... }
ErrConst
Soit la mthode lance une exception, en crant une nouvelle valeur (un objet) dexception en utilisant le mot cl throw
public Point(int x, int y) throws ErrConst { if ((x < 0) || (y < 0)) throw new ErrConst(); this.x = x ; this.y = y; }
keulkeul.blogspot.com
Exception : capturer ou attraper On parle ici de gestionnaire dexception. Il sagit de traiter par des actions la situation exceptionnelle On dlimite un ensemble dinstructions susceptibles de dclencher une exception par des blocs try {}
try { Point a = new Point(1,4); a.affiche(); a = new Point(-2, 4); a.affiche(); }
Ces blocs permettent de capturer les exceptions dont le type est spcifi et dexcuter des actions adquates
Cours Java - M. Baron - Page 180
keulkeul.blogspot.com
Puis, il y a poursuite de lexcution en dehors du bloc try catch Remarque : si erreur le programme sarrte (System.exit(-1))
Exception : modlisation Les exceptions en Java sont considres comme des objets Toute exception doit tre une instance dune sous-classe de la classe java.lang.Throwable
Erreurs non rcuprables. Plantage de lapplication Throwable Erreur que lon peut traiter puisque rcuprable
Error
Exception
keulkeul.blogspot.com
NullPointerException
ErrConst
Exception
Exception : modlisation Les exceptions sont des objets nous pouvons donc dfinir
Des attributs particuliers Des mthodes
Exception - message : String Renvoie le message derreur dcrivant lexception + + + + + Exception() Exception(String) getMessage() : String printStackTrace() Constructeur avec ou sans argument Contient un message derreur dcrivant lexception
keulkeul.blogspot.com
Affiche sur la sortie erreur standard la liste des appels de mthodes ayant conduit lexception
ErrConst
Affichage de lerreur
keulkeul.blogspot.com
Exception : attraper les tous Il est possible de capturer plus dune exception. Un bloc try et plusieurs blocs catch
public class Point { public void deplace(int dx, int dy) throws ErrDepl { if (((x+dx) < 0) || ((y+dy) <0)) throw new ErrDepl(); x += dx ; y +=dy; } public Point(int x, int y) throws ErrConst { if ((x < 0) || (y < 0)) throw new ErrConst(); this.x = x ; this.y = y; } ... public class Test { public static void main(String[] argv) { try { ... // Bloc dans lequel on souhaite dtecter les exceptions ErrConst et ErrDepl } catch (ErrConst e) { System.out.println("Erreur Construction"); System.exit(-1); } catch (ErrDepl e) { System.out.println("Erreur Dplacement"); System.exit(-1); } } }
keulkeul.blogspot.com
ErrDepl
Exception : attrapez les tous Toute mthode susceptible de lever une exception doit
Soit lattraper (bloc try catch) Soit dclarer explicitement quelle peut lancer une exception (mot cl throws)
Les exceptions leves dans des mthodes (checkXYValue) appeles par la mthode (Point) et non attrapes par celle-ci
public Point(int x, int y) throws ErrConst { checkXYValue(x,y); this.x = x ; this.y = y; } private void checkXYValue(in x, int y) throws ErrConst { if ((x < 0) || (y < 0)) throw new ErrConst(); }
Exception : attrapez les tous Il faut sassurer que les exceptions soient sous contrle
public class Point { public void deplace(int dx, int dy) throws ErrDepl { if (((x+dx) < 0) || ((y+dy) <0)) throw new ErrDepl(); x += dx ; y +=dy; } public class ErrDepl extends Exception { public ErrDepl() { public void transformer() { ... ... } this.deplace(...); } } }
keulkeul.blogspot.com
Ne pas oublier de traiter une exception sinon le compilateur ne vous loupe pas!!!!
Exception : attrapez les tous Pour garantir une bonne compilation deux solutions
public class Point { public void deplace(int dx, int dy) throws ErrDepl { if (((x+dx) < 0) || ((y+dy) <0)) throw new ErrDepl(); x += dx ; y +=dy; } public void transformer() { ... this.deplace(...); } }
Soit en ajoutant explicitement linstruction throws la mthode transformer de faon rediriger lerreur
keulkeul.blogspot.com
public void transformer() throws ErrDepl { ... this.deplace(...); }
Soit en entourant dun bloc try catch la mthode qui peut poser problme
public void transformer() { try { ... this.deplace(...); } catch (ErrDepl e) { e.printStackTrace(); } }
Exception : transmission dinformation Possibilit denrichir la classe ErrConst en ajoutant des attributs et des mthodes de faon communiquer
public class Point { public Point(int x, int y) throws ErrConst { if ((x < 0) || (y < 0)) throw new ErrConst(x,y); this.x = x ; this.y = y; } public class ErrConst extends Exception { ... private int abs, ord; } public ErrConst(int x, int y) { this.abs = x; this.ord = y; } public int getAbs() { return this.abs; } public int getOrd() { return this.ord; } } public class Test { public static void main(String[] argv) { try { ... a = new Point(-2, 4); } catch (ErrConst e) { System.out.println("Erreur Construction point"); System.out.println("Coordonnes souhaites : " + e.getAbs() + " " + e.getOrd()); System.exit(-1); }...
keulkeul.blogspot.com
ErrConst permet de
Exception : finally Bloc finally : cest une instruction optionnelle qui peut servir de nettoyage Elle est excute quel que soit le rsultat du bloc try (cest-dire quil ait dclench ou non une exception) Permet de spcifier du code dont lexcution est garantie quoi quil arrive Lintrt est double
keulkeul.blogspot.com
Rassembler dans un seul bloc un ensemble dinstructions qui autrement auraient du tre dupliques Effectuer des traitements aprs le bloc try, mme si une exception a t leve et non attrape par les blocs catch
Cours Java - M. Baron - Page 190
keulkeul.blogspot.com
Exception : pour ou contre Exemple : grer les erreurs sans les exceptions
erreurType lireFichier() { int codeErreur = 0; // Ouvrir le fichier if (isFileIsOpen()) { // Dtermine la longueur du fichier if (getFileSize()) { // Vrification de lallocation de la mmoire if (getEnoughMemory()) { // Lire le fichier en mmoire if (readFailed()) { codeErreur = -1; } } else { codeErreur = -2; } } else { codeErreur = -3; }
keulkeul.blogspot.com
keulkeul.blogspot.com
Exception : les exceptions courantes Java fournit de nombreuses classes prdfinies drives de la classe Exception Ces exceptions standards se classent en deux catgories
Les exceptions explicites (celles que nous avons tudies), mentionnes par le mot cl throws Les exceptions implicites qui ne sont pas mentionnes par le mot cl
throws
ArithmeticException (division par zro) NullPointerException (rfrence non construite) ClassCastException (problme de cast) IndexOutOfBoundsException (problme de dpassement dindex dans
tableau)
Cours Java - M. Baron - Page 194
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)
Cours Java - M. Baron - Page 195
keulkeul.blogspot.com
Les flux En Java, le nombre de classes intervenant dans la manipulation des flux est important (plus de 50) 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)
Cours Java - M. Baron - Page 196
keulkeul.blogspot.com
public class TestIO { public static void main(String[] argv) { FileWriter myFile = new FileWriter("a_ecrire.txt"); myFile.write("Voil ma premire ligne dans un fichier"); myFile.close(); } keulkeul.blogspot.com }
a_ecrire.txt
String inputLine = " "; try { BufferedReader is = new BufferedReader(new InputStreamReader(System.in)); inputLine = is.readLine(); is.close(); } catch (Exception e) { System.out.println("Intercept : " + e); }
keulkeul.blogspot.com
Chane saisie
Cours Java - M. Baron - Page 198
public class TestIO { public static void main(String[] argv) { FileReader in = new FileReader("a_lire.txt"); FileWriter out = new FileWriter("a_ecrire.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } in.close(); out.close();
keulkeul.blogspot.com
Fermeture des flux et par consquent des fichiers respectifs Cours Java - M. Baron - Page
199
keulkeul.blogspot.com
La classe File Java dispose dune classe File qui offre des fonctionnalits de gestion de fichiers La cration dun objet de type File
File monFichier = new File("truc.dat");
File - name : String + + + + + + + File(String nf) createNewFile() delete() : boolen exists() : boolen getName() : String isFile() : boolen
keulkeul.blogspot.com
Les collections Pour linstant nous avons tudi le tableau pour structurer les donnes
Taille statique Lent pour la recherche dlments particuliers Impossibilit dutiliser un pattern de dplacement dans les lments
Java propose depuis la version 2 des classes permettant de manipuler les principales structures de donnes
keulkeul.blogspot.com
Les tableaux dynamiques implmentes par ArrayList et Vector Les listes implmentes par LinkedList Les ensembles implmentes par HashSet et TreeSet
Cours Java - M. Baron - Page 202
Les collections Ces classes implmentent toutes indirectement une mme interface Collection quelles compltent de fonctionnalits propres
Collection << Interface >> LinkedList
HashSet
keulkeul.blogspot.com
Depuis la version 5 de Java, possibilit dutiliser les gnriques pour typer le contenu des Collections
Avant : Voiture maVoiture = (Voiture)myList.get(2) Maintenant : Voiture maVoiture = myList.get(2)
Plus de problme de conversion explicite
Cours Java - M. Baron - Page 203
Efficacit des oprations sur des collections Oprations communes toutes les collections : les collections que nous allons tudier implmentent toutes au minimum linterface
Les collections : les gnriques Java Avec la version 5 de Java possibilit dexploiter les gnriques dans les collections et pour dautres aspects du langage Une syntaxe particulire a t rajoute de manire prendre en considration les gnriques
< ? > : signale quil faut prciser le type de la classe < ? , ? > : signale quil faut prciser deux types
Avec les gnriques il va tre possible de fixer lors de la construction de la collection le type du contenu stock dans les collections
keulkeul.blogspot.com
Avantages
Toutes les mthodes accesseurs et modifieurs qui manipulent les lments dune collection sont signs suivant le type dfini la construction de la collection Vrification des types pendant le dveloppement (avant problme de CastClassException) Cours Java - M. Baron - Page 205
Les collections : Iterator Les itrateurs permettent de parcourir les lments dune collection sans connaissance prcise du type de la collection : Polymorphisme Il existe deux familles ditrateurs
monodirectionnels
Le parcours de la collection se fait dun dbut vers une fin; laccs un lment ne se fait quune seule fois
bidirectionnels
keulkeul.blogspot.com
Le parcours de la collection peut se faire dans les deux sens ; possibilit davancer et reculer sa guise dans la collection
La notion dIterator fait partie de lensemble des Design Patterns
next()
ListIterator << Interface >> + + + + + previous() : < ? > hasPrevious() : boolen add(< ? >) set(< ? >)
c est une
Iterator iter = c.listIterator(); while (iter.hasPrevious()) { ??? o = iter.previous(); ... }
ListIterator
Les collections : LinkedList Cette classe permet de manipuler des listes dites doublement chanes A chaque lment de collection, on associe implicitement deux informations qui sont les rfrences llment prcdent et suivant
c a c a b a b
Les collections : LinkedList Possibilit dutiliser les collections (ici LinkedList est un exemple) sans les itrateurs mais moins performant !!!
LinkedList<String> l1 = new LinkedList<String>(); l1.add("Bonjour"); l1.add("Coucou"); for (int i = 0; i < l1.size(); i++) { String o = l1.get(i); System.out.println(o); } keulkeul.blogspot.com
Lutilisation de la
LinkedList
LinkedList
Ne pas modifier la collection (add de LinkedList) pendant quon utilise litrateur (next())
Cours Java - M. Baron - Page 210
Les collections : ArrayList La classe ArrayList est une encapsulation du tableau avec la possibilit de le rendre dynamique en taille Possibilit dutiliser des ListIterator mais on prfre son utilisation un lment de rang donn
ArrayList<Object> myArrayList = new ArrayList<Object>(); myArrayList.add("Coucou"); myArrayList.add(34); for (int i = 0; i < myArrayList.size(); i++) { Object myObject = myArrayList.get(i); if (myObject instanceof String) { System.out.println("Chane:" + ((String)myObject)); } if (my_object instanceof Integer) { System.out.println("Integer:" + ((Integer)myObject)); } } Prfrer lutilisation de la classe ArrayList au lieu de la classe Vector
keulkeul.blogspot.com
Les collections : HashSet La classe HashSet permet de grer les ensembles Deux lments ne peuvent tre identiques Prvoir deux choses dans vos classes
La redfinition de la mthode hashCode() qui est utilise pour ordonnancer les lments dun ensemble (calcul la table de hachage dun objet)
keulkeul.blogspot.com
La redfinition de la mthode equals(Object) qui compare des objets de mme classe pour connatre lappartenance dun lment lensemble
Cours Java - M. Baron - Page 212
keulkeul.blogspot.com
keulkeul.blogspot.com
Bilan
Mickal BARON - 2008 (Rv. Aot 2009) mailto:baron.mickael@gmail.com ou mailto:baron@ensma.fr
Perspectives futures
Le langage Java est en constante volution. Chaque nouvelle version apporte son lot de nouvelles fonctionnalits
keulkeul.blogspot.com
Structurer les classes en appliquant les patterns de conception (Design Pattern) Le langage Java est un point de dpart pour concevoir des applications serveur avec Java Entreprise Edition
Cours Java - M. Baron - Page 216