Documente Academic
Documente Profesional
Documente Cultură
Fascicule N1
jean-jacques.montois@univ-rennes1.fr
Diapositive 3
Diapositive 18
Diapositive 60
Diapositive 135
Diapositive 147
Diapositive 44
Diapositive 189
Diapositive 206
Diapositive 219
Diapositive 227
Diapositive 263
Diapositive 298
Avertissement:
Le document que vous avez entre les mains a t rdig dans l'objectif dun cours java projet sur
cran, et dispens des tudiants prsents en amphi. En aucun cas, ce simple powerpoint ne se
substitue un ouvrage exhaustif dont vous pouvez trouver de bons exemples ci-dessous ou sur
INTERNET. Le but est de faciliter le travail des tudiants en fournissant un support visuel, et crit
sous forme de slides que peut suivre squentiellement lenseignant. Ltudiant doit personnaliser son
cours en prenant des NOTES (jinsiste!) Pour illustrer certains points, quelques passages ont t
emprunts chez SUN ou parfois chez certains auteurs dont les productions ont t dposes sur le
WEB, ou en librairie, et dont je donne les rfrences ci-aprs. Pour des raisons de copyright, il est
interdit sans autorisation, de les utiliser sous quelques manires que ce soient (copie, re-engineering,
) dans une intention lucrative, par exemple la rdaction d'un ouvrage en vue d'une vente, ou une
formation JAVA dans le cadre d'un stage payant. En cas de manquement ce conseil, le lecteur tant
averti, l'auteur du document Programmation objet -votre serviteur- se dgage de toutes
responsabilits quant aux consquences. En cas dusage universitaire par un collgue, sil a un moment,
quil men avertisse seulement: (jean-jacques.montois@univ-rennes1.fr).
Rfrences bibliographiques:
Le must!!
SUN Microsystme, java.sun.com
DIP Genve, Alexandre Maret & Jacques Guyot
Excellent
G. Falquet - Universit de Genve 1 Cours JAVA
P. Ducrot - ENSI de Caen Cours JAVA
"Introduction la programmation objet" par J. Brondeau, Ed: Dunod
"Programmation JAVA" par JF Macary, Ed: Eyrolles
Excellent
Cours en ligne de Bruno Kostrzewa Prof. de Maths au Lyce Faidherbe
Excellent
"JAVA" par M. Morisson & al. Ed: S&SM
"Le livre de JAVA premier langage" par A. Tasso, Ed: Eyrolles
"du C/C++ JAVA" par E. Puybaret, cours web payant sur www.eteks.com, et un ouvrage
- IUT ST MALO/ JJ MONTOIS -
Ainsi, les principes gnraux des langages objets et structurs apparaissent compltement dans ces 4 prceptes!
P'tite histoire : savez-vous de quoi est mort le grand Ren Descartes? non? Et bien cause de
la Reine Christine de Sude! Celle-ci avait un got prononc pour l'tude des mathmatiques la
nuit dans son chteau ( chacun ses fantasmes). Le chteau ntant videmment pas chauff au
fuel ou llectricit, Brrr! Elle faisait lever notre brave Ren (alors son service; faut bien
boulotter!) pour lui fournir la quintessence de son brillant esprit. A ce rgime, Descartes finit par
attraper une bonne fluxion de poitrine, que l'on gurissait en Sude en appliquant ... de la neige
sur la poitrine! Combattre le mal par le mal (vridique! Georges Boole est mort de la mme
faon. Sa femme usait du mme moyen. A croire que la logique mne toujours au 0 ... degr!)
Ouais, et en
plus la cuisine
sudoise
fume, on sen
lasse.
Curieux
Prcis
C++ attitude
Mthodique -
Cest pas grave si vous tes dun naturel dsordonn, vous aimez
rpartir vos affaires , dautres ont la manie de tout ranger, chacun sa faon de vivre. Soyons
tolrant. Mais en programmation point de fantaisie, pratiquez lordre et la mthode , et puis relisez les
4 rgles de Descartes dans le discours de la Mthode pour vous forger une ligne de conduite.
Persvrant, pugnace-
Autonome-
ne comptez que sur vous-mme pour rsoudre les mystres dun programme
qui ne veut point fonctionner malgr vos efforts durant 4h de TP; et surtout viter les conseils des
messieurs YAKA-FAUCON, jsais-tout , sur tous . Souvenez-vous des vers de La Fontaine Sagitil dun conseil? La Cour en conseillers foisonne; faut-il excuter, on ne trouve plus personne. Vous
pouvez aussi solliciter laide dun prof, on ne sait jamais, il peut trouver le bug!
Cool-
face un programme rcalcitrant; surtout pas de gros mots (enfin pas de manire
trop sonore, et seulement le mot de Cambronne; cest tre patriote!!), et ne cassez pas lordinateur
en tapant dessus, il ny est pour rien!! Quoique ?
Non-conformiste
A mditer
Jadis, les hommes difirent une tour Babel city. Ils firent monter du parpaing le
plus haut possible afin de montrer leur force et leur grandeur (genre tour Montparnasse, ou World
Trade Center - Enfin, ce quil en reste -, mais vraiment en plus grand !). Dieu voyant cela, dcida de
punir lorgueil des hommes en leur imposant lusage de trs trs nombreux langages et dialectes afin
de semer la confusion et faire voir ainsi qui tait le matre (non mais!). tous les habitants de la terre parlaient encore
la mme langue. Ils voulurent construire tous ensemble une ville et une tour dont le sommet atteindrait les cieux. Alors Dieu, ne voulant pas les foudroyer, confondit
leurs langages pour qu'ils ne puissent plus continuer de parler et travailler ensemble. Ils cessrent de btir leur tour, qui s'croula, se sparrent, et se dispersrent.
C'est ainsi que sont ns les diffrents langages [Bible]
Ainsi, aujourdhui pour crire nos programmes, nous utilisons des tas de langages (C, C++, C#, Perl C,
JAVA, PASCAL, Eiffel, ADA, fortran, lisp, basic, PHP, JSP, XML, HTML, ), des tas de protocoles de
communication (TCP/IP, NETBEUI, IPX, ..) [environ 600 langages recenss; quand aux protocoles de
communications, on ne les dnombre plus!].
Or les langages assembleur(s), basic, fortran, cobol, ada, pascal, c, c++, java, lisp, prolog, etc etc sont
bien sr tous incompatibles les uns des autres. Ainsi, Dieu, 1ier programmeur systme de l'Univers,
navait pas oubli linformatique future! Progranticipation divine. Et depuis 70 ans, lhomme continue
fbrilement, frntiquement, pathtiquement construire moult idiomes informatiques, et prenniser
ainsi la maldiction divine
Dialogues non compatibles
A savoir
Trois gants! Ils ont contribu aux fondations de linformatique. Retenez ces noms, ces visages, ils ont eu
chacun un destin grandiose et une fin ... misrable, tragique. Harcels, frapps par la btise humaine,
surtout lorsquelle agit en meute bien-pensante, fraternelle disent-ils, et se rfugie, derrire la normalit
grgaire,intolrante de leur Vrit! Pourtant ces personnalits appartiennent ces magnifiques locomotives
qui tirent lhumanit, ces hros de la pense constamment conspus, dcris, mais en dfinitive immortels!
Albert Einstein disait souvent: Il y a 2 choses dinfini: lUnivers, et la btise humaine; quoique je nai pas
encore acquis une certitude absolue pour lUnivers!
Adlade of Byron (Ada pour les intimes) [1816-1852], fille du pote romantique anglais Lord Byron ( ses posies
exaltent le hros rebelle). Ada tait membre de la jet society anglaise et pouse du Comte of Lovelace de 30
ans son an. Egrie du savant Lord Babagge (inventeur de la machine analytique), elle attacha son nom des
tudes sur les systmes de traitement automatique des donnes. Ada formula, la premire, les concepts
thoriques de la programmation quelle appliqua la machine analytique de Babagge. Le grand Von Neumann
devait se souvenir de cela quand il mit au point sa propre architecture informatique en ... 1949. Ada est
considre comme le 1ier programmeur. Du fait dun comportement non conforme aux usages de la socit
puritaine de lpoque (dilapidation de son patrimoine pour soutenir ses recherches, adultre, jeu, dettes,
mpris des crtins importants, ...), Ada fut interne dans un asile sur la demande de sa mre, la redoutable lady
Noll Byron (femme dune grande culture), jusqu la fin de son existence (1852) o elle mourut dun cancer dans
des conditions particulirement atroces, dabandon, de dnuement, sans aucune compassion! Destin et fin
tragique rapprocher de celui de Camille Claudel, elle mme grie du sculpteur Rodin, et morte exactement
dans les mmes conditions misrables, implorant son intransigeante mre. Dcidment, cette poque, il ne
faisait pas bon pour une femme dtre libre comme un homme! [Trs belle exposition de Camille Claudel Dinan
automne 2005, muse des Jacobins]. Le monde scientifique lui a rendu cependant hommage en donnant son
prnom (ADA) au meilleur langage de programmation qui soit. Noter ltrange destine du pre et de la fille
morts tous deux 36 ans dans des conditions violentes.
Langlais Alan Turing, professeur au King collge responsable durant la seconde guerre mondiale du bureau du
chiffre. Mathmaticien surdou, 24 ans il apporte une contribution dcisive aux fondements logiques de
linformatique. Il dfinit les principes thoriques des machines logiques. Il donne une rponse mcanique
au problme de la dcidabilit nonc par le grand Hilbert. Grce lui, les messages cods par la machine de
cryptage: ENIGMA en usage dans la marine allemande taient rgulirement dchiffrs. Incontestablement
Turing a permis dcourter la dure du conflit conomisant ainsi des centaines de milliers de vies. Le vritable
vainqueur de la bataille de latlantique, cest lui! On lui doit aussi les premires recherches sur lintelligence
artificielle. Personnage farfelu, imprvisible, trop brillant et ... homosexuel. Pour cette dernire raison, il fut
mis lindex, mis lcart et condamn par la justice anglaise suivre un dur traitement hormonal ou bien tre
incarcr. Turing choisit le traitement mdical qui transforma quelque peu son apparence masculine. Un beau
jour Alan finit par croquer une pomme quil avait enduit de cyanure (il aimait bien les pommes, et blancheneige qui reprsentait pour lui le symbole de la puret). Ctait sa manire de dire tchao cette socit qui
IUT
MALO/
JJ MONTOIS lavait si mal remerci! Son destin est rapprocher-de
celuiST
dOscar
Wilde.
Evariste Galois [1811-1832]; personnage balzacien la Julien Sorel, ou Rastignac. Il fut lun des plus grands
mathmaticiens de tous les temps, sinon le plus prodigieux. Ses travaux ont rvolutionn les mathmatiques; ils sont
directement lorigine de la cryptographie en informatique, de la thorie de lorganisation des structures
cristallines (utile pour Pierre-Gilles Degenne, prix Nobel pour la dcouverte des cristaux liquides. Pensez Evariste
lorsque vous regardez lcran LCD de votre portable); rcemment, Andrew Wiles a pu bnficier des travaux de
Galois pour rsoudre lun des plus fameux problme mathmatique: le grand thorme de Fermat. Il dcouvre les
mathmatiques 15 ans, et meurt dans un duel stupide 20 ans cause dune infme coquette . Jeunesse
difficile, dont le pre ador, maire de Bourg-La-Reine sest suicid suite une campagne venimeuse de diffamation.
E. Galois, personnalit tourmente, alternant entre des actions politiques [rpublicain passionn, il se jette dans la
mle politique. Lors de la priode des 3 glorieuses de juillet 1830, il monte sur les barricades parisiennes pour
dfendre la Libert, et le droit de vote srieusement corne par Charles X ], et des travaux mathmatiques
ponctus souvent par des sjours dans les prisons de St Plagie, ou de la Force consquemment ses activits
politiques, harcel par la police secrte de Charles X. Mathmaticien parfaitement incompris, souvent combattu
avec hargne, laudace des ses ides fait peur, il est trop en avance des perceptions de son temps, son approche est
trop inductive. Il est, entre autre, linventeur de la thorie des groupes, quil applique la rsolution dun des plus
grands problmes mathmatiques irrsolus: La rsolubilit des quations algbriques de degr N par ltude des
groupes de permutations issus des fonctions symtriques des racines. Les nombreux mmoires (rdigs la plume
doie) quil soumet lacadmie ou quil adresse aux grands mathmaticiens de lpoque (Poisson, Cauchy, Fourier, )
sont soit gars, soit ngligs car incomprhensibles. Parfois mpris, voire conspu par les socits savantes; on
laccuse mme de plagiat des travaux du jeune mathmaticien Abel (mort de tuberculose 25 ans, misrablement, et
dans le dnuement) qui travaillait aussi sur les quations algbriques. Refus par 2 fois lentre de polytechnique,
en effet lexaminateur Mr Binet comprend mal les rponses dEvariste, ce dernier excd finit par lui lancer
lponge la figure Voici, monsieur, ma rponse votre question!, et il sort en claquant la porte . Lanne
suivante, il est exclu de la toute nouvelle cole normale suprieure, toujours pour insubordination, et activit
politique subversives. En effet, tandis que le Directeur pro-Charles X consigne ses condisciples dans lenceinte de
lcole afin quils ne participent pas aux 3 jours dmeutes qui allaient devenir les 3 glorieuses , Evariste fait le
mur de lcole pour prendre part ses journes historiques en tant que membre de la garde nationale. A 20 ans,
Evariste dcouvre lamour, non partag, avec Stphanie Poterin du Motel une coquette- qui le conduit presque
aussitt la mort lors dun duel imbcile un matin de mai 1832, aux tangs de la Glacire Paris. Abandonn par ses
tmoins sur le lieu de laffrontement, il agonisera 24h presque sans soutien lhpital Cochin, et le 31 Mai 1832, le
monde perd lun des esprits les plus prodigieux de tous les temps. Il sera enterr la fosse commune du cimetire
du MontParnasse (comme Mozart, trange similarit de destin pour 2 esprits jumeaux: gniaux, rebelles, jeunes, et
tourments). Fidle son esprit rebelle, la nuit prcdant son duel, au lieu de sentraner au pistolet, ou tout au
moins de dormir, Evariste prfre reconstituer lessentiel de ses travaux gars. Il se savait condamn, mais avait
conscience de limportance de ses Recherches pour lHumanit. Il a donc rsum en quelques heures, dans le silence
de sa petite chambre-logement, la lumire vacillante de la bougie, lessentiel de ses ides. Il faudra 50 ans pour
que lon comprenne enfin limmense intrt de ce testament scientifique lgu lHomme. A mesure que laube pointe,
le crissement de la plume se fait plus rapide, Evariste sait quil na plus le temps de prciser certains rsultats je
nai pas le temps, je nai pas le temps, , le lecteur dmontrera lui-mme crit-il. Parfois, Evariste sinsurge,
et griffonne rageusement dans la marge du mmoire-testament Libert, galit, fraternit, ou la mort . Le
jour pointe travers la petite fentre de sa chambre, Evariste fatigu range ses papiers, rdige son frres ses
dernires recommandations, enfile sa redingote, et tel un hros romantique, part vers son destin Citoyen
tudiant, lorsque tu votes, aie une pense pour le malheureux
Galois
et ses compagnons
rpublicains
qui tont permis
- IUT ST
MALO/
JJ MONTOIS
de faire ce geste! Quidam, lorsque tu tapotes le clavier de ton tlphone, de ton ordinateur, que tu surfes sur le
WEB, pense Evariste associ lavnement de ces technologies!
Dernire nuit,
derniers crits
10
L, je rflchis
mon programme
C++
Bjarne Stroustrup
11
12
Un type abstrait se compose d'une interface qui dfinit la vision offerte aux utilisateurs en termes
d'oprations et d'une implmentation en terme de structures de donnes et d'algorithmes dfinissant
les fonctions.
mergence de la programmation objet avec l'apparition de SMALLTALK. Langage dvelopp
durant les annes 70 au centre de recherche de XEROX (parc de Palo Alto).
SMALLTALK intgre les technologies d'interaction avec l'utilisateur par icnes, fentres et souris.
Ces technologies ont servi de base au Macintosh
13
14
Cest moi!
Langage cr par une quipe de Sun Microsystems, dirige par James Gosling,
effectuant le dveloppement de concepts sur les logiciels incorpors dans les
appareils lectroniques de grande consommation. Contrainte majeure : diffrentes
plateformes et microprocesseurs.
1995: Netscape Communications annonce que leur navigateur va supporter Java, ...
Microsoft achte aussi une licence de Java (on ne sait jamais!?).
16
Un peu de terminologies
1. Applet:
Applet Codes JAVA tlchargeables sur des machines clientes partir dun serveur WEB (APACHE, ). Ne contient pas de
fonction main(), et sexcute obligatoirement dans lenvironnement dun navigateur compatible JAVA (IE, NETSCAPE, )
intgrant une JVM.
2. Midlet:
Midlet Codes JAVA tlchargeables partir dun serveur de Servlets (TOMCAT, ), sur des dispositifs mobiles (portables,
PDA, ) ressources matrielles limites. Ne contient pas de fonction main(), et sexcute obligatoirement dans
lenvironnement dun quipement compatible JAVA intgrant une KVM ou CVM.
3. Servlet:
Servlet Codes stocks sur un serveur et sexcutant sur la requte dune machine cliente afin de fournir un service de
traitement ou de calcul.
4. JVM:
JVM Processeur virtuel, produisant un code machine intermdiaire (byte-code) partir dun fichier source java. Un
interprteur est ensuite ncessaire afin de convertir et dexcuter les bytes-code en code assembleur de la machine cible.
5. KVM:
KVM Processeur virtuel trs allg afin de pouvoir tre port sur des machines embarques (tlphones cellulaires,
PDA, ) aux ressources matrielles limites.
6. CVM:
CVM Processeur virtuel moyennement allg afin de pouvoir tre port sur des machines embarques aux ressources
matrielles relativement limites.
7. RMI:
RMI (Remote Methode Invocation) API JAVA permettant le dveloppement dapplications distribues objet
8. JSP, ASP:
ASP (JavaServerpage) - Langages de script, type C (resp. sun, microsoft) permettant de crer des sites web
dynamiques. Les scripts sont insrs dans des pages html lintrieur des balises <% et %>
9. PHP:
PHP Langage de script structur, insr dans une page html, excut au niveau du serveur, et permet de dynamiser la
page html en fournissant un ensemble complet de fonctions utiles (mail, ); Remplace avantageusement le code CGI (crit
en C, PERL, ) au niveau des temps dexcution. Ds que le code PHP est excut dans la page html, il ne figure plus dans
le source rcupr par la machine client.
10.Socket
10.Socket: Point de connexion rseau (prise rseau) o doit se brancher dautres machines informatiques afin de pouvoir
tablir des changes entre elles.
11.APACHE
11.APACHE: Application informatique configure comme un serveur WEB, et permettant de uploader des pages html, wml,
xml, sur des machines clientes. Des services peuvent tre excuts pour le compte de client sur requtes PHP, JSP,
ASP, CGI, des applets peuvent tre tlcharges sur des machines clientes
12.TOMCAT
12.TOMCAT: Application informatique configure comme un serveur de servlet, et permettant sur requtes de machines
clientes, dexcuter des services de traitement et/ou de calcul partir de code java spcifiques: servlet
13. mySQL:
mySQL
17
-1Gnralits sur la
technologie JAVA
Ignorantus,
ignorantum! il
sagit du langage
JAVA, ignares!!
Jadore la
java
18
Java est un langage de programmation orient objet (POO) cr par Sun. Il permet de
dvelopper des applications client/serveur pour le WEB (RMI, CORBA) et du code mobile
(applet, midlet) sur workstations, tlphones cellulaires, PDA, cartes de paiement,
Un source Java est compil pour fournir un binaire de type pcode (pseudo code machine).
Les fichiers ainsi compils peuvent tre soit interprts et excuts localement; soit chargs
via une page HTML dans un navigateur WEB compatible Java (intgre un plugin capable
d'interprter le pcode fourni par la page HTML et excuter le programme java); soit tlchargs
dans un dispositif mobile lger (tlphone cellulaire, PDA, ).
Java permet:
19
20
Point fort de Java: un source Java compil donne des bytes-code (opcodes 8 bits et oprandes
de tailles variables ); codes d'un pseudo-assembleur (pcode) d'une machine virtuelle Java
(JVM)
lload address ;
ladd;
lstore address;
jsr address;
22xxxx
97
55xxxx
168 xx
Quelques instructions
assembleur JVM
Espace d'adressage 32 bits; mthode 32KB max; 256 variables par pile.
Lexcution des bytes-codes ncessite un interprteur Java simulant une machine virtuelle.
Les logiciels de navigation compatibles Java intgrent un tel interprteur.
Applications Java, applets, midlets conues en bytes-codes sont indpendantes de la machine physique.
- IUT ST MALO/ JJ MONTOIS 21
OS
java.exe
le code source
MonProgramme.class
Le pcode doit tre transcris et excut en codes de la machine informatique utilise, par la
commande : Java MonProgramme.class
JAVA gre les erreurs et exceptions
Des segments de codes peuvent tre surveills pour lever les erreurs dE/S ou de traitement.
try
{
}
catch (exception <objet erreur>) { //code de traitement de lerreur }
- IUT ST MALO/ JJ MONTOIS -
22
client
navigateur
P/IP
UDP TC
s
e
m
ra
T
serveur
Moteur dapplet
Applet(s)
Applet(s)
(IE, )
Moteur de
servlet
Midlet(s)
(Tomcat, )
SOCKET
plugin java
APPLET
SOCKET
Servlet(s)
Serveur HTTP
(APACHE
APPLET
navigateur plugin java
JAVA
appli java
http
httpWAP
Midlet
23
Je suis une
ablette
Routage de la requte
sur le rseau
Mais non,bta
une applet!!
WWW
Internet
Le WEB rpond!
examen de la
rponse
suivant le format
de la rponse:
HTML
Affiche le
texte
Affiche
l'image
GIF
JPEG
VRML
Affiche
l'animation
... autre
format
24
2 - Requte partir dun lien hypertexte: lappel ncessite une applet java:
Saisie d'une URL ou clic
sur un lien hypertexte
Routage de la requte
sur le rseau
Le WEB rpond!
examen de la
rponse
chargement de
la classe sur le
rseau
non
Dossier cache
oui
- IUT ST
chargement de la classe
dans le navigateur et
interprtation des
donnes (son, texte,
MALO/ JJ MONTOIS
image)-
25
OS
toto.class
Squenceur
dinstructions
pcodes
Piles et registres
JVM
Mon ordinateur
...
lload address
ladd;
lstore address;
jsr address;
Programme JAVA
compil en pcode
26
Jeu de registres internes de 32 bits pour stocker les donnes traites, et traiter selon
linstruction pcode prsente dans le registre dinstruction.
- S : registre pointeur (Stack) de pile vers la 1ire variable locale de la mthode en cours dexcution.
- PC:
PC Program Counter , registre indiquant l@ de linstruction pcode en cours dexcution
- Optop, Frame : registres pointeur: sommet de la pile des oprandes, et zone de stockage des mthodes
5.
6.
Une pile LIFO pour transmettre paramtres, espace des variables locales, et adresses de retour
aux mthodes
7.
Une pile FIFO doprandes pour stocker les arguments/rsultats des instructions pcodes
8.
9.
Une zone de stockage des segments de pcodes des mthodes ainsi que la table des symboles.
Processeur JVM
Instr pcode en cours
instr
PC
Reg dinstruction
Reg Program counter
OPTOP
Segment de
mmoire
pile
VARS
Arguments
FRAME
et
pile
Oprandes
rsultats
Zone de stockage des
mthodes
pile
- IUT ST MALO/ JJ MONTOIS -
27
La compilation du programme
DocFooter.class avec la commande
javap -c DocFooter, donne le
source assembleur JVM suivant:
Method DocFooter()
0 aload_0
1 invokespecial #1
4 return
Method void init()
0 aload_0
1 sipush 500
4 bipush 100
6 invokevirtual #2
9 aload_0
10 aload_0
11 ldc #3
13 invokevirtual #4
16 putfield #5
19 aload_0
20 aload_0
21 ldc #6
23 invokevirtual #4
26 putfield #7
29 return
Method void paint (java.awt.Graphics)
0 aload_1
1 new #8
4 dup
5 invokespecial #9
8 aload_0
9 getfield #5
12 invokevirtual #10
15 ldc #11
17 invokevirtual #10
20 invokevirtual #12
23 bipush 100
25 bipush 15
27 invokevirtual #13
30 aload_1
31 aload_0
32 getfield #7
35 sipush 290
38 bipush 15
40 invokevirtual #13
43 return
28
}
Garbage collector
Zone de
stockage des
mthodes
Zone de gestion de
la pile LIFO
Mmoire
Mthodes
Tas (HEAP)
Pile
Seulement en cas
dutilisation de mthodes
conues directement en
langage machine de la cible
Interprteur java
Rsolution
des liens
ClassLoader
JNI
Vrificateur
Fichier de classes
excuter
- IUT ST MALO/ JJ MONTOIS -
29
classe(s
) locales
classe(s)
machineX
classe(s)
machineY
Lors de lappel dune classe donne, la recherche seffectue en priorit dans lespace des
classes locales. Ainsi, aucune classe tlcharge ne peut se faire passer pour une classe
systme, en crasant loriginal, mme si elle modifie sont nom,
- IUT ST MALO/ JJ MONTOIS -
30
Voyons, voyons,
ce pcode tentet-il de fabriquer
des pointeurs ??
pcode de
MaClasse.java
Les types darguments passs lors des appels de mthodes sont corrects
Le pcode ne tente pas de passer outre les restrictions daccs (public, private, )
- IUT ST MALO/ JJ MONTOIS -
31
ClasseLoader
Bytecodes issus du
rseau ou localement
www.
Source
JAVA
Vrificateur
c:\...
Compilateur
JAVA
Interprteur
Bytes-code
JAVA
Gnrateur
de codes
Runtime
32
Un seul
langage
machine
Compilateur
JAVA Pentium
(*.class)
Compilateur
JAVA Sparc
(*.class)
Compilateur
JAVA PowerPC
(*.class)
Un interprteur
quelconque
interprteur
JAVA Pentium
0 aload_0
1 sipush 500
4 bipush 100
6 invokevirtual #2
Machine virtuelle,
(JVM)
interprteur
JAVA Sparc
interprteur
JAVA PowerPC
33
OS TRe intgr
Tini de Dallas semiconductors
Support 68 pins avec processeur
interface ethernet, RS232, I2C, CAN
34
Chargement codes de
lapplication;
configurations,
35
Envoi/rception de
sms
MODEM GSM
WAVECOM
Carte JAVA IPJV-ES
Envoi de
message sms
Message sms
reu
Processus commands
- IUT ST MALO/ JJ MONTOIS -
36
Plateforme de
dveloppement logiciel
La carte JAVA
Liaison ethernet
10base-T
Liaison RS232
6 entres
analogiques
.java
.class
.class
Tlchargement
Logiciel
rsident
- IUT ST MALO/ JJ MONTOIS -
Lapplication
37
38
3.
4.
5.
J2ME (JAVA 2 Micro Edition) Production dapplications Java pour les systmes
embarqus (MIDlet).
MIDlet Architecture dfinie avec des configurations (ressources minimales
ncessaires pour accueillir la plateforme JAVA et des profils permettant de complter la
configuration avec des fonctionnalits spcifiques au matriel)
39
JVM
Architecture distribue
JVM
CVM
Workstation/semi-embarqu
Architecture embarque
contrainte
Plusieurs processeurs virtuels selon le type dapplication: JVM, KVM, CVM, CardVM,
- IUT ST MALO/ JJ MONTOIS -
40
http://java.sun.com/javase/index.jsp
41
Versions
JAVA
Nom de
code
1991
2000
Versions
1.0, 1.1,
1.2, 1.3
JCP
Anne de
sortie
1.4
Merlin
2001
1.4.1
Hopper
2002
1.4.2
Mantis
2003
Tiger
2004
Dragonfly
2006?
Mustang
fin 2006?
Dolphin
2008?
1.5
1.5.1
Versions
JAVA
Taille
compresse
Java 1.0
Nombre
de
packages
Nombre
de
classes
211
Java 1.1
8,6 Mo
23
477
Java 1.2
20 Mo
59
1524
J2SE 1.3
30 Mo
76
1840
J2SE 1.4
47 Mo
135
2990
J2SE 1.5
44 Mo
166
3270
Java SE 6
53 Mo
Java SE 7
En construction
42
Pause culturelle
Jules Ferry
John ct du 1er dispositif automatis de traitement des donnes que lon
nommait pas encore ordinateur. John Von Neumann est bien trop peu connu,
pourtant il est l'origine de l'architecture encore utilise aujourd'hui par
tous les processeurs !
43
-2Outillages ddition, de
compilation, dexcution
du code JAVA
compilateur
interprteur
debugger
diteur texte
44
javac fichier.java
La commande
compilation
fichier.class
Le fichier source
pcodes
-classpath chemin
-d repertoire
-encoding nom
-g
-nowarn
-O
-verbose
45
c:\j2sdk1.4.2
c:\ j2sdk1.4.2 \bin
c:\ j2sdk1.4.2 \demo
c:\ j2sdk1.4.2 \include
c:\ j2sdk1.4.2 \lib
java.exe
javac.exe
appletviewer.exe
Visionneur dapplet
permet
dexcuter
lapplet.
- IUT STqui
MALO/
JJ MONTOIS
- un fichier *.html contenant 46
diteur
de texte
essai.class
compilateur
eeddiitt essai.java
javac.exe,
javac.exe celui-ci produit le fichier essai.class
jjaavvaacc essai.java
interprteur
jjaavvaa essai.class
exemple.html
insertion dans
une page HTML
<html>
''
viewer
aapppplleettvviieew
weerr exemple.html
Le nom du fichier source *.java doit tre absolument identique (casse comprise) au
nom de la classe compiler:
47
Fentre de compilation
et d'excution en
session ligne de
commande
Fentre d'dition. On
peut prendre
WORDPAD ou EDIT
comme diteur de
texte!
48
CLASSPATH = c:\j2sdk1.4.2\lib;.
49
50
Sous windows XP
Ouvrir le panneau de
cliquer
Crer, modifier
une variable systme
51
Excuter
une
applet
Fentre donnant
la structure de la
classe principale
Excuter une
application
Construire le
fichier *.class
Fentre
ddition du
fichier *.java
Compiler le
fichier *.java
52
2) Donner le nom de la
classe principale: Bonjour.
Si cest une application
(mthode main), cocher la
case Application Project
3) Enregistrer le fichier
projet Bonjour.jpr dans un
rpertoire de travail
53
5) Prciser le
rpertoire o se
trouve la plateforme
JAVA Sun
6) Prciser le
rpertoire o se
trouve les librairies
de classes JAVA
7) Prciser le
rpertoire o sera
dpos tous vos fichiers
54
8) Saisir le code
source de Bonjour.java
Attention, le nom de la
classe doit tre identique au
nom du fichier
10) Excuter
Bonjour.java
9) Compiler
Bonjour.java
11) Rsultats
de lexcution de
Bonjour.java
55
Contenu du rpertoire de
travail tpjava aprs
compilation
Fichier
compil
de pcodes
Fichier
projet
Fichier
source
ClassNotFoundException
Cest un message derreur qui apparat souvent lorsque la variable CLASSPATH est mal configur, entre
autre, lorsquon a pas dfinit le rpertoire de travail o se trouve notre classe recherche par le compilateur.
56
Plateforme
professionnelle,
ncessitant une station de
travail muscle :
PENTIUM 2 3 Ghz, au
moins 512Mo de RAM,
Windows XP ou LINUX
57
58
Pause culturelle
Il y a cent quatre-vingt cinq ans naissait George Boole, le pre fondateur de la logique
moderne qui a contribu l'avnement de l'informatique. C'est travaux posent les bases
de ce qu'on nomme l'algbre boolenne. George Boole y dveloppe une nouvelle forme de
logique, la fois symbolique et mathmatique. Le but : traduire des ides, des concepts
en quations, leur appliquer certaines lois (et, ou, non) et retraduire le rsultat en
assertions logiques.
L'histoire commence comme un conte de Charles Dickens, dans le dcor d'une ville
industrielle d'Angleterre. George Boole nat le 2 novembre 1815 Lincoln, dans le
Lincolnshire. Issu d'une famille pauvre, il n'aura pas les moyens financiers d'aller
l'universit. Ses capacits intellectuelles sont cependant remarquables; seul (ou
presque), il apprend le latin, l'allemand, le franais et l'italien qu'il matrise dj
l'adolescence. Oblig de travailler pour soutenir sa famille, il devient enseignant 16 ans.
Quatre ans plus tard, il fonde et dirige sa propre cole. C'est ce moment que le jeune
Boole, dcidment autodidacte modle, se plonge dans l'tude des mathmatiques
auxquelles son pre l'avait initi ds l'enfance. Bnficiant des moyens de l'Institut de
Mcanique de sa ville, il se confronte aux uvres d'Isaac Newton, Pierre-Simon Laplace
et Joseph-Louis Lagrange. Mais trs vite, il commence ses propres recherches. En 1839,
il publie sa premire tude dans le Cambridge Mathematical Journal. Cette publication lui
permet de s'imposer petit petit comme une personnalit importante du monde des
mathmatiques. Daprs [http://www.histoire-informatique.org/portraits/ ]
59
LAMARTINE
60
struct Data {
fct1() { }
fct2 () { }
fct3() { }
.
int i = 123;
float f = 23.15;
char c = a;
};
Des donnes
Schma objet:
Donnes membres
Mthodes membres
(Cest linterface!)
class Data {
int i=123;
float f=23.15;
char c=a;
fct1() { }
fct2() { }
fct3() { }
.
}
+
Donne une classe !
61
Avec une classe ont fabrique des objets (on dit instancier)
Une classe
class Data {
D2
D3
instanciation
Dn
}
Une classe reprsente un
moule,
avec lequel, on
moule
fabrique
autant
dobjets
distincts que lon souhaite
On peut assimiler la
dfinition dune classe
comme la cration dun
nouveau type de donne
}
Ampoule
courant= 2
allumer()
eteindre()
class Data {
A1
A2
A3
intensifier()
diminuer()
An
}//fin MonProgramme
clignoter()
Nxobjets de type
Ampoule
62
Une classe est un modle ou encore un moule avec lequel on cre des objets par une
opration d'instanciation.
cercle1
cercle2
ram
Les mthodes
float rayon;
float perimetre;
float aire;
int couleur;
Cration
de 2
espaces
mmoire
classe Cercle {
public static void main ()
{
Cercle cercle1 = new Cercle(15);
usage
Cercle () { . };
float circonference () { .... };
float surface () { . };
void fillcolor () { };
getrayon () { };
setrayon (){ . };
- IUT ST MALO/ JJ MONTOIS -
63
Cercle cercle1;
cercle1
cercle1
@
(Mmoire)
@
objet
cercle1
64
3
D1
D2
D3
Mthode
principale
}//fin
NomObjet<nomVariable>
= <valeur dinitialisation>
NomObjet
65
}//fin
<variable> = NomObjet<nomfct>(arg1,
arg2, , argn)
NomObjet
Variable pour
recevoir le
rsultat retourn
ST MALO/ JJ MONTOIS par- IUT
la mthode
Liste des
arguments passs
la mthode
66
La surcharge de mthodes
Une mthode est dite surcharge si elle permet plusieurs passages de paramtres diffrents.
Exemple:
int somme (int a, int b)
{ return (a+b); }
Le compilateur reconnat la
mthode grce sa signature
Crer une surcharge de mthodes, autorise le traitement dune mme action avec des
arguments de types diffrents.
Exemple:
matrice
67
Le constructeur est identifi par son nom qui est celui de la classe et par le fait qu'il est sans
type retourn.
Il peut y avoir plusieurs constructeurs surchargs (avec des arguments diffrents la cration
des objets)
class MaClass {
private String uneChaine;
MaClass (String s) { uneChaine = s; }
MaClass () { uneChaine = " " ; }
}
Les constructeurs initialisent
soit une chane s, soit une chane
vide la cration de l'objet
class MonProgramme {
Class TestString {
char UnTableau [] = {a, b, c, d};
String s1= new String () //string vide
Un petit exemple
pour la route
String s2= new String (" il fait beau "); //s2 vaut " il fait beau "
String s3 = new String (s2); //que vaut s3?
String s4 = new String (UnTableau);
String s5- IUT
= " lhomme
est un
prdateur pour
ST MALO/
JJ MONTOIS
- lhomme ";
69
Un exemple complet
Point.class
Rectangle.class
2 mthodes
2 constructeurs
70
Exploiter les classes Point, et Rectangle en construisant une classe CreerObjet incorporant ces
2 classes:
Point.class
Rectangle.class
CreerObjet.class
Affiche largeur,
hauteur, surface de R1
bouge R2 et affiche sa
nouvelle position
A lexcution
Largeur de
Hauteur de
Surface de
Position x
Position y
Position x
Position y
R1: 100
R1: 200
R1: 20000
de R2: 23
de R2: 94
de R2: 40
de R2: 72
java CreerObjet.class
71
Je passe
un entier
{
int i = 0;
StringBuffer s = new StringBuffer("abc");
methode1( i , s );
System.out.println("i=" + i + ", s=" + s);
}
}
// i=0, s=abcd
Je passe
une
- IUT ST MALO/ JJ MONTOIS rfrence
-
72
Le passage par valeur utilise le biais de la pile CPU; la variable i est recopi dans celle-ci; methode1() utilise une
copie de i. Impossibilit de modification de la valeur originale.
Le passage par rfrence est similaire un passage par adresse. La methode1() cre une adresse (ou rfrence)
temporaire rfrenant directement la valeur originale de lobjet. Attention, possibilit de modifier la valeur
originale, faire attention si ce nest pas souhaitable.
PILE
@retour
i
methode2( )
methode1 ( entier, sb )
entier
sb
methode1 ( i , s )
@retour
s
"abc"
2 rfrences
rfrenant le
mme objet
73
instance Classe1
nombre=10
objet
instance Classe1
nombre=10
objet
instance Classe1
nombre=10
objet1
instance Classe1
nombre=11
instance Classe1
nombre=11
instance Classe1
nombre=12
instance Classe1
nombre=12
instance Classe1
nombre=12
instance Classe1
nombre=12
74
Importation de la
bibliothque de
classes dE/S
Mthode
principale
Mthode println
permettant laffichage
sur le flux out
import java.io.*;
public class Exemple1
{ public static void main (String args[])
{ int nb = 2;
System.out.println("hello" + nb + "fois");
}
}
Oprateur + de
concatnation
out
println("hello"+nb+"fois")
Hello 2 fois
75
-4Langage JAVA
Les bases
76
bloc de plusieurs lignes, ou /** ... */ commentaire prcdent une variable, fonction, classe,
afin dtre trait par lutilitaire javadoc qui construit un fichier documentation HTML du source
java .
Les entiers reprsents en notation exponentielle utilisent les symboles e ou E (2.02e2 = 202)
Les boolens sont reprsents par des valeurs true ou false.
Les caractres sont reprsents entre simples quotes (A) , et les chanes de caractres entre
doubles quotes " "
- IUT ST MALO/ JJ MONTOIS -
77
Types de base:
Etendue de
dfinition
Entiers:
boolea
n
true/false
byte
-128..127
==, !=, <, >, <=, >=,+, -, *, /, %, ++, --,<<, >>, >>>, &,
|, ^ , (transtypage)
short
-32768..32767
voir byte
int
-2147483648 2147483647
voir byte
long
-9223372036854775808 9223372036854775807
voir byte
char
'\u0000 '\uffff'
==, !=
Flottants:
float
NaN,
-1.4023984 e-45 3.40282347 e38
==, !=, <, >, <=, >=, +, -, *, /, %, ++, --, <<, >>, >>>,
&, |, ^ , (transtypage)
double
NaN,
-4.94065645841243544 e-324
1.79769313486231570 e308
voir float
boolean (true/false), byte (1 byte), char (2 bytes), short (2 bytes), int (4 bytes), long (8 bytes), float (4 bytes), double (8 bytes).
Les variables peuvent tre dclares n'importe o dans un bloc.
Les affectations non implicites doivent tre castes (sinon erreur la compilation).
78
Reprsentation des rels dans le standard IEEE 754. Un suffixe f ou d aprs une valeur
numrique permet de spcifier le type. Exemples : double x = 145.56d ; float y = 23.4f ;
Une constante est dclare comme une variable avec le mot final en en-tte: final int N=18;
Les constantes sont gnralement crites en majuscule. De faon gnrale, tout lment
dclar final ne pourra tre redfini ou modifi par la suite (par surcharge en cas d'hritage).
final int MACONSTANTE = 0;
Une variable doit tre obligatoirement initialise lors de sa dclaration, avant son exploitation!
int i;
i = i+1
int i = 0;
i = i+1
CercleRond
Conventions
maFonction
Nom de classe
Nom de fonction
Constante
CONSTANTE_PI
79
class TestsTypes {
= Byte.MAX_VALUE;
= Short.MAX_VALUE;
= Integer.MAX_VALUE;
= Long.MAX_VALUE;
Rsultats lexcution
81
FORMATAGE DECIMAL - Exemple d'affichage format de nombres rels Vincent MAGNIN (EUDIL)
import java.text.NumberFormat;
import java.text.DecimalFormat;
public class Formatage
{
public static void main (String[] args)
{
//Premire mthode :
NumberFormat monFormat = NumberFormat.getNumberInstance();
getNumberInstance
monFormat.setMinimumFractionDigits(2);
monFormat.setMaximumFractionDigits(2);
System.out.println( monFormat.format (Math.PI));
//Seconde mthode :
DecimalFormat monFormatDecimal = new DecimalFormat("0.000E0");
System.out.println ( monFormatDecimal.format(Math.PI) );
System.out.println ( monFormatDecimal.format(123456) );
System.out.println ( monFormatDecimal.format(0.098765) );
System.out.println ( monFormatDecimal.format(-123456) );
System.out.println ( monFormatDecimal.format(-0.098765) );
DecimalFormat monFormatDecimal2 = new DecimalFormat("0.###E0");
System.out.println (monFormatDecimal2.format(0.098765));
System.out.println (monFormatDecimal2.format(0.12));
System.out.println (monFormatDecimal2.format(-123456));
//Afficher sous forme de pourcentage :
DecimalFormat monFormatDecimal3 = new DecimalFormat("###.# %");
System.out.println ( monFormatDecimal3.format(0.098765) );
}
}
82
/*
// .
*/
Commentaires destins au gnrateur de documentation javadoc :
/**
@ est le prfixe
de la variable
de commentaire
@param
@return
@see
.
.
*/
@deprecated
@exception
@param
@return
@see
@author
@version
83
/**
mthode de conversion en radians
@return La valeur de l'angle en radians
*/
public double toRadian() { return valeur*Math.PI/180.0; }
/**
addition de 2 angles
@param a angle ajoute a VALEUR
@see #multiplier
*/
public void ajouter(angle a) { }
/**
Fonction sinus
@return la valeur radian
@see #cosinus
@see #tangente
*/
public double sinus() { return Math.sin(toRadian());}
84
85
java.applet
java.awt
java.awt.image
java.awt.peer.
java.io
entrees/sorties.
java.lang
java.net
java.util
API jdk141.lnk
86
La bibliothque java.lang
dveloppe
La
bibliothque
demande
87
2- Le package java.util.
- Calendar:
- Bitset:
grer un vecteur de bits sur lesquels on excute des oprations logiques, ET, OU, NON,
- Timer:
- Date:
grer le temps
- Random:
88
floatValue()
Boolean,
Byte
String toBinaryString (inti) Retourne une reprsentation i dun int non sign en base
Integer,
Long,
valueOf (Strings)
Float,
Double,
Character,
intValue ()
String
longValue ()
valueOf (Strings)
Les
classes wrapper stockent une valeur du type correspondant, elles offrent des
mthodes permettant les tches de conversion (int String, float int, )
- IUT ST MALO/ JJ MONTOIS -
89
Grce ces classes, on peut par exemple effectuer la conversion d'une chane de
caractres en nombre entier, un nombre float en chane de caractres ou en type entier,
"+unCaractere );
"+uneAutreChaine);
"+unEntier);
"+unAutreEntier);
"+chaineFloat );
"+xReverse );
"+entier);
"+chaineBin );
C'est aussi un moyen de promouvoir un type simple en objet Ex: Float X = Float (1.123);
- IUT ST MALO/ JJ MONTOIS -
90
1 String
java.lang.Object
|
+--java.lang.String
String c = machaine.toLowerCase();
String c = machaine.toUpperCase();
boolean c = machaine.equals(autrechaine);
- IUT ST MALO/ JJ MONTOIS -
91
7 8 9 10 11 12 13 14 15
R e s e a u x & T e l e c o m s
charAt(7)
charAt(0)
charAt(length()-1)
5 6
7 8 9 10 11 12 13 14 15
R e s e a u x & T e l e c o m s
substring(8, 15)
m o
p a r c i
0
4 5
n i e
6 7
p a r c im o n i e
- IUT ST MALO/ JJ MONTOIS -
92
int n = machaine.indexOf('x');
7 8 9 10 11 12 13 14 15
R e s e a u x & T e l e c o m s
indexOf(x)
1 2
I l
4 5
7 8 9 10 11 12 13 14 15
f a i t
0
String c = machaine.trim();
b e a u
2
!
6
7 8 9 10
I l f a i t b e a u !
93
String() Initializes a newly created String object so that it represents an empty character sequence.
String (byte[]bytes) Constructs a new String by decoding the specified array of bytes using the platform's default charset.
String (byte[]ascii, inthibyte) Deprecated.This method does not properly convert bytes into characters. As of JDK1.1, the preferred way to do
this is via the String constructors that take a charset name or that use the platform's default charset.
String (byte[]bytes, intoffset, intlength) Constructs a new String by decoding the specified subarray of bytes using the platform's default charset.
String (byte[]ascii, inthibyte, intoffset, intcount) Deprecated.This method does not properly convert bytes into characters. As of JDK1.1, the
preferred way to do this is via the String constructors that take a charset name or that use the platform's default charset.
String (byte[]bytes, intoffset, intlength, StringcharsetName) Constructs a new String by decoding the specified subarray of bytes using the
specified charset.
String (byte[]bytes, StringcharsetName) Constructs a new String by decoding the specified array of bytes using the specified charset.
String (char[]value) Allocates a new String so that it represents the sequence of characters currently contained in the character array argument.
String (char[]value, intoffset, intcount) Allocates a new String that contains characters from a subarray of the character array argument.
String ( Stringoriginal) Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other
words, the newly created string is a copy of the argument string.
String ( StringBufferbuffer) Allocates a new string that contains the sequence of characters currently contained in the string buffer argume
Class TestString {
char UnTableau [] = {a, b, c, d};
Plusieurs faons
dinitialiser une
variable String
94
compareTo(String)
concat(String)
endsWith(String)
equalsIgnoreCase(String)
indexOf(String)
lastIndexOf(String)
lenght()
replace(char,char)
startsWidt(String int)
substring(int,int)
toLowCase()
toUpperCase()
trim()
95
2 StringBuffer
java.lang.Object
|
+--java.lang.StringBuffer
capacit
augmenter
96
Exemple:
getChars(int, int, char[], int) Caractres extraits de la StringBuffer et copis dans char[]
Insrer un caractre un index donn:
machane. setcharAt(1,a);
97
98
Les tableaux
Les tableaux sont des objets, ce sont des rfrences auxquelles il faut allouer de la
place mmoire. Ils sont dfinis par la syntaxe suivante:
char chaine[ ] = new char[24];
99
Lexcution du
constructeur
initialise lobjet
Ce programme va-t-il
fonctionner correctement?
Exemple: On veut initialiser 5 noms dans un tableau Noms[], puis les afficher
Initialisation interne:
String Noms[] = { "Durand" , "Dupont" , "Martin" , "Bartin" , "Fallot" , "Maudut" , "Zan"}
for (int i=0 ; i<=4 ; i++) { System.out.println (Noms[i]); }
affichage des noms
cration du tableau
contenant des chanes
de caractres (String)
Initialisation externe:
import java.lang.StringBuffer;
StringBuffer
String Noms[] = new String[5];
//Dclare le tableau de chanes de caractres
StringBuffer s = new StringBuffer(); //chane modifiable de caractres
char c;
Ajoute le caractre c
for (int i=0 ; i<=4 ; i++) {
try { while ((c= (char)System.in.read() ) != '\n') { s.append(c);} }
catch (Exception e) { System.out.println("Erreur: "+ e.toString());}
Noms[i] = s.toString(); //conversion Stringbuffer->String
}
la chane s
101
Excution
Nombre
dentiers
saisir
Saisie
des
entiers
102
Corrig tabn:
Nombre darguments en
ligne saisis
if (n==0) {
System.out.println ("Pas de donnes!.");
System.exit(1);
}
103
Les arguments peuvent tre dfinitivement inclus dans un programme ou fournis au moment
de lexcution, dans ce cas, on utilise un tableau passerelle args[ ].
Les arguments sont systmatiquement traduits sous forme de chane de caractres (String). Il
est de la responsabilit du programmeur deffectuer la conversion dans le type adquat au
moment de la rcupration dans le tableau args[] [voir les classes wrapper]
Tabn.java
args
C:\Java Tabn 3 1 2 3
"3"
"1 "
"2"
"3"
104
class TestTemps {
public static void main (String args[])
{
long cptdeb, cptfin; // compteurs de ms
}
}
Il y a plein de mthodes intressantes dans la classe System.
Soyez curieux, aller voir!
Afficher la diffrence
des cpt de ms
105
Java.lang.Objet
|
+-- java.lang.Math
La class Math contient des mthodes pour excuter de nombreuses oprations de base telles
que les oprateurs mathmatiques exponentiel, logarithme, racine carr, & fonctions
trigonomtriques.
1. Math.abs(), Math.min(), Math.max(), Math.floor(), Math.round(), Math.ceil(),
2. Math.sin(), Math.cos(), Math.tan(), Math.asin(), Math.acos(), Math.atan(),
Math.atan2(), Math.toDegrees(), Math.toRadians(),
3. Math.log(), Math.exp(), Math.pow(), Math.sqrt(),
Remplir une table de
12 entiers alatoires
Remplir une table de 256
chantillons de sinusode
class TabAleatoire {
public static void main (String args[])
{ int matable[ ] = new int[12];
for (int i = 0; i<matable.length; i++)
{
matable[i] = (int)(Math.random ()*100);
}
}
}
class TabSinus {
public static void main (String args[])
{ int tabsin[ ] = new int[256];
tabsin[0] = 0;
for (int i = 1; i< tabsin.length; i++)
{ tabsin[i] = (int)255*Math.sin (2*PI/i);}
}
}
- IUT ST MALO/ JJ MONTOIS -
106
107
108
Les oprateurs
Ces oprateurs ont la mme signification que leur homonyme en C.
Les oprateurs par ordre de priorit croissante sont les suivants :
. [] ()
++ -- ! ~ instanceof
* / %
+ << >> >>>
< > <= >=
== !=
&
^
|
&&
||
?:
= op=
,
Priorit croissante
109
s += "usement";
Deviner la
valeur de s?
}
- IUT ST MALO/ JJ MONTOIS -
110
Oprateurs aritmtiques:
+ (x + y));
111
class OpFlottant
{
public static void main (String args[])
{
float x = Float.parseFloat(args[0]);
float y = Float.parseFloat(args[1]);
System.out.println("x: " + x);
System.out.println("y: " + y);
System.out.println("x+y: " + (x + y));
System.out.println("x-y: " + (x - y));
System.out.println("x*y: " + x * y);
System.out.println("x/y: " + x / y);
System.out.println("x%y: " + x % y);
}
}
- IUT ST MALO/ JJ MONTOIS -
112
le complment
class BitaBitComp
{
public static void main (String args[ ])
{
int x = Integer.parseInt (args[0]);
System.out.println(x);
int y = ~x;
System.out.println(y);
}
}
113
Oprateurs de dcalage:
class Shift
{
public static void main (String args[ ])
{
int x = 7;
System.out.println("x= " + x);
System.out.println("2xdcalage logiques droite :" + x >> 2);
System.out.println("1xdcalage gauche
Dcalage logique
dun mot binaire
114
Oprateurs relationnels:
class Relation
{
public static void main (String args[ ])
{
int x = Integer.parseInt (args[0]);
int y = Integer.parseInt (args[1]);
int z = Integer.parseInt (args[2]);
System.out.print ("x = "
+ x);
+ y);
System.out.println ( z = "
+ z);
+ (x!=z));
}
}
- IUT ST MALO/ JJ MONTOIS -
115
Oprateur de concatnation:
class Concatenation {
public static void main (String args[ ])
{
String chaine1 = "Java " + "est ";
String chaine2 = "presque " + "du C!";
System.out.println(chaine1 + chaine2);
}
}
- IUT ST MALO/ JJ MONTOIS -
116
Les instructions de
contrle
Les instructions de contrle sont quasiment les mmes que celles utilises en C/C++
IF-THEN-ELSE
class IfPrenom {
public static void main (String args[])
{
char Initiale;
System.out.println("Entrer la premire initiale du prnom:");
try{ Initiale = (char)System.in.read(); } catch(Exception e) {System.out.println(Erreur);}
117
Exemple:
int x=-4, y=+2;
(x+3) >0 && (y-3) <0? x++: --y;
Quelle est
lexpression
value?
118
class ExempleSimple {
public static void main (String args[]) {
int A = 10; int B = 12; int X;
System.out.println ("L'entier A vaut "+ A);
System.out.println ("L'entier B vaut "+ B);
if (A < B) System.out.println ("A est plus petit que B");
else if (A == B) System.out.println ("A est gal a B");
else System.out.println ("A est plus grand que B");
System.out.println ("comptons de 1 "+ A);
int somme = 0;
int fact = 1;
for (int i = 1;i <= A;i++) {
System.out.print(" "+i);
somme += i;
fact *= i;
rsultats
}
System.out.println();
System.out.println("la somme de tous les nombres de 1 "+ A + " vaut "+ somme);
System.out.println("la factorielle de "+ A+" vaut "+ fact);
}
}
- IUT ST MALO/ JJ MONTOIS -
119
SUIVANT LE CAS-FAIRE
Un caractre ou un
entier
Switch ( expr1 )
{
case cond1: { instruction(s); }; [break;]
case cond2: { instruction(s); }; [break;]
...
default: { instruction(s); };
}
class ChoixPrenom {
public static void main (String args[ ])
{
char Initiale;
System.out.println("Entrer la premire initiale du prnom:");
try { Initiale = (char)System.in.read(); } catch (Execption e) {System.out.println(Erreur);}
switch (Initiale) {
case -1: System.out.println Prnom curieux!?"); break;
case 'j': System.out.println("Votre prnom est Jules!"); break;
case 'v: System.out.println("Votre prnom est Vincent!"); break;
case 'z': System.out.println("Votre prnom est Zorro!"); break;
default: System.out.println("Impossible de dire votre prnom!");
}
}
}
- IUT ST MALO/ JJ MONTOIS -
120
BOUCLE ITERATIVE
Condition
de dpart
Incrmentation
Condition
de fin
class Salut
{
public static void main (String args[ ])
{
int i;
for (i = 0; i < 5; i++)
{
int k;
System.out.println ("Salut!");
}
}
}
121
122
TANTQUE-FAIRE
Insrer try-catch,
sinon erreur la
compilation
class BoucleWhile
{
public static void main (String args[])
{
char input;
int nbrcpt;
System.out.println Entrer un nombre entre 0 et 10:");
try {n = (char)System.in.read(); } catch (Exception e) {System.out.println(Erreur);}
nbrcpt = Character.digit(n, 10);
if ((numToCount > 0) && (nbrcpt < 10))
{
int i = 1;
while (i <= nbrcpt) {
System.out.println(i);
i++;
}
}
else
System.out.println( "Nombre hors intervalle!");
}
}
- IUT ST MALO/ JJ MONTOIS 123
FAIRE- TANTQUE
CASSER LA BOUCLE
break (label);
continue (label);
return (code)
exit (niveau)
class BreakBoucle
{
public static void main (String args[])
{
int i = 0;
do {
System.out.println("Je suis dans la boucle!");
i++;
if (i > 100) break;
}while (true);
}
}
- IUT ST MALO/ JJ MONTOIS -
124
125
Six exercices:
1. Quatre oprations
Ecrire un programme qui lit deux entiers passs en paramtres sur la ligne de commande et affiche leur
somme, leur diffrence, leur produit et leur quotient. Attention, tester la division par 0.
2. Compter de 5 en 5
Ecrire un programme qui compte de 5 en 5 de 0 jusqu' 100 puis affiche la somme des nombres trouvs.
Ecrire deux versions : l'une utilisant une boucle FOR et l'autre utilisant une boucle WHILE. Donner le
temps dexcution en ms pour une valeur final=500 puis 1000. Utiliser la mthode
System.currentTimeMillis() qui retourne un type long (nbr de ms)
126
4. Mois
Ecrire un programme qui lit le nombre entier entre 1
et 12 pass en paramtre et qui affiche le nom du
mois correspondant. On pourra utiliser un tableau ou
l'instruction switch.
5. Calculette
Ecrire le programme qui lit 3 paramtres : un nombre
entier, un caractre reprsentant l'opration (+,-,x ou /)
et un second nombre entier, puis qui effectue le calcul
ainsi indiqu et affiche le rsultat. (Eviter les divisions
par 0). Nota : ne pas utiliser le signe * comme
paramtre, il a une signification particulire: rfrence
aux fichiers d'un rpertoire.
6. Epargne et intrts
Soit le dpt d'un CAPITAL la caisse d'pargne; vous
dsirez savoir son volution avec un taux dintrt
compos de TAUX/an au bout de 1an, 2 ans, 3 ans, ,
10 ans, N annes. Ecrire le programme JAVA qui
indique cette volution en indiquant en paramtres sur
la ligne de commande: CAPITAL, TAUX, N
127
Corrig 1. 4 oprations
public class operation {
public static void main(String args[]) {
if (args.length<2) {
System.out.println("Syntaxe: operation <arg1> <arg2> <CR>");
System.exit(1);
Convertir en integer les donnes saisies en
}
ligne de cde
else {
int n0=Integer.parseInt (args[0]);
int n1=Integer.parseInt (args[1]);
int som=n0+n1;
int diff=n0-n1;
int prod=n0*n1;
System.out.println("arg1+arg2 : "+som);
System.out.println("arg1-arg2 : "+diff);
System.out.println("arg1*arg2 : "+prod);
if (n1==0) System.out.println("Division par zro !");
else {
int quot=n0/n1;
System.out.println("arg1/arg2 : "+quot);
}
}
}
- IUT ST MALO/ JJ MONTOIS 128
}
somme=somme+ 5*i;
System.out.println(5*i);
}
double date1 = System.currentTimeMillis ();
System.out.println("Somme : " + somme);
Retourne le nbr
de ms couls
129
Test de
saisie
}
}
130
import java.io.*;
public class MaxMin2 {
public static void main(String args[]) {
int MAX=0,MIN=0,SOMME=0;
int i=0, N;
float MOYENNE=0.0F;
char c;
Rcupration du
nombre N dentiers
saisir
Saisie de N entiers
Traitement
131
132
Corrig 5. Calculette -
133
import java.text.DecimalFormat;
public class epargne {
public static void main(String args[]) {
if (args.length <3) {
System.out.println("Syntaxe: epargne <capital> <taux> <nbr ans> CR");
System.exit(1);
}
double capital= Double.parseDouble (args[0]);
double taux=Double.parseDouble (args[1]);
int
n=Integer.parseInt (args[2]);
134
135
stdin
stdout
stderr
System.in
System.out
136
Les flux in, out, sont en fait deux objets possdant respectivement les mthodes println ()
pour afficher les donnes sur l'cran et read () pour saisir des donnes au clavier.
System.out.println() et System.in.read ()
Lire le clavier
int read ()
int read (char[] destcbuf)
int read (char[] destcbuf, int off, int len)
read ( destcbuf )
Afficher lcran
Sans retour de ligne:
print(boolean b), print(char c), print(double d), print(float f), print(int i), print(long l), print(Object obj),
print(String s), print(char[] s).
Avec retour de ligne:
println(boolean x), println(char x), println(double x), println(float x), println(int x), println(long x),
println(Object x), println(String x), println(char[] x).
- IUT ST MALO/ JJ MONTOIS -
137
out
Println("hello"+nb+"fois")
Hello 2 fois
138
read (Nom)
import java.io.*;
public class Exemple2
{ public static void main (String args[])
{ byte Nom[] = new byte [100]; //cration d'un buffer
System.out.println("Salut tout le monde!!");
System.out.println("Alors, votre nom ...?");
System.in.read (Nom); //entre des caractres
System.out.println("Bienvenue " + Nom);
}
}
Le compilateur nous
informe clairement qu'il
faut surveiller l'entre de
donne en captant toutes
exceptions issues des
entres-sorties.
Rsultat de la compilation:
c:\exojava>javac Exemple2.java
exo2.java:8: Exception java.io.IOException must be caught, or it must be declared in the
throws clause of this method.
System.in.read (Nom); //entre des caractres
1 error
139
Rsultat de la compilation:
C:\exojava>java Exemple3
Salut tout le monde!!
Alors, votre nom ...?
toto
Bienvenue [B@75dfb47a
Lecture
clavier
protg
140
4ime exemple: effectuons une lecture du clavier protge avec un bon usage des
string car un byte n'est pas un char (qu'on se le dise!)
import java.io.*;
public class Exemple4
{ public static void main (String args[])
{ byte Nom[] = new byte [100]; //cration d'un buffer
System.out.println("Salut tout le monde!!");
System.out.println("Alors, votre nom ...?");
try
{ System.in.read (Nom); //entre des caractres }
catch (Exception e)
{ System.out.println("Erreur: "+ e.toString());}
String s = new String (Nom, 0); //conversion en string
System.out.println("Bienvenue" + s);
Rsultat de la compilation:
c:\exojava>javac Exemple4.java
Note: exemple4.java uses or overrides a deprecated API. Recompile with
"-deprecation" for details.
1 warning
c:\exojava>java exemple4
Salut tout le monde!!
Alors, votre nom ...?
toto
Bienvenue toto
141
println(s)
C = (char)System.in.read ()
import java.io.*;
public class Exemple5
{ public static void main (String args[])
{
StringBuffer s = new StringBuffer();
char c;
System.out.println("Taper n'importe quoi ...");
try
{while((c=System.in.read())!= '\n') { s.append(c);}}
catch (Exception e)
{ System.out.println("Erreur: "+ e.toString());}
Rsultat de la compilation:
c:\exojava>javac Exemple5.java
c:\exojava>java Exemple5
Taper n'importe quoi ...
je tape, et je tape ... <CR>
je tape, et je tape ...
142
Au dpart, la chane de
rception est vide
StringBuffer tmp;
char C= '\0';
try {
Cette procdure permet de rentrer au clavier tous types de donnes sous le format dune String, puis, laide
des mthodes des types wapper, procder une conversion vers le type initial.
caractre
entier
rel
chane
C = (char)System.in.read ()
Crer une
String S
Convertir S
en int, double, float,
Integer.parseInt (S)
Double.parseDouble(S)
Float.parseFloat(S)
143
Rsultats de sortie:
1
2
FA
FI
MASTER-DRI
144
145
Le Scanner (suite)
146
147
classe Personne
Lhritage
Lhritage permet de construire de nouvelles classes
drivant d'une classe prexistante et hritant des
donnes et mthodes de celle-ci tout en laissant la
possibilit d'ajouter de nouvelles donnes et
fonctions. L'ensemble forme une hirarchie de
classes. Chaque niveau amne une prcision
croissante.
Nom
Prnom
Rue
Ville
Code Postal
NEW
New
Init
NEW
ChangerNom
NEW
ChangeCodePostal
NEW
Afficher
NEW
classe Employe
classe Client
N de compte
Etat du compte
Dpartement
New
NEW
New
NEW
Init
NEW
Init
NEW
Debiter
NEW
ChangerDept
NEW
Crediter
NEW
NEW
Afficher
Afficher
NEW
classe Confidentielclient
classe ConfidentielEmploye
Salaire
Code secret
New
NEW
NEW
New
Init
NEW
Init
NEW
NEW
ChangeCodeSecret
NEW
ChangeSalaire
NEW
Afficher
Afficher
NEW
148
Le polymorphisme
Consiste donner un mme nom une mthode qui est ensuite partage plusieurs niveaux
d'une mme hirarchie de classes, chaque classe dans la hirarchie excutant cette fonction
d'une manire qui lui est propre.
classe A
donnes
MaFonction (
NEW
classe B
donnes
MaFonction (
NEW
149
Implmentation de lhritage
class Etudiant {
public float notemath;
public float noteinfo;
public void moyMath (float unenote) {
...
}
public void moyInfo (float unenote) {
...
}
public float moyTotale () {
...
}
}// fin classe Etudiant
Etudiant
Attributs:
- notemath
- noteinfo
Mthodes:
- moyMath()
- moyInfo()
- moyTotale()
Etudiant1erAGTR
Attributs:
- notemath
- noteinfo
- mention
Ah, lhritage,
quel malheur!
Lhritage - Dfinitions
Une
classe est toujours construite partir d'autre classe dont elle est drive.
Une classe drive est une sous-classe d'une sur-classe.
class point {
float x, y;
sur-classe
setX(int)
point
setY(int)
drivation
cercle
}
class cercle extends point
classe
{ cercle ();
deplace (int a, int b);
fillcolor (int couleur);
.
- IUT
ST MALO/ JJ MONTOIS }
x, y;
setX(), setY(),
deplace()
fillcolor()
151
Exemple:
152
modificateur d'accs
Une classe possde des droits d'accs spcifis en suffixe par un modificateur d'accs:
Modificateur
Commentaires
rien
public
final
abstract
class A1 {
class A2 {
class B1 {
class B2 {
MaClasse1.java
MaClasse2.java
- IUT ST MALO/ JJ MONTOIS -
153
Exemple:
float x, y;
setX(int)
setY(int)
}
Point p1;
Oui!
154
Une variable static n'est copie qu'une seule fois en RAM, elle est commune tous les objets crs
class UneClasse {
static int toto;
D1
D2
D3
instanciation
mmoire
Dn
}
toto
mmoire
UneClasse ()
{ toto++; }
}
}
}
155
Une mthode static comme exit() appartenant la classe System peut-tre appele
comme suit: System.exit(); ou bien tout simplement exit();
156
}
MonProgramme.java
c:\testtp
class A
{
}
class B
{
}
class C
{
c:\programmes
class D
{
classpath = ;c:\programmes;
- IUT ST MALO/ JJ MONTOIS -
157
Variable globale:
Variable locale:
Rgle gnrale
Une variable dclare dans un bloc de code n'est visible que dans ce bloc et dans
les blocs qui y sont imbriqus
class Portee
{
int x = 0;
void methode1()
{ int y;
y = x; //y vaut 0
}
void methode2()
{ int z = 1;
z = y; //incorrect!
}
- IUT ST MALO/ JJ MONTOIS -
y est locale
methode1
y est invisible
de methode2
158
Fonctions et mthodes
Les fonctions ont la mme syntaxe qu'en C.
Les arguments d'un type de base (int, double...) sont passs par valeur alors que les objets
sont passs par rfrence.
public
private
protected
159
class autreClasse {
int a = Forme.x;
Forme.y = b;
z = Forme.cl;
a = Forme.getX();
Forme
private int x, y;
protected cl;
protected setX
(int);
protected setY
(int);
public int getX ();
public int getY ();
private fillColor ();
Diverses tentatives
daccs
Cercle
setX() et setY();
getX() et getY();
surface ();
circonference();
modifrayon();
deplaceRel();
int a = c1.getX() + d;
x = x + d;
y = y + d;
mais
int b = c1.getY() + d;
c1.setX(a); c1.setY(b);
160
On rcapitule
Accessibilit dune
mthode, dune variable:
par dfaut
public
private
protected
Oui
Oui
Oui
Oui
Oui
Oui
Non
Oui
Non
Oui
Non
Non
Oui
Oui
Non
Oui
Non
Oui
Non
Oui
161
Le mot cl super
Excuter le constructeur de la classe mre
abstract class Forme {
int posx, posy;
}//fin classe
public Afficher () { }
}//fin classe
constructeur dans
hirarchie
}//fin classe
public Afficher () { }
la
super.Afficher ();
}//fin classe
recherche
Affiche dans la
hirarchie
162
1re utilisation:
UnObjet
variables
mthodes
class Cercle {
int x, y; //centre du cercle
int rayon;
public Cercle (int ox, int oy) { x=ox; y=oy;}
public Cercle (int ox, int oy, int r) {
this(ox, oy);
Le 2ime constructeur appelle
rayon = r;
le 1ier constructeur de l'objet
}
rfrenc par this
} //fin class
- IUT ST MALO/ JJ MONTOIS -
163
2me utilisation:
x = x;
y = y;
Ou bien crire
public class Point {
public int x = 0;
public int y = 0;
// le constructeur!
public Point (int a, int b) {
x = a;
y = b;
}
}//finclass
164
(objet instanceof Object ) est toujours gal true si objet est diffrent de null (toute classe
hrite de Object et donc tout objet est une instance d'une classe drive de Object).
class ClasseTruc { }
class ClasseMachin extends ClasseTruc { }
class ClasseBidule {
void methodeBidule () {
ClasseTruc objet1 = new ClasseMachin ();
ClasseTruc objet2 = new ClasseTruc ();
Object objet3 = new ClasseTruc ();
Object objet4 = null;
boolean res1 = objet1 instanceof ClasseMachin ; // true
boolean res2 = objet1 instanceof ClasseTruc ; // true
boolean res3 = objet2 instanceof ClasseMachin ; // false
boolean res4 = objet3 instanceof ClasseTruc ; // true
boolean res5 = objet4 instanceof Object; // false
}
}
- IUT ST MALO/ JJ MONTOIS -
165
166
interface NouvelleInterface
{
// Corps de NouvelleInterface
}
...
// Fin du fichier MaClasse.java
- IUT ST MALO/ JJ MONTOIS -
167
crayon
protected int longueur;
protected int diametre;
public Crayon ();
public Crayon (int , int );
public int quelleLongueur();
public int quelDiametre();
public void changeLongueur(int);
crayonCouleur
protected String couleur;
public CrayonCouleur ( );
public CrayonCouleur (int, int, String );
public CrayonCouleur(String );
public String quelleCouleur();
public void changeCouleur(String);
- IUT ST MALO/ JJ MONTOIS -
168
// en mm
Variables membres
// en mm
// cre un crayon standard
Les
Lesconstructeurs
constructeurs
Les mthodes
169
Classe drive
class CrayonCouleur extends Crayon {
Dautres
mthodes
170
// Nom du joueur.
public String nom;
//Score maximal
int scoMax;
private int leScore;
/*
* Constructeur par dfaut :
* nom:"inconnu" ,
* score initial:0 ,
* score maximal:100 .
*/
public score() { }
//Constructeur avec initialisation du nom.
public score(String nom) { }
// mthode de lecture du score
public int getScore(){
getScore }
//mthode d'criture du score
public void setScore (int sco) { }
//mthode pour ajouter des points au score.
public void ajoute (int points) { }
//mthode d'affichage du score
public void affiche () { }
TD Jeu
testscor.class
score.class
171
public score () {
nom="inconnu";
leScore=0;
scoMax=100;
}
172
sc.scoMax=200;
sc.affiche();
Afficher les champs de lobjet sc
173
Exercices (suite)
1.2 - Objet d
Crer une classe de qui fournira la mthode tirage() renvoyant un nombre entier entre 1 et 6 tir au hasard. Pour
effectuer le tirage au hasard, utiliser la mthode Math.random() et les mthodes de la classe Double de java.lang.
Ecrire un petit programme de test testde de la classe de qui affiche 10 lancs de d.
TD Jeu
testde.class
de.class
174
public class de {
int tirage(){
tirage
Double D=new Double (6*Math.random()+1);
int resultat=D.intValue();
Traduction en entier
return resultat;
alatoire entre 1 et 6
}
void affiche()
affiche
{ System.out.println("rsultat du jet de d:" +
tirage());}
};
Dclaration, et cration
en mmoire d'un d
Affiche le tirage
aleatoire de 10 jets
175
classe score
classe de
classe jeude
TD Jeu
de.class
score.class
jeude.class
176
Corrig:
Crer un d
Procder N tirage
des 2 joueurs
indiquer le gagnant
177
classe scoreadd
classe score
classe de
class jeude
TD Jeu
de.class
score.class
jeude.class
scoreadd.class
178
179
180
2. Calculs dangles
Crer une classe angle initialise par une mesure
d'angle en degrs (entre 0 et 360 degrs). Ecrire des
mthodes d'addition, de soustraction et de multiplication
par un entier [veiller rester dans l'intervalle 0-360:
mthode recadre()]. Ajouter une mthode de conversion
en radians (180 degrs = pi radians), puis des mthodes
de calcul du sinus, du cosinus et de la tangente
(package java.Math). Ecrire un petit programme de test
de la classe angle et de ses mthodes.
import java.text.DecimalFormat;
public class angle {
double valeur;
public angle() { valeur=0;}
public angle(double ini) { valeur=ini; recadre(); }
//mthode qui ramne la valeur entre 0 et 360
public void recadre() { }
// mise en forme pour affichage
public String toString() {
DecimalFormat f=new DecimalFormat();
return f.format(valeur) + '';
}
//mthode de conversion en radians
public double toRadian() { }
//addition
public void ajouter(angle a) { }
//multiplication par un entier
public void multiplier(int n) { }
//fonctions trigo.
public double sinus() { }
public double cosinus() { }
public double tangente() { }
}
181
import java.text.DecimalFormat;
public class angle {
double valeur;
public angle() { valeur=0; }
public angle (double ini) {
valeur=ini;
recadre();
}
addition dangle
multiplication par un entier
Fonctions trigonomtriques
182
183
3 Affichage de Date et heure . Le package java.util contient la classe Calendar permettant de grer les dates et les
heures. En utilisant cette classe, et manipulant les constantes: HOUR_OF_DAY , MINUTE,MONTH, DAY_OF_MONTH,YEAR,
DAY_OF_WEEK, ainsi que les mthodes getInstance(), get, Ecrire un programme qui dit bonjour et donne l'heure et la date.
On utilisera 2 tableaux:
public static String MOIS[] = {"janvier","fevrier","mars", "avril", "mai", "juin", "juillet", "aout", "septembre", "octobre", "novembre", "decembre"};
public static String JOUR[] = {"dimanche","lundi","mardi", "mercredi", "jeudi", "vendredi", "samedi"};
Si lheure est <= 12H crire Bonjour; si > et <= 18H crire Bon aprs-midi; si >18H crire Bonsoir
Mthode simpliste
import java.util.Date;
class TestDate {
public static void main(String args[])
{
Date Maintenant = new Date();
System.out.println(Maintenant);
}
}
184
Rcupre l'heureminute-date
Affichge de
l'heure-minutedate
185
186
5. Calculs de segment
La classe Segment comprend:
Deux variables prives de type Point, extr1 et extr2, reprsentant les coordonnes (entires) des
extrmits d'un segment dans un repre; o extr2>= extr1.
- Un constructeur Segment ( ) qui dfinit les 2 extrmits
- la mthode longueur() retourne la longueur (entier) du segment.
- la mthode appartient(), indique si un point de coordonnes entires donne en argument appartient
ou non au segment
- une mthode qui redfinit la mthode public String toString() de faon crire un segment
d'extrmits A(4,14) et B(12,-35) sous la forme : segment [A(4,14) ; B(12,-35)]
une classe TestSegment permettant de tester la classe Segment.
La mthode main doit rcuprer trois paramtres entiers : origine, extrmit du segment et
coordonne du point tester.
10
12
20
- IUT ST MALO/ JJ MONTOIS -
187
188
-7Parlons de familles de
classes sous JAVA
La
cration
dune
classe
utilisateur nest pas isole; elle
sinsre dans une arborescence
de classe du langage java, une
place drive dune classe java
amont. Chaque classe en amont
de votre classe, apporte un
savoir-faire selon lensemble
des mthodes, variables, et
constantes quelle contient.
189
Class
System
Objet
Thread
ThreadGroup
Throwable
Boolean
Character
Math
Number
Integer
String
StringBuffer
Classloader
Process
Runtime
Float
Long
Double
MaClasse {
Classe Object
Object est la classe de base de Java. Tous les objets crs hritent des mthodes suivantes :
public class Object
{
public final Class getClass ();
public String toString() ;
public boolean equals(Object obj);
public int hashCode() ;
protected Object clone () throws CloneNotSupportedException ;
public final void wait();
public final void wait(long milli_secondes) ;
public final void wait(long milli_secondes, int nano_secondes) ;
public final void notify() IllegalMonitorStateException;
public final void notifyAll() throws IllegalMonitorStateException ;
protected void finalize() throws Throwable
}
191
UneListe
objet1
objet2
objet3
objet4
ListeCle
objeti
cl i
objetj
cl j
objetk
cl k
objetn
cl n
Permet de crer
un dictionnaire
192
Classe Vector
java.lang.Object |
+--java.util.AbstractCollection |
+java.util.AbstractList |
+--java.util.Vector
Saisie de
litem
Excution de laction
associe
194
add (int index, Object element) : Insert the specified element at the specified position in this Vector.
boolean add (Object o) : Appends the specified element to the end of this Vector.
void
addElement (Object obj) : Adds the specified component to the end of this vector, increasing its size by one.
void
Object elementAt (int index) : Returns the component at the specified index.
boolean equals (Object o) : Compares the specified Object with this Vector for equality.
Object firstElement() : Returns the first component (the item at index 0) of this vector.
int
indexOf (Object elem) : Searches for the first occurence of the given argument, testing for equality.
void
insertElementAt (Object obj, int index) :Inserts the specified object in this vector at the specified index.
lastIndexOf(Object elem) : Returns the index of the last occurrence of the specified object in this vector.
Object remove (int index) : Removes the element at the specified position in this Vector.
boolean remove (Object o) : Removes the first occurrence of the specified element in this Vector.
boolean removeElement(Object obj) :Removes the first (lowest-indexed) occurrence of the argument from this vector.
void
void
setElementAt(Object obj, int index) :Sets the component at the specified index of this vector.
void
int
size()
195
Classe Hashtable
Utilisation dune cl qui peut-tre une String, un int, un objet
* Cration d'un dictionnaire d'auteurs index par cl
import java.util.*;
public class Dictionnaire {
private Hashtable ListeAuteurs;
public Dictionnaire () { ListeAuteurs = new Hashtable();}
private String creerUneCle(Auteur e) {
String tmp;
tmp = (e.quelPrnom()).charAt(0)+ e.quelNom();
tmp.toUpperCase();
return tmp;
D'abord crer une cl. Par
}
exemple une String de lettres
< Mthodes de gestion du dictionnaire >
196
197
Suite
public void supprimeUnAuteur(String p, String n) {
String cle = creerUneCle(p, n);
Auteur aClasse = (Auteur) ListeAuteurs.get(cle);
if (aClasse != null) {
ListeAuteurs.remove(cle);
System.out.println(p + " " + n + " a t supprim ");
}
else System.out.println(p + " " + n + " est inconnu ! ");
}
public void afficheLesAuteurs() {
if(ListeAuteurs.size() != 0) {
Enumeration enumAuteur = ListeAuteurs.keys();
while (enumAuteur.hasMoreElements()) {
String cle = (String) enumAuteur.nextElement();
Auteur aClasse = (Auteur) ListeAuteurs.get(cle);
aClasse.afficheUnAuteur();
}
}
else System.out.println("Pas d'auteur dans cette liste");
}
- IUT ST MALO/ JJ MONTOIS -
198
boolean contains(Object value) Tests if some key maps into the specified value in this hashtable.
boolean containsKey(Object key) Tests if the specified object is a key in this hashtable.
boolean containsValue(Object value) Returns true if this Hashtable maps one or more keys to this value.
boolean equals(Object o) Compares the specified Object with this Map for equality
Object
get(Object key) Returns the value to which the specified key is mapped in this hashtable.
Object
put(Object key, Object value) Maps the specified key to the specified value in this hashtable.
int
hashCode() Returns the hash code value for this Map as per the definition in the Map interface.
remove(Object key) Removes the key (and its corresponding value) from this hashtable.
int
String
toString() Returns a string representation of this Hashtable object in the form of a set of entries, enclosed
in braces and separated by the ASCII characters ", " (comma and space).
199
Exemple: "Je suis une image = dune ville spciale : totoville / dun pays imaginaire : iutland"
Dlimiteurs = { =, :, / }
5 chanes extraites:
Constructeurs:
200
throws NoSuchElementException
201
Exemple:
import java.util.StringTokenizer;
class Token {
public static void main (String args[])
{
String s = "Je suis une image=dune ville spciale:totoville/dun pays imaginaire:iutland";
StringTokenizer st = new StringTokenizer (s , "=:/" );
while ( st.hasMoreTokens() ) { System.out.println(st.nextToken()); }
}
};
202
Exercice Agenda tlphonique trs simple. (Etudier au pralable la gestion de fichiers sur disque dur)
1) Ecrire et tester le programme permettant de saisir au clavier des chane de caractres ayant la structure
suivante: <nom> <prnom>=<numro de tlphone> (Ex: Laverdure Achille=0299218500). Puis stocker
successivement les chanes dans un fichier sur disque dur appel agenda.txt. A laide de lditeur notepad,
vrifier que votre fichier est bien lisible aprs excution du programme.
agenda.txt
"Laverdure Achille=0299218500"
2) Ecrire et tester le programme permettant de lire le fichier agenda.txt, et dafficher le numro de tlphone
dune personne dont on donne le nom en ligne de commande (java <nom>); grer le cas des homonymies.
Mthode: On chargera dabord toute les chanes du fichier dans un objet e type Vector, puis laide dun objet de
type StringTokenizer on oprera une extraction des champs utiles (nom, numro tel, ) quon affichera lcran.
StringTokenizer
agenda.txt
"Laverdure"
"Laverdure"
"Achille"
"0299218500"
Un objet Vector
"Laverdure Achille=0299218500"
3) Ecrire et tester le programme permettant de fusionner les deux programmes ci-dessus travers llaboration
dun menu simple :
1 Crer un Agenda
2 Recherche Numro
3 Ajouter un Nom
203
204
205
206
try
{ Instruction(s) surveilles }
catch (ClasseException exceptionInterceptee)
{ Instruction(s) traitant l'erreur }
Exception intercepte
dans le bloc surveill.
Cest un objet!
207
208
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
Constructeurs:
Exception() Construit une Exception sans spcifier de message.
Exception (String s) Construit une Exception en spcifier de message.
Mthodes hrites de la classe java.lang.Throwable:
fillInStackTrace, getLocalizedMessage, getMessage, printStackTrace, printStackTrace,
printStackTrace, toString
209
try
{ bloc dinstruction(s) surveilles; acquisition de ressources }
catch (ClasseException1 exceptionInterceptee) { Instruction(s) traitant l'erreur1 }
catch (ClasseException2 exceptionInterceptee) { Instruction(s) traitant l'erreur2 }
catch (ClasseException3 exceptionInterceptee) { Instruction(s) traitant l'erreur3 }
On peut lever une exception avec linstruction throw (e) laquelle spcifie un objet e lancer
{
catch (IOException e )
IOException e = new IOException("Fichier non trouv");
{ instructions(s) traitant lerreur e }
throw (e);
}
- IUT ST MALO/ JJ MONTOIS 210
droulement du
programme
Bloc surveill
try
{
...
throw e ;
}
Exception
provoque
suite du
droulement
normal du
programme
exception
gnre: e
gestionnaire1
oui
e d e type1
gestionnaire2
oui
e d e type2
gestionnaireN
oui
e d e typeN
sortie immdiate du
programme si un
gestionnaire par dfaut
- IUT ST MALO/ JJ MONTOIS - n'est pas trouv.
211
Quand une exception de classe ClasseException est dclenche dans le bloc try, le
contrle passe au premier bloc catch qui traite la classe d'exception ClasseException. Ce
catch reoit en paramtre l'exception dclenche:
catch (ClasseException exceptionInterceptee).
Si aucun des catch n'est capable d'intercepter l'exception, le contrle est rendu au premier
catch capable d'intercepter une exception de classe ClasseException, parmi les mthodes
mmorises dans la pile d'excution et excutant un try-catch.
Si aucun catch n'est rencontr, la JVM indique l'exception qui est survenue et arrte le
thread dans laquelle elle est survenue (blocage complet du programme!).
Le bloc instructions d'un catch peut ventuellement redclencher l'exception intercepte
exceptionInterceptee pour la propager dans la pile d'excution, grce l'instruction:
throw exceptionInterceptee;
212
Exemple de traitement local d'une exception dclenche grce throw dans un bloc try et
intercepte par un des catch qui suivent :
class UneClasse
{
...
void methode ()
{
Leve d'une exception
try
{
...
Traitement de l'exception
throw new Exception ();
}
catch (Exception e)
{
System.out.println("Erreur: "+ e.toString());
// Traitement de l'exception
}
Type de l'exception
}
}
- IUT ST MALO/ JJ MONTOIS -
213
Autre exemple
class Classe2
{
Classe1 objet1 = new Classe1 ();
...
void methodeX ()
{
try
{
objet1.methode1 ();
// ...
}
catch (ClasseException exception1)
{ // Que faire en cas de problme ? }
// ... Eventuellement d'autres catch (...)
finally
{
// Le bloc finally est optionnel. Que faire aprs que le bloc try ou qu'un bloc catch aient t excuts ?
}
}
void methodeY () throws ClasseException
{
objet1.methode1 ();
...
}
}
- IUT ST MALO/ JJ MONTOIS -
214
q ()
{
.
try {
appel
m () throws classException
{
.
m ();
retour
}
catch (classException e) { }
}
Leve
dune
exception
}
Traitement
amont de
exception
215
216
(Tir de O. Dedieu)
Ce sont des instances de classes drivant de java.lang.Exception
La leve d'une exception provoque une remonte dans l'appel des mthodes jusqu' ce qu'un bloc
catch acceptant cette exception soit trouv. Si aucun bloc catch n'est trouv, l'exception est
capture par l'interprteur et le programme s'arrte.
Object getContent()
{
try
{
openConnection();
void openConnection()
throws IOException
}
catch(IOException e) {
...
}
finaly {
...
}
...
openSocket();
sendRequest();
receiveResponse();
throws IOException
{
void sendRequest()
write(header);
write(body); //ERROR
217
}
E. Puybaret, "du C/C++ au java"
218
219
Les Interfaces
Une interface est une spcification formelle de classe.
Une interface permet de dfinir ce que les classes drives (les sous-classes) doivent offrir
comme mthodes en leur laissant la responsabilit de l'implmentation (pas de contenu).
interface Bipede {
[final] int nbPieds = 2;
[abstract] void UneMethode ();
}
class Homme implements Bipede {
}
- IUT ST MALO/ JJ MONTOIS -
220
teste si l'appareil
est enclenche
public interface appareilElectrique
{
public boolean estEnclenche();
public void alimente (boolean alim);
}
221
Implmentation radio
on ne peut changer de
frequence que si la radio est
en marche. Retourne true si
le changement a ete effectue
222
Implmentation - lampe
223
Implmentation - rallongeElectrique
gestion de l'interrupteur
rallonge2.branche(lampeCuisine);
System.out.println("la radio du salon est "+ (radioSalon.estEnclenche() ? "allumee" : "eteinte"));
System.out.println("on appuie sur l'interrupteur de la rallonge 1");
rallonge1.enclenche();
System.out.println("la radio du salon est maintenant "+ (radioSalon.estEnclenche() ? "allumee" :
"eteinte"));
}//fin main
}//fin class testElectrique
225
226
227
Production
dinformations:
Rseau, HD,
des bytes,
des floats,
des doubles,
des objets,
Consommation
dinformations:
Rseau, HD,
Les flux sont spcialiss, ils ne possdent pas les mmes mthodes, et les
mmes types manipuls.
Certains flux sont rustiques, dautres plus riches en mthodes et types.
228
java.lang.Object |
+--java.io.OutputStream
java.lang.Object |
+--java.io.InputStream
Ces 2 classes abstract qui reprsentent les socles des flux, ne sont pas instanciables! Elles
sont les classes mres de toutes les autres classes dfinissant les flux spcifiques:
FileOutputStream, BufferedOutputStream, DataOutputStream,
DataOutputStream BufferedInputStream,
DataInputStream,
DataInputStream
Les mthodes de gestion de ces 2 flux de base sont peu nombreuses; on ne peut y lire ou
crire que des bytes. La plupart du temps, InputStream, et OutputStream seront wrappe
avec un flux plus riche en types de donnes, et en mthodes.
229
void close ()
OutputStream
boolean markSupported ()
void close ()
void flush ()
void reset()
230
Les flux de
base, ou
socles des
autres flux
dE/S
class File
final class FileDescriptor
abstract class InputStream
class ByteArrayInputStream
class FileInputStream
class FilterInputStream
class BufferedInputStream
class DataInputStream (interface DataInput)
class LineNumberInputStream
class PushbackInputStream
class PipedInputStream
class SequenceInputStream
class StringBufferInputStream
abstract class OutputStream
class ByteArrayOutputStream
class FileOutputStream
class FilterOutputStream
class BufferedOutputStream
class DataOutputStream (interface DataOutput)
class PrintStream
class PipedOutputStream
class RandomAccessFile (interfaces DataInput,DataOutput)
class StreamTokenizer
- IUT ST MALO/ JJ MONTOIS -
Trs
utilises
231
Interfaces
Interface DataInput
Interface DataOutput
Interface FilenameFilter
Exceptions
class EOFException
class FileNotFoundException
class IOException
class InterruptedIOException
class UTFDataFormatException
232
Flux texte:
L'information subit une transformation formatage- afin que le flux reoive ou
transmette en dfinitive une suite de caractres.
Les flux DataInput(Ouput)Stream, et FileInput(Ouput)Stream sont des flux binaires
Le nom des flux se dcompose en un prfixe, et un suffixe; Ex: DataInputStream
InputStream
Flux dentre
Flux doctets
0B,1A,00,CF, 03,
OutputStream
Reader
Flux de caractres
Flux de sortie
B,A,F,G,
Writer
233
On dit que lon wrap le stream au sein dun stream plus adquat
DataInputStream
FileInputStream
readByte, readDouble,
readchar, readfloat,
readline, readLong, ...
toto
Fichiers dentre:
FileInputStream fis = new FileInputStream("toto");
DataInputStream d = new DataInputStream( fis );
- IUT ST MALO/ JJ MONTOIS -
234
Les flux sont spcialiss, ils ne possdent pas les mmes mthodes, et les mmes types manipuls.
Certains flux sont rustiques, dautres plus riches en mthodes et types
Java.lang.Object
+ -- Java.io.InputStream
+ -- java.io.FileInputStream
int available()
Returns nbr of bytes that can be read from the file input stream without blocking.
void close()
Closes this file input stream and releases any system resources associated with
the stream.
protected void finalize() Ensures that the close method of this file input stream is called when there are
no more references to it.
FileDescriptorget FD()
Returns the FileDescriptor object that represents the connection to the actual file
in the file system being used by this FileInputStream.
int read()
Reads up to b.length bytes of data from this input stream into an array of bytes.
int read(byte[]b, intoff, intlen) Reads up to len bytes of data from this input stream into an array of bytes.
long skip(longn)
Skips over and discards n bytes of data from the input stream.
235
Fichiers de sortie:
File f = new File(toto);
FileOutputStream fos = new FileOutputStream(f);
DataOutputStream d = new DataOutputStream(fos);
DataOutputStream
FileOutputStream
File
toto
236
Java.lang.Object
Ne lit que des bytes
+ -- Java.io.InputStream
+ -- java.io.FileInputStream
int available ()
Returns the nbr of bytes that can be read from this file input stream without blocking.
void close()
stream.
Closes this file input stream and releases any system resources associated with the
protected void finalize() Ensures that the close method of this file input stream is called when there are no more
references to it.
FileDescriptor getFD()
Returns the FileDescriptor object that represents the connection to the actual file
the file system being used by this FileInputStream.
int read()
Reads up to b.length bytes of data from this input stream into an array of bytes.
int read (byte[]b, intoff, intlen) Reads up to len bytes of data from this input stream into an array of bytes.
long skip (longn)
Skips over and discards n bytes of data from the input stream.
237
in
Java.lang.Object
+ -- Java.io.InputStream
+ -- java.io.FilterInputStream
+ -- java.io.DataInputStream
Extrait doc Sun)
int read (byte[]b)
Reads some number of bytes from the contained input stream and stores them into the buffer array b.
int read (byte[]b, intoff, intlen)
Reads up to len bytes of data from the contained input stream into an array of bytes.
boolean readBoolean ()
See the general contract of the readBoolean method of DataInput.
byte readByte ()
See the general contract of the readByte method of DataInput.
char readChar ()
See the general contract of the readChar method of DataInput.
double readDouble ()
See the general contract of the readDouble method of DataInput.
float readFloat ()
See the general contract of the readFloat method of DataInput.
void readFully (byte[]b)
See the general contract of the readFully method of DataInput.
void readFully (byte[]b, intoff, intlen) See the general contract of the readFully method of DataInput.
int readInt ()
See the general contract of the readInt method of DataInput.
String readLine () Deprecated.This method does not properly convert bytes to characters. As of JDK1.1, the preferred way to read lines of
text is via the BufferedReader.readLine() method. Programs that use the DataInputStream class to read lines can be converted to use the
BufferedReader class by replacing code of the form:
DataInputStream d =newDataInputStream(in); with: BufferedReader d =newBufferedReader(newInputStreamReader(in));
long readLong ()
See the general contract of the readLong method of DataInput.
short readShort ()
See the general contract of the readShort method of DataInput.
int readUnsignedByte ()
See the general contract of the readUnsignedByte method of DataInput.
int readUnsignedShort ()
See the general contract of the readUnsignedShort method of DataInput.
String readUTF ()
See the general contract of the readUTF method of DataInput.
staticString readUTF (DataInputin) Reads from the stream in a representation of a Unicode character string encoded in
Java modified UTF-8 format; this string of characters is then returned as a String.
int skipBytes (intn)
See the general contract of the skipBytes method of DataInput.
238
Java.lang.Object
+ -- Java.io.OutputStream
+ -- java.io.FilterOutputStream
+ -- java.io.DataOutputStream
Extrait doc Sun)
void flush() Flushes this data output stream.
int size() Returns the current value of the counter written, the number of bytes written to this data output stream so far.
void write (byte[]b, intoff, intlen) Writes len bytes from the specified byte array starting at offset off to the underlying output stream.
void write (intb) Writes the specified byte (the low eight bits of the argument b) to the underlying output stream.
void writeBoolean (booleanv) Writes a boolean to the underlying output stream as a 1-byte value.
void writeByte (intv) Writes out a byte to the underlying output stream as a 1-byte value.
void writeBytes (Strings) Writes out the string to the underlying output stream as a sequence of bytes.
void writeChar (intv) Writes a char to the underlying output stream as a 2-byte value, high byte first.
void writeChars (Strings) Writes a string to the underlying output stream as a sequence of characters.
void writeDouble (doublev) Converts the double argument to a long using the doubleToLongBits method in class Double,
and then writes that long value to the underlying output stream as an 8-byte quantity, high byte first
void writeFloat (floatv) Converts the float argument to an int using the floatToIntBits method in class Float, and then writes
that int value to the underlying output stream as a 4-byte quantity, high byte first.
void writeInt (intv) Writes an int to the underlying output stream as four bytes, high byte first.
void writeLong (longv) Writes a long to the underlying output stream as eight bytes, high byte first.
void writeShort (intv) Writes a short to the underlying output stream as two bytes, high byte first.
void writeUTF (Stringstr) Writes a string to the-underlying
output stream
using UTF-8- encoding in a machine-independent manner.
IUT ST MALO/
JJ MONTOIS
239
On peut aussi doter un flux d'un tampon afin d'optimiser les changes:
DataOutputStream
FileOutputStream
BufferedOutputStream
Les donnes sont d'abord
enregistres dans le tampon.
Ds qu'il est plein, il est vid
dans le flux
toto.txt
Mise en uvre
DataOutputStream sortie = new DataOutputStream
(new BufferedOutputStream
(new FileOutputStream (toto.txt)));
240
flux standards: Ces flux de base, sont grs par la classe System
public final class java.lang.System extends java.lang.Object {
// Variables
public static PrintStream err;
public static InputStream in;
public static PrintStream out;
// Mthodes
public static void arraycopy (Object src, int src_pos, Object dst, int dst_pos, int length);
public static long currentTimeMillis ();
public static void exit (int status);
public static void gc();
public static Properties getProperties ();
public static String getProperty (String key);
public static String getProperty (String key, String def);
public static SecurityManager getSecurityManager ();
public static void load (String filename);
public static void loadLibrary (String libname);
public static void runFinalization ();
public static void setProperties (Properties props);
public static void setSecurityManager (SecurityManager s);
}
Exemple: System.out.println ( System.in.getClass().getName() );
rsultat : java.io.BufferedInputStream
- IUT ST MALO/ JJ MONTOIS -
241
242
import java.io.*;
243
classe File
Permet de manipuler, crer
des fichiers, rpertoires sur le
disque dur
Flux souvent wrap avec
DataInputStream ou
DataOutputStream pour
enrichir les oprations dE/S
de donnes
Les variables
Les constructeurs
Les mthodes
244
Constructeurs
File (File dir, String name)
Mthodes principales
boolean exists()
String getAbsolutePath() :renvoie le chemin complet d'accs au fichier sous forme absolue
String getName()
boolean isDirectory()
boolean isFile()
int length()
String[] list()
chanes.
245
246
Sortie.txt
}
}
(daprs JAVA par M. Morisson, Ed S&SM)
247
class LectureFichier {
public static void main (String args[]) {
byte buf[] = new byte[64];
try {
FileInputStream in = new FileInputStream("Monfichier.txt");
in.read(buf, 0, 64);
}
catch (Exception e) {
buf
System.out.println("Erreur: " + e.toString());
}
String s = new String(buf, 0);
System.out.println(s);
}
}
in
FileInputStream
Monfichier.txt
248
s
FileInputStream
tampon
try
src
{
FichierLecture Source = new FichierLecture(src);
FichierEcriture Destination = new FichierEcriture(dest);
s = new FileInputStream(Source);
d = new FileOutputStream(Destination);
dest
d
FileOutputStream
249
File fich2 = new File("newname"); // Fichier (ou rpertoire) avec un nouveau nom
boolean succes = fich.renameTo(
fich2 ); // Renommer le fichier (ou rpertoire)
fich
if (!succes) { //Le fichier na pas t renomm correctement }
250
251
class StockeObjet {
class DeStockeObjet {
public StockeObjet () {
public DeStockeObjet () {
ObjectOutputStream OO=
OO new ObjectOutputStream (FO);
ObjectInputStream OI=
OI new ObjectInputStream (FI);
OO.writeObject(Unobjet);
OO
Autreobjet=(UneClasse)OI.readObject
();
OI
OO.close()
OO
OI.close()
OI
writeObject(obj)
readObject()
OO
FO
obj
OI
FI
agenda.dat
252
Ecrire des objets et des donnes primitives (int, char, long, ) srialisable dans un flux est facile
f
tmp
Date, "Aujourdhui" ,
253
254
public transient int var1 = 10; //entier transient; non sauvegard lors dune srialisation
public int var2 = 20;
}
Si une instance de cette classe est srialise dans un flux, la variable 'var1' ne sera pas
sauvegarde,.Lors de la dsrialisation elle prendra la valeur 0, malgr la prsence de la
valeur 10 par dfaut. L'attribution d'une valeur par dfaut se fait lors de l'instanciation de
l'objet
La directive transient trouve des applications ds lors qu'une donne sensible ne doit en
aucun cas apparatre dans un fichier. Un mot de passe par exemple. Mais transient peut
galement permettre de "remettre zro" certaines valeurs.
255
EXERCICES:
1 Copie de fichiers
Ecrire un programme qui copie le contenu d'un fichier l'cran (par dfaut) ou dans un autre fichier. Les flots
d'entre et de sortie seront reprsents par les variables in de type InputStream et out de type OutputStream. Le
programme exigera au moins un paramtre qui sera le nom d'un fichier associ au flot d'entre. Si un second
paramtre est prsent il reprsentera le nom du fichier associ au flot de sortie, sinon on utilisera la console
cran reprsente par System.out.
256
257
258
259
260
Exercice4 (corrig) Crer un fichier stockant sur disque dur des objets
261
Exercice4 (corrig) Crer un fichier stockant sur disque dur des objets (suite)
262
-11La programmation
concurrente sous JAVA
-Les threadsDans ce chapitre, on
tudie laptitude de JAVA
au multiprocessing. Cest
dire sa capacit de
concevoir une application
mutitches, o lon a
rpartie dans plusieurs
classes les activits
procdurales.
263
Une application informatique peut-tre dcoupe en plusieurs tches indpendantes -threaddont le contrle et lordonnancement sont grs par un scheduler , ou noyau . Chacune
dentre elles prend en charge une fonction de commande ou de contrle spcifique.
Gestion Traitement
donnes
Gestion
rseau
port
rseau
noyau
Ordonnancement
des tches
Gestion Affichage
Un noyau doit pouvoir grer une application multi-thread selon 3 mcanismes fondamentaux:
La synchronisation entre threads
La communication entre threads
Lexclusion mutuelle sur ressource partag
264
(processus lgers)
Les threads JAVA sont grs par un scheduler (noyau) non premptif. SUN ne
prcise pas le mcanisme dordonnancement
K
scheduler
Les threads JAVA sont dfinis par le paquetage java.lang.Thread et linterface Runnable
t t
265
th1
Les diffrentes machines virtuelles Java n'auront pas forcment le mme comportement
Une JVM peut se comporter comme un noyau temps rel (pas de timeslicing) ou
comme un noyau premptif
266
T1
T2
T2.start ();
Priorit T1 =2
Priorit T2=2
JAVA intgre un excutif permettant de planifier lordre dans lequel sexcute les diffrents
threads
composants une application multitche.
La tche de lordonnanceur consiste slectionner le thread de plus haute priorit pour lui
affecter
le CPU.
Les plateformes JAVA ne sont pas toutes identiques au niveau du principe dordonnancement,
certaines utilisent le principe de temps partag, dautres plus rustiques se limite simplement
aider la commutation de threads sur la demande explicite de ceux-ci.
267
Fin
application
Dbut
application
th2
th3
th1
th2
th1
th2
th1
th1
268
Temps partag:
scheduler
Squenceur
dinstructions
pcodes
Piles et registres
thread1
thread2
thread3
thread4
thread5
JVM
269
Parmi les threads, certains ne sont pas lancs par lutilisateur, ce sont des processus
deamon: thread captant les vnements clavier, souris, thread garbage collector, ...
Garbage
collector
Clavier, souris
thread1
thread2
thread3
thread4
thread5
deameon : disk and execution monitor . Un dmon est un processus sexcutant en tache de fond. Il se lance
au dmarrage dun systme dexploitation et attend la validation des certaines conditions pour effectuer une ou plusieurs
actions. La plupart des dmons sont transparents pour les utilisateurs.
270
import java.lang.Thread
public class UnTread extends Thread
{
public void run
{
{
}
271
Instancier un Thread
class MonProgramme
{
public static void main ( String argv[] )
{
//dmarrer un thread
T1.stop ();
//arrter un thread
T1.suspend ();
//suspendre un thread
T1.resume ();
}
}
272
Le thread est dmarr, il peut dployer ses activits si sa priorit est la plus haute.
ACTIF:
Le thread de plus haute priorit est en excution, le CPU lui est allou
MORT:
le thread
reprend
l'excution
Crer
le thread
Arrter
la tche
stop()
resume()
new()
le thread
suspend
l'excution
cr
mort
wait(), sleep()
Activer
le thread
start()
suspend()
actif
Arrter
la tche
stop()
273
destroy()
interrupt()
sleep()
stop()
suspend()
resume()
wait()
yield()
274
checkAccess()
Determines if the currently running thread has permission to modify this thread.
countStackFrames()
currentThread()
destroy()
dumpStack()
Enumerate(Thread[])
Copies into the specified array every active thread in this thread group and its subgroups.
getName()
getPriority()
getThreadGroup()
interrupted()
isAlive()
isDaemon()
isInterrupted()
join()
join(long)
join(long, int)
Waits at most millis milliseconds plus nanos nanoseconds for this thread to die.
resume()
run()
If this thread was constructed using a separate Runnable run object, then that Runnable object's
run method is called; otherwise, this method does nothing and returns.
275
(Suite )
setDaemon(boolean)
setName(String)
setPriority(int)
sleep(long)
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number
of milliseconds.
sleep(long, int)
Causes the currently executing thread to sleep (cease execution) for the specified number of
milliseconds plus the specified number of nanoseconds.
start()
Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.
stop()
Forces the thread to stop executing. stop(Throwable) Forces the thread to stop executing.
suspend()
toString()
Returns a string representation of this thread, including the thread's name, priority, and thread group.
yield()
Causes the currently executing thread object to temporarily pause and allow other threads to execute.
276
Exemple, Thread et interface Runnable: DIP Genve, Alexandre Maret & Jacques Guyot
constructeur
permettant de nommer
le processus
277
Excution ??
class thread12
{
public static void main(String args[])
{
afficheur thread1 = new afficheur("1");
afficheur thread2 = new afficheur("2");
thread1.start();
thread2.start();
while (true)
{
System.out.println("je suis la tache principale !");
Thread.yield();
}
}
}
Rend le CPU
278
Lancement des
robots
class Robot
{ int vitesse;
String nom;
public Robot (int v, String n) { vitesse = v; nom = n;}
}
public void sleep (int tempo) { for (in i = 0; i<tempo; i++);}
279
La prochaine
fois, jprends un
pentium 500 Ghz
Gagn!!
PREMIERE LOI
Un robot ne peut nuire un tre humain ni laisser sans assistance un tre humain en danger.
DEUXIEME LOI
Un robot doit obir aux ordres qui lui sont donns par les tres humains, sauf quand de tels
ordres sont incompatibles avec la Premire loi
TROISIEME LOI
Un robot doit protger sa propre existence tant que cette protection n'est pas incompatible avec
la Premire ou la Deuxime loi.
281
Interface Runnable
Dune faon directe, on cre des thread partir de la drivation de la class thread.
Problme:
- Crer des threads drivant dune autre classe, notre classe application par exemple?
{
}
- IUT ST MALO/ JJ MONTOIS -
282
On dfinit la mthode
start
On dfinit la mthode
stop
283
Excution ??
class runnable12 {
public static void main(String args[]) {
afficheurRunnable run1 = new afficheurRunnable("1");
afficheurRunnable run2 = new afficheurRunnable("2");
run1.start();
run2.start();
while (true) {
System.out.println("je suis la tache principale !");
try {
Thread.sleep(20);
} catch (InterruptedException e) { }
}
}
284
Inconvnients
extends java.lang.Thread
Implements
java.lang.Runnable
285
Section
critique
Mmoire, variables,
mthodes, E/S, ...
Ressource
partage
Accs la
ressource
Thread2
Section
critique
Accs la
ressource
synchronized.
synchronized.
286
Exemple: Exclusion mutuelle: DIP Genve, Alexandre Maret & Jacques Guyot
Si le moniteur est dj occup, les
processus suivants seront mis en
attente. L'ordre de rveil des
processus n'est pas dterministe.
class mutexAcc
{
int accumulateur = 0;
public synchronized void stocke (int val ) { accumulateur += val;}
public int lit() { return accumulateur; }
}
synchronized
Stocke (8);
var = lit ();
Stocke (12);
accumulateur
287
L'utilisation de mthodes
synchronises trop longues peut
crer une baisse d'efficacit.
Avec Java, il est possible de placer
n'importe quel bloc dans un moniteur,
ce qui permet ainsi de rduire la
longueur des sections critiques.
void methode2() {
synchronized ( this ) {
// section critique...
}
}
288
avance
tourne
avance
tourne
Plusieurs tches
donnent des ordres de
mouvement dun Logo
Tortue
largeur
longueur
289
Scurisation des variable de classes (DIP Genve, Alexandre Maret & Jacques Guyot
Pour scuriser l'accs une variable de classe, il faut crer un moniteur commun toutes les
instances de la classe. La mthode getClass() retourne la classe de l'instance dans laquelle on
l'appelle. On peut maintenant crer un moniteur qui utilise le rsultat de getClass() comme "verrou".
class mutexStatic {
private int accumulateur = 0;
private static int acces = 0;
public synchronized void stocke(int val) {
accumulateur += val;
synchronized (getClass()) { acces += 1; }
}
public int lit() {
synchronized (getClass()) { acces += 1; }
return accumulateur;
}
290
Synchronisation en Threads
Il y a ncessite de synchroniser des threads dans certaines activits:
- Accs aux mmes ressources
- Enchanement dactivits
E/S
Thread
dacquisition
Thread de
traitement
291
Exemple: producteurs-consommateurs.
Soit un tampon born de n objets, un thread producteur et un thread consommateur.
producteur
FIFO
e
r
i
a
l
u
c
r
ci
tampon
consommateur
s
n objet
292
Exemple - tamponCirc.java
Le constructeur
cre un tampon de
taille lments
class tamponCirc {
private Object tampon[];
private int taille;
private int en, hors, nMess;
public tamponCirc (int taille) {
tampon = new Object[taille];
this.taille = taille;
en = 0; //index dans la fifo
hors = 0; //index hors la fifo
nMess = 0; //nbr de mesg ds la fifo
}
On
transmet
des objets
293
Exemple utiliseTampon.java
}
}
} //fin class producteur
class consommateur extends Thread {
private tamponCirc tampon;
public consommateur (tamponCirc tampon) {
this.tampon = tampon;
}
public void run() {
while (true) {
System.out.println("je preleve "+((Integer)tampon.preleve()).toString());
try {
Thread.sleep((int)(Math.random()*200)); // attends jusqu'a 200 ms
} catch (InterruptedException e) {}
}
- IUT ST MALO/ JJ MONTOIS }
} //fin class consommateur
294
Excution ...
class utiliseTampon {
...
je depose 165
je depose 166
je preleve 161
je depose 167
je preleve 162
je depose 168
je preleve 163
je depose 169
je preleve 164
je depose 170
je preleve 165
je depose 171
je preleve 166
je preleve 167
...
cons
tampon
5 objets String
maximum
295
import java.io.* ;
public class PipeEntreThread {
public static void main (String args []) throws IOException
{
PipedOutputStream sout = new PipedOutputStream () ;
DataOutputStream envoie = new DataOutputStream (sout) ;
MonThread thrd = new MonThread (sout) ; //affectation d'un tube de communication
thrd.start () ;
envoie.writeChars ("j'envoie un message\n") ;
envoie
}
DataOutputStream
}
envoie.writeChars();
envoie
PipedOutputStream
sout
recoit.readLine
();
recoit
296
Erreur 404
Page en construction
(livraison prvue dans le courant de lanne universitaire 2006-2007)
297
298
Label
Lis t
Scrollbar
Com ponent
Canvas
Button
Panel
Applet
Container
CheckBox
Choice
Window
Fram e
Dialog
299
300
1.Checkbox : Boutons
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.GridLayout;
public class CheckboxExemple extends java.applet.Applet
{
public void init()
{
setLayout(new GridLayout(5,1)); // mise en page
// voir les layouts
add(new Checkbox("pomme"));
add(new Checkbox("poire"));
add(new Checkbox("abricot", null, true)); // dja cliqu
CheckboxGroup groupe = new CheckboxGroup();
add(new Checkbox("oui", groupe, true));
add(new Checkbox("non", groupe, false));
}
}
301
import java.awt.Choice;
public class ChoiceExemple extends java.applet.Applet
{
public void init()
{
Choice c = new Choice();
c.addItem("pomme");
c.addItem("poire");
c.addItem("abricot");
c.addItem("prune");
c.addItem("fraise");
add(c);
}
}
302
1. List :
import java.awt.Label;
public class LabelExemple extends java.applet.Applet
{
public void init()
{
add(new Label("texte align gauche"));
add(new Label("texte centr", Label.CENTER));
add(new Label("texte align droite", Label.RIGHT));
}
}
import java.awt.List;
public class ListExemple extends java.applet.Applet
{
public void init()
{
List lst = new List(4, false);
lst.addItem("pomme");
lst.addItem("poire");
lst.addItem("abricot");
lst.addItem("orange");
lst.addItem("prune");
add(lst);
}
}
303
On peut aussi
utiliser un
xxxlistener partir
de la version 1.1.x
de JAVA
304
305
La gestion dvnements appliqus sur un composant est effectue par lintermdiaire dun
objet spcifique (ex: ActionListener)
ActionListener qui coute les vnements [ActionEvent]
ActionEvent associs
ce composant et lance le traitement prvu [actionPerformed() ]
2.
Un composant objet qui doit subir un vnement doit sinscrire auprs dun couteur
[ addActionListener (@
( de lobjet listener) ]. Si celle-ci est la prsente classe, cet argument est
this
3.
Pour manipuler les vnements, Il faut importer (import) les packages : java.awt.* et
java.awt.event.*
Import java.awt.*;
Import java.awt.event.*;
Public class TestEvt implement ActionListener
b.addActionListener ( this );
Lvnement de type
ActionEvent gnre
un objet evt
clic
Effectue le
traitement
- IUT ST MALO/
.
}
JJ}//finclass
MONTOIS
Rcupre le
label associ au
bouton
306
et la clause this
signifie que le
gestionnaire est la
classe TestEvt
elle-mme
clic
307
String evt.getActionCommand ()
if (evt.getActionCommand().equals(Cdebouton))
evt
Retourne une rfrence (type Objet) sur lobjet qui a gnr
lvnement. Cette rfrence permet de connatre la source de
lvnement. Ex:
Object evt.getSource()
class evt.getSource().getClass()
308
:ActionEvent spcifique effectu sur un composant button (bouton press puis relach), List
(2xclic sur un lment), TextField (zone texte valide par <CR>), MenuItem (menu choisi).
Mthode: actionPerformed ()
ItemListener
KeyListener
MouseListener
WindowListener
309
1.
Les composants crs doivent indiquer les vnements qui les intressent et la classe
dans laquelle se trouve les mthodes de gestion de ces vnements.
3.
La dlgation par un composant de lcoute des vnements un listener se fait par l'une
des mthodes suivantes:
Import java.awt.*;
Import java.awt.event.*;
addActionListener ( )
addAdjustmentListener ( )
addFocusListener ()
addItemListener ( )
addKeyListener ( )
addMouseListener ( )
}//finclass
addMouseMotionListener
( )
addWindowListener ( )
310
Jassocie 1
comportement
2 sources
dvnements
311
Je cre 3
comportements
Jassocie les
comportements
des objets sources
dvnements
312
Exercice1-Evnements: Exprimenter la gestion de quelques vnements provoqus par l'utilisateurIl s'agit de mettre en uvre les mcanismes concernant les composants (button, ), les gestionnaires de rpartition
(layout, ), et les classes d'vnements (xxxListeners, ). A cet effet, crer une application charge de choisir la
couleur de fond d'cran de diffrentes manires (rouge, vert bleu, blanc).
1) crer une classe ChoixCouleur1 dont le panneau du haut contient 4 boutons associs 4 couleurs par exemple
rouge, vert, bleu, blanc, puis un label o sera affiche la couleur choisie. Mettre en place un listener permettant
dafficher la couleur choisie chaque clic de souris.
2) Prolonger lexercice en crant une classe ChoixCouleur2, qui en plus prsentera sur son panneau du bas, une
liste droulante avec les 4 couleurs, et une srie de 4 boutons radios associs aux 4 couleurs. Il s'agit ici de pouvoir
en plus changer la couleur de fond de la fentre en slectionnant une couleur l'aide d'un bouton radio ou dans une
liste droulante.
3) Ajouter un listener de clavier afin que les actions daffichage de couleurs puissent tre commandes
indiffremment par la souris ou le clavier.
Mthodes utiles:
setText, setBackground
313
Squelette
import java.awt.*;
import java.awt.event.*;
public class ChoixCouleur1 extends Frame implements ActionListener{
Label l;
Button rouge, vert, bleu, blanc;
Panel p;
public ChoixCouleur1 (String titre) {
super (titre);
//Au dpart, choisir le fond noir
//Cration dun panel (panneau) o saffichera la couleur choisie
//Au dpart choisir un fond jaune dans le panneau
//Crer les boutons rouge, vert, bleu, blanc
//Crer le label Couleur Slectionne
//Associer aux boutons rouge, vert, bleue, blanc le listener prsent dans la classe ChoixCouleur
//Ajouter dans le panneau les boutons rouge, vert, bleu, blanc, le label
//Ajouter le panneau dans le container graphique support
}//finconstructeur
public void actionPerformed (ActionEvent evt) {
//Rcuprer lObject, source de lvnement
//caster lObject en type Button
//Selon le bouton actionn, colorer le panneau avec la couleur associe
//Ecrire le label Couleur rouge ou Couleur bleue ,
}
public static void main (String arg[]) {
ChoixCouleur1 f = new ChoixCouleur1 ("Choisir une couleur de fond");
//Rgler le panneau selon les points (200,100) et (450, 300);
//Rendre le panneau Visible
}
}//finclass
- IUT ST MALO/ JJ MONTOIS -
314
315
Mthode appele ds
lapparition de lvnement evt
316
Le constructeur o
seffectue la
construction et la mise
en place du panneau
317
318
Mthode appele ds
lapparition de lvnement evt
Rcupration de lobjet ayant
reu lvnement?
319
320
321
Les APPLETs
Les applets sont tlcharges dun site WEB ou localement. Elles ont besoin
dun navigateur compatible JAVA pour sexcuter (plugin java) sur la machine cible
Les applications sont excutables localement laide de linterprteur java.exe
navigateur
navigateur
plugin java
apple
t
Site
WEB
navigateur
Base
dapplets
apple
t
JAVA
appli java
322
import java.awt.*;
public class Hello extends java.applet.Applet
{
public void paint (Graphics g)
{
g.drawString("hello world",5,20);
}
}
import java.io.*;
class Hello
{
public static void main (String args[])
{
System.out.println ( salut le monde! );
}
}
323
L'criture d'Applets
Une applet est un programme comme un autre mais il doit tre excut dans une
page html laide dun plugin java du navigateur utilis. Il y a une partie
dclaration et une partie code.
A - Partie dclaration
Java possde un nombre dfini de package ( composs d'interfaces ou de classes ).
java.applet
java.awt
graphisme et gui.
java.awt.image
les images.
java.awt.peer.
java.io
entrees/sorties.
java.lang
java.net
rseaux.
java.util
Exemple:
import java.awt.Graphics;
Le joker * peut-tre utilis
import java.awt.*
324
B - Partie code
Une applet est une instance de la classe Applet. Cette classe est dfinie public.
Exemple : public class MonApplet extends java.applet.Applet
import java.awt.*
public class MonApplet extends java.applet.Applet
{
...
}
Les mthodes principales de la classe Applet:
init()
start()
stop()
run()
paint()
update()
action()
325
}
public void start()
start {
<Dmarrer l'applet; appele chaque fois que l'on entre dans le document la contenant >
}
public void paint (Graphics g) {
<Afficher les objets graphiques dans le panneau graphique g>
}
public void stop()
stop {
<Arrter l'applet; appele chaque fois que l'on sort du document la contenant. >
}
public void destroy()
destroy {
<Relcher les ressources, l'applet libre la mmoire>
}
Cycle de vie d'une applet: init() start() paint() stop() destroy()
- IUT ST MALO/ JJ MONTOIS -
326
APPLET ET SECURITE
L'excution d'une applet charge via le rseau ne doit pas mettre en pril la scurit. Aussi, un
certain nombre de manipulations sont interdites l'applet lorsquelle est charge dans la mmoire
du systme :
327
g: Fentre graphique du
navigateur par dfaut
Affichage par
dfaut dans la
fentre du
navigateur
328
height
width
Lorsque la balise est rencontre par le navigateur, le programme JAVA prsent sur le serveur
est charg dans le rpertoire cache de lordinateur.
Le programme Java est charg comme un fichier class correspondant aux pcodes gnrs par
le compilateur Java.
Le code *.class peut tre prsent localement sur votre disque, dans le rpertoire de la page
HTML pour des activits de tests, ou sur le serveur.
Le navigateur garde l'applet prsent dans le cache mme si on modifie la classe Java qu'il doit
lire. Aussi, lorsquon dveloppe des applets, il faut configurer le navigateur pour vider le cache.
- IUT ST MALO/ JJ MONTOIS -
329
Les bibliothques
charger ou package
import java.io.*;
import java.applet.Applet;
public class hello extends Applets
{
<code source>
}
import java.io.*;
import java.applet.Applet;
public class hello extends Applets
{
public void init ()
{ rezise (250, 300); }
}
Sortie
graphique
dans g
import java.io.*;
import java.applet.Applet;
import java.awt.Graphics;
public class hello extends Applets
{
public void init ()
{ rezise (250, 300); }
public void paint (Graphics g)
{ g.drawstring "Hello world", 10, 50);}
}
- IUT ST MALO/ JJ MONTOIS -
330
Le code appel peut comprendre des paramtres dfinis dans la balise html, comme suit
:
</APPLET>
Usage de la mthode getParameter (String nomvariable ) dans le source java de lapplet qui
renvoie la valeur de nomvariable sous forme dune String
Hello.html
String Var;
331
Pour connatre le source de l'applet, on ancre un lien dans la page html avec la balise:
<A href = "Hello.java"> The source </A>
332
L'interface Applet
La mthode getParameterInfo permet de dfinir les paramtres qui seront passs
l'Applet. Elle retourne un tableau de chanes de caractres. Le tableau renvoy est
un tableau de 3 chanes comprenant :
1. le nom de l'argument
2. le type de l'argument
3. la description de l'argument
Par exemple, cette mthode s'utilise de la faon suivante :
public String[][] getParameterInfo ()
{
String tableau[][] =
{
{"largeur", "int", "largeur de l'applet"},
{"hauteur", "int", "longueur de l'applet"},
{"URL",
"url", "adresse du fichier GIF indiquant la prsence de l'Applet"}
};
return tableau ;
}
- IUT ST MALO/ JJ MONTOIS -
333
Pour initialiser les diffrentes valeurs dclares dans la table tableau on utilise la
mthode getParameter avec en argument le nom de l'argument :
variable = getParameter ("largeur" ) ;
Si le paramtre n'est pas trouv la fonction getParameter retrourne la valeur null.
1ier exemple (Sun): Afficher limage T1.gif. Cette image se trouve dans le rpertoire java\demo\.
import java.applet.*;
import java.awt.*;
public class exemple1 extends Applet
{
Image image;
public void init() { image=getImage (getDocumentBase(),"java/demo/T1.gif "); }
public void paint (Graphics g) { g.drawImage(image,0,0,this); }
}
- IUT ST MALO/ JJ MONTOIS -
334
Remarques :
1.
2.
3.
4.
drawImage est excute aux coordonnes 0,0 du rectangle rserv par l'Applet
dans la balise HTML
Excution :
335
2ime exemple (Sun): Afficher 8 images diffrentes qui change chaque clic de souris sur l'image.
import java.applet.*;
import java.awt.*;
public class exemple2 extends Applet
// exemple2.class sera le code appel par le navigateur
{
Image buf[]; // buf est un tableau remplir avec les noms des diffrentes images.
int i=0, j = 1;
Remarques :
int a=0, b=0;
La mthode init() se contente de
public void init()
dclarer un tableau buf
{
contenant 8 images remplies par
buf = new Image[7];
les fichiers T1.gif ... T7.gif.
for (i = 0; i<7; i++)
{
getCodeBase() est
buf[i] = getImage (getCodeBase(), "T" + j + ".gif");
l'URL de lapplet, l'image se
j++;
trouve dans le sous-rpertoire
}
courant de cette URL.
i=0;
La mthode paint() dessinera
}
l'une des 8 images.
public void paint (Graphics g) { g.drawImage ( buf[i], 0, 0, this); }
A chaque clic de la souris,
public boolean mouseUp (Event e, int x, int y)
repaint() provoque un nouvel
{
appel la mthode paint()
repaint();
i++;
if (i == 7) i = 0;
return true;
}
}
- IUT ST MALO/ JJ MONTOIS 336
'clic'
'clic'
'clic'
'clic'
'clic'
'clic'
'clic'
'clic'
337
338
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
Double g.setStroke(stroke);
g.draw (new Rectangle2D.Double(x, y, rectWidth, rectHeight));
Double g.setStroke(dashed);
g.draw (new RoundRectangle2D.Double(x, y, rectWidth, rectHeight, 10, 10));
Double g.setStroke(stroke);
g.draw (new Ellipse2D.Double(x, y, rectWidth, rectHeight));
int x1Points[] = {x, x+rectWidth, x, x+rectWidth};
int y1Points[] = {y, y+rectHeight, y+rectHeight, y};
GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x1Points.length);
polygon.moveTo(x1Points[0], y1Points[0]);
for (int index = 1; index < x1Points.length; index++) { polygon.lineTo(x1Points[index],
y1Points[index]); };
polygon.closePath();
- IUT ST MALO/ JJ MONTOIS 339
g.draw(polygon);
Suite
int x2Points[] = {x, x+rectWidth, x, x+rectWidth};
int y2Points[] = {y, y+rectHeight, y+rectHeight, y};
GeneralPath polyline = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x2Points.length);
polyline.moveTo (x2Points[0], y2Points[0]);
for (int index = 1; index < x2Points.length; index++)
{ polyline.lineTo(x2Points[index], y2Points[index]); };
g.draw(polyline);
Double (red) g.setPaint(red);
g.fill (new Rectangle2D.Double(x, y, rectWidth, rectHeight));
Double g.setPaint(redtowhite);
g.fill (new RoundRectangle2D.Double(x, y, rectWidth, rectHeight, 10, 10));
g.setPaint(red);
g.fill (new Arc2D.Double(x, y, rectWidth, rectHeight, 90, 135, Arc2D.OPEN));
Double g.setPaint (redtowhite);
g.fill (new Ellipse2D.Double(x, y, rectWidth, rectHeight));
GeneralPath int x3Points[] = {x, x+rectWidth, x, x+rectWidth};
int y3Points[] = {y, y+rectHeight, y+rectHeight, y};
GeneralPath filledPolygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x3Points.length);
filledPolygon.moveTo(x3Points[0], y3Points[0]);
for (int index = 1; index < x3Points.length; index++)
{ filledPolygon.lineTo(x3Points[index], y3Points[index]); };
filledPolygon.closePath();
g.setPaint(red); g.fill(filledPolygon);
340
'clic'
'clic'
'clic'
'clic'
Spot.class
Importer les bibliothques suivantes:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
ClickMe.html
341
342
<HTML>
<HEAD>
<TITLE> Cliquer</TITLE>
</HEAD>
<BODY>
<H1>clic, clic ...</H1>
<HR>
<P>
<APPLET CODE="ClickMe.class" WIDTH="300" HEIGHT="300">
</P>
<HR>
</BODY>
</HTML>
</APPLET>
343
Exercice2-Applet: - Construire un
diteur de texte simpliste
Ecrire une applett EditTexte.java qui permet
de dfinir une zone texte, associe avec un
panel de boutons Copier-Couper-CollerEffacer permettant quelques fonctions
simples de manipulation de texte. Insrer
la fin le Label Editeur de Texte basique
suivi de la date courante. Revoir les classes
TextAera, Panel, layout, Button, Event, ainsi
que les mthodes utiles associes.
Importer les bibliothques:
import java.applet.Applet;
import java.awt.*;
import java.util.Date;
344
345
<HTML>
<HEAD> <TITLE>MonApplet Exemple1</TITLE> </HEAD>
<BODY>
<H1>Editeur de Texte basique</H1>
<HR>
<P>
<APPLET CODE="EditTexte.class" WIDTH="300" HEIGHT="300">
</P>
<HR>
</BODY>
</HTML>
</APPLET>
Rsultat
346
347
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Son1 extends Applet implements ActionListener {
AudioClip Do; AudioClip re; AudioClip mi; AudioClip fa; AudioClip sol; AudioClip la; AudioClip si;
Button bdo=new Button("DO"); Button bre=new Button("RE"); Button bmi=new Button("MI");
Button bfa=new Button("FA"); Button bsol=new Button("SOL"); Button bla=new Button("LA");
Button bsi=new Button("SI");
public void init() {
Do = getAudioClip (getCodeBase(),"do.au");
re = getAudioClip (getCodeBase(),"re.au");
mi = getAudioClip (getCodeBase(),"mi.au");
fa = getAudioClip (getCodeBase(),"fa.au");
sol = getAudioClip (getCodeBase(),"sol.au");
la = getAudioClip (getCodeBase(),"la.au");
si = getAudioClip (getCodeBase(),"si.au");
add(bdo); add(bre); add(bmi); add(bfa); add(bsol); add(bla); add(bsi);
bdo.addActionListener (this);
bre.addActionListener (this);
bmi.addActionListener (this);
bfa.addActionListener (this);
bsol.addActionListener (this);
bla.addActionListener (this);
bsi.addActionListener (this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==bdo) Do.play();
else if (e.getSource()==bre) re.play();
else if (e.getSource()==bmi) mi.play();
else if (e.getSource()==bfa) fa.play();
else if (e.getSource()==bsol)sol.play();
else if (e.getSource()==bla) la.play();
else if (e.getSource()==bsi) si.play();
}
// public
void
{ if (bruitFond)
si.stop();
- IUT
STstop()
MALO/
JJ MONTOIS
- }}
348
349
Au dpart, la zone
image est blanche
On visualise limage
On rgle le mode:
centr ou plein
350
Zone dimage
Liste image
Choix mode
Insertion liste dimages
- IUT
mode0.addItemListener(this); mode1.addItemListener(this);
}
public void itemStateChanged (ItemEvent e) {
if (e.getStateChange()==ItemEvent.SELECTED) {
Gestion
if (mode0.getState()) ima.setMode(0);
vnement choix
else ima.setMode(1);
Image img=getImage(getCodeBase(),choix.getSelectedItem());
ima.setImage(img);
}
}
}
ST MALO/ JJ MONTOIS
351
//insrer ici la classe canvas Imazone
}//finclassVisio
Le fichier visio.html
<HTML>
<HEAD>
<TITLE>Visionneuse d'images</TITLE>
</HEAD>
<BODY>
<H1>Visionneuse d'images</H1>
<HR>
<DIV ALIGN=center>
<APPLET CODE="Visio.class" WIDTH="450" HEIGHT="350">
<PARAM NAME="img1" VALUE="dinard1.jpg">
<PARAM NAME="img2" VALUE="fleur1.jpg">
<PARAM NAME="img3" VALUE="fleur2.jpg">
<PARAM NAME="img4" VALUE="fleur3.jpg">
<PARAM NAME="img5" VALUE="iut1.jpg">
<PARAM NAME="img6" VALUE="jambons.jpg">
<PARAM NAME="img7" VALUE="jardinluxembourg.jpg">
<PARAM NAME="img8" VALUE="maison1.jpg">
<PARAM NAME="img9" VALUE="stmalo1.jpg">
<PARAM NAME="img10" VALUE="stmalo2.jpg">
<PARAM NAME="img11" VALUE="stmichel.jpg">
<PARAM NAME="img12" VALUE="pantheon.jpg">
</APPLET>
</DIV>
<HR>
</BODY>
</HTML>
- IUT ST MALO/ JJ MONTOIS -
352
Quelques choix
- IUT ST MALO/ JJ MONTOIS -
353
354
JVM
Architecture distribue
JVM
CVM
Workstation/semi-embarqu
KVM
355
Les configurations: standard CLDC - Elles dfinissent une plate-forme minimale en terme de services concernant
un ou plusieurs profiles donns.
Les machines virtuelles: En fonction de la cible, la machine virtuelle pourra tre allge afin de consommer plus ou
moins de ressources (KVM, CVM, )
Le systme dexploitation: Lenvironnement doit sadapter lOS existant (Windows CE, Palm Os, )
CLDC (Connected Limited Device Configuration)
Matriels ressources limites: tlphones cellulaires,
assistants personnels, priphriques lgers sans fil
(wireless)
Minimum de 160Ko 512Ko de RAM,
processeur 16 ou 32 bits, vitesse 16Mhz ou plus
Alimentation limite, prise en charge dune batterie
Connexion rseau non permanente, sans fil.
Interface graphique limite ou inexistante
L'architecture J2ME se
dcoupe en plusieurs couches - IUT ST MALO/ JJ MONTOIS -
356
357
Paquetages JAVA utiliser dans la conception de MIDlet pour les terminaux mobiles
Mobile Information Device Profile (MIDP), JSR-037
Le vrificateur de Java 2 Standard Edition (J2SE) nest pas adapt pour des dispositifs
contraints matriellement . En effet, il ncessite un minimum de 50 ko despace pour stocker
le code binaire, et au moins 30-100 ko de RAM au runtime . En outre, la puissance du
CPU ncessaire pour excuter le traitement itratif du flux de donnes avec le vrificateur
JDK standard doit tre consquente.
En conclusion, il est ncessaire dutiliser des classes javax.* adaptes pour construire des
applications embarques sur mobiles.
java.util
Classes utilitaires
java.io
java.lang
Classes de base
javax.microedition.io
javax.microedition.lcdui
javax.microedition.midlet
javax.microedition.rms
cldc, midp
358
JAVA & LES MOBILES - MIDLET conue avec J2ME Wireless Toolkit
La structure du code d'un midlet est similaire celle d'une applet
Il n'y a pas de mthode main() et les MIDlets tendent toujours la classe MIDLET.
L'interface utilisateur se trouvent dans le package lcdui.
lcdui
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
Package
indispensable pour
une midlet
Gestionnaire dvnement
assur par HelloWorld
359
destroyApp()
pauseApp()
startApp()
Destroye
d
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
destroyApp()
Activ
e
public MaMidlet () { }
public void startApp() { }
public void pauseApp() { }
public void destroyApp (boolean unconditional) { }
public void commandAction (Command maCmd, Displayable maReprsentation)
{}
}
360
361
Hypothse: localisation des de classes prvrifies utilises dans lib/midp.jar ou le s/rpertoire classes
Compiler la MIDlet
Pour compiler tous les programmes conus pour la plateforme MIDP, excuter la commande suivante:
Prverifier la MIDlet
Aprs avoir compil le programme, il doit tre prvrifi par la commande preverify .
Cette commande doit tre excute partir du rpertoire de la plateforme ad hoc ( build/linux, build/solaris, build/win32)
362
Crer une page HTML qui rfrence lapplication pour un usage OTA - hello.html
<html>
<body>
<a href="http://<host>/<path>/hello.jad">Hello
World <a>
hello.jad
</body>
</html>
De plus, ajoutez un lien (voir ci-dessus) dans une page HTML existante. Lexcutable midp
affichera seulement le lien ".jad" et ignorera le reste de la page page. Vrifier la prsence de cette
page dans le cas dune application wireless .
Packager la MIDlet
Crer un fichier jar intgrant toutes les classes et ressources ncessaires votre application.
cd classes
jar cmf hello.mf
- IUT ST MALO/ JJ MONTOIS -
363
.jar
midp
364
365