Cours Java
Cours Java
I. INTRODUCTION
1.1. HISTORIQUE
1991: Concepts Java pour Sun -conception d'un langage pour des appareils embarqu) -syntaxe proche du C++ -concepts de machine virtuelle du langage Pascal.
lectroniques(code
1995: Logiciel HOTJAVA:un navigateur web crit en Java par Sun. 1996: Version 1.01 et 1.02 . . 2002: Version 1.4:disponible sur http:/ /java.sun.com Plusieurs kits de dveloppement logiciel Java2:J2SDK
-effets de bords (tat inattendu des donnes dans une fonction suite leurs modifications par une autre fonction). -ncessit de reconstruire le programme lorsque les structures de donnes sont modifies. SOLUTIONS: POO -repose sur plusieurs principes : -l'objet -l' encapsulation des donnes -la classe -l'hritage -le polymorphisme
1.2.1. L'objet :
Un programme POO construit des objets. Chaque objet associe des donnes (aussi appeles champs, variables, attributs) et des mthodes (rarement appeles procdures, fonctions) agissant exclusivement sur les donnes de l'objet.
1.2.3. La classe :
La classe est l'lment fondamental contenant les lments de programme: une dclaration de donnes, une mthode ou une instruction appartenant une classe. Une classe est dclare avec le mot- cl class . Le concept de classe correspond la gnralisation de la notion de type des programmes structurs.
Dfinition : Une classe est une description d'un ensemble d'objets ayant une structure de donnes commune et disposant des mmes mthodes. Les dfinitions des classes doivent correspondre des units fonctionnelles indpendantes. Une classe est un modle d'objet. A l'inverse, un objet a une ralit matrielle car il possde des champs avec valeurs. Remarque: Une classe statique ne permet pas de construire d'objets. Les objets apparaissent alors comme des variables d'un tel type classe: un objet est une instance de sa classe (un objet possde un type classe). Les valeurs des champs sont propres chaque objet. Les mthodes sont communes l'ensemble des objets d'une mme classe.
JAVA possde des bibliothques de classe appeles API JAVA (Application Programmation Interfaces, Interface de Programmation d'Application).
Avantages de crer ses propres classes: -connaissance exacte de son fonctionnement. Avantages d'utiliser des classes API ou des classes disponibles: -gain de temps (pas de conception, pas de dveloppement) -performance -portabilit
1.2.4.
L'hritage :
L'hritage permet de dfinir une nouvelle classe (une sous- classe) partir d'une classe existante (super- classe, classe- mre) laquelle on ajoute de nouvelles donnes, de nouvelles mthodes. L'hritage permet donc de spcialiser des classes anciennes parfaitement au point: -conomie du code. -structuration des fonctionnalits d'un programme (lisibilit). L'hritage peut- tre ritr: La classe C hrite de la classe B qui elle- mme hrite de la classe A. L'hritage s'applique aussi bien ses propres classes qu'aux classes API. Les classes sont organises en hirarchie.
JAVA NE PERMET PAS L' HERITAGE MULTIPLE (hritage de plusieurs super- classes) mais les mthodes d'interface permettent de traiter de faon simple des situations similaires.
1.2.5. Le Polymorphisme:
Il permet des mthodes (des fonctions) diffrentes dans des classes diffrentes d'avoir le mme nom. Il permet d'conomiser des identificateurs de fonctions (lisibilit).
JAVA permet des applications (graphisme sans web) et des applets (graphisme sur le web) en utilisant pratiquement les mmes fonctionnalits graphiques.
Classiquement: Un programme est portable car un mme code source peut tre excut sur diffrentes machines aprs une nouvelle compilation. En JAVA: La compilation d'un code source produit, non pas des instructions machines, mais un code intermdiaire form de byte codes . D'une part, ce code est exactement le mme quelque soit le compilateur et la machine concerns. D'autre part, ces byte codes sont excutables sur toute machine disposant du logiciel d'interprtation appel machine virtuelle JVM (JAVA Virtual Machine).
1.5: D'autres particularits : (pas fait) 1.6: Phases de dveloppement d'un programme JAVA:
PHASE 1: EDITION:
-diteur:- vi et emacs sous UNIX -Bloc- Notes sous WINDOWS -Environnement de dvpt Intgr (EDI) Le nom de fichier d'un programme JAVA se termine toujours par l'extension .java Exemple: Programme.java
PHASE 2: COMPILATION:
-La comman de du compilateur JAVA pour compiler un programme JAVA et le traduire en byte codes est javac . -La compilation gnre un fichier possdant le mme nom que la classe et contenant les byte codes avec l'extension .class . Le compilateur gnre un fichier compil pour chaque classe. Ainsi, si le fichier source contient plusieurs classes, alors plusieurs fichiers ont l'extension .class . Exemple: javac Programme.java gnre un fichier Program me.class Mettre l'extension la suite du nom en respectant la casse du nom du fichier. JAVA est sensible la casse.
PHASE 3: CHARGEMENT: Une application peut tre charge est excute par la commande de l'interprteur JAVA: java Exemple: java Program me (pas d'extension .class la suite du nom) Une applet peut tre charge est excute par : -un chargeur de classe lanc par le navigateur Web
5
-ou par la commande appletviewer du J2SDK Exemple : appletviewer Programme.ht ml PHASE 4: VERIFICATION PHASE 5: EXECUTION
II.GENERALITES
Une classe publique, dclare avec le mot- cl public , est une classe qui est accessible n'importe quelle autre classe. Un fichier source peut contenir plusieurs classes condition qu'une seule classe au plus, soit publique. Cette classe publique est la classe contenant le main . Le code source d'une classe publique doit toujours se trouver dans un fichier portant le mme nom et possdant l'extension .java . Le nom du fichier source et le nom de la classe doivent avoir la mme casse.
Exemple :
Fentre Java OK
JAVA possde de nombreuses classes prdfinies. Ces classes sont regroupes en catgories de classes de mme genre appeles package (modules). Une rfrence gnrale aux packages existe sous lappellation de bibliothques de classes Java ou dinterface de programmation dapplication Java(API ou dapplications programming interface). Tous les packages de lAPI Java sont stocks dans un rpertoire java ou javax qui contiennent de nombreux sous- rpertoires. Un nom de package est associ un rpertoire. La classe JoptionPane dans le package javax.swing permet dafficher une bote de dialogue avec des informations. Ligne : import javax.swing.* Linstruction import permet didentifier et de charger les classes ncessaires au programme. La classe JoptionPane appartient au package javax.swing qui comporte de nombreuses classes permettant de dfinir des interfaces utilisateur graphique ou GUI (Graphical User Interface)
2 solutions : -importer uniquement la classe ncessaire du package javax.swing : javax.swing.* et chargement par le compilateur des classes effectivement utilises au programme. -invoquer toutes les classes du package javax.swing : javax.swing.* et chargement par le compilateur des classes effectivement utilises par le programme. Javax.swing.* ne concerne que les classes du rpertoire javax.swing Les classes des sous- rpertoires de javax.swing ne sont pas invoques. Pour les invoquer, il faut prciser le sous- rpertoire associ, par exemple javax.swing.event.*
Problme : Ecriture dun texte dans une applet Fichier : EcritureApplet.java import java.awt.* ; import javax.swing.* ; public class EcritureApplet extends Japplet { public void paint (Graphics g) { g.drawString(APPLET JAVA, 100,100) ; } } Execution:
APPLET JAVA
BufferedReader entree=new BufferedReader (lecteur); Ligne_lue=entree.readLine(); } catch (IOException err) { System.exit(0); } return ligne_lue; } }
//Lecture dun rel double public static void double lireDouble() { double x=0 ; try { String ligne_lue=lireString() ; x=Double.parseDouble(ligne_lue) ; } catch (NumberFormatException err) { System.out.println(Erreur de donnes); System.exit (0) ; } return x ; } Ce type de lecture peut ou non mal se passer: pour cela, on utilise une construction de type try catch
//Lecture dun entier public static int LireInt() { int n=0 ; try { String ligne_lue=lireString() ; n=Integer.parseInt(ligne_lue) ; } catch (NumberFormatException err) { System.out.println(Erreur de donnes); System.exit (0) ; } return n; }
// Programme test de la classe Lecture public static void main(String[] args) { System.out.print(Donner un double:); Double x ; x=Lecture.lireDouble() System.out.println( Rsultat +x) ; System.out.print( Donner un entier ) ; int n ; n=Lecture.lireInt() ; System.out.println( Rsultat +n) ; Excution : Donner un Double : 10.01 Rsultat 10.01 Donner un entier :10 Rsultat 10 Le symbole daffectation est =
Loprateur + possde une proprit intressante : Ds que lun des oprateurs est de type chane, lautre oprateur est converti en chane. -pour les variables de type primitif, la conversion en chane de caractres est automatique. -pour les objets, la conversion en chanes fait appel la mthode toString() de lobjet. Loprateur + dans System.out.println permet la concatnation de chanes conduisant limpression dune chane de caractres. La mthode print() diffre de println() par labsence de saut de ligne en fin dimpression.
2.4.2 : Mots-Cls
boolean, catch, continue, else, false, int, package,
2.4.3: Sparateurs
C.f. manuel JAVA
2.4.5. : Commentaires
3 formes : Commentaire usuel : pouvant stendre sur plusieurs lignes : /**/ Commentaire de fin de ligne : sarrtant en fin de ligne : // Commentaire de documentation: /***/ : pouvant tre extraits automatiquement par des programmes utilitaires de cration de documentation tels que Javadoc qui gnre automatiquement une documentation au format HTML.
2.4.6 : Blocs :
Bloc dlimit par les accolades { et }. Il comporte : -aucune, une ou plusieurs dclarations de variables locales (connues que dans le bloc) - aucune, une ou plusieurs instructions
11
Java utilise le systme Unicode pour coder des caractres. Chaque caractre Unicode est cod sur 2 octets conduisant 2^16=65536 possibilits qui permettent de reprsenter la plupart des alphabets et des symboles mathmatiques et techniques. Le code source est toujours actuellement dit avec un diteur gnrant des caractres cods sur 1 octet. Il existe peu dditeurs de texte Unicode. Mais le compilateur Java traduit le fichier source en Unicode avant de gnrer les byte codes. Ainsi, mme les caractres Unicode du code source ne sont pas portables, il sont reprsents de faon portable dans les byte codes. La notation Java permettant dintroduire un caractre Unicode dans le code source est ralis avec les squences dchappeme nt Unicode qui nutilisent que des caractres ASCII : \uxxxx o u est le symbole pour Unicode , x est un chiffre hexadcimal et xxxx dsigne le caractre ayant comme Unicode la valeur xxxx. Il faut 4 chiffres hexadcimaux pour reprsenter des caractres cods sur 16 bits (16^4)= 2^16. Remarque : Certains diteurs de programme source permettent lutilisation des caractres nationaux qui sont les caractres Unicode.
12
Par dfaut: une constante entire est de type int Une constante entire suffixe par I ou L est de type long Exemple : 452L Une constante peut- tre exprime en base 8(octale) en faisant prcder la valeur par 0 Exemple : 014(8+4=12 en base 10) Une constante entire peut- tre exprime en base 16 (hexadcimale) en faisant prcder la valeur par 0x ou 0X Exemple : 0X1A
Par dfaut: une constante relle est de type double . Une constante relle peut scrire en notation dcimale ou exponentielle. Exemple : Notation dcimale : 1.1 ; 1. ; .1 Notation exponentielle : 1.1 E10 ; 1.E10 ; .1 E10 Une constante relle suffixe par f ou F est de type float . Laffectation dune constante relle de type double une variable de type float ncessite une conversion de type ou transcryptage (cast). La conversion dun objet, dune variable ou dune constante dans un type donn se fait en les prcdant du type plac entre parenthses.
13
Exemple : float x ; x=(float)12.5 ; // et non x=12.5 ; Problme : Ecriture dune variable relle en utilisant un formatage Fichier : EcritureRel.java import java.awt.* ; public class EcritureReel { public class static void main (String[] args) { double x=10.123456789; System.out.println(x= +x); //au moins un chiffre gauche du point dcimal //2chiffres exactement droite du point dcimal DecimalFormat deuxDecimal = new DecimalFormat ( 0.00 ) ; System.out.println( x= +deuxDecimal.format(x)) ; } } Execution : x=10.123456789 x=10.12
3.6. : Initialisation :
Toute variable doit tre initialise avant dtre utilise (sinon erreur de compilation) Une variable peut tre initialise lors de sa dclaration par une constante ou une expression autre quune constante, par exemple par une instruction de lecture. Exemple : int n=10 ; n=Lecture.lireInt() Les situations de variables partiellement initialises sont dtectes la compilation, par exemple dans une structure conditionnelle si . Mais linitialisation dune variable dans une structure conditionnelle si-sinon , nentrane pas derreur de compilation. Exemple : int n ; if () n=0 ; =n ; // erreur de compilation
14
3.7. :Constante :
Une constante est une variable initialise dont la valeur ne peut tre modifie dans la suite du programme en utilisant le mot- cl final (valeur connue la compilation) Une telle constante est appele constante symbolique . Exemple : final int N=10 Le mot- cl final peut tre utilis avec une expression dinitialisation de la valeur (valeur non connue la compilation mais lexcution) Exemple : final int N=2*m Les mots- cls static et public sont souvent associs au mot- cl final . Une constante dclare de type static appartient la classe ( sa place dans la classe et non dans lobjet). Exemple : static final int N=10
Une constante dclare publique est connue en dehors de la classe. Exemple : public final int N=10 Les constantes Pi et e sont accessibles par Math.Pi et Math.E (champs statiques) Par convention : Les identificateurs de constantes sont obligatoirement en majuscule. Il est toujours prfrable dutiliser des constantes symboliques plutt que des constantes littrales. En effet, pour changer la valeur dune constante symbolique, il suffit de changer sa valeur dans sa dclaration . Par ailleurs, il est difficile de localiser toutes les utilisations des constantes sans erreur, car une mme valeur peut avoir des significations diffrentes.
15
16
Int ->long ->float ->double Les conversions sont effectues en considrant un un les oprandes concerns. Remarque : Il nexiste pas de conversion implicite de double en float. Promotions numriques : La promotion numrique est la conversion systmatique dun type apparaissant dans une expression en int sans considrer les types des autres oprandes. {byte, short,char} ->int Exemple : char c; c+1 ; | int : valeur numrique de c
Comportement en cas dexception pour le entiers : cf. manuel Comportement en cas dexception pour le rels : -aucune opration sur les rels, mme pas une division par 0, ne conduit un arrt dexcution. Mais, il existe des valeurs reprsentant linfini : -infinity avec les constantes Double.POSITIVE_INFINITY et Float.POSITIVE_INFINITY - infinity avec les constantes Double.NEGATIVE_INFINITY et Float.NEGATIVE_INFINITY -NaN (Not A Number) avec les constantes Double.NaN et Float.NaN
18
- un oprateur de pr- dcrmentation quand il est plac gauche de son oprande - un oprateur de post- dcrmentation quand il est plac droite de son oprande Exemple : y=x++ y=x ; x=x+1 y=++x x=x+1 ; y=x Lorsque seul importe leffet dincrmentation (resp. dcrmentation), loprateur ++ (resp. --) peut tre indiffremment plac avant ou aprs la variable. Ainsi : i++ ++i Il nest pas possible dutiliser les oprateurs dincrmentation et de dcrmentation avec des expressions autre quune valeur Exemple : (n+1)++ : FAUX
19
La priorit dun oprateur de cast est leve. Il est ncessaire de placer entre parenthses lexpression concerne. La conversion par loprateur de cast ne produit jamais derreur dexcution.
V. Instructions de contrle.
5.1. :Instruction if :
Linstruction if prsente deux formes : If (expression_boolenne) instruction_1 [else instruction_2] Exemple : If (++i<max) i=i+1 ; if (i<max) If (I++<max) i=i+1 ; if (I-1<max)
Un else se rapporte toujours au dernier if rencontr auquel un else na pas encore t attribu.
20
switch (expression) { case cste_1 : [suite_instructions_1] .. case cste_n : [suite_instructions_n] [default : suite_instructions] }
expression : est une expression de type byte, short, int ou char ; les expressions de type byre, short ou char ne peuvent tre que de simples variables (sauf avec loprateur cast) ; le type long nest pas autoris. Cste_i : expression constante dun type compatible par affectation avec le type de expression. Suite_instructions_i : suite dinstructions quelconques. Si expression vaut cste_i, suite_instructions_i est excute et toutes les suites dinstructions suivantes peuvent tre hirarchises. Pour sortir du switch immdiatement, les suites dinstructions doivent se terminer par un break.
compteur : 1,.10
21
compteur :1,.,10
int compteur=0 ; while (compteur++<=10) compteur : 1,..,11 Choisir en priorit des indices de boucles de type entier.
Problme : Exemple dune instruction for Fichier : InstructionFor.java Public class InstructionFor { public static void main (String[ ] args) { for (int i=1,j=1;(i<=5); I++,j++) { System.out.println (I=+I+ j=+j); } }
22
} Execution :
i=1 j=1 i=2 j=3 i=3 j=6 i=4 j=10 i=5 j=15
Soit le programme partiel suivant: .. for (int i=1 ; i<=100 ; i+=2) j+=i ; .
} En labsence du mot- cl public , laccs la classe Equation est limit aux seules classes du mme package.
(i)
private double coeffX2 ; .. Le mot- cl private prcise que les champs de la classe Equation ne sont pas accessibles lextrieur de la classe, ie en dehors de ses propres mthodes. encapsulation des donnes. (ii) Dfinition des mthodes :
{ coeffX2=X2 ; }
La dclaration est similaire une variable de type primitif Equation uneEquation rserve un emplacement mmoire pour une rfrence un objet de type Equation (pas de rservation pour un emplacement mmoire pour un objet de type Equation) Dit autrement, lidentificateur dobjet uneEquation est une rfrence lobjet et non une variable contenant directement une valeur, comme pour les variables de type primitif.
La rservation dun emplacement mmoire pour un objet de type Equation ou allocation, se fait en appelant loprateur unaire new Equation() qui fournit en rsultat la rfrence cet emplacement. Ainsi, laffectation UneEquation=new Equation() Cre (construit) un objet de type Equation et place sa rfrence dans uneEquation qui doit avoir t dclare au pralable. Loprateur new fait appel Equation() qui est le constructeur par dfaut de la classe Equation .
Il est possible de regrouper dclaration et cration.
Equation uneEquation = new Equation() Aprs avoir dclar et cr un objet, il est possible dappliquer les mthodes lobjet correspondant, ie rfrenc par uneEquation . Une Equation.initialisation (1.0,5.0,1.0) Cette instruction appelle la mthode initialisation du type Equation en lappliquant lobjet de rfrence uneEquation et en lui transmettant les arguments 1.0, 5.0, 1.0 , Le prfixe uneEquation prcise la mthode sur quel objet elle doit oprer. Ainsi, linstruction coeffX2=X2 de la mthode initialisation() place la valeur reue pour X2 dans le champ coeffX2 de lobjet uneEquation . Lappel dune mthode se fait en prfixant le nom de la mthode par le nom de lobjet suivi dun point : NomObjet.nomMthode (liste_arguments) Une mthode est toujours suivie de () (permettant la distinction avec un champ) Avec une mthode utilisant des arguments , la liste des arguments rels spars par des virgules est mise entre () Par convention, lobjet uneEquation est appel une variable de classe.
-publique -sans attribut (accs de package) : classe reste accessible toutes les classes du mme package, donc en particulier du mme fichier source.
25
Problme :Rsolution dune quation du 2nd degr Fichier : EquationSecondDegre.java Import java.text.DecimalFormat ; //Classe Equation class Equation { //Les coefficients et les racines sont sous forme de champs. private double coeffX2 ; private double coeffX1 ; private double coeffX0 ; private double racine1 ; private double racine2 ;
//Mthode dinitialisation public void initialisation(double X2, double X1, double X0) { coeffX2=X2 ; . . . }
//Mthode rsolution public void rsolution() { double discri ; discri=(coeffX1*coeffX1-4*coeffX2*coeffX0) ; racine1= ; racine2= ; }
//Mthode daffichage public void affichage() { DecimalFormat deuxDecimal=new DecimalFormat( 0.00 ) ; System.out.println( Racine1= +deuxDecimal.format(racine1) ;
//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation; // Dclaration de lobjet uneEquation uneEquation=new Equation() ; uneEquation.initialisation(1.0,5.0,1.0); uneEquation.rsolution(); uneEquation.affichage(); } } Excution : Racine1= -0,21 Racine2= -4,79
27
La mthode dinitialisation permet dattribuer des valeurs aux champs dun objet de type Equation . Cette mthode doit donc tre imprativement appele. Le constructeur permet : -dautomatiser le mcanisme dinitialisation -dattribuer des valeurs initiales mais galement des actions Le constructeur est une mthode portant le mme nom que la classe et sans valeur de retour Transformation de la mthode dinitialisation de la classe Equation
//Mthode dinitialisation public void initialisation(doubleX2, double X1, doubleX0) { coeffX2=X2 ; coeffX1=X1 ; coeffX0=X0 ; }
..en un constructeur :
//co nstructeur public Equation (double X2, double X1, double X0) { coeffX2=X2 ; coeffX1=X1 ; coeffX0=X0 ; }
Remarque: Linstruction uneEquation=new Equation() est impossible (erreur de compilation) car la classe Equation dispose dun constructeur qui, dans cet exemple a besoin de 3 arguments rels. Il existe une solution avec le constructeur vide.
Par dfinition, un constructeur ne fournit aucune valeur. Aucun type ne doit figurer dans son en- tte, mme pas le type void. Si par erreur un type est donn un constructeur, on cr une mthode et non un constructeur. Une classe peut navoir aucun constructeur (constructeur par dfaut sans argument galement appel constructeur vide implicite). Par exemple : Equation une Equation = new Equation() Une classe peut avoir plusieurs constructeurs. Quand une classe possde au moins un constructeur, un constructeur par dfaut ne peut plus tre utilis. Le constructeur par dfaut ne se distingue pas dun constructeur sans argument. Un constructeur ne peut pas tre appel directement depuis une autre mthode. EquationConstructeur une Equation ; UneEquation.EquationConstructeur(1.0,5.0,1.0) ; //impossible Un constructeur peut appeler un autre constructeur de la mme classe en utilisant le mot- cl super . Un constructeur peut tre dclar priv : il ne peut plus tre appel de lextrieur de la classe et donc, ne peut tre utilis pour instancier des objets. Cette possibilit na dintrt que si la classe possde au moins un autre constructeur public faisant appel ce constructeur priv.
29
-initialisation par dfaut de tous les champs par objet. -initialisation explicite des champs de lobjet. -excution des instruction du corps du constructeur.
//Constructeur public Equation (double X2, double X1, double X0) { system.out.println ( coeffX2= +coeffX2) ; coeffX2=X2 ; system.out.println( coeffx2= +coeffX2) ; Excution : coeffX2=0.0 coeffX2=1.0
Initialisation par dfaut des champs dun objet : Type Type Type Type Type boolean :false char : caractre de code nul entier :0 rel (double, flottant) : 0. et 0.f Objet (champ dune classe rfrenant un objet) : null
Initialisation explicite des champs dun objet : Comme pour une variable locale, une initialisation de champ peut comparer une constante ou une expression courante. Excution des instructions du corps du constructeur : Les initialisations des champs doivent tre effectues dans le constructeur (fonction du constructeur). La fonction dun constructeur est de raliser lallocation dynamique de la mmoire ncessaire la cration de lobjet qui est ralis lexcution. Par opposition, lallocation statique de la mmoire est ralise la compilation. Cas des champs dclars avec lattribut final : Comme une variable locale, un champ peut tre dclar avec lattribut final afin dimposer une seule initialisation.
Alors quune variable peut tre initialise tardivement, nimporte o dans une mthode, un champ dclar avec lattribut final doit tre initialis au plus tard par le constructeur. Par ailleurs, il nexiste pas dinitialisation par dfaut, il faut donner une valeur.
public double getRacine2() { return racine2; } } //Classe test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { System.out.println (sol1= +uneEquation.getRacine1(); System.out.println (sol2= +uneEquation.getRacine2(); } } Excution Sol1= -0.20871215252208009 Sol2= -4.1912878474779195
-Les mthodes daltration (mutation) de la forme setxxx, qui modifient ltat dun objet, ie les valeurs de certains champs :
31
//Classe Equation class Equation { public void setRacine1(double rac1) { racine1=rac1; } public void getRacine1(double rac1) { racine2=rac2; } . }
//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { uneEquation.affichage(); uneEquation.setRacine1(1.0); uneEquation.setRacine2(2.0); uneEquation.affichage(); } } Excution : Racine1= -0,21 Racine1=1.0 Racine2=- 4,79 Racine2=2.0
Soient 2 objets E1 et E2
Equation E1, E2, E3 ; E1 et E2 de type Equation E1=new Equation (1.0,5.0,1.0) ; E2=new Equation (2.0,6.0,2.0);
Les instructions E3=E1 , E1=E2 , E2=E3 conduisent aux affectations suivantes: -la variable E1 dsigne lobjet Equation (2.0,6.0,2.0) -les variables E2 et E3 dsignent le mme objet Equation(1.0,5.0,1.0)
Il est impossible de dfinir une variable locale dun type primitif sans linitialiser. Cette rgle dinitialisation sapplique galement aux variables locales de type classe.
//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation; //u neEquation=new Equation (1.0,5.0,1.0); uneEquation.rsolution(); .. } } Un champ dun objet est toujours initialis : -soit implicitement une valeur nulle, sauf les champs avec attribut final qui doivent recevoir explicitement une valeur
-soit explicitement (lors de la dclaration)
33
Cette rgle sapplique galement aux champs de type classe (objets) pour lesquels cette valeur nulle correspond une valeur particulire de rfrence note par le mot- cl null. Une telle rfrence null ne dsigne aucun objet.
Alors quune rfrence non dfinie est dtecte la compilation (cf exemple ci-dessous), une rfrence null nest dtecte qu lexcution.
//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation=null; //u neEquation=new Equation (1.0,5.0,1.0); uneEquation.rsolution(); .. } } Cette rfrence null peut tre utilise dans une comparaison.
//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation=null; if (uneEquation==null) System.out.println(Rfrence null); .. } } Tant quun objet na pas t cr par new, la rfrence sur cet objet vaut null . La rfrence null ne pointe sur aucun objet. Une tentative daccs un objet non cr provoque la leve dune exception de type NullPointerException . Il est parfois ncessaire dinitialiser des rfrences null.
Laffectation de variables de type objet se limite la recopie de rfrences. Elle nentrane pas la recopie de la valeur des objets.
Les oprateurs == et != portent sur les rfrences des objets et non pas sur les valeurs de leurs champs. Leur intrt est limit. Exemple: Pour comparer 2 objets de type chane, il faut comparer le contenu, donc utiliser la mthode Equals().
6.5. : RAMASSE-MIETTES :
Loprateur de cration dun objet est new . Il nexiste pas doprateur de destruction dun objet, comme on en dispose en Pascal. Java utilise un mcanisme de gestion automatique de la mmoire. Possibilit de crer un objet sans rfrence. Avec la mthode principale : //Mthode principale public static void main (String[ ] args) { Equation uneEquation=new Equation (1.0,5.0,1.0); uneEquation.rsolution(); .. } } La rfrence uneEquation est supprime.
//Mthode principale public static void main (String[ ] args) { (new Equation (1.0,5.0,1.0)).rsolution(); .. } } Cet objet non rfrenc devient candidat au ramasse- miettes.
35
public double somme() { double som ; som=racine1+racine2 ; return som ; } Mthode appele :
//Mthode principale public static void main (String[ ] args) { System.out.println( Somme= +uneEquation.som me() } Possibilit dutiliser le rsultat dune mthode fonction dans une expression de la classe Equation.
//Classe Equation classe Equation { private double sommeSquare=0.0 ; .. //Mthode somme public double somme() { }
6.6.3. : Arguments formels et effectifs : Arguments formels (muets) : arguments dans len- tte de la dfinition dune mthode.
La valeur est fournie la mthode lors de son appel (contrairement une variable locale la mthode).
Possibilit de dclarer son argument formel avec un attribut final . Dans ce cas, la valeur de cet argument ne peut plus tre modifie par la mthode. Exemple : cf. //Mthode dinitialisation/ /
Utiliser des arguments effectifs de mme type que les arguments formels.
Eviter les possibilits de conversion implicite lgale. Java respecte lordre des arguments.
Eviter la dpendance des arguments f(n++,n) et f(n, n++) conduisent des appels diffrents.
Arguments effectifs : arguments fournis lors de lappel de la mthode. Ces arguments peuvent tre des expressions (la transmission se fait par valeur).
Problme :Champ statique pour compter le nombre de rsolution : Class Equation { .. private static int nbRsolution=0 ; //Constructeur. Public Equation(double X2, double X1, double X0) { nbRsolution++ ; }
37
//Mthode de rsolution public void rsolution() { } //Mthode affichage public void affichage() { system.out.println( nbRsolution= +nbRsolution() ; } }
//classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); UneEquation.rsolution(); UneEquation.affichage; Equation uneEquation = new Equation (2.0,6.0,2.0); . Excution: nbRsolution=1 Racine1=- 0,21 Racine2=- 4,79 NbRsolution=2 Racine1=- 0,38 Racine2=- 2,62
Mme programme sans lattribut static : Class Equation { private int nbRsolution=0 ; } //Classe test public class EquationSecondDegre { .. }
EXECUTION: nbRsolution=1 Racine1=- 0,21 Racine2=- 4,79 NbRsolution=2 Racine1=- 0,38 Racine2=- 2,62
39
} } //classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); UneEquation.rsolution(); UneEquation.affichage; Equation uneEquation = new Equation (2.0,6.0,2.0); System.out.println( nbSolution= +Eq.nbSolution()) ; .
Excution: nbRsolution=1 Racine1=- 0,21 Racine2=- 4,79 NbRsolution=2 Racine1=- 0,38 Racine2=- 2,62
Les mthodes objets peuvent utiliser des champs statiques. De prfrence, les mthodes qui noprent que sur des champs statiques doivent tre dclares statiques. Utilisation : Les mthodes de classe sont utilises pour : -le comptage des objets dune classe. -la description de la classe -le regroupement de fonctionnalits, par exemple la classe Math.
Linitialisation des champs statiques est faite avant la cration dun objet de la classe puisquun champ statique ne dpend pas des objets de la classe. Cette
initialisation se fait donc soit la dclaration dun objet de la classe , soit lors de lappel dune mthode statique de la classe et se limite donc aux 2 tapes : -initialisation par dfaut -initialisation explicite ventuelle lors de la dclaration Un champ statique avec lattribut final doit obligatoirement recevoir une valeur initiale au moment de sa dclaration puisquil ne peut tre initialis implicitement, ni tre initialis par un constructeur. Les champs statiques et les mthodes statiques sont allous lexcution. Bloc dinitialisation statique : Dans la dfinition dune classe, il est possible dintroduire un ou plusieurs blocs dinstructions prcds du mot- cl static .
static { .. } Ce bloc statique permet de faire des initialisations de champs statiques qui ne peuvent pas tre faites en une seule expression. En effet, il nest pas possible dutiliser un constructeur qui nest pas concern par linitialisation des champs. Les instructions dun bloc statique nont accs quaux champs statiques de la classe.
Les mthodes avec mme signature mais de types de retour diffrents sont interdites.
41
6.9. : TRANSMISSION DINFORMATIONS AVEC LES METHODES : 6.9.1. : Transmission par valeur :
La transmission dun argument une mthode et la transmission du rsultat dune mthode se fait par valeur : la mthode reoit une copie de la valeur de largument effectif.
Cependant, avec une variable de type objet, la mthode reoit une copie de la rfrence. Ainsi, la mthode peut modifier lobjet initial qui na pas t recopi par le biais de ses champs ou de ses mthodes. La mthode appele a accs lobjet par sa rfrence.
Une modification de la rfrence lintrieur de la mthode appele, par exemple une nouvelle instance, nest pas transmise la mthode appelante par ses arguments, il faut utiliser sa valeur de retour.
En conclusion : -la transmission des types primitifs se fait par valeur. -la transmission des objets se fait par rfrence (adresse). Ainsi, une mthode ne peut pas modifier la valeur dun argument effectif dun type primitif (aprs lappel dune mthode).
Moyens pour transmettre la valeur dune variable de type primitif lextrieur de la mthode appele : -retourner la variable pour la mthode elle- mme. -crer un objet et le passer en argument car les mthodes peuvent oprer sur les champs directement ou par le biais de mthodes daccs.
Excution: Racine1=- 0,21 Racine2=- 4,79 Racine1=- 0,21 Racine2=- 4,79 Nombre de systmes=2 Facteur multiplicatif des coefficients des deux systmes=2.0 ->Crer une mthode statique qui va tester sil y a un facteur multiplicatif entre les coefficients des deux quations. Import java.txt.DecimalFormat ; Class Equation
{ //Mthode de test des coefficients dans deux systmes. //Mthode de classe (indpendante des objets) public static double tesCoefficients(Equation E1, Equation E2) { final double eps=1 E-10 ; double facteur=0.0; facteur=E2.coeffX2/E1.coeffX2; if ((((E2.coeffX1/E1.coeffX1)-facteur)>eps)|| (E2.coeffX0/E1.coeffX0)-facteur)>eps) facteur=0 .0 ; return facteur ; } }
//classe test public class EquationSecondDegre { public { equation uneEquation= new Equation (1.0;5.0,1.0); uneEquation.Rsolution(); uneEquation.affichage(); .. Equation uneEquation1 = new Equation (2.0,10.0,2.0) ; UneEquation1.Rsolution(); UneEquation1.affichage(): . System.out.println( Nombre de systmes= +Equation.nbSystme()) ; .. } }
Une mthode dun objet ou dune classe t (mthode appele pour un objet o) recevant en argument un objet p de la mme classe t, a accs aux champs et mthodes privs de p : lunit d encapsulation est la classe et non lobjet.
Lautorisation daccs concerne tous les objets de la classe et non, seulement, lobjet courant. Une mthode dune classe A recevant en argument un objet de classe B?A, na pas accs aux champs et mthodes privs de B.
43
//Mthode de doublement des coeffs ax^2+bx+c (ne marche pas) public void doublementCoeffs(double a, double b, double c) { a=2*a ; b=2*b ; c=2*c; .
//Mthode principale double cX2=1.0; double cX1=5.0; double cX0=1.0; uneEquation.doublementCoeffs(cX2,cX1,cX0) ; //Transmission par valeur cX2, cX1, cX0 nont pas leurs valeurs doubles. Excution : Equation=1.00*2+5.00+1.00 Racine1=-0,21 Racine2=-4.79 Equation=1.00*2+5.00+1.00 2me version : . a=2*a ; . System.out.println( a= +a+ b= +b+ c= +c) ; Retun a; } }
2me version avec deux objets : class Equation { public Equation doublementCoeff() { Equation E= new Equation(); E.coeffX2=2*coeffX2; E.coeffX1=2*coeffX1; E.coeffX0=2*coeffX0; Return E ; } } Dans le main : Equation uneEquation1 = uneEquation.doublementCoeff() ;
Le retour dune mthode se fait par copie : -par valeur pour un type primitif. -par adresse pour un objet (copie de la rfrence).
45
3 proprits : (1) Le mot-cl this est une rfrence lobjet courant dans sa globalit. (2) this remplace le nom de linstance courante. Exemple :E.coeffX2=2*this.coeffX2 ; (3) utilisation de noms darguments identiques des noms de champs. Cette utilisation permet dviter de crer de nouveau identificateurs. Exemple :this.coeffX2=coeffX2 ; (4) appel dun constructeur au sein dun autre constructeur : Un constructeur peut appeler un autre constructeur de la mme clase ( et portant alors sur lobjet courant), mme le constructeur vide mais pas le constructeur implicite qui disparat ds quun constructeur est cr. Ce constructeur est appel avec un nom de mthode this(), donc suivi de parenthses entourant les arguments dans la premire instruction du constructeur.
This() est remplac par le nom de la classe, donc par un constructeur.
Simplification du programme prcdent en utilisant lappel dun constructeur dans un constructeur : Class Equation { //Constructeur vide public Equation() { this(0.0,0.0,0.0) ; } //Constructeur 3 arguments pour ax2+bx+c public Equation(double X2, double X1, double X0) { coeffX2=X2 ; coeffX1=X1 ; coeffX0=X0 ; nbresolution++ ; } //Constructeur 2 arguments pour ax2+c public Equation (double X2, double X1, double X0) { this(X2,0.0,X0) ; } .. } .
Programme Factoriel : Package coursjava ; Class util { public static long fac(long n) { if (n>1) return (fac(n-1)*n); else return 1; } } public class Factoriel { public static void main(String[ ] args) { int n; System.out.print(Donner un entier positif); n=Lecture.lireInt() ; System.out.println( Rsultat= +util.fac(n)) ; } } Excution : Donner un entier positif : 10 Rsultat=3628880
class Externe { class Interne { //champs et mthodes de la classe interne } //champs et mthodes de la classe interne } Utilisation de la classe interne dans une mthode de la classe externe : Class Externe { class interne { //Champs et mthodes de la classe interne } //champs et mthodes de la classe externe //mthode de la classe externe public void methodeExterne() { interne i= new interne(); } } Utilisation de la classe interne comme champ de la classe externe: Class externe { class interne { //champs et mthodes de la classe interne //champ de la classe externe private interne i ; }
Liens entre objet interne et objet externe : (1) Un objet dune classe interne est toujours associ au moment de son instanciation un objet dune classe interne qui lui a donn naissance.
(2) Un objet dune classe interne a toujours accs aux champs et aux mthodes (mme privs) de lobjet externe lui ayant donn naissance. (3) Un objet dune classe externe a toujours accs aux champs et aux mthodes (mme privs) de lobjet interne auquel il a donn naissance. Une mthode statique dune classe externe ne peut crer aucun objet dune classe interne car une mthode statique nest associe aucun objet. Une classe interne ne peut pas contenir des champs statiques et des mthodes statiques. Utilisation de la classe interne en dehors de la classe externe. Rfrence un objet de type interne Externe Interne i Cration dun objet de type interne : Externe e= new Externe() I = new e.Interne() Ou Externe.Interne I= new Externe.Interne() // syntaxe particulire de new. Utilisation dune classe interne dans une mthode de la classe externe : Linstanciation dobjet de type interne ne peut se faire que dans la mthode. Utilisation de classe interne statique : La classe interne na plus accs aux champs et mthodes de la classe externe sauf aux champs statiques et mthodes statiques.
49
-le package coursjava est plac dans un rpertoire coursjava, par exemple D:\ \coursjava -le sous-package chapitre1 du coursjava est plac dans un rpertoire D:\ \coursjava\chapitre1
uneEquation.affichage(); . } } Il est inutile de prciser le nom du package pour les champs et les mthodes aprs la cration de lobjet. (2) Importer la classe import nom_package .Nom_Classe en dbut du fichier source. Import coursjava.Equation; //classe Test public class EquationSecondDegre { //mthode principale public static void main (String [ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); } }
(3) Importer le package import nom_package.* en dbut du fichier source import coursjava.Equation; //classe Test import coursjava.*; public class EquationSecondDegre { //mthode principale public static void main (String [ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); } } Remarques: (1) import coursjava.* (sans le caractre de substitution*) nimporte que les classes de coursjava et pas les classes des sous-packages ventuels.
51
(2) il nest pas possible dutiliser le caractre de substitution * pour des packages (uniquement pour des classes).
(3) Le compilateur ne compile que les classes utilises dans un package comportant galement des classes inutilises.
VII. TABLEAUX
7.1. :DECLARATION ET CREATION DE TABLEAUX : 7.1.1 Introduction :
Un tableau est un ensemble dlments de mmes types, dsign par un nom unique. Chaque lment tant obtenu par un indice de position sur cet ensemble. Un tableau est un objet.
La valeur de lexpression fournie loprateur new nest calcule qu au moment de lexcution (non fixe la compilation) System.out.println( Donner la dimension du tableau : ) ; Int n = Lecture.lireInt() ;
53
Int t[ ] = new int [n] ; Ou Int t[ ]; T= new int [n]; Ou Final int DIM_TAB=5; int[ ]t= new int [DIM_TAB];
La dimension du tableau peut varier dune excution lautre. Une fois lobjet tableau cr, sa taille ne peut plus tre modifie mais sa rfrence peut tre modifie en dsignant dautres tableaux. ii) Cration par initialisation :
Int t[ ] = {1,2,3,4,5} ;
Quand la valeur de lindice dpasse lintervalle de la taille du tableau, une exception du type ArrayOutOfBoundsException est dclenche (leve). Accs aux lments du tableau : System.out.println( Donner la dimension du tableau : ) ; Int n= Lecture.lireInt() ; Int t[ ] = new int [n] ; For (int I=0; I<n;I++) =t[I];
{ Equation systeme [ ] = new Equation [2]; Systme [0]= new Equation (1.0,5.0,1.0); Systme [1]= new Equation (1.0,10.0,1.0);
Programme tableau en argument : Package coursjava ; Import java.text.DecimalFormat ; //classe Equation { //Mthode de doublement des coeffs aX^2+bX+c public static void doublementCoeffs(double Coeff[ ]) { for (int i=0 ;i<systeme.length;i++) { coeff[i]=2*Coeff[i]; } }
//class Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { double coeff[ ]={1.0,5.0,1.0}; Equation systeme[ ]= new Equation[2]; Systeme[0]=new Equation(coeff[0],coeff[1],coeff[2]); Equation.doublementCoeff(coeff); Systeme[1]= new Equation (coeff[0].);
t est une rfrence un tableau dans lequel chaque lment est lui-mme une rfrence un tableau dentiers.
57
Cration dun tableau deux dimensions : Final int DIM1=3 Final int DIM2=4 t= {new int[DIM1], new int [DIM2]} T[0] est la rfrence au 1er tableau de trois entiers. T[1] est la rfrence au 2me tableau de 4 entiers. T[0] [0] est le 1er entier du 1er tableau. T[1] [0] est le 1er entier du 2me tableau. Un tableau a un champ length qui est gal sa dimension sil est mono dimensionnel et sa premire dimension sil est multidimensionnel. t.length=2 t[0].length=3 t[1].length=4
Exemple : Cration dune matrice triangulaire: Int t[ ] [ ] = new int [NLIG] [ ] For (int I=0; I<T.length;I++) { t[I]= new int [I+1];
Accs aux lments dun tableau multidimensionnel : For (int I=0; I<T.length;I++) { For (int j=0; j<t[I].length;j++) { t[I] [j]; } }
Int t[ ] [ ] = new int [NLIG] [NCOL] Ou Int t[ ]; T=new int [NLIG] [NCOL] Ou Int t[ ] [ ] = new int [NLIG] [ ] ; For (int I=0; I<length;I++) { t[I]= new int [NCOL]; }
VIII. HERITAGE:
8.1.: INTRODUCTION:
Lhritage permet dutiliser des classes, rendant ainsi le dveloppement des programmes plus rapide, sr et lisible. Il permet de dfinir une nouvelle classe dite classe drive (sous-classe ou classe descendante), partir dune classe existante dite classe de base (super-classe ou classe ascendante). /*Cette classe drive hrite des champs et des mthodes privs et publics.*/ Elle ne peut modifier que les champs et mthodes publics. Elle peut possder de nouveaux champs et mthodes. Le mot-cl extends permet de dfinir une sous-classe.
59
(i)
Rappel de lappel du constructeur dans le cas dune classe simple (non drive)
-cration dun objet par new sans argument : appel du pseudo-constructeur par dfaut (la classe ne comporte aucun constructeur) -cration dun objet par new avec argument : appel du constructeur ayant la mme signature (nombre et type des arguments).
(ii)
Cas dune classe de base avec un constructeur et une classe drive avec un constructeur :
Pour initialiser des champs de la classe de base encapsuls (attibut private), la classe drive doit possder des mthodes daltration ou utiliser le constructeur de la classe de base. Le constructeur de la classe drive doit prendre en charge lintgralit de la construction de lobjet.
Un constructeur dune classe drive appelle un constructeur dune classe de base avec sa 1re instruction. Le constructeur appel est dsign par le mot-cl super suivi ventuellement de ses arguments entre parenthses. //classe drive class ClasseDerivee extends Equation { public ClasseDerivee(double a, double b, double c) { super(a,b,c) ; } } Le mot-cl this permet dappeler dans un autre constructeur de la mme classe. Comme this et super doivent correspondre la 1re instruction du constructeur, il nest pas possible dutiliser simultanment this et super.
Lappel par super ne concerne que le constructeur de la classe de base de niveau immdiatement suprieur. Classe de base sans constructeur : Class A { //sans constructeur .. } class B extends A { public B() { super(); . } } Lappel super() est non obligatoire. Classe drive sans constructeur Il y a appel du pseudo-constructeur par dfaut sans argument . Dans le cas dune classe simple, ce pseudo-constructeur ne fait rien. Dans le cas dune classe drive, ce pseudo-constructeur appelles un constructeur sans argument de la classe de base.
Soit le pseudo-constructeur par dfaut sans argument de la classe de base : Class A { //Pas de constructeur .. } class B { // Pas de constructeur } La construction dun objet de type B, B b=new B(), entrane lappel du constructeur par dfaut de A.
public A() {} //constructeur2 public A(int n) {.} } class B extends A { // pas de constructeur } Le constructeur dun objet de type B, B b=new B() entrane lappel du constructeur sans argument de A.
Class A { //constructeur2 public A (int n) {..} .. } class B extends A { // pas de constructeur } La construction dun objet de type B entrane une erreur de compilation car le consructeur par dfaut cherche appeler un constructeur sans argument de A qui nexiste pas. Il ne peut galement pas appeler le constructeur par dfaut de A puisquil existe un constructeur avec argument. De prfrence, dfinir systmatiquement un constructeur vide dans chaque classe.
Rappel sur les phases de cration dun objet de classe simple : -allocation mmoire -initialisation par dfaut des champs -initialisation explicite des champs -excution des instructions du constructeur.
Phases de cration dun objet de classe drive avec class B extends class A : -allocation mmoire de lobjet de type B : champs hrits et champs propres. -initialisation par dfaut de tous les champs (hrits de A et propres B) de B aux valeurs nulles . -initialisation explicite des champs hrits. -excution des instructions du constructeur de A -initialisation explicite des champs propres -excution des instructions du constructeur de B
63
Class Point { private int x,y ; public Point(int x, int y) { this.x=x ; y=y; } public Point() { this(0.0); } } class Cercle extends Point { .; }
public static void main(String [ ] args) { Point p,p1; Cercle c, c1 ; P=new Point(10,20) ; C=new Cercle(30,40,50); P1=c; //affecte la rf. De la classe drive Cercle la rf. De la super-classe Point
C1=(Cercle)p1 ; // remplacement du type de la rf. De la super classe Point par la rf. De la classe drive Cercle. C1=(Cercle)p ; //Erreur dexcution. If (p instanceof Cercle) c1=(Cercle) p ; Else System.out.println( p ne rfrence pas un cercle ) ; }
Redfinition de mthodes dans une classe drive = mthodes de mme nom ( surdfinition), de mme signature et de mme type de valeur de retour. La redfinition permet de substituer une mthode par une autre. Une classe drive permet de redfinir une mthode de sa classe de base ou plus gnralement dune classe ascendante, en masquant la mthode de la classe de base. La redfinition dune mthode sapplique une classe et toutes ses descendantes jusqu ce que lune dentre elles redfinisse ventuellement, nouveau, la mthode.
Exemple :
65
Pour appeler la mthode affichage de la classe de base, il faut prfixer affichage par le mot super.
A a; B b; int n; double x; a.m(n); appel de m(int n) a.m(x) ; arreur de compilation b.m(n) ; appel de m(int n) b.m(x) ;appel de m(double x).
Droits daccs : La redfinition dune mthode ne doit pas diminuer les droits daccs cette mthode. Elle peut les augmenter, ie tendre sa zone de lisibilit.
gnrales
de
redfinition
et
de
Rgles de redfinition dune mthode dune classe ascendante par une classe drive. -mme signature. -valeurs de retour des deux mthodes de mme type. -droits daccs de la mthode de la classe drive au moins suprieure .
67
Le choix dune mthode lors de lexcution sappelle ligature dynamique (liaison dynamique). Le polymorphisme se gnralise une hirarchie de plusieurs classes.
tableau
Le polymorphisme permet de grer un tableau htrogne, ie dans lequel les lments peuvent tre de types diffrents. Package coursjava ; Class Equation { ... public void affichage() { .. } } //Classe drive class ClasseDrive extends Equation. { .. //Mthode daffichage public void affichage() .. //Classe Test public static void main (String[ ] args) { Equation systme[ ]=new Equation [2]; Systeme[0]=new Equation(1.0,5.0,1.0); Systeme[1]=new ClasseDerivee(2.0,10.0,2.0); For(i==0;i<systeme.legth;i++) { systeme[i].rsolution; systeme[i].affichage; System.out.println(...); Execution: Equation=1.00*x2+5.00x+1.OO Racine1=-0,21
Racine2=-4,79
69
{ public void affichageCommun() { affichageSpcifique; ... } public void affichageSfcifique() { System.out.println( Equation du 2nd degr ) ; } } class ClasseDrive extends Equation { public ClasseDrive (double a, double b, double c) { super(a,b,c) ; } public void affichageSpcifique() { System.out.println( Equation du second degr de la classe drive ) ; . }
-A la compilation : On dtermine dans la classe T ou ses ascendantes, la signature de la meilleure mthode f convenant lappel, dfinissant ainsi le type de la valeur de retour.
-A lexcution : On recherche la mthode f de signature et de type de retour voulus, partir de la classe correspondant au type effectif de lobjet, rfrenc par x. Cet objet est obligatoirement de type T ou descendant. Si cette classe ne comporte pas de mthode approprie, on remonte dans la hirarchie jusqu ce que lon en trouve une, la limite on remonte jusqu T. */
71
{ Equation systeme[ ]= new Equation[2]; Systeme[0]=new Equation(1.0,5.0,1.0); Systeme[1]=new ClasseDrive(2.0,10.0,2.0); System.out.println(Sysqteme[0]=+Systeme[0].toString()); System.out.println(Sysqteme[1]=+Systeme[1].toString()); . Excution : Systeme[0]=coursjava.Equation@310d42 Systeme[1]=coursjava.ClasseDrive@5d87b2 Il est possible de redfinir la mthode toString dans une classe donne. La mthode toString dune classe possde galement la proprit dtre automatiquement appele en cas dune conversion implicite en chane avec loprateur+ comportant un oprande de type chane. Cette conversion est indpendante du type de la rfrence o et du type de lobjet effectivement rfrenc par o. Class ClasseDrive extends Equation { .. public String toString() { return Redfinition de la mthode toString; }
73
Object o ; o=new int[5] ; Le polymorphisme sapplique aux tableaux : Si la classe B drive de la classe A, un tableau de B est compatible avec un tableau de A. Class B extends A { } A=tA[ ]; B=tB[ ]; tA=tB ; //La rciproque est fausse Il est impossible de driver une classe dune hypothtique classe tableau Class impossible extends int[ ]
Le mot-cl final appliqu des variables locales ou des champs dune classe, interdit la modification de leur valeur. Une mthode dclare final ne peut pas tre redfinie dans une classe. Une classe dclare final ne peut plus tre drive. Classe non finale + mthode finale # classe finale
Avantages :
75
Pour crer des objets, il faut crer une sous-classe dans laquelle toutes les mthodes abstraites sont dfinies.
Drivation : Class B extends A { public void affichage() { } } Instanciation : B b= new B(..) ; Egalement possible: A a = new B(..);
8.9.2.: Proprits:
Une classe qui possde au moins une mthode abstraite est abstraite : Linstanciation est impossible. Elle devrait tre dclare avec le mot-cl abstract mme si cette dclaration nest pas obligatoire. Une mthode abstraite doit obligatoirement tre dclare publique.
Dans len-tte dune mthode abstraite, les arguments formels doivent tre prsents mme sils nont aucune utilit.
Une classe drive dune classe abstraite ne doit pas obligatoirement redfinir toutes les mthodes abstraites de la classe de base. Une classe drive qui comporte des mthodes abstraites de la classe de base non redfinies, reste abstraite.
Une classe drive dune classe non abstraite peut tre dclare abstraite et/ou contenir des mthodes abstraites. Cette proprit est utilise implicitement puisque toutes les classes drivent de Object.
8.10.2. : Proprits :
Une classe peut implmenter plusieurs interfaces alors quune classe ne peut driver que dune seule classe abstraite. Le concept dinterface se superpose celui de drivation et non sy substitue. Une interface peut se driver. Il est possible dutiliser des variables dinterface. Il est impossible de crer des objets de type interface.
77
Public interface I { public abstract void rsolution() ; public abstract void affichage() ; } Une interface a les mmes droits daccs quune classe. En gnral, une interface est publique.
} Ii ; Il est impossible dinstancier une interface, comme avec la classe abstraite. Ainsi, il est impossible daffecter i une rfrence un objet de type I. Il est possible daffecter nimporte quelle rfrence un objet dune classe implmentant linterface I. Cette classe peut tre quelconque, non ncessairement lie par lhritage, du moment qu elle implmente linterface I. Public interface I { } class A implements I { . } I i = new A ();
79
} Evidemment, les constantes sont galement accessibles en dehors de toute classe implmentant linterface. EquationGeneral N Dans une interface, les mthodes doivent tre implmentes dans les classes alors que les constantes sont utilisables par les classes.
void f(int n) ; void g(); } interface I2 extends I1 { void f(double x); void g() ; } class A implements I1, I2 { .. } La classe A peut implmenter les 2 interfaces en redfinissant les 2 mthodes void f(int) et void f(double) mais une seule mthode void g(). interface I1 { void f(int n) ; void g(); } interface I2 extends I1 { void f(double x); int g() ; } class A implements I1, I2 { .. } IMPOSSIBLE : on ne peut pas avoir dans la mme classe 2 mthodes g() : une dfinissant void et lautre int. -> Question de polymorphisme.
Construction dune classe enveloppe : ClasseEnveloppe(typeSimple) Exemples : Integer iObj= new Integer(10) ; Double dObj= new Double(10.1) iObj contient la rfrence un objet de type Integer encapsulant lentier 10.
Mthode permettant de retrouver la valeur dans le type primitif mthode rciproque) TypeSimpleValue()
La mthode typeSimpleValue() permet de faire des conversions entre les diffrents types numriques (pas le boolen) Integer iObj= new Integer(10) Double d=iObj.doubleValue() ; Int i=iObj.intValue(10)
8.13.CLASSES ANONYMES :
Une classe anonyme est une classe sans nom temporaire.
Les classes anonymes sont principalement utilises avec la gestion des vnements (couteurs dvnements).
(i) Classe anonyme drive dune classe Aa; A=new A() { //Champs de la classe anonyme drive de A //Mthodes de la classe anonyme drives de A. .. }; quivalent : class A1 extends A { } A1 a =new A1(); Une classe anonyme ne peut pas introduire de nouvelles mthodes Il est impossible de dfinir plusieurs rfrences classe anonyme. (ii) Classe anonyme implmentant une interface.
IX . CHAINES DE CARACTERES.
9.1. : CHAINES DE CARACTERES (OBJET DE TYPE STRING) : 9.1.1. :Introduction :
La classe standard String permet de manipuler des chanes de caractres (cdc). Les cdc sont des objets de type String : Elles ne sont pas des variables de type primitif. Dclaration : String ch Ch est destine contenir une rfrence un objet de type String. Cration automatique :
83
La notation Java dsigne un objet de type String cr automatiquement par le compilateur. String ch= java ; La classe String possde 2 constructeurs: -un constructeur vide crant une chane vide : String ch1 =new String() -un constructeur avec un argument de type String : String ch2=new ( java ) ; String ch3=new String(ch2) : ch3 contient la rfrence une chane copie de ch2. Bien que les chanes soient des objets, elles se manipulent comme des donnes de type primitif. Il nest donc pas ncessaire dutiliser loprateur new.
Int I=ch.length(java);
// i=1;
// ch=langage java
La mthode indexOf() de la classe String permet de trouver la 1re occurrence dun caractre ou dune sous-chane donne en argument, dans une chane.
Elle retourne : -lentier associ lindice du 1er caractre de la sous-chane si elle est trouve. -la valeur 1 sinon. Public int indexOf(String str) String ch=java; Int I=ch.indexOf(j); //I=0 String Int I=ch.indexOf(j); //I=0
Public int indexOf(String str, int fromIndex) Cette mthode permet de trouver la 1re occurrence dun caractre ou dune sous-chane donne en argument, partir dune position donne en 2 argument dune chane. String ch=java; Int I=ch.indexOf(v); //I=2 Int I=ch.indexOf(v,3); //I=-1
La mthode lastIndexOf() effectue les mmes recherches que la mthode indexOf() mais en analysant la chane depuis sa fin. Public int lastIndexOf (String str) Public int lastIndexOf (String str, int fromIndex)
Remarque (QUESTION EXAM ??) : == et != ne fonctionnent pas pour comparer 2 chanes -> utiliser alors la mthode equals(). Equals sur quelque chose qui nest pas un objet de type String, il faut alors redfinir la mthode equals de la super classe objet comme on le fait pour la mthode toString().
Remarque: Object o; o.equals() ; //mthode equals de Object. // comparaison de rfrences. String ch ; Ch.equals() //mthode equals de String. //comparaison de valeurs.
87
La mthode toUpperCase() de la classe String cr une nouvelle chane en remplaant toutes les minuscules par leur quivalent en majuscules. Public String toUpperCase()
9.5.TABLEAU DE CHAINES:
Il est possible de crer des tableaux dobjets, donc en particulier des tableaux de chanes. Public static void main(String args [ ]) { String tabCh [ ]={Fortran,Pl1,....); for(int i=0;i<tabCh.length;i++) System.out.println(tabCh[i]); } Excution: Fortran Pl1 ....
Public static void main(String args [ ]) { String tabCh [ ]={Fortran,Pl1,....); for(int i=0;i<tabCh.length;i++) { for(int j=0;j<tabCh[i].length(); j++) System.out.println(tabCh[i].charAt(j)); System.out.println(); } }
Mme excution
Remarque : (QUESTION EXAM ??) Si on a un tableau de chanes (de type char) ou une chane. ->Quelle version choisir. Si oui pourquoi ? on ne prend en aucun cas, PLUS un tableau de caractres (car limit) -> remplac par le type chane (grce toutes les mthodes dj implmentes et pas de problme de limite).
89
Laffectation : ch=String.valueOf(n) est quivalente : ch= +n ; (utilisation artificielle dune chane vide pour la conversion de loprateur +)
Comme les types primitifs possdent des classes enveloppes, lexpression String.valueOf(n) Est quivalente Integer(n).toString(n)
Remarques :
La conversion dun type primitif ou objet, en une chane, aboutit toujours . La conversion dun rel flottant en chane peut conduire garder ou perdre le symbole puissance E.
String ch= new String(tab); Autre constructeur de la classe String qui ne considre quun certain nombre de caractres partir dune position donne. Public String (char[ ] value, int offset, int count)
Pour la classe enveloppe Integer : Public static int parseInt(String s) throws NumberFormatException Exemple: int n = Integer.parseInt(s); Pour la classe enveloppe Long: Public static long parseLong(String s) throws NumberFormatException Pour la classe enveloppe Double: Public static double parseDouble(String s) throws NumberFormatException
Remarques:
-Le signe + nest pas accept par les mthodes de conversion en entier. -le signe + est accept par les mthodes de conversion en rel.
91
Char tab[ ] = ch.toCharArray(); Autre mthode de la classe String: Public void getChars(int scrbegin, int scrEnd, char[ ] dst, int dstBegin)
La mthode main reoit un argument de type tableau de chanes, destin contenir les ventuels arguments fournis au programme lors de son lancement partir dune ligne de commande. Technique utilise avec les environnements de dveloppement intgr.
3 constructeurs : public StringBuffer() public StringBuffer(int length) public StringBuffer(String s) Cration dun objet de type StringBuffer partir dun objet de type String: String ch ; StringBuffer chBuf=new StringBuffer(ch) ; |->pour le rendre modifiable Principales mthodes de la classe StringBuffer :
-append() : -charAt() : -delete() : -deleteCharAt() : -getChars() : -insert() : -length() : -replace() : -reverse() : -setCharAt() : -setLength() : -subString() : -toString() :
ajout dune chane en fin. accs un caractre de rang donn. suppression dune sous-chane. suppression dun caractre. copie dune sous-chane dans un tableau de caractres.. insertion dune chane une position donne. longueur de la chane de type StringBuffer. remplacement dune sous-chane par une autre. renverse la chane. modification dun caractre de rang donn. fixe la longueur de la chane de type StringBuffer. retourne une sous-chane. conversion en objet de type String.
11.1 : INTRODUCTION :
Java utilise la notion de flux (canal) Un flux de sortie est un canal quelconque capable de recevoir de linformation sous forme dune suite doctets : priphrique daffichage, fichier, connections un site distant, un emplacement en mmoire centrale. Un flux dentre est un canal quelconque capable de dlivrer de linformation sous forme dune suite doctets : priphrique de saisie, fichier, connexion un site distant, un emplacement en mmoire centrale. Un flux binaire transmet linformation sans modification de la mmoire au flux et rciproquement. Un flux texte transmet linformation avec modification appele formatage pour que le flux reoive ou transmette une suite de caractres, par exemple la mthode println ralise un tel formatage.
11.2.1. : Gnralits :
Un fichier texte peut tre : -cr ou lu avec un diteur de texte ou un traitement de texte en mode texte. -list par une commande de lenvironnement, type sous DOS, more ou pr sous UNIX. Chaque caractre dans un fichier texte est cod sur un seul octet et suivant un code dpendant de lenvironnement.
Le caractre de fin de ligne est reprsent par 2 caractres : CR(code hxadcimal 13) et LF (code hxadcimal 10) dans lenvironnement PC, et un caractre LF (code hxadcimal 10) dans lenvironnement UNIX.
Les flux texte doivent subir des transformations : -pour un flux teste de sortie : conversion de 2 octets reprsentant un caractre Unicode en un octet correspondant au code local de ce caractre dans lenvironnement. -pour un flux texte en entre : conversion dun octet reprsentant un caractre dans le code local de l environnement en 2 octets correspondant au caractre Unicode. -transformation du caractre de fin de ligne selon leur reprsentation locale.
Un constructeur : Public FileWriter(String fileName) throws IOException ; FileWriter fw= new FileWriter(fichier.txt);
Lobjet fw est associ un fichier de nom fichier.txt. Si le fichier nexiste pas, alors il est cr. Sil existe, son ancien contenu est dtruit.
Ouverture dun fichier texte en criture avec formatage avec la classe PrintWriter qui possde des mthodes println et print :
Un constructeur :
Public PrintWriter(FileWrtiter fw) PrintWriter f= new PrintWriter(fw) OU PrintWriter f = new PrintWriter(new FileWriter(fichier.txrt));
Fermeture dun fichier texte en criture:
Avec import.java.io.* ; Mthode : public void close() //Mthode daffichage public void affichage() { DecimalFormat deuxDecimal = new DecimalFormat ( 0.00 ) ; System.out.println( Equation= +deuxDecimal.format(coeffX2)+ x2 + +deuxDecimal.format(coeffX1)+ x + +deuxDecimal.format(coeffX0) ; System.out.println( Racine1= +deuxDecimal.format(racine1)) ; System.out.println( Racine2= +deuxDecimal.format(racine2)) ; }
//Mthode daffichage dans un fichier public void affichageFichier() { PrintWriter f=null ; Try { f= new PrintWriter (new FileWriter(Equation.txt); DecimalFormat deuxDecimal= new DecimalFormat(0.00); f.println(Equation= +deuxDecimal.format(coeffX2)+ x2 + +deuxDecimal.format(coeffX1)+ x + +deuxDecimal.format(coeffX0)) ; f.println( Racine1= +deuxDecimal.format(racine1)) ; f.println( Racine2= +deuxDecimal.format(racine2)) ; } catch (IoException e) { System.out.println(Erreur: +e);
95
} f.close(); } }
Un constructeur : Public FileReader(String fileName) throws FileNotFoundException ; FileReader fr = new FileReader(fichier.txt); FileReader ne peut accder qu des caractres et ncessite la gestion de la fin de ligne. Il faut lassocier la classe BufferReader qui possde une mthode readLine.
Un constructeur : Public BufferedReader(FileReade fr) BufferedReader f =new BufferedReader(fr) OU BufferedReader f = new BufferedReader (new FileReader(fichier.txt)) La mthode readLine de la classe BufferedReader fournit une rfrence une chane correspondant une ligne de fichier.
Fermeture dun fichier texte en lecture :
Mthode : public void close( ) throws IOException. La mthode close doit tre incluse dans un bloc try- catch. Package coursjava ; Import java.io.* ; Public class LectureFichier { //Mthode principale public static void main(String[ ] args) {
String ligne; BufferedReader fr; Try { fr= new BufferedReader( new FileReader(Equation.txt)); while((ligne=f.redline()) !=null) { System.out.println(ligne); } f.close(); } catch(IOException e) { System.out.println(ERREUR:+e); } } }
Package coursjava ; Import java.io.* ; Import java.util.* ; Public class LectureFichier { public static void main(String[ ] args) { int nbTok=0;
97
double x; String ligne= ; BufferedReader f; Try { f= new BufferedReader (new FileReader(Equation.txt)); while((ligne=f.readline())!=null) { System.out.println(Fichier: +ligne); StringTokenizer tok = new StringTokenizer(ligne, ); NbTok = tok.countTokens(); For (int i=0;i<nbTok;i++) { x=Double.parseDouble(tok.nextToken()); System.out.println(Token:+x+ ); } Syqtem.out;println(); } f.close(); } catch (IOException e) { System.out.println(ERREUR: +e);
} } }
Excution: Fichier: 1.1 Token:1.1 Fichier 2.22 3.333 Token:2.22 Token :3.333 Fichier 4.4444 5.55555 6.666666 Token:4.4444 Token :5.55555 Token :6.666666
11.3.: DES FLUX BINAIRES 11.4.: GESTION DES FICHIERS AVEC LA CLASSE FILE 11.5. :DESCRIPTION DES CLASSES FLUX
XII. LA CLASSE java.lang.Math : La classe ne comporte que des champs statiques et des mthodes statiques. Il ne faut pas confondre la classe java.lang.Math avec le paquet java.math qui permet de travailler avec des nombres importants et de grande prcision.
Cette classe dfinit un Nud avec 2 variables dinstance private : lentier donne et une rfrence un Nud nomm suivant . Classe autorfrentielle lautomate ptales : Class Nud { final int DIM=4 ; Object sommet; //tiquette des noeuds Object arc[ ] = new Object[DIM]; //tableau darc(il y en a 4 : A C G T) Nud succ[ ] = new Nud [DIM] ; //tableau de successeurs Public Nud (Object o) { sommet=o ; for(int i=0,i<DIM ;i++) {arc[I]=null; succ[I]=null; } } public String toString() { return sommet.toString(); } }
La liste chane est une collection linaire dobjets dune classe autorfrentielle appels nuds et relis par des liens. Laccs une liste chane seffectue par une rfrence au 1er nud de la liste. Chaque nud successif est accessible par le membre de rfrence de lien stock dans le nud prcdent.
La rfrence de lien dans le dernier nud est mise null et marque la fin de la liste.
Un nud contient des donnes de tout type, y compris des objets dautres classes.
Programme qui prsente des sous- chanes dune chane en lments dune liste chane. Package coursjava ; //- ------class NoeudListe { Object element ; NoeudListe suivant ; Public NoeudListe (Object lment, NoeudListe suivant) { this.lment=lment ; this.suivant=suivant ; }
public NoeudListe (Object lment) { this (lment, null) ; } public NoeudListe() { this(null,null) ; } //Mthode qui retourne une rfrence llment de ce nud. public Object getElement( ) { return lment; } //- --------class Liste { private NoeudListe premierNoeud; private NoeudListe dernierNoeud; private String nomListe; public Liste (String nomListe)
{ this.nomListe=nomListe; } public Liste() {this(Liste); } public boolean listeEstVide { return (premierNoeud = = null); } public void ajouterEnQueue (Object element) { if (listeEstVide()) { premierNoeud =dernierNoeud= new NoeudListe (element) ; } else { dernierNoeud = dernierNoeud.suivant= new NoeudListe (element) ; } }
//Mthode de suppression dun lment quelconque de la liste. Public void suppressionElement(Object element) { NoeudListe courant=premierNoeud ; NoeudListe precedentCourant=premierNoeud ;
103
//su p pression du 1er elment if (courant==premierNoeud) { premierNoeud=courant.suivant; } else { System.out.println(element+ nexiste pas dans la liste +nomListe) ; } //Mthode pour insrer en tte de liste public void insererEnTete(Object element) { if (listeEstVide()) premierNoeud=dernierNoeud=new NoeudListe(element) ; else premierNoeud=new NoeudListe(element,premierNoeud) ; }
//Mthode pour insrer en queue de liste : public void insererEnQueue(Object element) { if (listeEstVide()) premierNoeud=dernierNoeud=new NoeudListe (element) ; else dernierNoeud=dernierNoeud.suivant= new NoeudListe(element) ; }
13.4. : PILE :
2 mthodes qui interviennent dans une pile : -push( ) -pop( )
13.5. : FILE :
2 mthodes qui interviennent dans une pile : -enQueue( ) : ajoute un nouveau nud en fin de file -deQueue( ) : supprime un nud en tte de file.
-Chaque lien du nud racine fait rfrence un enfant. -Lenfant gauche est le tout 1er nud du sous- arbre gauche et lenfant droit est le tout 1er nud su sous- arbre droit. -Les enfants dun nud dont appeles frres. -Un nud sans enfant est appel feuille. Larbre de recherche binaire est un arbre binaire particulier tel que : -les valeurs de tout sous- arbre gauche sont < la valeur de leur nud parent, et que -les valeurs de tout sous- arbre droit sont > la valeur de leur nud parent. On suppose galement quil nexiste pas de valeurs identiques. Remarque : Larbre de recherche binaire correspond une srie de donnes qui peut varier selon lordre dinsertion des valeurs.
3 TYPES DE PARCOURS :
Parcours en ordre.
-parcourir le sous- arbre gauche avec un appel parcours en ordre. -traiter le nud. -parcourir le sous- arbre droit avec un appel parcours en ordre. Le parcours en ordre dun arbre de recherche binaire affiche les valeurs des nuds dans lordre croissant : tri par arbre binaire.
Parcours en pr- ordre.
-traiter le nud. -parcourir le sous- arbre gauche avec un appel parcours en pr- ordre. -parcourir le sous- arbre droit avec un appel parcours en pr- ordre.
Parcours en post- ordre.
-parcourir le sous- arbre gauche avec un appel parcours en post- ordre. -parcourir le sous- arbre droit avec un appel parcours en post- ordre. -traiter le nud.
Class NoeudArbre {
105
public void insrer(int element) { if (element < this .element) { if (gauche= =null) { gauche= new NoeudArbre(element); } else { gauche.inserer(element) ; } } else { if (element>this.element) { if(droit= =null) { droit= new NoeudArbre(element); } else { droit.inserer(element) ; } } } class Arbre { private NoeudArbre racine; public Arbre() {racine=null; }
public void insererNoeud(int element) { if (racine= = null) { racine= new NoeudArbre(element); } else { racine.insere(element); } } public void enOrdre(NoeudArbre nud) { if (nud= =null) { return; } enOrdre(noeud.gauche); System.out ;println(n ud.element+ ) ; EnOrdre(nud.droit) : } Il existe encore dautres mthodes mais elles fonctionnent selon le mme principe.
-Vector( ) -
Mthodes :
-void add(int index, Object elem) -.. Programme avec la classe Vector: import.java.util.* ; public class TestVector { public static void main (String [ ] args)
107
{ Vector vect = new Vector( ); for (int i=0; i<10; i++) { vect.add(new Integer(i)); } System.out.println(Suite dentiers dans le vecteur:); for (int i=0; i<vect.size( ); i++) { System.out.println(vect.elementAt(i)+ ); } System.out.println( ) ; System.out.println(firstElement( ):+vect.firstElement( )); System.out.println(lastElement( ):+vect.lastElement( )); vect.remove(o); System.out.println(Suite dentiers dans le vecteur: );
for (int i=0; i<vect.size( ); i++) { System.out.println(vect.elementAt(i)+ ); } System.out.println( ); Vect.removeElement(new Integer(5)); System.out.println(Suite dentiers dans le vecteur: ); for (int i=0; i<vect.size( ); i++) { System.out.println(vect.elementAt(i)+ ); } } EXECUTION: Suite dentiers dans le vecteur: 0 1 2 3 4 5 6 7 8 9 FirstElement( ) : 0 LastElement( ) :9 .
La classe Stack de java.util qui drive de Vector permet de manipuler la pile. Elle tend la classe Vector. Les lments de Stack sont des objets. Avec des types primitifs, il faut alors utiliser les classes enveloppes.
Constructeurs :
-Stack( ) -.
Mthodes :
Programme utilisant la classe Stack : Import.java.util.* Public class TestStack { public static void main (String [ ] args) { Stack pile = new Stack( ); for (int i=0; i<10; i++) { pile.push(new Integer(i)); } System.out.println(Suite dentiers dans la pile:); for (int i=0; i<pile.size( ); i++) { System.out.println(pile.elementAt(i)+ ); } System.out.println( ) ; System.out.println(peek( ):+pile.peek( ));
109
Int rechercheInt = Arrays.binarySearch (t, new Integer(74)) ; System.out.print(Position : +rechercheInt) ; //Cration dune liste de taille fixe : List laListe = Arrays.asList(t) ; System.out.println( ) ; For(int i=0 ;i< laListe.size( ) ; i++) { System.out.println(laListe.get(i)+ ) ; System.out.println( ) ; } } EXECUTION : Suite dentiers dans le tableau : 0 0 0 0 0 0 0 0 :87 58 29 11 0 ..
-int binarySearch(List liste, Object key) -void copy (List dest, ______)
111
-.. Programme utilisant la classe ArrayList : Import.java.util.* ; Class EnsembleConstruction { public ArrayList ens ; public EnsembleConstruction (String numEns) { ens = new ArrayList() ; Syqtem.out.println(Ensemble+numEns+cr); } public boolean ensembleContientElement (string numEns, Object elem) { boolean elementExiste ; elementExiste= ens.contains(element) ; System.out.println() ; }
-LinkedList( ) ; -LinketList(Collection c) ..
113