Introduction a la programmation JavaF. Barthelemy28 fevrier 20051 But du coursLe but de ce cours est d’entrer dans le langage JAVA a un niveau de description moyen : plusdetaille que dans le premier cours, sans pour autant entrer dans tous les details qui devront ˆetrecherches ailleurs. On desire donner une connaissance su sante pour commencer a programmer(ED et TP).2 Bases du langage2.1 Les valeurs en JAVALes valeurs manipulees sont des soit des objets, soit des tableaux, soit des objet d’un typeprimitif.Ce qui n’est pas objet :– les valeurs de types prede nis, dits types primitifs– les tableaux.Ce qui est objet :– Les instances de classes prede nies (ex : les chaˆnes, String)– Les instances de classes de nies par l’utilisateur.Les types primitifs :– types entiers :– byte (8 bits)– short (16 bits)– int (32 bits)– long (64 bits) ex : 0L, 123l– types ottants :– oat (32 bits) ex : 0.f 123.45f– double (64 bits) ex : 0.8 56.89– type char ex : ’a’ ’e’– type boolean , avec deux valeurs true aseIl n’y a pas d’autres types primitifs.Les tableaux ont un statut special :– Ce ne sont pas des objets :– il n’y a pas de methodes– il n’est pas possible d’heriter des tableaux– mais ils ont en commun avec les objets d’avoir un etat qui change au l du temps.Les tableaux :– sont toujours a une dimension (mais on peut faire des tableaux de tableaux).– sont indices par des valeurs de types int a partir de 0.– la longueur d’un ...
1 But du cours Lebutdececoursestd’entrerdanslelangageJAVAa`unniveaudedescriptionmoyen:plus d´etaill´equedanslepremiercours,sanspourautantentrerdanstouslesde´tailsquidevronteˆtre cherch´esailleurs.Ond´esiredonneruneconnaissancesuffisantepourcommencer`aprogrammer (ED et TP).
2 Bases du langage 2.1 Les valeurs en JAVA Lesvaleursmanipule´essontdessoitdesobjets,soitdestableaux,soitdesobjetd’untype primitif. Ce qui n’est pas objet : –lesvaleursdetypespre´de´finis,ditstypesprimitifs – les tableaux. Ce qui est objet : –Lesinstancesdeclassespre´de´finies(ex:leschaˆınes,String) –Lesinstancesdeclassesd´efiniesparl’utilisateur. Les types primitifs : – types entiers : – byte (8 bits) – short (16 bits) – int (32 bits) – long (64 bits) ex : 0L, 123l – types flottants : – float (32 bits) ex : 0.f 123.45f – double (64 bits) ex : 0.8 56.89 – type char ex : ’a’ ’e’ – type boolean , avec deux valeurs true flase Il n’y a pas d’autres types primitifs. Lestableauxontunstatutsp´ecial: – Ce ne sont pas des objets : –iln’yapasdem´ethodes –iln’estpaspossibled’h´eriterdestableaux –maisilsontencommunaveclesobjetsd’avoirun´etatquichangeaufildutemps. Les tableaux : –sonttoujours`aunedimension(maisonpeutfairedestableauxdetableaux). –sontindic´espardesvaleursdetypesint`apartirde0. –lalongueurd’untableauestunepropri´et´edynamiquedutableau:ellenefaitpaspartiede sontype.Unevariablepeutcontenirsuccessivementdestableauxdediffe´rentestailles. D´eclarationdetableau:
1
i n t n ; // c e c i e s t un e n t i e r , p a s un t a b l e a u i n t [ ] t ; // c e c i e s t un t a b l e a u d ’ e n t i e r s Compte [ ] t c ; // c e c i e s t un t a b l e a u de c o m p t e s i n t [ ] [ ] t t ; // c e c i e s t un t a b l e a u de t a b l e a u x d ’ e n t i e r s i n t [ ] n = { 1 , 2 , 3 } ; // t a b l e a u ´e i n i t i a l i s Cre´ationd’unnouveautableau: t = new i n t [ 5 ] ; t c = new Compte [ 2 3 ] ; t t = new i n t [ 3 ] [ 4 ] ; Acc`esauxe´le´mentsd’untableau: t [ 0 ] = 1 ; t c = new Compte ( ) ; t t [ 2 ] [ 2 ] = t [ 0 ] + 3 ; Voici un exemple complet avec des tableaux : c l a s s T ab l e au { i n t [ ] t a b = { 2 , 4 , 7 } ; void a f f i c h e ( ) { f o r ( i n t i = 0 ; i < t a b . l e n g t h ; i ++) { System . o u t . p r i n t ( ” ” + t a b [ i ] ) ; } System . o u t . p r i n t l n ( ) ; } void f o i s D e u x ( ) { f o r ( i n t i = 0 ; i < t a b . l e n g t h ; i ++) { t a b [ i ] = t a b [ i ] ∗ 2 ; } } void a j o u t e ( i n t x ) { i n t [ ] n t = t a b ; t a b = new i n t [ n t . l e n g t h + 1 ] ; f o r ( i n t i = 0 ; i < n t . l e n g t h ; i ++) { t a b [ i ] = n t [ i ] ; } t a b [ t a b . l e n g t h − 1 ] = x ; } public s t a t i c void main ( S t r i n g [ ] a r g s ) { T ab l e au t = new T ab l e au ( ) ; t . f o i s D e u x ( ) ; t . a j o u t e ( 5 ) ; t . a f f i c h e ( ) ; } } Leschaˆınesdecaracte`ressontdesobjetsdelaclassepre´d´efinieString.Cenesontpasdes tableauxdecaracte`res.Onnepeutpasmodifierlavaleurd’unechaıˆne(parexemple,onnepeut paschangerlavaleurd’uncaract`erecommedansuntableau).Ilyadenombreusesm´ethodes pr´ed´fiies. e n
2
2.2 Variables et types Unevariableesttoujoursde´clare´eavecuntype. Unevariableatoujoursunevaleurparde´fautquid´epentdesontype: – 0 pour les int, 0.f pour les float, false pour les boolean, etc – nullpour les tableaux et les objets Certaines conversions de types sont automatiques : – on peut affecter une valeur int dans une variable long –onpeutmettreunobjetd’unesous-classedutypede´clar´ed’unevariable(ex:CompteSecurise dans une variable de type Compte) Ilyapourcelaunensembleder`eglesd´ecrivantlesconversionspossiblesetcellesquinelesont pas.Lesre`glessontassezcompliqu´ees.Onnelesd´etaillepasici. Onpeutaussiutiliseruneconversionexplicite(cast).La`encore,toutn’estpaspossible. Possible : conversion d’un byte en char. Conversion d’une sous-classe vers une super-classe (ex : Compte -¿ Object). Impossible : conversion d’un int en tableau de Compte. char c ; c = ( char ) 3 8 ; O b j e c t o ; o = ( O b j e c t ) new Compte ( ) ;
2.3Lesinstructionsdecontrˆole Elles sont classiques. // b l o c { i n t n ; n = 1 + 2 ; } ; // c o n d i t i o n n e l l e i f ( true ) n = 0 ; // une s e u l e i n s t r u c t i o n ( ou un b l o c ) e l s e n = 1 ; // une s e u l e i n s t r u c t i o n ( ou un b l o c ) // f o r i n t i ; f o r ( i =0; i < 4 ; i ++) System . o u t . p r i n t l n ( i ) ; // une s e u l e i n s t r u c t i o n ( ou un b l o c ) // w h i l e while ( true ) System . o u t . p r i n t l n ( ”Ca b o u c l e ” ) ; // une s e u l e i n s t r u c t i o n ( ou un b l o c ) // do w h i l e do System . o u t . p r i n t l n ( ”Ca b o u c l e ” ) ; // une s e u l e i n s t r u c t i o n ( ou un b l o c ) while ( true ) ; JAVA est langage purement objet : il n’y a pas de variables globales, pas de fonctions, pas de proc´edures:lesvariablesetlesme´thodesapparaissentseulementdansdesclasses. 3 Les exceptions Commedansbeaucoupdelangages,ilexisteunmoyendege´rerleserreursintervenant`a l’ex´ecution:lesexceptions.Cemoyenpeute´galementeˆtreutilis´ea`d’autrefins(ex:sortiede boucle), dans un style de programmation particulier mais correct. 3
Uneexceptiondoiteˆtrede´clar´ee,ensuiteellepeuteˆtreleve´eet´eventuellementre´cupe´re´e. Uneexceptionestunobjet,instancedelaclassepre´d´efinieException(oud’unesous-classe d’Exception). E x c e p t i o n monException = new E x c e p t i o n ( ) ; Pour lever une exception, on utilise l’instruction throw throw monException Celaapoureffetdesuspendretoutcalcul,saufsil’exceptionestre´cupe´r´eeparunblocappelant ducodeo`ul’exceptionestlev´ee. Prenonsl’exempledescomptesse´curis´es.Onpeututiliseruneexceptionpourempeˆcherle retraitd’unesommequandlecompten’estpasapprovisionn´e. c l a s s C o m p t e S e c u r i s e extends Compte { E x c e p t i o n p r o v i s i o n I n s u f f i s a n t e = new E x c e p t i o n ( ) ; void r e t r a i t ( i n t n ) throws E x c e p t i o n { i f ( s o l d e < n ) throw p r o v i s i o n I n s u f f i s a n t e ; s o l d e = s o l d e − n ; } } . . . C o m p t e S e c u r i s e durand = new C o m p t e S e c u r i s e ( ) ; durand . d e p o t ( 2 0 0 ) ; durand . r e t r a i t ( 3 0 0 ) ; . . . Danslecasouonessaiederetirerplusd’argentqu’iln’yena,l’exceptionestleve´eetl’execution ´ du programme s’arrete, avec une message du type : j a v a . l a n g . E x c e p t i o n a t e s s . < c l i n i t > ( e s s . j a v a : 1 3 ) Notezquechaqueme´thodedoitd´eclarerlesexceptionsquipeuvetnˆetreleve´esaucoursde l’ex´ecutiondeleurcorps(cfexempleci-dessus). L’utilisateurdelame´thode,sachantquel’exceptionprovisionInsuffisantepeuteˆtreleve´e,peut pr´evoirunefaconmoinsbrutaledeg´erercecasquel’arreˆtpuretsimpledel’ex´ecution. C o m p t e S e c u r i s e durand = new C o m p t e S e c u r i s e ( ) ; durand . d e p o t ( 2 0 0 ) ; try { durand . r e t r a i t ( 3 0 0 ) ; System . o u t . p r i n t l n ( ” R e t r a i t e f f e c t u e ” ) ; } catch ( E x c e p t i o n p i ) { System . o u t . p r i n t l n ( ” P r o v i s i o n i n s u f f i s a n t e ” ) ; } ; L’exempleducomptesecuris´eillustrelagestiond’erreurs.Onpeutaussiutiliseruneexception pour sortir d’une boucle, sans qu’il y ait d’erreur : boolean t r o u v e = f a l s e ; i n t [ ] t a b ;