Programmation Oriente Objet2
Programmation Oriente Objet2
Programmation Oriente Objet2
Illustrations en JAVA
Plan du cours
Le Concept Orient Objet (9h) o Notions dobjet o Notion de classe
Attribut Mthodes
o o o o o o o
Encapsulation et niveau de visibilit Notion de constructeur Affectation et comparaison dobjets Notion de ramasse miettes Attributs et mthodes de classe Les packages Surdfinition des mthodes
Lhritage et le polymorphisme(9h) o Notion dhritage o Accs aux membres de la classe de base o Construction et initialisation des objets drivs
o o o o o
Redfinition et surdfinition des membres Le polymorphisme Classes et mthodes finales Les classes abstraites Les interfaces
La programmation graphique(9 h) Les vnements(9h) Devoir(3h) Les applets(6h) Les threads(6h) Les bases de donnes (JDBC)(6h) Les flux et les fichiers(6h) Archives et dploiements(6h) Examen(3h)
Les Objets
Tout est objet: le logiciel est vu une collection d'objets dissocis Un programme est un ensemble d'objets se disant les uns aux autres quoi faire en s'envoyant des messages Chaque objet runit en son sein ses proprits et mthodes : cest lencapsulation. En POO pure on ne peut accder aux donnes (champs ou attributs ) dun objet qu travers ses mthodes ( gestion de la cohrence des donnes) Chaque objet possde son identit et peut tre distingu des autres.
A un instant donn un objet possde un tat qui correspond la valeur de ces attribut cet instant
Lexpression instance d'objet fait rfrence une chose prcise, et l'expression classe d'objets dsigne un groupe de choses similaires.
En rsum
Donnes
Traitements
Donnes
Traitements
Champs Membres
Mthodes Objet 1
Champs Membres
Mthodes
Objet 2
Donnes
Traitements
Champs Membres
Mthodes Objet 3
Logiciel
Les Classes
Une classe est un modle utilis pour crer plusieurs objets prsentant des caractristiques communes: cest une abstraction des objets Chaque objet possde ses propres valeurs pour chaque attribut mais partage noms d'attributs et mthodes avec les autres objets de la classe.
Les Attributs
Un attribut est une valeur de donne dtenue par les objets de la classe Chaque attribut une valeur pour chaque instance d'objet Les instances peuvent avoir des valeurs identiques ou diffrentes pour un attribut donn Chaque nom d'attribut est unique l'intrieur d'une classe Chaque objet stocke sa propre valeur pour chacune de ses attributs.
Les Mthodes
Une mthode est une fonction ou une transformation qui peut tre applique aux objets ou par les objets. Tous les objets d'une mme classe partagent les mmes mthodes. Chaque mthode a un objet cible comme argument implicite (c'est l'objet lui-mme this, elle peut donc accder chacun des attributs) Une mthode peut avoir des arguments, en plus de son objet cible. Les mthodes sont des groupes d'instructions relies les unes aux autres au sein d'une classe d'objets qui agissent sur eux-mmes, ainsi que sur d'autres classes et d'autres objets.
Une mthode peut tre dclare plusieurs fois dans une mme classe ou ses classes drives, avec le mme nom mais des paramtres de types diffrents, ou de mme type mais dans un ordre diffrent. Au moment d'tre invoque, la bonne mthode est choisie pour qu'il y ait correspondance sur les paramtres de l'appel et les arguments de la mthode. Le compilateur recherche alors la mthode qui se rapproche le plus et utilise le transtypage pour coller parfaitement la signature de la mthode. Les valeurs de retours peuvent tre aussi diffrentes, mais il est interdit de crer deux mthodes avec les mmes paramtres et un type de valeur de retour diffrent (par exemple, int methode () et float methode ()).
LEncapsulation
L'encapsulation est le principe qui permet de regrouper les attributs et mthodes au sein d'une classe: principe de la bote noire. Il consiste, entre autre, protger au maximum les attributs d'un objet. Cette notion est aussi associe au systme de protection qui permet de contrler la visibilit d'une variable ou d'une mthode. Cela consiste demander un objet d'effectuer une action, sans se proccuper de comment il l'effectue. Elle permet galement de faire des contrles de scurit et de cohrence, et de ne pas effectuer les actions demandes si une condition particulire n'est pas respecte, ceci afin de garantir l'intgrit des donnes contenues dans l'objet. L'encapsulation permet aussi de dfinir des niveaux de visibilit des lments de la classe. Ces niveaux de visibilit dfinissent les droits d'accs aux donnes selon que l'on y accde par une mthode de la classe elle-mme, d'une classe hritire, ou bien d'une classe quelconque.
public: les fonctions de toutes les classes peuvent accder aux donnes ou aux mthodes d'une classe dfinie avec le niveau de visibilit public. Il s'agit du plus bas niveau de protection des donnes protg: l'accs aux donnes est rserv aux fonctions des classes hritires, c'est--dire par les fonctions membres de la classe ainsi que des classes drives priv: l'accs aux donnes est limit aux mthodes de la classe ellemme. Il s'agit du niveau de protection des donnes le plus lev
Notions de constructeur
La dclaration: Les rfrences
Une rfrence est un pointeur vers la structure de donnes correspondants aux attributs propres lobjet. Une rfrence peut possder une valeur null. Dclarer une rfrence ne rserve pas demplacement mmoire pour un objet, mais seulement de lespace pour une rfrence vers lobjet. Elle contient ladresse dune structure. A la diffrence des pointeurs la seule opration autorise sur les rfrences est laffectation dune rfrence de mme type. Laffectation de rfrence ne porte pas sur lobjet mais sur la rfrence elle mme.
Linstanciation
Se fait avec appel de loprateur unaire new. Cre un objet partir dune classe, lobjet est appel instance de la classe et renvoi une rfrence sur cet objet. 3 tapes:
Obtention de lespace mmoire ncessaire lobjets et initialisation des
attributs en mmoire. Appel de mthodes particulires: les constructeurs dfinis dans la classe. Renvoi dune rfrence sur lobjet maintenant cr et initialis.
Les constructeurs
Mthode particulire portant le mme nom que la classe. Doit tre de visibilit publique Appel lors de la cration de lobjet (instanciation de la classe). Permet d'initialiser l'objet sa cration en donnant par exemple des valeurs chacun de ses attributs. Nadmet pas de type de retour(mme pas le type void) Peut tre surcharg. Un constructeur par dfaut initialise les attributs de la classe leur valeur par dfaut, si aucun constructeur na t dfini pour cette classe.
Allocation mmoire . Initialisation par dfaut des champs. Initialisation explicite des champs . Excution des instructions du constructeur .
Elle portent sur les rfrences et non sur les objets eux-mmes. a=b; Celle-ci recopie simplement dans a la rfrence contenue dans b, ce qui nous conduit la situation ci-contre. Dornavant, a et b dsignent le mme objet, et non pas deux objets de mme valeur. Les oprateurs == et != s'appliquent thoriquement des objets. Mais comme ils portent sur les rfrences elles-mmes, leur intrt est trs limit Point a, b ; L'expression a == b est vraie uniquement si a et b font rfrence un seul et mme objet, et non pas seulement si les valeurs des champs de a et b sont les mmes.
En Java il n'existe aucun oprateur permettant de dtruire un objet dont on n'aurait plus besoin, Java utilise un mcanisme de gestion automatique de la mmoire connu sous le nom de ramasse-miettes (en anglais Garbage Collector), contrairement au C++ ou il faut appeler une mthode particulire: le destructeur. En C# et VB.Net ces deux mthodes cohabitent mais les destructeurs ne sont pas utiliss. Le GC permet de grer automatiquement les ressources utilises par les objets d'une application Java. Il dtermine les objets inutiliss par un programme(non rfrencs), pour ensuite les traiter de sorte rcuprer leur espace mmoire pour une ventuelle rutilisation.
Il n'existe aucun moyen de contraindre le GC accomplir un nettoyage de la mmoire la demande. Pour forcer la destruction dun objet il faut supprimer toutes les rfrences sur cet objet.
Attribut de classe
Cre au chargement de la classe en mmoire (mme sil existe pas encore dinstance de la classe). Il a la mme valeur pour tous les objets de la classe. Lorsqu'un des objets modifie cette information, les autres en soient automatiquement avertis. Sa dclaration se fait avec le mot cl static. On accede aux attributs de classe avec linstruction: NomDeLaClasse.NomAttribut
Mthode de classe
Ce sont des mthodes propres la classe et non pas aux objets de la classe. Elles sont dclares avec le mot rserv static. Il n'est pas ncessaire de dclarer un objet pour chaque utilisation, il suffit de l'utiliser au travers de la classe. Elles sont appeles prcdes du nom de la classe (et non d'un objet), facultatif l'intrieur de la classe, exemple:
Math.cos(x,y); (mthode cos de la classe Math)
Une mthode de classe ne peut en aucun cas agir sur les champs usuels (non statiques) puisque, par nature, elle n'est lie aucun objet en particulier, elle nagit que sur les attributs de classe.
Les packages
Permettent de regrouper des classes apparentes . Permettent de ne rendre des groupes de classes disponibles que quand ils sont ncessaires, et ils liminent les risques de conflits entre des noms de classes communs des groupes de classes diffrents. (bien souvent, un paquetage correspond physiquement un rpertoire). Les bibliothques de classes Java sont contenues dans un paquetage appel java.
LHritage et le polymorphisme
Lhritage
L'hritage est un mcanisme qui permet une classe d'hriter de l'ensemble des comportements et attributs d'une autre classe. De cette faon, les classes hrites forment une hirarchie descendante, au sommet de laquelle se situe la classe de base. On appelle galement la classe hrite la sous-classe, classe drive ou la classe fille et la classe parente la super-classe, la classe de base ou la classe mre.
La classe drive peut en plus des attributs et mthodes hrits ajouter de nouveaux attributs et mthodes.
Avec Java, l'arborescence est stricte, c'est--dire qu'une classe donne ne peut possder qu'une seule superclasse (l'hritage est dit simple contrairement des langages comme le C++, pour lesquels un hritage dit multiple est possible).
Une classe peut possder un nombre illimit de sous-classes. En java la partie suprieure de la hirarchie de classes est occupe par la classe Object ; toutes les classes hritent des attributs et du comportement de cette super-classe. En java le mot cl extends est utilis dans la dclaration de la classe drive pour spcifier la super-classe ex: class Herbivore extends Animal{}.
Une classe drive n'accde pas aux membres privs de sa classe de base. Elle accde aux membres publics et protgs. Elle se fait avec le mot cl super qui permet: de faire rfrence la super-classe. de manipuler les attributs et mthodes de la superclasse: super.nom_Attribut super.nom_Methode(argument1,argument2..) de faire appel au constructeur de la classe parente en fournissant des arguments au mot-cl super de la faon suivante: super(parametre1,parametre2,...)
En Java, le constructeur de la classe drive doit prendre en charge l'intgralit de la construction de l'objet. S'il est ncessaire d'initialiser certains champs de la classe de base et qu'ils sont convenablement encapsuls, il faudra disposer de fonctions d'altration ou bien recourir un constructeur de la classe de base . Si un constructeur d'une classe drive appelle un constructeur d'une classe de base, il doit obligatoirement s'agir de la premire instruction du constructeur et ce dernier est dsign par le mot cl super. Appeler un constructeur spcifique de la classe mre correspondant appeler super avec les arguments du constructeur cibl. ex: super(5); appelle le constructeur de la classe de base ayant un argument de type int.
Allocation mmoire pour un objet de type B ; il s'agit bien de l'intgralit de la mmoire ncessaire pour un tel objet, et pas seulement pour les champs propres B (c'est--dire non hrits de A). Initialisation par dfaut de tous les champs de B (aussi bien ceux hrits de A, que ceux propres B) aux valeurs "nulles" habituelles . Initialisation explicite, s'il y a lieu, des champs hrits de A ; ventuellement, excution des blocs d'initialisation de A. Excution du corps du constructeur de A. Initialisation explicite, s'il y a lieu, des champs propres B ; ventuellement, excution des blocs d'initialisation de B. Excution du corps du constructeur de B.
La surdfinition de mthode l'intrieur d'une mme classe correspondait des mthodes de mme nom, mais de signatures diffrentes. Une classe drive pourra son tour surdfinir une mthode d'une classe ascendante, les mthodes de la super-classe cohabiteront en mme temps que celles surdfinies dans la classe drive. la recherche d'une mthode acceptable ne se fait qu'en remontant la hirarchie d'hritage, jamais en la descendant . La redfinition de mthode permet une classe drive de proposer une nouvelle dfinition une mthode de sa classe de base. C'est alors cette nouvelle mthode qui sera appele sur tout objet de la classe drive, masquant en quelque sorte la mthode de la classe de base.
Encore faut-il respecter la signature de la mthode (type des arguments), ainsi que le type de la valeur de retour. exemple:
Lappel de la mthode de la super-classe dans celle redfinie de la classe de drive devra tre prcd du mot cl super, sinon il provoquerait un appel rcursif de la mthode de la classe drive. La redfinition d'une mthode ne doit pas diminuer les droits d'accs cette mthode, mais elle peut les augmenter.
La richesse des possibilits de cohabitation entre surdfinition et redfinition peut conduire des situations complexes qu'il est gnralement prfrable d'viter en soignant la conception des classes.
exemple:
Il interdit la modification des valeurs des variables locales ou des champs de classe(constante dobjet ou de classe).
Ce mot cl peut aussi s'appliquer une mthode ou une classe, mais avec une signification totalement diffrente : Une mthode dclare final ne peut pas tre redfinie dans une classe drive.
Le comportement d' une mthode finale est donc compltement dfini et il ne peut plus tre remis en cause, sauf si la mthode appelle elle-mme une mthode qui n'est pas dclare final.
Le polymorphisme est la troisime caractristique essentielle d'un langage de programmation orient objet, aprs lencapsulation et lhritage En POO il est possible d'affecter une variable objet non seulement la rfrence un objet du type correspondant, mais aussi une rfrence un objet d'un type driv, on parle aussi de compatibilit par affectation entre un type classe et un type ascendant. Ce principe est appel surclassement ou upcasting Exemple Animal medor=new Chien(); Animal titi= new Oiseau(); Lorsquun objet est surclass il est vu comme un objet du type de la rfrence utilis pour le designer. Ces fonctionnalits sont alors restreintes celles proposes par la classe du type de la rfrence. Lorsquune mthode est accde partir dune rfrence surclasse, cest la mthode telle quelle est dfinie au niveau de la classe effective de lobjet qui est invoque et excute.
Le polymorphisme
Les mthodes sont rsolues lexcution: cest le lien dynamique ou late binding ou run-time binding ou dynamic binding Les conversions explicites de rfrences : La compatibilit par affectation n'a pas lieu dans le sens inverse. Exemples: Oiseau titi; titi= new Animal();//Refuse la compilation
Lappel dune mthode spcifique de la classe drive est refus la
compilation, mais cependant nous pouvons forcer le compilateur raliser la conversion correspondante en utilisant l'oprateur de cast: cest une promesse faite au compilateur. Animal titi; titi=new Oiseau(); titi.voler(); // refuse la compilation ((Oiseau)titi).voler(); //accepte la compilation, mais sera vrifie lexcution,OK promesse faite au compilateur
Il permet a un programme de ragir de manire diffrencie lenvoi dun mme message(lappel dune mthode) en fonction des objets qui reoivent ce message. Il consiste considrer les fonctionnalits suivant le type rel de lobjet et non suivant le type de la variable dans laquelle il est stock. le polymorphisme signifie que la mme opration peut se comporter diffremment sur diffrentes classes de la hirarchie
Une classe abstraite est une classe incomplte. Une classe abstraite est dclare avec le modificateur abstract.
Une classe est abstraite si elle contient au moins une mthode abstraite ; elle ne peut pas tre instancie, mais ses sous-classes non abstraites le peuvent. Par contre on peut toujours crer une rfrence du type de cette classe.
Une mthode abstraite ne contient pas de corps, mais doit tre implmente dans les sous-classes non abstraites : abstract nomDeMthode (<arguments>); ce n'est qu'une signature
Exemple: public abstract class Animal{ public abstract void deplacer(); //juste la signature et le type } // de retour
-
La classe animal ne peut plus tre instancier. Chaque classe drive de Animal (Chien, Chat, Oiseau) devra redfinir la mthode deplacer() selon sa propre faon de se dplacer pour lever labstraction.
Rgles - Ds qu'une classe comporte une mthode abstraite, elle est abstraite, et ce mme si l'on n'indique pas le mot cl abstract devant sa dclaration (ce qui reste quand mme vivement conseill).
-
Une mthode abstraite doit obligatoirement tre dclare public, ce qui est logique puisque sa vocation est d'tre redfinie dans une classe drive. Dans l'en-tte d'une mthode dclare abstraite, les noms d'arguments muets doivent figurer (bien qu'ils ne servent rien). Une classe drive d'une classe non abstraite peut tre dclare abstraite et/ou contenir des mthodes abstraites.
Les interfaces
En fait, ce mcanisme n'est qu'une gnralisation du concept de classe abstraite.
Une interface est une classe dont toutes les mthodes sont abstraites.
On n'a donc plus besoin de spcifier que les mthodes sont abstraites (signales par le mot cl abstract), car elle doivent forcment l'tre.
Une interface est dclare non plus par le mot cl class mais par le mot interface.
On n'hrite pas d'une interface, mais on l'implmente. En d'autres termes, on doit forcment fournir le code de toutes les mthodes de l'interface utilise.
Limplmentation dune interface par une classe se ralise grce au mot cl implements. La diffrence essentielle entre une classe abstraite (dont toute les mthodes seraient abstraites) et une interface rside dans le fait que l'on ne peut hriter que d'une seule classe (hritage simple), alors que l'on peut implmenter plusieurs interfaces. C'est une solution pour simuler l'hritage multiple. Il s'agit essentiellement d'une annonce (ou d'un contrat) indiquant qu'une classe implmentera certaines mthodes Les interfaces contiennent uniquement des dfinitions de constante et des dclarations de mthodes, sans leur dfinition (autrement dit, les mthodes indiques dans les interfaces ne comportent que le prototype, et pas le corps).
Les attributs et les mthodes d'une interface sont automatiquement publics; cela implique qu'une classe qui implmente une interface devra dclarer publiques (avec le modificateur public) les mthodes de l'interface qu'elle dfinit. Si une classe A implmente une interface I, une sous-classe B de A implmente aussi automatiquement I ; une instance B pourra tre rfrence par une variable de type I et bnficiera, au moins par hritage, des dfinitions des mthodes prototypes dans I. Bien que la vocation d'une interface soit d'tre implmente par une classe, on peut dfinir des variables de type interface. Bien entendu, on ne pourra pas affecter cette dernire une rfrence un objet de type I puisqu'on ne peut pas instancier une interface (pas plus qu'on ne pouvait instancier une classe abstraite !).
En revanche, on pourra affecter i n'importe quelle rfrence un objet d'une classe implmentant l'interface I :
On peut dfinir une interface comme une gnralisation d'une autre. On utilise l encore le mot cl extends, ce qui conduit parler d'hritage ou de drivation, et ce bien qu'il ne s'agisse en fait que d'emboter simplement des dclarations : La drivation des interfaces revient simplement concatner des dclarations
Le terme polymorphisme dcrit la caractristique d'un lment qui peut prendre plusieurs formes. En programmation Objet, le polymorphisme signifie que la mme opration peut se comporter diffremment sur diffrentes classes de la hirarchie.
//: c07:Shapes.java // Polymorphisme en Java. abstract class Shape { abstract void draw(); abstract void erase(); } class Circle extends Shape { void draw() { System.out.println("Circle.draw()"); } void erase() { System.out.println("Circle.erase()"); } } class Square extends Shape { void draw() { System.out.println("Square.draw()"); } void erase() { System.out.println("Square.erase()"); } }
class Triangle extends Shape { void draw() { System.out.println("Triangle.draw()"); } void erase() { System.out.println("Triangle.erase()"); } } public class Shapes { public static Shape randShape() { switch((int)(Math.random() * 3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } } public static void main(String[] args) { Shape[] s = new Shape[9]; // Remplissage du tableau avec des formes [shapes]: forint i = 0; i < s.length; i++) s[i] = randShape(); // Appel polymorphe des mthodes: forint i = 0; i < s.length; i++) s[i].draw(); } }
Une rfrence de type Object peut tre utilis pour rfrencer nimporte quel type dobjet.
Il faudra effectuer la conversion ncessaire pour appliquer une mthode prcise un objet rfrenc par une variable de type Object exemple: Objetc o; o=new Point(); (Point)o.deplace(2,3);
Notez bien les consquences des rgles relatives au polymorphisme. Pour pouvoir appeler une mthode f par o.f(), il ne suffit pas que l'objet effectivement rfrenc par f soit d'un type comportant une mthode f, il faut aussi que ladite mthode existe dj dans la classe Object. Ce n'est manifestement pas le cas de la mthode dplace.
String toString() Elle fournit une chane, c'est--dire un objet de type String. La mthode toString de la classe Object fournit une chane contenant :
le nom de la classe concerne l'adresse de l'objet en hexadcimal (prcde de @). Exemple: titi.toString== Oiseau@fecdac12
boolean equals(Object obj) Renvoie true si les adresses mmoires des deux objets concerns sont gales et false dans le cas contraire. Exemple: Pomme p1=new Pomme( verte ,20); Pomme p2=new Pomme( verte ,20); p1.equals(p2);// renvoie false protected Object clone() Cre et retourne une copie de l'objet. protected void finalize() Appel par le Garbage Collector sur un objet lorsque ce dernier dtermine qu'il n'y a plus de rfrences vers des objets.
protected Object clone() Cre et retourne une copie de l'objet. protected void finalize()
Appel par le Garbage Collector sur un objet lorsque ce dernier dtermine qu'il n'y a plus de rfrences vers des objets. Class getClass() Retourne la classe d'excution d'un objet.
La classe String
En java il nexiste pas de type primitif reprsentant les chanes de caractres. Java ne contient pas de type chane prdfini. En revanche, la bibliothque Java standard contient une classe prdfinie appele String. Chaque chane est un objet (une rfrence) de la classe String
char charAt(int index) retourne la caractre positionn l'index spcifi. int compareTo(String anotherString) compare deux chanes lexicographiquement.
int compareToIgnoreCase(String str) compare deux chanes lexicographiquement en ignorant la casse de caractres. String concat(String str) concatne l'objet String une autre chane de caractres. boolean equals(Object anObject) compare deux chanes de caractres entre elles. String substring(int beginIndex, int endIndex)
retourne une nouvelle chane de caractres qui est une sous-chane de l'objet String par l'intermdiaire d'un intervalle spcifi. String toLowerCase() convertit tous les caractres dans l'objet String en casse minuscule en utilisant les rgles de l'objet Locale par dfaut. String toLowerCase(Locale locale) convertit tous les caractres dans l'objet String en casse minuscule en utilisant les rgles de l'objet Locale fourni. int length() retourne la longueur de l'objet String.
String toString() retourne une chane de caractres issue de l'objet String. String toUpperCase() convertit tous les caractres dans l'objet String en casse majuscule en utilisant les rgles de l'objet Locale par dfaut. String toUpperCase(Locale locale) convertit tous les caractres dans l'objet String en casse majuscule en utilisant les rgles de l'objet Locale fourni. String trim() retourne une copie de l'objet String en supprimant les espaces blancs avant et aprs la chane de caractres. String replace(char oldChar, char newChar) retourne un nouvel objet String rsultant du remplacement de toutes les occurrences d'un caractre donne par un autre caractre. String[] split(String regex) dcoupe une chane de caractres autour des correspondances donnes par l'expression rgulire. int indexOf(int ch) retourne l'index l'intrieur l'objet String de la premire occurrence du caractre spcifi.
Exemple
Conversion dun type primitif en une chane de caractres static String valueOf(int i) retourne un reprsentation sous forme d'un objet String de la valeur de type int passe en argument. exemple: String ch=String.valueOf(10); // ch= 10
Conversion d'une chane en un type primitif Il faut recourir une mthode de la classe enveloppe associe au type primitif : Integer pour int, Double pour double, etc... Par exemple, pour convertir une chane en un entier de type int, on utilisera la mthode statique parseInt de la classe enveloppe Integer, exemple: String ch= 412 ; int n=Integer.parseInt(ch);
Les tableaux
Les tableaux permettent de regrouper une suite de variables de mme type. Chaque lment du tableau est une variable que vous pouvez utiliser comme n'importe quelle variable de ce type. Il est possible de dfinir des tableaux pour les types primaires ou les classes. Cependant, tous les lments doivent tre du mme type. En Java, les tableaux sont des objets Dclarer une variable pour rfrencer le tableau. char[] monTableau; char monTableau[];
Crer un objet de type tableau en initialisant la rfrence ce tableau. On utilise pour ce faire l'oprateur new
il est possible de fournir la valeur chacune des cases du tableau. Il suffit de donner la liste entre accolades sans utiliser l'oprateur new.
La classe ArrayList
Elle ralise limplmentation des tableaux de taille variable dont les lments sont des objets. La taille du vecteur peut augmenter ou diminuer si ncessaire, afin de sajuster lors d'ajouts ou de suppressions de composants. Les constructeurs : Vector() // Cre un vecteur vide Vector(int initialCapacity) // Cre un vecteur vide dont la capacit initiale est gale l'argument spcifi. Vector(int initialCapacity, int capacityIncrement) // Cre un vecteur vide dont la capacit est gale initialCapacity, et dont la capacit s'accrot de capacityIncrement lorsqu'il est satur.
void addElement(Object obj) // ajoute l'lment obj au vecteur Object elementAt(int index) // renvoie l'objet d'indice index. Object firstElement() // renvoie le premier lment du vecteur. void insertElementAt(Object obj, int index) // insre l'objet obj de faon qu'il occupe l'indice index, les objets situs la suite tant dcals. boolean isEmpty() // renvoie true si le vecteur est vide, sinon false. Object lastElement() // renvoie le dernier lment du vecteur. void removeAllElement() // supprime tous les lments du vecteur et remet 0 le nombre de ses lments. boolean removeElement(Object obj) // supprime la premire occurrence de l'objet obj et avance d'un indice tous les lments situs derrire. // renvoie true si l'objet existe, sinon false.
void removeElementAt(int index) // Supprime l'lment d'indice index et avance d'un indice tous les lments situs derrire. void setElementAt(Object obj, int index) // remplace l'lment d'indice index par l'objet obj. int size() // donne le nombre dlments du vecteur
La programmation graphique
L'lment le plus important dans une interface utilisateur est la fentre. Il y a plusieurs sortes de fentres : celle cre par le systme pour le programme java, et les autres, cres par java l'intrieur de la premire. Java dispose de deux composants principaux : Window et Applet. Les fentres Windows sont utiliss pour les applications fonctionnant localement. Le Applets sont employs pour les programmes fonctionnant par l'intermdiaire d'un rseau et au travers d'un navigateur auxquels de nombreuses restrictions sont imposes pour des raisons de scurit. Java implmentes les classes Windows et Applets pour la gestion des interfaces graphiques
Interface Window
Deux packages fournis par java pour la gestion des application windows: AWT(Abstract Windows Toolkit) et Swing. Les objets AWT utilisent les objets natifs de lOS sur lequel ils tournent.Gestion lourde: consommation de mmoire, perte de performance Les objets Swing(dernire version) sont des objets java donc portables sur tout environnement sans modification de leur aspect. Ils sont simplement dessins l'intrieur de leur conteneur comme s'il s'agissait d'une image: composant allgs. A chacune des classes du package java.awt correspond une classe du package javax.swing, portant le mme nom prcd d'un J
Dans la suite nous retenons la solution Swing. Toute application windows(swing) utilise des fentres drivant ou utilisant la classe JFrame. JFrame est compos quatre couches superposes JRootPane JLayeredPane contentPane glassPane
Quelques mthodes
getContentPane(): recupre le conteneur principal de la fentre Remove(): efface le composant de la fentre setTitle(): dfinit le titre de la fentre setVisible(): rend la fentre visible setBounds: dfinit la position et les dimensions de la fentre
package interfacegraphique; import javax.swing.*; public class MaFenetre { public static void main(String[] args) { JFrame fenetre=new JFrame(); fenetre.setSize(350,500); fenetre.setTitle("Ma premire fentre swing"); fenetre.setVisible(true); } }
import javax.swing.*; //import le package javax.swing contenant les classes swing public class MaFenetre { public static void main(String[] args) { JFrame fenetre=new JFrame(); //construction dune fentre sans titre fenetre.setSize(350,500); //dimensionner la largeur et la hauteur de la fentre fenetre.setTitle("Ma premire fentre swing"); //donner un titre la fentre fenetre.setVisible(true); //rendre la fentre visible } }
Exemple de drivation de la classe JFrame import javax.swing.*; class MaSecondeFenetre extends JFrame { public MaSecondeFenetre () { this.setTitle("Ma seconde fentre swing"); this.setBounds(30,50,400,500); this.setVisible(true); } } public class TestMaFenetre { public static void main(String[] args) { MaSecondeFenetre fenetre=new MaSecondeFenetre (); } }
import javax.swing.*; class MaFenetre extends JFrame { //classe drive de la classe JFrame public MaFenetre(){ //constructeur sans argument this.setTitle("Ma seconde fentre swing"); //definition du titre de la fentre this. this.setBounds(30,50,400,500); //dfinition la position(30,40) et la taille(400,500) de la fentre } } public class TestMaFenetre{ //classe de test de ma classe MaFenetre public static void main(String[] args) { MaFenetre fenetre=new MaFenetre(); //cration dun objet de type MaFentre (appel du constructeur) fenetre.setVisible(true); //affichage de lobjet fentre } }
Classe implmentant les boutons de commandes JButton():cre un button sans text ni icne JButton(String text):cre un button avec text JButton(Icon icone):cre un button avec une icne public boolean isDefaultButton(): verifie si cest le button par dfaut du conteneur principal.
Le composant doit tre ajout un panel(conteneur) Rcuprer le conteneur principal (contentPane) de la fentre avec la mthode getContentPane() qui renvoie une rfrence de type Container implmentant la classe des objets qui pouvant contenir des composants: les panel, frame. Ajouter le composant sur lobjet conteneur ainsi recupr avec la mthode add() du Container.
import javax.swing.*; import java.awt.*;// pour pouvoir utiliser le gestionnaire de rpartition et les conteneurs public class TestMaFenetreBouton{ public static void main(String[] args) { JFrame fenetre=new JFrame(); //cration de la fentre JButton cmdValider= new JButton("Valider"); //cration du button de commande Valider Container panel=fenetre.getContentPane(); //recupration du conteneur principal de la fentre panel.add(cmdValider); //ajout du button de commande sur le conteneur panel.setLayout(new FlowLayout()); // repartition du conteneur principal avec le type FlowLayout fenetre.setVisible(true); //afficher la fentre } }
Les deux instructions: Container panel=fenetre.getContentPane(); panel.add(cmdValider); auraient pu tre remplaces par: fenetre.getContentPane().add(cmdValider); Ceci du au fait que la mthode getContentPane de lobjet JFrame renvoie un objet Container donc on peut rajouter des composants directement sur lobjet renvoy qui correspond en ralit au conteneur principal du JFrame.
Nous avons rajout le package java.awt pour pouvoir accder aux classes FlowLayout et Container; Il est conseill dimporter les classes awt, awt.event, swing, et swing.event pour ne plus se poser des questions sur lorigine des classes.
Ils permettent aux utilisateurs de faire un choix du type oui/non En cliquant sur la case cocher son tat passe de on off Constructeurs: JCheckBox(): permet de crer une case cocher vide. JCheckBox(Icon icone): cration en spcifiant une image JCheckBox(String Texte): Les mthodes AddActionListener(); removeActionListener() setText(): pour spcifier le texte de la case cocher setIcon(): pour spcifier limage setSelected(): pour spcifier ltat IsSelected(): retourne letat de la case cocher
Les vnements
Tout systme d'exploitation qui supporte des interfaces graphiques doit constamment surveiller l'environnement afin de dtecter des vnements tels que la pression sur une touche du clavier ou sur un bouton de la souris. Le systme d'exploitation en informe alors les programmes en cours d'excution. Chaque programme dtermine ensuite s'il doit rpondre ces vnements.
Illustration
Les sources d'vnement sont des composants de l'interface utilisateur: des fentres et des menus.... Le systme d'exploitation notifie une source d'vnements les activits qui peuvent l'intresser, comme les mouvements de la souris ou les frappes du clavier. La source d'vnement dcrit la nature de l'vnement dans un objet vnement - ##Event. Elle stocke galement une liste d'couteur - des objets qui souhaitent tre prvenus quand l'vnement se produit. La source d'vnement appelle la mthode approprie de l'interface couteur afin de fournir des informations sur l'vnement aux divers couteurs recencs. Pour cela la source passe l'vnement objet adquat la mthode de la classe couteur.
L'couteur analyse l'objet vnement pour obtenir de informations dtailles. Par exemple, nous pouvons utiliser la mthode getSource pour connatre la source, ou les mthodes getX et getY de la classe MouseEvent pour connatre la position courante de la souris.
Linterface MouseListener
Linterface
Rappel
quand une classe implmente une interface, elle devra implmenter(dfinir) le code de toutes les mthodes de linterface.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Souris extends JFrame implements MouseListener{ //implmentation de la mthode mouseClicked public void mouseClicked(MouseEvent evt){ JOptionPane.showMessageDialog(this, "Souris clicke en: "+evt.getX()+"et "+ evt.getY() +"avec :" + evt.getClickCount()+" click" ); } //implmentation des mthodes abstraites public void mouseEntered(MouseEvent e){}; public void mouseExited(MouseEvent e){}; public void mousePressed(MouseEvent e){}; public void mouseReleased(MouseEvent e){}; } public class TestSouris { public static void main(String[] args){ TestSouris ts=new TestSouris(); JLabel l=new JLabel("Cliquer ici "); l.addMouseListener(ts); ts.getContentPane().add(l); ts.setBounds(0,0,200,100); ts.setVisible(true); } }
Linterface KeyListener
Linterface couteur KeyListener coute les vnements du clavier(KeyEvent). Elle dclare les mthodes suivantes: void keyTyped(KeyEvent e) lorquune touche a t frappe void keyPressed(KeyEvent e) lorsquune touche a t presse void keyReleased(KeyEvent e) lorsquune touche a t relache
package lesevenements; import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public class TestClavier extends JFrame implements KeyListener { //les attributs de la classe JLabel alt,shift,ctrl,touche,code; //le constructeur public TestClavier() { super("Test du clavier"); alt =new JLabel("Alt");getContentPane().add(alt); shift =new JLabel("Shift");getContentPane().add(shift); ctrl =new JLabel("Ctrl");getContentPane().add(ctrl); touche =new JLabel("Touche: ");getContentPane().add(touche); code =new JLabel("Code: ");getContentPane().add(code); getContentPane().setLayout(new FlowLayout()); addKeyListener(this); setBounds(100,100,600,100); setVisible(true); }
//implmentation de la mthode keyPressed public void keyPressed(KeyEvent e){ if(e.isAltDown()) alt.setForeground(Color.red); if(e.isShiftDown()) shift.setForeground(Color.red); if (e.isControlDown()) ctrl.setForeground(Color.red); code.setText("Code: " + e.getKeyCode()); } //implmentation de la mthode keyRealeased public void keyReleased(KeyEvent e){ if(!e.isAltDown()) alt.setForeground(Color.black); if(!e.isShiftDown()) shift.setForeground(Color.black); if (!e.isControlDown()) ctrl.setForeground(Color.black); code.setText("Code: " ); } //implmentation de la mthode KeyType public void keyTyped(KeyEvent e){ touche.setText("Caractre: '" + e.getKeyChar()+"'"); }
Linterface WindowListener
Linterface couteur WindowListener coute les vnements de la fentre (WindowEvent). Elle dclare les mthodes suivantes: public void windowOpened(WindowEvent evt) public void windowActivated(WindowEvent evt) public void windowDeactivated(WindowEvent evt) public void windowIconified(WindowEvent evt) public void windowDeiconified(WindowEvent evt) public void windowClosed(WindowEvent evt) public void windowClosing(WindowEvent evt)
package lesevenements; import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public class TestWindow extends JFrame implements WindowListener{ public void windowOpened(WindowEvent evt) {} public void windowActivated(WindowEvent evt){} public void windowDeactivated(WindowEvent evt){} public void windowIconified(WindowEvent evt){} public void windowDeiconified(WindowEvent evt){} public void windowClosed(WindowEvent evt){} public void windowClosing(WindowEvent evt){ System.out.print("Au revoir"); System.exit(0); } public static void main(String[] args) { TestWindow tw = new TestWindow(); tw.addWindowListener(tw); tw.setBounds(100,100,200,300); tw.setVisible(true); }
un objet couter.
Cas dj trait Exemple: public class Fenetre extends JFrame implements ActionListener{
class EcouteurInterne implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource()==b1) b1.setBackground(Color.green); if(e.getSource()==b2) b2.setBackground(Color.red); } } public static void main (String args[]){ TestEcouteurInterne t=new TestEcouteurInterne(); } }
Une classe anonyme est une classe locale sans nom. Une classe anonyme est dfinie et instancie dans une unique expression concise en utilisant l'oprateur new. Lorsqu'une classe locale n'est utilise qu'une seule fois, envisagez d'utiliser la syntaxe des classes anonymes qui place la dfinition et l'utilisation de la classe au mme endroit. Si le nom suivant le mot cl new est le nom d'une classe, la classe anonyme devient une sous-classe de la classe nomme. Si le nom suivant new spcifie une interface, alors la classe anonyme implmente cette interface et devient une sous-classe de Object. A utiliser si lcouteur coute un seul composant et que son code nest pas trs volumineux. Lcouteur est prs de lobjet cout.
package lesevenements; import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public class TestEcouteurClasseAnonyme extends JFrame { JButton b1; public TestEcouteurClasseAnonyme () { b1=new JButton("OK"); b1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){b1.setBackground(Color.cyan);}}); this.getContentPane().add(b1); this.getContentPane().setLayout(new FlowLayout()); this.setTitle("Test d'un couteur anonyme"); this.setBounds(100,100,200,300); this.setVisible(true); } public static void main (String args[]){ TestEcouteurClasseAnonyme t=new TestEcouteurClasseAnonyme (); } }
Les adaptateurs
Pour viter aux programmeurs davoir implmenter toutes les mthodes dune interface couteur, AWT fournit des classes qui implmentes toutes ces mthodes. Le code des mthodes ne fait rien. Cette technique permet au programmeur de redfinir dans les sous-classe des adaptateurs que les mthodes qui lintressent. Les classes suivantes du package java.awt.event sont des adaptateurs: KeyAdapter, MouseAdapter, MouseMotionAdapter, WindowAdapter NB: les adaptateurs sont des classes(et non des interfaces) donc ils faut les driver(et non les implmenter).
La classe MouseAdapter implmente toutes les mthodes de MouseListener avec un code vide. Nous pouvons tendre la classe Adapter en ne redfinissant que la(les) mthode(s) ncessaire(s).
Exemple: dun ecouteur MouseAdapter implment par la mthode dune classe anonyme.
Un KeyAdapter implmentation classe anonyme sur un JTextField et un WindowAdapter en implmentation classe anonyme sur JFrame
Les Applets
Java est surtout connu pour sa capacit fonctionner sur des pages du World Wide Web. Ces programmes, appels Applets, se prsentent comme des images sur une page Web. Contrairement aux images, toutefois, les applets peuvent tre interactives - c'est--dire admettre des donnes entres par l'utilisateur, y rpondre et prsenter du contenu capable d'voluer en permanence. Les applets peuvent servir crer des animations, des figures, des jeux, des formulaires capables de ragir des informations entres par l'utilisateur, ou tout autre type d'effets interactifs sur une mme page Web, au milieu d'lments de texte et de graphismes.
Les applets peuvent tre tlcharges depuis le World Wide Web de la mme manire que des pages HTML, des images ou n'importe quel lment de site Web. Si le navigateur Web utilis est quip pour traiter les applets Java, l'applet tlcharge commence s'excuter ds qu'elle a fini de se tlcharger. Contrairement aux ActiveX, Java dispose d'un modle de scurit. Le systme garantit l'utilisateur un niveau de protection lev pour son systme. Au sein de l'applet, par exemple, il ne sera pas possible d'accder aux fichiers du disque dur du poste client ou de lancer un exe sur la machine locale.
Nous avons dcouvert qu'une applet est un programme qui tourne au sein d'une page Web. Ce n'est donc pas une application et c'est le navigateur qui doit grer l'applet. La mthode main n'existe plus, la place le navigateur excute la mthode init. Le navigateur gre galement l'affichage de l'applet en rservant une zone au sein de la page Web. Pour que la classe principale soit reconnue comme une applet, elle doit hriter de JApplet du package javax.swing ou de la classe Applet du package java.awt.
public void init(): appel par le navigateur lors du chargement de la page juste aprs le constructeur; donc une seule fois public void start(): appel par le navigateur lorsque la page devient active public void stop(): appel par le navigateur lorsque la page devient inactive public void destroy(): appel par la navigateur lorsque lapplet doit tre dfinitivement arrt public void paint(Graphics g): appel chaque fois que la page doit tre redessine.
Ma premire applet
import javax.swing.*; import java.awt.*; public class MaPremiereApplet extends JApplet { public void paint(Graphics g) { g.drawString("Je suis affich par l'applet",0,100); }
Transmissions de paramtres
Sur la page HTML elle se fait via la commande < Param Name= Value=.. > Dans le tag < Applet > Dans le code java les paramtres sont recuprs avec linstruction getParameters(" " ) Attention cette mthode nest pas disponible dans le constructeur de lapplet mais ds lappel de la mthode init().
Exemple
import javax.swing.*; import java.awt.*; public class AfficherMois extends JApplet { public void paint(Graphics g) { String leMois=getParameter("Mois"); g.drawString("Mois: "+ leMois,0,100); } }
<html> <head> </head> <body> <APPLET CODE=AfficherMois.class> <Param Name="Mois" Value="Janvier"> </APPLET> </body> </html>
La classe Graphics
Classe
abstraite contenant les outils necessaires pour dessiner. Instancie par lOS via la JVM. mthodes de la classe Graphics drawArc() drawImage() drawLine() drawString() drawRect() drawOval() setColor() setFont()
Quelques
import java.awt.*; import java.javax.swing.*; import java.awt.event.*; public class Figure extends JApplet { public void paint(Graphics g) { //Cration dune police de caractre Font helvetica14Normal = new Font("Helvetica",Font.PLAIN,14); // Affectation dune couleur noire g.setColor(Color.black); //Affectation de la police g.setFont(helvetica14Normal); //Dessiner le texte g.drawString("Figures ...", 50, 20); //Dessiner une line g.drawLine(50,25,100,25); //Changer la couleur en rouge g.setColor(Color.red);
//Dessiner un rectangle g.drawRect(50,30,20,30); //Dessiner un rectangle plein g.fillRect(80,30,20,30); //Dessiner un rectangle aux angles arrondis g.drawRoundRect(50,70,20,30,15,15); //Dessiner un rectangle plein aux angles arrondis g.fillRoundRect(80,70,20,30,15,20); //Dessiner un rectangle 3Dimensions g.draw3DRect(50,110,20,30,true); //Dessiner un rectangle 3Dimensions rempli g.fill3DRect(80,110,20,30,false); // polygones int listeX[]={50,40,80,100,55,0}; int listeY[]={150,170,200,170,160,0}; int nbrXY=listeX.length-1; g.drawPolygon(listeX, listeY, nbrXY); int listeY2[]={200,220,250,220,210,0}; g.fillPolygon(listeX, listeY2, nbrXY);
Quelsques
Architecture JDBC
JDBC est un ensemble de classes et dinterfaces destines permettre la connexion et la communication avec les moteurs de bases de donnes . Le langage de communication entre JDBC et les BDD est le SQL. Architecture repose sur:
JDBC API: ensembles des classes et dinterfaces pour dvelopper les
application utilisant les BDD. JDBC Manager: cest le noyau Java de JDBC JBDC Driver: ces sont les implmentations des interfaces spcifiques chaque moteur de BDD. Ils peut en exister plusieurs pour un mme moteur.
Type 4
Type 3
SGBDR
http://java.sun.com/products/jdbc/jdbc.drivers.html
JDBC
Les classe de JDBC sont dans le package java.sql Ce package est principalement compos dinterfaces destines tre implmentes par les drivers JDBC. 8 interfaces : Statement CallableStatement, PreparedStatement DatabaseMetaData, ResultSetMetaData ResultSet, Connection Driver
DriverManager
Connection
Statement
Resultset
Importer le package java.sql 1. Enregistrer le driver JDBC 2. Etablir la connexion la base de donnes 3. Crer une zone de description de requte 4. Excuter la requte 5. Traiter les donnes retournes 6. Librer les diffrents espaces mmoires
quand une classe Driver est charge, elle doit crer une
instance d elle mme et s enregistrer auprs du DriverManager certains compilateurs refusent cette notation et demande plutt :
Class.forName("driver_name").newInstance();
Mthode getConnection() de DriverManager 3 arguments : l URL de la base de donnes le nom de l utilisateur de la base son mot de passe
le DriverManager essaye tous les drivers qui se sont enregistrs (chargement en mmoire avec Class.forName()) jusqu ce quil trouve un driver qui peut se connecter la base.
URL de connexion
Accs
jdbc:<sous-protocole>:<nom-BD>;param=valeur, ...
qui spcifie : l utilisation de JDBC le driver ou le type de SGBDR l identification de la base locale ou distante
avec des paramtres de configuration ventuels nom utilisateur, mot de passe, ...
Exemples :
String url = "jdbc:odbc:MaDataSourceName" ; String url = "jdbc:mysql://mv05:1114:maBase";
objet Statement possde les mthodes ncessaires pour raliser les requtes sur la base associe la connexion dont il dpend. types de Statement :
types d excution :
retournent un ResultSet (tuples rsultants)
UPDATE, DELETE, CREATE TABLE, DROP TABLE) qui retournent un entier (nombre de tuples traits)
execute() : procdures stockes (cas rares)
executeQuery()
et executeUpdate() de la classe Statement prennent comme argument une chane (String) indiquant la requte SQL excuter :
Statement st = connexion.createStatement(); ResultSet rs = st.executeQuery( "SELECT nom, prenom FROM clients " + "WHERE nom=Diop ORDER BY nom"); int nb = st.executeUpdate("INSERT INTO dept(DEPT) " +"VALUES(06)");
remarques :
pour dcouvrir les types des colonnes impliques dans la requte puis un 2me pour l excuter..
objet ResulSet (retourn par l excution de executeQuery() ) permet d accder aux champs des tuples slectionns
seules les donnes demandes sont transfres
il faut donc les lire "manuellement" et les stocker dans des variables pour un usage ultrieur
Il
Les L
colonnes sont rfrences par leur numro ou par leur nom accs aux valeurs des colonnes se fait par les mthodes de la forme getXXX()
lecture du type de donnes XXX dans chaque
Connection connexion =DriverManager.getConnection(url,user,pss); Statement st = connexion.createStatement(); ResultSet rs = st.executeQuery( "SELECT a, b, c, FROM Table1"); while(rs.next()) { int i = rs.getInt("a"); String s = rs.getString("b"); byte[] b = rs.getBytes("c"); }
driver JDBC traduit le type JDBC retourn par le SGBD en un type Java correspondant
le XXX de getXXX() est le nom du type Java correspondant au
utiliser la mthode wasNull() de ResultSet les mthodes getXXX() de ResultSet convertissent une
valeur NULL SQL en une valeur acceptable par le type d objet demand :
les mthodes retournant un objet (getString() , getObject() et getDate() ) retournent un "null " Java les mthodes numriques (getByte() , getInt() , etc) retournent "0" getBoolean() retourne " false "
efficace
Chaque
mthode getMetaData() permet d obtenir des informations sur les types de donnes du
ResultSet elle renvoie des ResultSetMetaData on peut connatre entre autres :
le nombre de colonne : getColumnCount() le nom d une colonne : getColumnName(int col) le type d une colonne : getColumnType(int col) le nom de la table : getTableName(int col) si un NULL SQL peut tre stock dans une colonne : isNullable()
ResultSetMetaData
Resultset rs = stmt.executeQuery("SELECT * FROM emp"); ResultSetMetaData rsmd = rs.getMetatData(); int nbColonnes = rsmd.getColumnCount(); for(int i = 1; i <= nbColonnes; i++) { // colonnes numerotees a partir de 1 (et non 0) String typeCol = rsmd.getColumnTypeName(i); String nomCol = rsmd.getColumnName(i); }
DataBaseMetaData
Pour
rcuprer des informations sur la base de donnes elle-mme, utiliser la mthode getMetaData() de l objet Connection
dpend du SGBD avec lequel on travaille elle renvoie des DataBaseMetaData on peut connatre entre autres :
Requtes pr-compiles
L
objet PreparedStatement envoie une requte sans paramtres la base de donnes pour prcompilation et spcifiera le moment voulu la valeur des paramtres
plus rapide qu un Statement classique
le SGBD analyse quune seule fois la requte (recherche d une stratgie d excution adquate) pour de nombreuses excutions d une mme requte SQL avec des paramtres variables
compiles
les arguments dynamiques sont spcifis par un "?" ils sont ensuite positionns par les mthodes setInt() ,
le premier (int) indique le numro relatif de l argument dans la requte le second indique la valeur positionner
connection.commit();
mme, pour annuler une transaction (ensemble de requtes SQL), l application peut envoyer la base un "rollback" par :
connection.rollback();
restauration de ltat de la base aprs le dernier
"commit"
Exceptions
SQLException
de l erreur
renvoie aussi des informations spcifiques au
SQLWarning
: avertissements SQL
Parce qu'en Java, contrairement au C et au C++, les exceptions et leur traitement font partie intgrante du langage et sont utilises systmatiquement pour signaler toute erreur survenue pendant l'excution d'une mthode (dbordement d'indice d'un tableau, erreur d'accs un fichier, division par 0...). De nombreuses mthodes sont susceptibles de dclencher (throw) des exceptions et donc il est impratif de savoir comment les traiter ou passer outre.
La gestion d'erreur par exceptions permet d'crire de manire plus claire (donc plus maintenable) un programme, en isolant le traitement d'erreur de la suite d'instructions qui est excute si aucune erreur ne survient. Voici la syntaxe type d'une classe grant des exceptions: try{ // Instructions susceptibles de provoquer des erreurs; } catch (Exception ex) { // Instructions de traitement de l'erreur; } Instructions suivantes
Lorsque le programme rencontre une erreur dans un bloc try{}, une exception est instancie puis lance. L'interprteur cherche un bloc catch(){} partir de l'endroit o l'exception a t cre en cherchant vers le bas. S'il ne trouve aucun bloc catch{}, l'exception est lance dans le bloc de niveau suprieur, ainsi de suite jusqu'au bloc de la classe qui par dfaut enverra l'exception au handler de l'interprteur. Celui-ci mettra alors un message d'alerte standard pour le type d'exception. Si jamais un bloc catch{} est trouv, celui-ci grera l'exception sa faon (ou plutt la votre) et l'exception ne sera pas envoye au handler de l'interprteur. Si par contre on dsire que l'exception soit trait par les blocs de niveaux suprieurs, il suffit d'inclure la fin de la srie d'instructions contenues dans le bloc catch{} une clause throw, suivie du type de l'exception entre parenthse puis du nom de l'exception (son handle pour utiliser un terme exact). Ainsi l'exception continuera son chemin...
Le bloc finally
try{ } catch(Exception ex){ } finally{ } Le bloc finally optionnel permet de spcifier les traitements entreprendre quelque soit lissue de lxcution du bloc try.
Rsum
try{
// Instructions...
} catch (type_exception1 nom) { // Instructions de traitement d'exception } catch (type_exceptionN nom) { // Instructions de traitement d'exception } finally{ // Instructions de fin... }
exception pourrait se produire. L'instruction catch doit tre associe try et contient un bloc d'instructions susceptible de grer un type d'exception particulier.
Il est possible d'utiliser plusieurs instructions catch afin de capturer des exceptions de types diffrents.
L'instruction finally facultative, doit tre associe try et place aprs catch. Elle contient un bloc d'instructions qui est excut dans tous les cas de figure.