Vous êtes sur la page 1sur 289

APPRENTISSAGE DU LANGAGE VB.

NET
Serge Tah - ISTIA - Universit d'Angers
Mars !!"
Intr#d$%ti#n
VB.NET est $n &angage r%ent. I& a t dis'#ni(&e en versi#ns (eta de'$is &)anne !!! avant d)*tre #++i%ie&&e,ent dis'#ni(&e en
+vrier !! en ,*,e te,'s -$e &a '&ate-+#r,e .NET de Mi%r#s#+t . &a-$e&&e i& est &i. VB.NET ne 'e$t +#n%ti#nner -$)ave% %et
envir#nne,ent d)e/%$ti#n0 envir#nne,ent dis'#ni(&e '#$r &e ,#,ent -$e s$r &es ,a%hines 1ind#2s NT0 !!! et 3P.
Ave% &a '&ate-+#r,e .NET0 tr#is n#$vea$/ &angages s#nt a''ar$s 4 560 VB.VET0 7S5RIPT.NET. 56 est &arge,ent $ne 8 %#'ie 9 de
7ava. VB.NET et 7S5RIPT.NET s#nt des e/tensi#ns de Vis$a& (asi% et 7s%ri't '#$r &a '&ate-+#r,e .NET. 5e&&e-%i rend dis'#ni(&e
a$/ 'r#gra,,es -$i s)e/%$tent en s#n sein $n ense,(&e tr:s i,'#rtant de %&asses0 %&asses tr:s 'r#%hes de %e&&es -$e &)#n tr#$ve a$
sein des ,a%hines virt$e&&es 7ava. En 're,i:re a''r#/i,ati#n0 #n 'e$t dire -$e &a '&ate-+#r,e .NET est $n envir#nne,ent
d)e/%$ti#n ana&#g$e . %e&$i d'$ne ,a%hine virt$e&&e 7ava. ;n 'e$t n#ter %e'endant de$/ di++ren%es i,'#rtantes 4
&a '&ate-+#r,e .NET ne s'e/%$te -$e s$r &es ,a%hines 1ind#2s a&#rs -$e 7ava s'e/%$te s$r di++rents ;S <2ind#2s0
$ni/0 ,a%int#sh=.
&a '&ate-+#r,e .NET 'er,et &'e/%$ti#n de 'r#gra,,es %rits en di++rents &angages. I& s$++it -$e &e %#,'i&ate$r de %e$/-%i
sa%he 'r#d$ire d$ %#de IL <Inter,ediate Lang$age=0 %#de e/%$t 'ar &a ,a%hine virt$e&&e .NET. T#$tes &es %&asses de
.NET s#nt dis'#ni(&es a$/ &angages %#,'ati(&es .NET %e -$i tend . g#,,er &es di++ren%es entre &angages dans &a ,es$re
#> &es 'r#gra,,es $ti&isent &arge,ent %es %&asses. Le %h#i/ d'$n &angage .NET devient a++aire de g#?t '&$s -$e de
'er+#r,an%es.
De &a ,*,e +a@#n -$e 7ava ne 'e$t *tre ign#r0 &a '&ate-+#r,e .NET ne 'e$t &'*tre0 . &a +#is . %a$se d$ 'ar% tr:s i,'#rtant de
,a%hines 2ind#2s insta&&es et de &'e++#rt +ait 'ar Mi%r#s#+t '#$r &a 'r#,#$v#ir et &'i,'#ser. I& se,(&e -$e 56 s#it $n (#n %h#i/
'#$r d,arrer ave% .NET0 n#ta,,ent '#$r &es 'r#gra,,e$rs 7ava0 te&&e,ent %es de$/ &angages s#nt 'r#%hes. Ens$ite #n '#$rra
'asser ais,ent de 56 . VB.NET #$ . $n a$tre &angage .NET. La sAnta/e %hangera ,ais &es %&asses .NET rester#nt &es ,*,es.
5#ntraire,ent a$/ a''aren%es0 &e 'assage de VB . VB.NET est di++i%i&e. VB n'est 'as $n &angage #rient #(Bets a&#rs -$e VB.NET
&'est %#,'&:te,ent. Le 'r#gra,,e$r VB va d#n% *tre %#n+r#nt . des %#n%e'ts -$'i& ne ,aCtrise 'as. I& 'araCt '&$s si,'&e
d'a++r#nter %e$/-%i en #$(&iant %e -$'#n sait de VB. A$ssi0 n#$s ne +ais#ns -$e 'e$ r+ren%e . VB dans &a s$ite.
5e d#%$,ent n'est 'as $n %#$rs e/ha$sti+. I& est destin . des gens %#nnaissant dB. &a 'r#gra,,ati#n et -$i ve$&ent d%#$vrir
VB.NET. I& re'rend &a str$%t$re d$ d#%$,ent DIntr#d$%ti#n a$ &angage 56D d$ ,*,e a$te$r a+in de +a%i&iter &a %#,'arais#n entre
&es de$/ &angages. En +ait0 B'ai $ti&is i%i des trad$%te$rs a$t#,ati-$es de 56 vers VB.NET. Sans *tre t#ta&e,ent 'ar+aits0 %es
trad$%te$rs +#nt nan,#ins E! . F!!G d$ travai& se&#n &es %as. ;n se ra''e&&era d#n%0 en &isant &e %#de des 'r#gra,,es VB.NET
-$i v#nt s$ivre0 -$e %e&$i-%i a t d'a(#rd gnr 'ar $ne ,a%hine '$is re,ani 'ar ,#i-,*,e si %'tait n%essaire. ;n A ren%#ntre
ainsi des Dt#$rn$resD de 'r#gra,,ati#n -$'#n n'a$rait 'e$t-*tre 'as $ti&iser s#i-,*,e.
Les &ivres s$ivants ,'#nt aid 4
- Pr#+essi#na& 56 'r#gra,,ing0 Editi#ns 1r#/
- 56 et .NET0 Grard Le(&an%0 Editi#ns EAr#&&es
5e s#nt de$/ e/%e&&ents #$vrages d#nt Be %#nsei&&e &a &e%t$re. La trad$%ti#n des 'r#gra,,es 56 en VB.NET a t #(ten$e 'ar $n
trad$%te$r dis'#ni(&e . &'$r& <,ars !!"= http://authors.aspalliance.com/aldotnet/examples/translate.aspx. T#$t &e reste a t #(ten$ ave% &a
d#%$,entati#n de Vis$a& st$di#.NET.
Serge Tah0 ,ars !!"
1. LES BASES DU LANGAGE VB.NET .................................................................................................................................... 7
1.1 INTRODUCTION.............................................................................................................................................................................. 7
1.2 LES DONNES DE VB.NET........................................................................................................................................................... 7
1.2.1 LES TYPES DE DONNES PRDFINIS................................................................................................................................................ 7
1.2.2 NOTATION DES DONNES LITTRALES.............................................................................................................................................. 8
1.2.3 DCLARATION DES DONNES..........................................................................................................................................................9
1.2.3.1 Rle des dclaa!"#$s........................................................................................................................................................... 9
1.2.3.2 Dclaa!"#$ des c#$s!a$!es................................................................................................................................................... 9
1.2.3.3 Dclaa!"#$ des %a"a&les..................................................................................................................................................... 9
1.2.' LES CON(ERSIONS ENTRE NO)*RES ET C+A,NES DE CARACT-RES......................................................................................................... 9
1.2.. LES TA*LEA/0 DE DONNES........................................................................................................................................................ 11
1.3 LES INSTRUCTIONS LMENTAIRES DE VB.NET............................................................................................................................ 13
1.3.1 ECRIT/RE S/R CRAN.................................................................................................................................................................1'
1.3.2 LECT/RE DE DONNES TAPES A/ CLA(IER.................................................................................................................................... 1'
1.3.3 E0E)PLE D1ENTRES2SORTIES...................................................................................................................................................... 1'
1.3.' REDIRECTION DES E3S............................................................................................................................................................... 1.
1.3.. AFFECTATION DE LA (ALE/R D1/NE E0PRESSION 4 /NE (ARIA*LE..................................................................................................... 15
1.3...1 L"s!e des #6a!e7s............................................................................................................................................................15
1.3...2 E86ess"#$ a"!9:!";7e.....................................................................................................................................................15
1.3...3 P"#"!s da$s l1%al7a!"#$ des e86ess"#$s a"!9:!";7es................................................................................................. 18
1.3...' E86ess"#$s ela!"#$$elles..................................................................................................................................................18
1.3.... E86ess"#$s &##le$$es..................................................................................................................................................... 19
1.3...5 Ta"!e:e$! de &"!s.............................................................................................................................................................. 19
1.3...7 O6a!e7 ass#c" < 7$e a==ec!a!"#$................................................................................................................................... 2>
1.3...8 P"#"! ?$ale des #6a!e7s......................................................................................................................................... 2>
1.3...9 Les c#$%es"#$s de !@6e..................................................................................................................................................... 2>
1.4 LES INSTRUCTIONS DE CONTRLE DU DROULEMENT DU PROGRAMME............................................................................................... 22
1.'.1 ARRAT..................................................................................................................................................................................... 22
1.'.2 STR/CT/RE DE C+OI0 SI)PLE...................................................................................................................................................... 22
1.'.3 STR/CT/RE DE CAS....................................................................................................................................................................23
1.'.' STR/CT/RE DE RPTITION..........................................................................................................................................................23
1.'.'.1 N#:&e de 6!"!"#$s c#$$7............................................................................................................................................. 23
1.'.'.2 N#:&e de 6!"!"#$s "$c#$$7.......................................................................................................................................... 2'
1.'.'.3 I$s!7c!"#$s de ?es!"#$ de &#7cle....................................................................................................................................... 2.
1.5 LA STRUCTURE D'UN PROGRAMME VB.NET................................................................................................................................. 25
1.6 COMPILATION ET EXCUTION D'UN PROGRAMME VB.NET.............................................................................................................27
1.7 L'EXEMPLE IMPOTS................................................................................................................................................................ 28
1.8 ARGUMENTS DU PROGRAMME PRINCIPAL........................................................................................................................................3
1.! LES NUMRATIONS..................................................................................................................................................................... 3
1.1 LA GESTION DES EXCEPTIONS......................................................................................................................................................32
1.11 PASSAGE DE PARAM"TRES # UNE $ONCTION..................................................................................................................................34
1.11.1 PASSABE PAR (ALE/R.............................................................................................................................................................. 3'
1.11.2 PASSABE PAR RFRENCE.......................................................................................................................................................... 3.
2. CLASSES% STUCTURES% INTER$ACES ............................................................................................................................ 36
2.1 L' OB&ET PAR L'EXEMPLE.............................................................................................................................................................36
2.1.1 BNRALITS............................................................................................................................................................................35
2.1.2 DFINITION DE LA CLASSE PERSONNE............................................................................................................................................ 35
2.1.3 LA )T+ODE INITIALISE..............................................................................................................................................................37
2.1.' L1OPRATE/R NEC..................................................................................................................................................................... 37
2.1.. LE )OT CL )E....................................................................................................................................................................... 38
2.1.5 /N PROBRA))E DE TEST............................................................................................................................................................ 38
2.1.7 /TILISER /N FIC+IER DE CLASSES CO)PILES DASSE)*LYE................................................................................................................39
2.1.8 /NE A/TRE )T+ODE INITIALISE..................................................................................................................................................'>
2.1.9 CONSTR/CTE/RS DE LA CLASSE PERSONNE.....................................................................................................................................'>
2.1.1> LES RFRENCES D1O*FETS........................................................................................................................................................ '2
2.1.11 LES O*FETS TE)PORAIRES......................................................................................................................................................... '3
2.1.12 )T+ODES DE LECT/RE ET D1CRIT/RE DES ATTRI*/TS PRI(S....................................................................................................... '3
2.1.13 LES PROPRITS.......................................................................................................................................................................''
2.1.1' LES )T+ODES ET ATTRI*/TS DE CLASSE.....................................................................................................................................'5
2.1.1. PASSABE D1/N O*FET 4 /NE FONCTION........................................................................................................................................ '8
2.1.15 /N TA*LEA/ DE PERSONNES...................................................................................................................................................... '9
2.2 L''RITAGE PAR L'EXEMPLE........................................................................................................................................................ 4!
2.2.1 BNRALITS............................................................................................................................................................................'9
2.2.2 CONSTR/CTION D1/N O*FET ENSEIBNANT....................................................................................................................................... .1
2.2.3 S/RC+ARBE D1/NE )T+ODE O/ D1/NE PROPRIT.......................................................................................................................... .3
2.2.' LE POLY)ORP+IS)E................................................................................................................................................................... .'
2.2.. REDFINITION ET POLY)ORP+IS)E..................................................................................................................................................
2.3 D$INIR UN INDEXEUR POUR UNE CLASSE....................................................................................................................................... 57
2.4 LES STRUCTURES......................................................................................................................................................................... 63
2.5 LES INTER$ACES..........................................................................................................................................................................66
2.6 LES ESPACES DE NOMS................................................................................................................................................................. 7
2.7 L'EXEMPLE IMPOTS................................................................................................................................................................ 72
3. CLASSES .NET D'USAGE COURANT ................................................................................................................................ 75
3.1 C'ERC'ER DE L'AIDE AVEC SD(.NET....................................................................................................................................... 75
3.1.1 CINC(......................................................................................................................................................................................7.
3.2 C'ERC'ER DE L'AIDE SUR LES CLASSES AVEC VS.NET................................................................................................................. 78
3.2.1 OPTION AIDE............................................................................................................................................................................78
3.2.2 AIDE3INDE0............................................................................................................................................................................. 8>
3.3 LA CLASSE STRING...................................................................................................................................................................... 81
3.4 LA CLASSE ARRA)...................................................................................................................................................................... 83
3.5 LA CLASSE ARRA)LIST............................................................................................................................................................... 85
3.6 LA CLASSE 'AS'TABLE............................................................................................................................................................... 87
3.7 LA CLASSE STREAMREADER.........................................................................................................................................................!1
3.8 LA CLASSE STREAM*RITER........................................................................................................................................................ !2
3.! LA CLASSE REGEX...................................................................................................................................................................... !3
3.9.1 (RIFIER G/1/NE C+A,NE CORRESPOND 4 /N )OD-LE DONN........................................................................................................... 9.
3.9.2 TRO/(ER TO/S LES L)ENTS D1/NE C+A,NE CORRESPONDANT 4 /N )OD-LE..................................................................................... 95
3.9.3 RC/PRER DES PARTIES D1/N )OD-LE......................................................................................................................................... 97
3.9.' /N PROBRA))E D1APPRENTISSABE............................................................................................................................................... 98
3.9.. LA )T+ODE SPLIT....................................................................................................................................................................99
3.1 LES CLASSES BINAR)READER ET BINAR)*RITER..................................................................................................................... 1
4. INTER$ACES GRAP'I+UES AVEC VB.NET ET VS.NET .......................................................................................... 14
4.1 LES BASES DES INTER$ACES GRAP'I+UES..................................................................................................................................... 14
'.1.1 /NE FENATRE SI)PLE............................................................................................................................................................... 1>'
'.1.2 /N FOR)/LAIRE A(EC *O/TON................................................................................................................................................. 1>.
4.2 CONSTRUIRE UNE INTER$ACE GRAP'I+UE AVEC VISUAL STUDIO.NET........................................................................................... 18
'.2.1 CRATION INITIALE D/ PROFET................................................................................................................................................... 1>8
'.2.2 LES FENATRE DE L1INTERFACE DE (S.NET.................................................................................................................................11>
'.2.3 E0C/TION D1/N PROFET...........................................................................................................................................................111
'.2.' LE CODE BNR PAR (S.NET................................................................................................................................................ 112
'.2.. CO)PILATION DANS /NE FENATRE DOS........................................................................................................................................ 113
'.2.5 BESTION DES (NE)ENTS........................................................................................................................................................11'
'.2.7 CONCL/SION...........................................................................................................................................................................11'
4.3 $EN,TRE AVEC C'AMP DE SAISIE% BOUTON ET LIBELL.................................................................................................................. 115
'.3.1 CONCEPTION BRAP+IG/E...........................................................................................................................................................11.
'.3.2 BESTION DES (NE)ENTS D1/N FOR)/LAIRE.............................................................................................................................. 118
'.3.3 /NE A/TRE )T+ODE PO/R BRER LES (NE)ENTS.................................................................................................................... 12>
'.3.' CONCL/SION...........................................................................................................................................................................121
4.4 +UEL+UES COMPOSANTS UTILES..................................................................................................................................................121
'.'.1 FOR)/LAIRE FOR).................................................................................................................................................................. 121
'.'.2 TIG/ETTES LA*EL ET *O,TES DE SAISIE TE0T*O0....................................................................................................................... 122
'.'.3 LISTES DRO/LANTES CO)*O*O0..............................................................................................................................................12'
'.'.' CO)POSANT LIST*O0.............................................................................................................................................................. 12.
'.'.. CASES 4 COC+ER C+ECH*O0I *O/TONS RADIO */TTONRADIO.......................................................................................................128
'.'.5 (ARIATE/RS SCROLL*AR..........................................................................................................................................................128
4.5 VNEMENTS SOURIS................................................................................................................................................................ 13
4.6 CRER UNE $EN,TRE AVEC MENU................................................................................................................................................133
4.7 COMPOSANTS NON VISUELS.........................................................................................................................................................136
'.7.1 *O,TES DE DIALOB/E OPENFILEDIALOB ET SA(EFILEDIALOB.......................................................................................................137
'.7.2 *O,TES DE DIALOB/E FONTCOLOR ET COLORDIALOB...................................................................................................................1'1
'.7.3 TI)ER....................................................................................................................................................................................1'3
4.8 L'EXEMPLE IMPOTS.............................................................................................................................................................. 145
5. GESTION D'VNEMENTS .............................................................................................................................................. 14!
5.1 OB&ETS DELEGATE.....................................................................................................................................................................14!
5.2 GESTION D'VNEMENTS............................................................................................................................................................ 15
..2.1 DCLARATION D1/N (NE)ENT................................................................................................................................................ 1.>
..2.2 DFINIR LES BESTIONNAIRES D1/N (NE)ENT............................................................................................................................. 1.>
..2.3 DCLENC+ER /N (NE)ENT.................................................................................................................................................... 1.>
..2.' /N E0E)PLE...........................................................................................................................................................................1.1
6. ACC"S AUX BASES DE DONNES .................................................................................................................................. 155
6.1 GNRALITS........................................................................................................................................................................... 155
6.2 LES DEUX MODES D'EXPLOITATION D'UNE SOURCE DE DONNES...................................................................................................... 156
6.3 ACC"S AUX DONNES EN MODE CONNECT................................................................................................................................... 157
5.3.1 LES *ASES DE DONNES DE L1E0E)PLE........................................................................................................................................ 1.7
5.3.2 /TILISATION D1/N PILOTE OD*C............................................................................................................................................. 151
5.3.2.1 La 69ase de c#$$e8"#$.....................................................................................................................................................153
5.3.2.2 :e!!e des e;7J!es SGL................................................................................................................................................153
5.3.2.3 E86l#"!a!"#$ d7 s7l!a! d17$e e;7J!e SELECT.............................................................................................................. 15'
5.3.2.' L"&a!"#$ des ess#7ces................................................................................................................................................. 15.
5.3.3 /TILISATION D1/N PILOTE OLE D*.......................................................................................................................................... 15.
5.3.' )ISE 4 FO/R D1/NE TA*LE........................................................................................................................................................ 157
5.3.. I)POTS.............................................................................................................................................................................. 17>
6.4 ACC"S AUX DONNES EN MODE DCONNECT................................................................................................................................174
7. LES T'READS D'EXCUTION ....................................................................................................................................... 175
7.1 INTRODUCTION.......................................................................................................................................................................... 175
7.2 CRATION DE T'READS D'EXCUTION.......................................................................................................................................... 176
7.3 INTR,T DES T'READS............................................................................................................................................................... 178
7.4 ACC"S # DES RESSOURCES PARTAGES......................................................................................................................................... 17!
7.5 ACC"S EXCLUSI$ # UNE RESSOURCE PARTAGE............................................................................................................................. 181
7.6 S)NC'RONISATION PAR VNEMENTS...........................................................................................................................................183
8. PROGRAMMATION TCP-IP ............................................................................................................................................. 187
8.1 GNRALITS........................................................................................................................................................................... 187
8.1.1 LES PROTOCOLES DE L1INTERNET................................................................................................................................................187
8.1.2 LE )OD-LE OSI..................................................................................................................................................................... 187
8.1.3 LE )OD-LE TCP3IP................................................................................................................................................................188
8.1.' FONCTIONNE)ENT DES PROTOCOLES DE L1INTERNET...................................................................................................................... 19>
8.1.. L1ADRESSABE DANS L1INTERNET................................................................................................................................................. 191
8.1...1 Les classes d1adesses IP.................................................................................................................................................. 192
8.1...2 Les 6#!#c#les de c#$%es"#$ Adesse I$!e$e! K22L Adesse 69@s";7e.......................................................................... 193
8.1.5 LA CO/C+E RSEA/ DITE CO/C+E IP DE L1INTERNET..................................................................................................................... 193
8.1.5.1 Le #7!a?e........................................................................................................................................................................ 19'
8.1.5.2 )essa?es d1ee7 e! de c#$!le...................................................................................................................................... 19'
8.1.7 LA CO/C+E TRANSPORT M LES PROTOCOLES /DP ET TCP.............................................................................................................19.
8.1.7.1 Le 6#!#c#le /DP M /se Da!a?a: P#!#c#l.................................................................................................................. 19.
8.1.7.2 Le 6#!#c#le TCP M Ta$s=e C#$!#l P#!#c#l................................................................................................................ 19.
8.1.8 LA CO/C+E APPLICATIONS........................................................................................................................................................19.
8.1.9 CONCL/SION...........................................................................................................................................................................195
8.2 GESTION DES ADRESSES RSEAU.................................................................................................................................................. 1!7
8.3 PROGRAMMATION TCP-IP....................................................................................................................................................... 1!!
8.3.1 BNRALITS..........................................................................................................................................................................199
8.3.2 LES CARACTRISTIG/ES D/ PROTOCOLE TCP...............................................................................................................................2>>
8.3.3 LA RELATION CLIENT2SER(E/R.................................................................................................................................................. 2>>
8.3.' ARC+ITECT/RE D1/N CLIENT......................................................................................................................................................2>>
8.3.. ARC+ITECT/RE D1/N SER(E/R................................................................................................................................................... 2>1
8.3.5 LA CLASSE TCPCLIENT............................................................................................................................................................ 2>1
8.3.7 LA CLASSE NETCORHSTREA)...................................................................................................................................................2>1
8.3.8 ARC+ITECT/RE DE *ASE D1/N CLIENT INTERNET............................................................................................................................2>2
8.3.9 LA CLASSE TCPLISTENER......................................................................................................................................................... 2>2
8.3.1> ARC+ITECT/RE DE *ASE D1/N SER(E/R INTERNET...................................................................................................................... 2>3
8.4 EXEMPLES................................................................................................................................................................................ 24
8.'.1 SER(E/R D1C+O..................................................................................................................................................................... 2>'
8.'.2 /N CLIENT PO/R LE SER(E/R D1C+O......................................................................................................................................... 2>5
8.'.3 /N CLIENT TCP BNRIG/E..................................................................................................................................................... 2>7
8.'.' /N SER(E/R TCP BNRIG/E.................................................................................................................................................... 213
8.'.. /N CLIENT CE*..................................................................................................................................................................... 218
8.'.5 CLIENT CE* BRANT LES REDIRECTIONS.....................................................................................................................................22>
8.'.7 SER(E/R DE CALC/L D1I)PNTS.................................................................................................................................................. 223
!. SERVICES *EB ................................................................................................................................................................... 228
!.1 INTRODUCTION.......................................................................................................................................................................... 228
!.2 LES NAVIGATEURS ET XML...................................................................................................................................................... 228
!.3 UN PREMIER SERVICE *EB........................................................................................................................................................ 22!
9.3.1 (ERSION 1............................................................................................................................................................................. 229
9.3.2 (ERSION 2............................................................................................................................................................................. 23.
9.3.3 (ERSION 3............................................................................................................................................................................. 237
9.3.' (ERSION '............................................................................................................................................................................. 238
9.3.. CONCL/SION...........................................................................................................................................................................239
!.4 UN SERVICE *EB D'OPRATIONS................................................................................................................................................. 23!
!.5 UN CLIENT 'TTP-POST........................................................................................................................................................ 245
!.6 UN CLIENT SOAP.................................................................................................................................................................... 253
!.7 ENCAPSULATION DES C'ANGES CLIENT-SERVEUR.........................................................................................................................257
9.7.1 LA CLASSE D1ENCAPS/LATION.................................................................................................................................................... 2.7
9.7.2 /N CLIENT CONSOLE................................................................................................................................................................ 251
9.7.3 /N CLIENT BRAP+IG/E CINDOCS............................................................................................................................................... 253
!.8 UN CLIENT PROX)..................................................................................................................................................................... 268
!.! CON$IGURER UN SERVICE *EB.................................................................................................................................................. 272
!.1 LE SERVICE *EB IMPOTS................................................................................................................................................... 274
9.1>.1 LE SER(ICE CE*....................................................................................................................................................................27'
9.1>.2 BNRER LE PRO0Y D/ SER(ICE I)POTS....................................................................................................................................28>
9.1>.3 /TILISER LE PRO0Y A(EC /N CLIENT........................................................................................................................................ 281
1. A SUIVRE. ......................................................................................................................................................................... 285
F. Les (ases d$ &angage VB.NET
F.F Intr#d$%ti#n
N#$s trait#ns VB.NET d'a(#rd %#,,e $n &angage de 'r#gra,,ati#n %&assi-$e. N#$s a(#rder#ns &es #(Bets $&trie$re,ent.
Dans $n 'r#gra,,e #n tr#$ve de$/ %h#ses
- des d#nnes
- &es instr$%ti#ns -$i &es ,ani'$&ent
;n s'e++#r%e gnra&e,ent de s'arer &es d#nnes des instr$%ti#ns 4
+--------------------+
DONNEES
+--------------------

INSTRUCTIONS

+--------------------+
F. Les d#nnes de VB.NET
VB.NET $ti&ise &es tA'es de d#nnes s$ivants4
F. &es n#,(res entiers0 re&s et d%i,a$/
. &es %ara%t:res et %haCnes de %ara%t:res
H. &es (##&ens
". &es dates
I. &es #(Bets
F..F Les tA'es de d#nnes 'rd+inis
Type VB Type .NET quivalent Taille Plage de valeurs
B##&ean SAste,.B##&ean #%tets Tr$e #$ Ja&se.
BAte SAste,.BAte F #%tet ! . II <n#n signs=.
5har SAste,.5har #%tets ! . KI IHI <n#n signs=.
Date SAste,.DateTi,e E #%tets !4!!4!! &e F
er
Banvier !!!F . H4IL4IL &e HF d%e,(re LLLL.
De%i,a& SAste,.De%i,a& FK #%tets ! . MN-OL E FK IF" K" HHO ILH I"H LI! HHI sans d%i,a&e P ! . MN-
O0LEFKIF"K"HHOILHI"HLI!HHI ave% E d%i,a&es P &e '&$s 'etit n#,(re
di++rent de Qr# tant MN-!0!!!!!!!!!!!!!!!!!!!!!!!!!!!F <MN-FE-E=.
D#$(&e SAste,.D#$(&e E #%tets -F0OLOKLHFH"EKHFEMH!E .
-"0L"!KIK"IE"F"OE-H" '#$r &es va&e$rs ngatives P "0L"!KIK"IE"F"OE-H" .
F0OLOKLHFH"EKHFEMH!E '#$r &es va&e$rs '#sitives.
Integer SAste,.IntH " #%tets - F"O "EH K"E . F"O "EH K"O.
L#ng SAste,.IntK" E #%tets -L H HO !HK EI" OOI E!E . L H HO !HK EI" OOI E!O.
;(Be%t SAste,.;(Be%t " #%tets N'i,'#rte -$e& tA'e 'e$t *tre st#%R dans $ne varia(&e de tA'e ;(Be%t.
Sh#rt SAste,.IntFK #%tets -H OKE . H OKO.
Sing&e SAste,.Sing&e " #%tets -H0"!EHEMHE . -F0"!FLEE-"I '#$r &es va&e$rs ngatives P F0"!FLEE-"I .
H0"!EHEMHE '#$r &es va&e$rs '#sitives.
String SAste,.String <%&asse= ! . envir#n ,i&&iards de %ara%t:res Uni%#de.
Dans &e ta(&ea$ %i-dess$s0 #n d%#$vre -$'i& A a de$/ tA'es '#ssi(&es '#$r $n entier s$r H (its 4 Integer et System.Int32. Les de$/
tA'es s#nt inter%hangea(&es. I& en est de ,*,e '#$r &es a$tres tA'es VB et &e$rs -$iva&ents dans &a '&ate-+#r,e .NET. V#i%i $n
e/e,'&e de 'r#gra,,e 4
Les (ases de VB.NET
O
Module types
Sub Main()
' nombres entiers
Dim var1 As Integer = 100
Dim var2 As Long = 10000000000L
Dim var3 As Byte = 100
Dim var4 As Short = 4
' nombres rels
Dim var5 As Decimal = 4.56789D
Dim var6 As Double = 3.4
Dim var7 As Single = -0.000103F
' date
Dim var8 As Date = New Date(2003, 1, 1, 12, 8, 4)
' boolen
Dim var9 As Boolean = True
' caractre
Dim var10 As Char = "A"c
' chane de caractres
Dim var11 As String = "abcde"
' objet
Dim var12 As Object = New Object
' affichages
Console.Out.WriteLine("var1=" + var1.ToString)
Console.Out.WriteLine("var2=" + var2.ToString)
Console.Out.WriteLine("var3=" + var3.ToString)
Console.Out.WriteLine("var4=" + var4.ToString)
Console.Out.WriteLine("var5=" + var5.ToString)
Console.Out.WriteLine("var6=" + var6.ToString)
Console.Out.WriteLine("var7=" + var7.ToString)
Console.Out.WriteLine("var8=" + var8.ToString)
Console.Out.WriteLine("var9=" + var9.ToString)
Console.Out.WriteLine("var10=" + var10)
Console.Out.WriteLine("var11=" + var11)
Console.Out.WriteLine("var12=" + var12.ToString)
End Sub
End Module
L'e/%$ti#n d#nne &es rs$&tats s$ivants 4
var1=100
var2=10000000000
var3=100
var4=4
var5=4,56789
var6=3,4
var7=-0,000103
var8=01/01/2003 12:08:04
var9=True
var10=A
var11=abcde
var12=System.Object
F.. N#tati#n des d#nnes &ittra&es
Integer
F"I0 -O0 SJJ <he/ad%i,a&=
Long
F!!!!!L
Double
FH".OEL0 -"IE-FE <-"I F!
-FE
=
Single
FH".OELF0 -"IE-FEF <-"I F!
-FE
=
Decimal
F!!!!!D
Char
DAD%
String
Da$B#$rd'h$iD
Boolean
tr$e0 +a&se
date
Ne2 Date<!!H0 F0 F= '#$r &e !FN!FN!!H
;n n#tera &es '#ints s$ivants 4
- F!!!!!L0 &e L '#$r signi+ier -$'#n %#nsid:re &e n#,(re %#,,e $n entier &#ng
- FH".OELJ0 &e J '#$r signi+ier -$'#n %#nsid:re &e n#,(re %#,,e $n re& si,'&e 'r%isi#n
- F!!!!!D0 &e D '#$r signi+ier -$'#n %#nsid:re &e n#,(re %#,,e $n re& d%i,a&
Les (ases de VB.NET
E
- DAD%0 '#$r trans+#r,er &a %haCne de %ara%t:res DAD en %ara%t:re 'A'
- &a %haCne de %ara%t:res est ent#$r d$ %ara%t:re D. Si &a %haCne d#it %#ntenir &e %ara%t:re D0 #n d#$(&e %e&$i-%i %#,,e dans
Da(%dDDeD '#$r re'rsenter &a %haCne Ta(%dDeU.
F..H D%&arati#n des d#nnes
1.2.3.1 Rle des dclarations
Un 'r#gra,,e ,ani'$&e des d#nnes %ara%trises 'ar $n n#, et $n tA'e. 5es d#nnes s#nt st#%Res en ,,#ire. A$ ,#,ent de
&a trad$%ti#n d$ 'r#gra,,e0 &e %#,'i&ate$r a++e%te . %ha-$e d#nne $n e,'&a%e,ent en ,,#ire %ara%tris 'ar $ne adresse et
$ne tai&&e. I& &e +ait en s'aidant des d%&arati#ns +aites 'ar &e 'r#gra,,e$r. Par ai&&e$rs %e&&es-%i 'er,ettent a$ %#,'i&ate$r de dte%ter
des erre$rs de 'r#gra,,ati#n. Ainsi &'#'rati#n /V/W sera d%&are err#ne si / est $ne %haCne de %ara%t:res 'ar e/e,'&e.
1.2.3.2 Dclaration des constantes
La sAnta/e de d%&arati#n d'$ne %#nstante est &a s$ivante 4
const identificateur as type=valeur
'ar e/e,'&e Tconst PI as double=.!"!#$%. P#$r-$#i d%&arer des %#nstantes X
F. La &e%t$re d$ 'r#gra,,e sera '&$s aise si &'#n a d#nn . &a %#nstante $n n#, signi+i%ati+ 4 Tconst tau&'tva as single=(.!)*FU
. La ,#di+i%ati#n d$ 'r#gra,,e sera '&$s aise si &a D%#nstanteD vient . %hanger. Ainsi dans &e %as 'r%dent0 si &e ta$/ de tva
'asse . HHG0 &a se$&e ,#di+i%ati#n . +aire sera de ,#di+ier &'instr$%ti#n d+inissant sa va&e$r 4 Tconst tau&'tva as
single=(.*FU. Si &'#n avait $ti&is !.FEK e/'&i%ite,ent dans &e 'r#gra,,e0 %e serait a&#rs de n#,(re$ses instr$%ti#ns -$'i&
+a$drait ,#di+ier.
1.2.3.3 Dclaration des !aria"les
Une varia(&e est identi+ie 'ar $n n#, et se ra''#rte . $n tA'e de d#nnes. VB.NET ne +ait 'as &a di++ren%e entre ,aB$s%$&es et
,in$s%$&es. Ainsi &es varia(&es FIN et fin s#nt identi-$es. Les varia(&es 'e$vent *tre initia&ises &#rs de &e$r d%&arati#n. La sAnta/e
de d%&arati#n d'$ne #$ '&$sie$rs varia(&es est 4
di+ variable!,variable%,...,variablen as identificateur'de'type
#> identi#icateur$de$type est $n tA'e 'rd+ini #$ (ien $n tA'e d+ini 'ar &e 'r#gra,,e$r.
F.." Les %#nversi#ns entre n#,(res et %haCnes de %ara%t:res
nombre -> chane
nom"re.%oString ou && ' nom"re ou (%ype)nom"re*String+
objet -> chane
o",et.%oString
chaine -> Integer
Integer.-arse)chaine+ ou Int32.-arse
chane -> Long
.ong.-arse)chaine+ ou Int/0.-arse
chane -> Double
Dou"le.-arse)cha1ne+
chane -> Single
Single.-arse)cha1ne+
La %#nversi#n d'$ne %haCne vers $n n#,(re 'e$t %h#$er si &a %haCne ne re'rsente 'as $n n#,(re va&ide. I& A a a&#rs gnrati#n
d'$ne erre$r +ata&e a''e&e e&ception en VB.NET. 5ette erre$r 'e$t *tre gre 'ar &a %&a$se try/catch s$ivante 4
try
appel de la fonction susceptible de gnrer l'exception
catch e as Exception
traiter l'exception e
end try
instruction suivante
Si &a +#n%ti#n ne gn:re 'as d'e/%e'ti#n0 #n 'asse a&#rs . instruction suivante0 sin#n #n 'asse dans &e %#r's de &a %&a$se catch '$is .
instruction suivante. N#$s reviendr#ns $&trie$re,ent s$r &a gesti#n des e/%e'ti#ns. V#i%i $n 'r#gra,,e 'rsentant &es
'rin%i'a&es te%hni-$es de %#nversi#n entre n#,(res et %haCnes de %ara%t:res. Dans %et e/e,'&e &a +#n%ti#n affic-e %rit . &'%ran &a
va&e$r de s#n 'ara,:tre. Ainsi a##iche)S+ %rit &a va&e$r de . . &'%ran.
' directives
Option Strict On
' espaces de noms imports
Imports System
Les (ases de VB.NET
L
' le module de test
Module Module1
Sub Main()
' procdure principale
' donnes locales
Dim S As String
Const i As Integer = 10
Const l As Long = 100000
Const f As Single = 45.78F
Dim d As Double = -14.98
' nombre --> chane
affiche(CType(i, String))
affiche(CType(l, String))
affiche(CType(f, String))
affiche(CType(d, String))
'boolean --> chane
Const b As Boolean = False
affiche(b.ToString)
' chane --> int
Dim i1 As Integer = Integer.Parse("10")
affiche(i1.ToString)
Try
i1 = Integer.Parse("10.67")
affiche(i1.ToString)
Catch e As Exception
affiche("Erreur [10.67] : " + e.Message)
End Try
' chane --> long
Dim l1 As Long = Long.Parse("100")
affiche("" + l1.ToString)
Try
l1 = Long.Parse("10.675")
affiche("" & l1)
Catch e As Exception
affiche("Erreur [10.675] : " + e.Message)
End Try
' chane --> double
Dim d1 As Double = Double.Parse("100,87")
affiche(d1.ToString)
Try
d1 = Double.Parse("abcd")
affiche("" & d1)
Catch e As Exception
affiche("Erreur [abcd] : " + e.Message)
End Try
' chane --> single
Dim f1 As Single = Single.Parse("100,87")
affiche(f1.ToString)
Try
d1 = Single.Parse("abcd")
affiche(f1.ToString)
Catch e As Exception
affiche("Erreur [abcd] : " + e.Message)
End Try
End Sub
' affiche
Public Sub affiche(ByVal S As String)
Console.Out.WriteLine("S=" + S)
End Sub
End Module
Les s7l!a!s #&!e$7s s#$! les s7"%a$!s M
S=10
S=100000
S=45,78
S=-14,98
S=False
S=10
S=Erreur [10.67] : Le format de la chane d'entre est incorrect.
S=100
S=Erreur [10.675] : Le format de la chane d'entre est incorrect.
Les (ases de VB.NET
F!
S=100,87
S=Erreur [abcd] : Le format de la chane d'entre est incorrect.
S=100,87
S=Erreur [abcd] : Le format de la chane d'entre est incorrect.
;n re,ar-$era -$e &es n#,(res re&s s#$s +#r,e de %haCne de %ara%t:res d#ivent $ti&iser &a virg$&e et n#n &e '#int d%i,a&. Ainsi #n
%rira Dim d As Double = -14.98 ,ais Dim d1 As Double = Double.Parse("100,87")
F..I Les ta(&ea$/ de d#nnes
Un ta(&ea$ VB.NET est $n #(Bet 'er,ettant de rasse,(&er s#$s $n ,*,e identi+i%ate$r des d#nnes de ,*,e tA'e. Sa d%&arati#n
est &a s$ivante 4
/i+ Tableau0n1 as type #$ /i+ Tableau01 as type=Ne2 type0n1 34
#> n est &'indi%e d$ dernier &,ent de ta(&ea$. La sAnta/e %a"leau)i+ dsigne &a d#nne nY i #> i a''artient . &'interva&&e 23*n. T#$te
r+ren%e . &a d#nne %a"leau)i+ #> i n'a''artient 'as . &'interva&&e 23*n 'r#v#-$era $ne e/%e'ti#n. Un ta(&ea$ 'e$t *tre initia&is en
,*,e te,'s -$e d%&ar. Dans %e %as0 #n n'a 'as (es#in d'indi-$er &e nY d$ dernier &,ent.
Dim entiers() As Integer = {0, 10, 20, 30}
Les ta(&ea$/ #nt $ne 'r#'rit 5engt- -$i est &e n#,(re d'&,ents d$ ta(&ea$. V#i%i $n 'r#gra,,e e/e,'&e 4
Module tab0
Sub Main()
' un premier tableau
Dim tab0(5) As Integer
For i As Integer = 0 To UBound(tab0)
tab0(i) = i
Next
For i As Integer = 0 To UBound(tab0)
Console.Out.WriteLine("tab0(" + i.ToString + ")=" + tab0(i).tostring)
Next
' un second tableau
Dim tab1() As Integer = New Integer(5) {}
For i As Integer = 0 To tab1.Length - 1
tab1(i) = i * 10
Next
For i As Integer = 0 To tab1.Length - 1
Console.Out.WriteLine("tab1(" + i.ToString + ")=" + tab1(i).tostring)
Next
End Sub
End Module
et s#n e/%$ti#n 4
tab0(0)=0
tab0(1)=1
tab0(2)=2
tab0(3)=3
tab0(4)=4
tab0(5)=5
tab1(0)=0
tab1(1)=10
tab1(2)=20
tab1(3)=30
tab1(4)=40
tab1(5)=50
Un ta(&ea$ . de$/ di,ensi#ns '#$rra *tre d%&ar %#,,e s$it 4
/i+ Tableau0n,+1 as Type ou /i+ Tableau0,1 as Type=Ne2 Type0n,+1 34
#> n41 est &e n#,(re de &ignes0 m41 &e n#,(re de %#&#nnes. La sAnta/e %a"leau)i*,+ dsigne &'&,ent B de &a &igne i de %a"leau. Le
ta(&ea$ . de$/ di,ensi#ns 'e$t &$i a$ssi *tre initia&is en ,*,e te,'s -$'i& est d%&ar 4
Dim rels(,) As Double = {{0.5, 1.7}, {8.4, -6}}
Le n#,(re d'&,ents dans %ha%$ne des di,ensi#ns 'e$t *tre #(ten$e 'ar &a ,th#de 6et5ent-0i1 #> iV! re'rsente &a di,ensi#n
%#rres'#ndant a$ Fer indi%e0 iVF &a di,ensi#n %#rres'#ndant a$ i:,e indi%e0 ZV#i%i $n 'r#gra,,e d'e/e,'&e 4
Module Module2
Les (ases de VB.NET
FF
Sub Main()
' un premier tableau
Dim tab0(2, 1) As Integer
For i As Integer = 0 To UBound(tab0)
For j As Integer = 0 To tab0.GetLength(1) - 1
tab0(i, j) = i * 10 + j
Next
Next
For i As Integer = 0 To UBound(tab0)
For j As Integer = 0 To tab0.GetLength(1) - 1
Console.Out.WriteLine("tab0(" + i.ToString + "," + j.ToString + ")=" + tab0(i, j).tostring)
Next
Next
' un second tableau
Dim tab1(,) As Integer = New Integer(2, 1) {}
For i As Integer = 0 To tab1.GetLength(0) - 1
For j As Integer = 0 To tab1.GetLength(1) - 1
tab1(i, j) = i * 100 + j
Next
Next
For i As Integer = 0 To tab1.GetLength(0) - 1
For j As Integer = 0 To tab1.GetLength(1) - 1
Console.Out.WriteLine("tab1(" + i.ToString + "," + j.ToString + ")=" + tab1(i, j).tostring)
Next
Next
End Sub
End Module
et &es rs$&tats de s#n e/%$ti#n 4
tab0(0)=0
tab0(1)=1
tab0(2)=2
tab0(3)=3
tab0(4)=4
tab0(5)=5
tab1(0)=0
tab1(1)=10
tab1(2)=20
tab1(3)=30
tab1(4)=40
tab1(5)=50
Un ta(&ea$ de ta(&ea$/ est d%&ar %#,,e s$it 4
/i+ Tableau0n101 as Type #$ /i+ Tableau0101 as Type=ne2 Type0n101
La d%&arati#n %i-dess$s %re $n ta(&ea$ de n41 &ignes. 5ha-$e &,ent %a"leau)i+ est $ne r+ren%e de ta(&ea$ . $ne di,ensi#n. 5es
ta(&ea$/ ne s#nt 'as %rs &#rs de &a d%&arati#n %i-dess$s. L'e/e,'&e %i-dess#$s i&&$stre &a %rati#n d'$n ta(&ea$ de ta(&ea$/ 4
' un tableau de tableaux
Dim noms()() As String = New String(3)() {}
' initialisation
For i = 0 To noms.Length - 1
noms(i) = New String(i) {}
For j = 0 To noms(i).Length - 1
noms(i)(j) = "nom" & i & j
Next
Next
I%i noms)i+ est $n ta(&ea$ de iMF &,ents. 5#,,e noms)i+ est $n ta(&ea$0 noms)i+..ength est s#n n#,(re d'&,ents. V#i%i $n e/e,'&e
regr#$'ant &es tr#is tA'es de ta(&ea$/ -$e n#$s ven#ns de 'rsenter 4
' directives
Option Strict On
Option Explicit On
' imports
Imports System
' classe de test
Module test
Sub main()
' un tableau 1 dimension initialis
Dim entiers() As Integer = {0, 10, 20, 30}
Dim i As Integer
Les (ases de VB.NET
F
For i = 0 To entiers.Length - 1
Console.Out.WriteLine("entiers[" & i & "]=" & entiers(i))
Next
' un tableau 2 dimensions initialis
Dim rels(,) As Double = {{0.5, 1.7}, {8.4, -6}}
Dim j As Integer
For i = 0 To rels.GetLength(0) - 1
For j = 0 To rels.GetLength(1) - 1
Console.Out.WriteLine("rels[" & i & "," & j & "]=" & rels(i, j))
Next
Next
' un tableaude tableau
Dim noms()() As String = New String(3)() {}
' initialisation
For i = 0 To noms.Length- 1
noms(i) =New String(i) {}
For j = 0 To noms(i).Length - 1
noms(i)(j) = "nom" & i & j
Next
Next
' affichage
For i = 0 To noms.Length- 1
For j = 0 To noms(i).Length - 1
Console.Out.WriteLine("noms[" & i & "][" & j & "]=" & noms(i)(j))
Next
Next
End Sub
End Module
A l1e8c7!"#$I $#7s #&!e$#$s les s7l!a!s s7"%a$!s M
entiers[0]=0
entiers[1]=10
entiers[2]=20
entiers[3]=30
rels[0,0]=0,5
rels[0,1]=1,7
rels[1,0]=8,4
rels[1,1]=-6
noms[0][0]=nom00
noms[1][0]=nom10
noms[1][1]=nom11
noms[2][0]=nom20
noms[2][1]=nom21
noms[2][2]=nom22
noms[3][0]=nom30
noms[3][1]=nom31
noms[3][2]=nom32
noms[3][3]=nom33
F.H Les instr$%ti#ns &,entaires de VB.NET
;n disting$e
F &es instr$%ti#ns &,entaires e/%$tes 'ar &'#rdinate$r.
&es instr$%ti#ns de %#ntr[&e d$ dr#$&e,ent d$ 'r#gra,,e.
Les instr$%ti#ns &,entaires a''araissent %&aire,ent &#rs-$'#n %#nsid:re &a str$%t$re d'$n ,i%r#-#rdinate$r et de ses 'ri'hri-$es.
U. C MEMOIRE ECRAN
+-------------------+ +-------+
2 <-+--> 3
+-----------+ 1 ----+------+->
CLAVIER +-----------+--------+-->
+-----------+ +-------------------+ +-------+
4^
\
\ 5 +-------+
\ ---->
DISQUE
+-------+
Les (ases de VB.NET
FH
F. &e%t$re d'in+#r,ati#ns 'r#venant d$ %&avier
. traite,ent d'in+#r,ati#ns
H. %rit$re d'in+#r,ati#ns . &'%ran
". &e%t$re d'in+#r,ati#ns 'r#venant d'$n +i%hier dis-$e
I. %rit$re d'in+#r,ati#ns dans $n +i%hier dis-$e
F.H.F E%rit$re s$r %ran
I& e/iste di++rentes instr$%ti#ns d'%rit$re . &'%ran 4
Console.Out.WriteLine(expression)
Console.WriteLine(expression)
Console.Error.WriteLine (expression)
#> expression est t#$t tA'e de d#nne -$i '$isse *tre %#nverti en %haCne de %ara%t:res '#$r *tre a++i%h . &'%ran. Dans &es e/e,'&es
v$s B$s-$'i%i0 n#$s n'av#ns $ti&is -$e &'instr$%ti#n (onsole.5ut.6rite.ine)expression+.
La %&asse System.(onsole d#nne a%%:s a$/ #'rati#ns d'%rit$re %ran <7rite0 7rite5ine=. La %&asse (onsole a de$/ 'r#'rits 8ut et
Error -$i s#nt des flu& d9criture de tA'e Stream6riter 4
(onsole.6rite.ine)+ est -$iva&ent . (onsole.5ut.6rite.ine)+ et %rit s$r &e +&$/ 8ut ass#%i ha(it$e&&e,ent . &'%ran.
(onsole.7rror.6rite.ine)+ %rit s$r &e +&$/ Error0 ha(it$e&&e,ent ass#%i &$i a$ssi &'%ran.
Les +&$/ 5ut et 7rror s#nt ass#%is 'ar d+a$t &'%ran. Mais i&s 'e$vent *tre redirigs vers des +i%hiers te/te a$ ,#,ent de &'e/%$ti#n
d$ 'r#gra,,e %#,,e n#$s &e verr#ns 'r#%haine,ent.
F.H. Le%t$re de d#nnes ta'es a$ %&avier
Le +&$/ de d#nnes 'r#venant d$ %&avier est dsign 'ar &'#(Bet (onsole.In de tA'e StreamReader. 5e tA'e d'#(Bets 'er,et de &ire $ne
&igne de te/te ave% &a ,th#de Read.ine 4
Dim ligne As String = Console.In.ReadLine()
La &igne ta'e a$ %&avier est range dans &a varia(&e ligne et 'e$t ens$ite *tre e/'&#ite 'ar &e 'r#gra,,e.Le +&$/ In 'e$t *tre redirig
vers $n +i%hier %#,,e &es +&$/ 8ut et Error.
F.H.H E/e,'&e d'entres-s#rties
V#i%i $n %#$rt 'r#gra,,e d'i&&$strati#n des #'rati#ns d'entres-s#rties %&avierN%ran 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' module
Module io1
Sub Main()
' criture sur le flu !ut
Dim obj As New Object
Console.Out.WriteLine(("" & obj.ToString))
' criture sur le flu "rror
Dim i As Integer = 10
Console.Error.WriteLine(("i=" & i))
' lecture d'une ligne saisie au clavier
Console.Out.Write("Tapez une ligne : ")
Dim ligne As String = Console.In.ReadLine()
Console.Out.WriteLine(("ligne=" + ligne))
End Sub
End Module
et &es rs$&tats de &'e/%$ti#n 4
System.Object
i=10
Tapez une ligne : ceci est un essai
ligne=ceci est un essai
Les instr$%ti#ns
Les (ases de VB.NET
F"
Dim obj As New Object
Console.Out.WriteLine(obj.ToString)
ne s#nt &. -$e '#$r ,#ntrer -$e n'i,'#rte -$e& #(Bet 'e$t +aire &'#(Bet d'$n a++i%hage. N#$s ne %her%her#ns 'as i%i . e/'&i-$er &a
signi+i%ati#n de %e -$i est a++i%h.
F.H." Redire%ti#n des ENS
I& e/iste s#$s D;SN1ind#2s tr#is 'ri'hri-$es standard a''e&s 4
F. 'ri'hri-$e d'entre standard - dsigne 'ar d+a$t &e %&avier et '#rte &e nY !
. 'ri'hri-$e de s#rtie standard - dsigne 'ar d+a$t &'%ran et '#rte &e nY F
H. 'ri'hri-$e d'erre$r standard - dsigne 'ar d+a$t &'%ran et '#rte &e nY
En VB.NET0 &e +&$/ d'%rit$re (onsole.5ut %rit s$r &e 'ri'hri-$e F0 &e +&$/ d'%rit$re (onsole.7rror %rit s$r &e 'ri'hri-$e et &e
+&$/ de &e%t$re (onsole.In &it &es d#nnes 'r#venant d$ 'ri'hri-$e !. L#rs-$'#n &an%e $n 'r#gra,,e dans $ne +en*tre D#s s#$s
1ind#2s0 #n 'e$t +i/er -$e&s ser#nt &es 'ri'hri-$es !0 F et '#$r &e 'r#gra,,e e/%$t. 5#nsidr#ns &a &igne de %#,,ande
s$ivante 4
pg arg1 arg2 .. argn
Derri:re &es arg$,ents argi d$ 'r#gra,,e pg0 #n 'e$t rediriger &es 'ri'hri-$es d'ENS standard vers des +i%hiers4
0<in.txt
&e +&$/ d'entre standard nY ! est redirig vers &e +i%hier in.txt. Dans &e 'r#gra,,e &e +&$/ (onsole.In
'rendra d#n% ses d#nnes dans &e +i%hier in.txt.
1>out.txt
redirige &a s#rtie nY F vers &e +i%hier out.txt. 5e&a entraCne -$e dans &e 'r#gra,,e &e +&$/ (onsole.5ut %rira
ses d#nnes dans &e +i%hier out.txt
1>>out.txt
ide,0 ,ais &es d#nnes %rites s#nt aB#$tes a$ %#nten$ a%t$e& d$ +i%hier out.txt.
2>error.txt
redirige &a s#rtie nY vers &e +i%hier error.txt. 5e&a entraCne -$e dans &e 'r#gra,,e &e +&$/ (onsole.7rror
%rira ses d#nnes dans &e +i%hier error.txt
2>>error.txt
ide,0 ,ais &es d#nnes %rites s#nt aB#$tes a$ %#nten$ a%t$e& d$ +i%hier error.txt.
1>out.txt
2>error.txt
Les 'ri'hri-$es F et s#nt t#$s &es de$/ redirigs vers des +i%hiers
O$ $#!ea ;7e 6#7 ed""?e les =l78 d1E3S d7 6#?a::e pg %es des ="c9"esI &e 'r#gra,,e pg n'a 'as (es#in d'*tre ,#di+i.
5'est &';S -$i +i/e &a nat$re des 'ri'hri-$es !0F et . 5#nsidr#ns &e 'r#gra,,e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' redirections
Module console2
Sub Main()
' lecture flu #n
Dim data As String = Console.In.ReadLine()
' criture flu !ut
Console.Out.WriteLine(("criture dans flux Out : " + data))
' criture flu "rror
Console.Error.WriteLine(("criture dans flux Error : " + data))
End Sub
End Module
5#,'i&#ns %e 'r#gra,,e 4
dos>vbc es2.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. Tous droits rservs.
dos>dir
24/02/2004 15:39 416 es2.vb
11/03/2004 08:20 3 584 es2.exe
Les (ases de VB.NET
FI
Jais#ns $ne 're,i:re e/%$ti#n4
dos>es2.exe
un premier test
criture dans flux Out : un premier test
criture dans flux Error : un premier test
L'e/%$ti#n 'r%dente ne redirige a$%$n des +&$/ d'ENS standard In0 8ut0 Error. N#s a&&#ns ,aintenant rediriger &es tr#is +&$/. Le
+&$/ In sera redirig vers $n +i%hier in.txt0 &e +&$/ 5ut vers &e +i%hier out.txt0 &e +&$/ 7rror vers &e +i%hier error.txt. 5ette redire%ti#n a &ie$
s$r &a &igne de %#,,ande s#$s &a +#r,e
dos>es2.exe 0<in.txt 1>out.txt 2>error.txt
L'e/%$ti#n d#nne &es rs$&tats s$ivants 4
dos>more in.txt
un second test
dos>es2.exe 0<in.txt 1>out.txt 2>error.txt
dos>more out.txt
criture dans flux Out : un second test
dos>more error.txt
criture dans flux Error : un second test
;n v#it %&aire,ent -$e &es +&$/ 5ut et 7rror n'%rivent 'as s$r &es ,*,es 'ri'hri-$es.
F.H.I A++e%tati#n de &a va&e$r d'$ne e/'ressi#n . $ne varia(&e
;n s'intresse i%i . &'#'rati#n variable=e&pression. L'e/'ressi#n 'e$t *tre de tA'e 4 arith,ti-$e0 re&ati#nne&&e0 (##&enne0
%ara%t:res.
1.3.8.1 .iste des oprateurs
:ction ;l+ent du langage
Arithmtique
\0 ]0 W0 N0 ^0 M#d0 M0 V
Assignation
V0 \V0 WV0 NV0 ^V0 MV0 -V0 SV
Comparaison
V0 _`0 _0 `0 _V0 `V0 LiRe0 Is
Concatnation
S0 M
Oprations logiques/de bits
N#t0 And0 ;r0 3#r0 AndA&s#0 ;rE&se
Oprations diverses
Address;+0 GetTA'e
1.3.8.2 7xpression arithmti9ue
Les #'rate$rs des e/'ressi#ns arith,ti-$es s#nt &es s$ivants 4
Arithmtique
\0 ]0 W0 N0 ^0 M#d0 M0 V
M 4 additi#n0 - 4 s#$stra%ti#n0 W 4 ,$&ti'&i%ati#n0 N 4 divisi#n re&&e0 ^ 4 -$#tient de divisi#n enti:re0 M#d 4 reste de &a divi#n enti:re0 \4
&vati#n . &a '$issan%e. Ainsi &e 'r#gra,,e s$ivant 4
' oprateurs arithmti$ues
Module operateursarithmetiques
Sub Main()
Dim i, j As Integer
i = 4 : j = 3
Console.Out.WriteLine(i & "/" & j & "=" & (i / j))
Console.Out.WriteLine(i & "\" & j & "=" & (i \ j))
Console.Out.WriteLine(i & " mod " & j & "=" & (i Mod j))
Dim r1, r2 As Double
r1 = 4.1 : r2 = 3.6
Console.Out.WriteLine(r1 & "/" & r2 & "=" & (r1 / r2))
Console.Out.WriteLine(r1 & "^2=" & (r1 ^ 2))
Console.Out.WriteLine(Math.Cos(3))
End Sub
Les (ases de VB.NET
FK
End Module
d#nne &es rs$&tats s$ivants 4
4/3=1,33333333333333
4\3=1
4 mod 3=1
4,1/3,6=1,13888888888889
4,1^2=16,81
-0,989992496600445
I& e/iste diverses +#n%ti#ns ,ath,ati-$es. En v#i%i -$e&-$es-$nes 4
Public Shared Function Sqrt(ByVal d As Double ) As Double
ra%ine %arre
Public Shared Function Cos(ByVal d As Double ) As Double
5#sin$s
Public Shared Function Sin(ByVal a As Double) As Double
Sin$s
Public Shared Function Tan(ByVal a As Double) As Double
Tangente
Public Shared Function Pow(ByVal x As Double,ByVal y As Double) As Double
/ . &a '$issan%e A </`!=
Public Shared Function Exp(ByVal d As Double) As Double
E/'#nentie&&e
Overloads Public Shared Function Log( ByVal d As Double ) As Double
L#garith,e n'rien
Overloads Public Shared Function Abs(ByVal value As Double ) As Double
va&e$r a(s#&$e
....
T#$tes %es +#n%ti#ns s#nt d+inies dans $ne %&asse .NET a''e&e <at-. L#rs-$'#n &es $ti&ise0 i& +a$t &es 'r+i/er ave% &e n#, de &a
%&asse #> e&&es s#nt d+inies. Ainsi #n %rira 4
Dim r1, r2 As Double
r2 = Math.Sqrt(9)
r1 = Math.Cos(3)
La d+initi#n %#,'&:te de &a %&asse :ath est &a s$ivante 4
E
Re'rsente &a (ase de &#garith,e nat$re&&e s'%i+ie 'ar &a %#nstante e.
PI
Re'rsente &e ra''#rt de &a %ir%#n+ren%e d'$n %er%&e . s#n dia,:tre0 s'%i+i 'ar &a %#nstante a.
Abs
S$r%harg. Ret#$rne &a va&e$r a(s#&$e d'$n n#,(re s'%i+i.
Acos
Ret#$rne &'ang&e d#nt &e %#sin$s est &e n#,(re s'%i+i.
Asin
Ret#$rne &'ang&e d#nt &e sin$s est &e n#,(re s'%i+i.
Atan
Ret#$rne &'ang&e d#nt &a tangente est &e n#,(re s'%i+i.
Atan2
Ret#$rne &'ang&e d#nt &a tangente est &e -$#tient de de$/ n#,(res s'%i+is.
BigMul
Gn:re &e 'r#d$it intgra& de de$/ n#,(res H (its.
Ceiling
Ret#$rne &e '&$s 'etit n#,(re entier s$'rie$r #$ ga& a$ n#,(re s'%i+i.
Cos
Ret#$rne &e %#sin$s de &'ang&e s'%i+i.
Cosh
Ret#$rne &e %#sin$s hA'er(#&i-$e de &'ang&e s'%i+i.
DivRem
S$r%harg. Ret#$rne &e -$#tient de de$/ n#,(res0 en 'assant &e reste en tant -$e 'ara,:tre de s#rtie.
Exp
Ret#$rne e &ev . &a '$issan%e s'%i+ie.
Floor
Ret#$rne &e '&$s grand n#,(re entier in+rie$r #$ ga& a$ n#,(re s'%i+i.
IEEERemainder
Ret#$rne &e reste de &a divisi#n d'$n n#,(re s'%i+i 'ar $n a$tre.
Log
S$r%harg. Ret#$rne &e &#garith,e d'$n n#,(re s'%i+i.
Log10
Ret#$rne &e &#garith,e de (ase F! d'$n n#,(re s'%i+i.
Max
S$r%harg. Ret#$rne &e '&$s grand de de$/ n#,(res s'%i+is.
Min
S$r%harg. Ret#$rne &e '&$s 'etit de de$/ n#,(res.
Les (ases de VB.NET
FO
Pow
Ret#$rne $n n#,(re s'%i+i &ev . &a '$issan%e s'%i+ie.
Round
S$r%harg. Ret#$rne &e n#,(re &e '&$s 'r#%he de &a va&e$r s'%i+ie.
Sign
S$r%harg. Ret#$rne $ne va&e$r indi-$ant &e signe d'$n n#,(re.
Sin
Ret#$rne &e sin$s de &'ang&e s'%i+i.
Sinh
Ret#$rne &e sin$s hA'er(#&i-$e de &'ang&e s'%i+i.
Sqrt
Ret#$rne &a ra%ine %arre d'$n n#,(re s'%i+i.
Tan
Ret#$rne &a tangente de &'ang&e s'%i+i.
Tanh
Ret#$rne &a tangente hA'er(#&i-$e de &'ang&e s'%i+i.
L#rs-$'$ne +#n%ti#n est d%&are Ds$r%hargeD0 %'est -$'e&&e e/iste '#$r divers tA'e de 'ara,:tres. Par e/e,'&e0 &a +#n%ti#n A(s</=
e/iste '#$r / de tA'e Integer0 L#ng0 De%i,a&0 Sing&e0 J&#at. P#$r %ha%$n de %es tA'es e/iste $ne d+initi#n s'are de &a +#n%ti#n
A(s. ;n dit a&#rs -$'e&&e est s$r%harge.
1.3.8.3 -riorits dans l;!aluation des expressions arithmti9ues
La 'ri#rit des #'rate$rs &#rs de &'va&$ati#n d'$ne e/'ressi#n arith,ti-$e est &a s$ivante <d$ '&$s 'ri#ritaire a$ ,#ins 'ri#ritaire= 4
=atgorie 8prateurs
Primaire
T#$tes &es e/'ressi#ns sans #'rate$r 4 +#n%ti#ns0 'arenth:ses
lvation la puissance
\
Ngation unaire
M0 -
Multiplication
W0 N
Division par un entier
^
Modulo
M#d
Addition
M0 -
1.3.8.0 7xpressions relationnelles
Les #'rate$rs s#nt &es s$ivants 4
Comparaison
V0 _`0 _0 `0 _V0 `V0 LiRe0 Is
V 4 ga& .0 _` 4 di++rent de0 _ 4 '&$s 'etit -$e <stri%te,ent=0 ` 4 '&$s grand -$e <stri%te,ent=0 _V 4 in+rie$r #$ ga&0 `V 4 s$'rie$r
#$ ga&0 LiRe 4 %#rres'#nd . $n ,#d:&e0 Is 4 identit d'#(Bets. T#$s %es #'rate$rs #nt &a ,*,e 'ri#rit. I&s s#nt va&$s de &a ga$%he
vers &a dr#ite. Le rs$&tat d'$ne e/'ressi#n re&ati#nne&&e $n (##&en.
=o+paraison de c-a>nes de caract?res 4 %#nsidr#ns &e 'r#gra,,e s$ivant 4
' espaces de noms
Imports System
Module string1
Sub main()
Dim ch1 As Char = "A"c
Dim ch2 As Char = "B"c
Dim ch3 As Char = "a"c
Console.Out.WriteLine("A<B=" & (ch1 < ch2))
Console.Out.WriteLine("A<a=" & (ch1 < ch3))
Dim chat As String = "chat"
Dim chien As String = "chien"
Dim chaton As String = "chaton"
Dim chat2 As String = "CHAT"
Console.Out.WriteLine("chat<chien=" & (chat < chien))
Console.Out.WriteLine("chat<chaton=" & (chat < chaton))
Console.Out.WriteLine("chat<CHAT=" & (chat < chat2))
Console.Out.WriteLine("chaton like chat*=" & ("chaton" Like "chat*"))
End Sub
End Module
et &e rs$&tat de s#n e/%$ti#n 4
A<B=True
Les (ases de VB.NET
FE
A<a=True
chat<chien=True
chat<chaton=True
chat<CHAT=False
chaton like chat*=True
S#ient de$/ %ara%t:res 5F et 5. I& est '#ssi(&e de &es %#,'arer ave% &es #'rate$rs 4 _0 _V0 V0 _`0 `0 `V. 5e s#nt a&#rs &e$rs
va&e$rs Uni%#de des %ara%t:res0 -$i s#nt des n#,(res0 -$i s#nt %#,'ares. Se&#n &'#rdre Uni%#de0 #n a &es re&ati#ns s$ivantes 4
es'a%e _ .. _ '!' _ 'F' _ .. _ 'L' _ .. _ 'A' _ 'B' _ .. _ 'b' _ .. _ 'a' _ '(' _ .. _'Q'
Les %haCnes de %ara%t:res s#nt %#,'ares %ara%t:re 'ar %ara%t:re. La 're,i:re inga&it ren%#ntre entre de$/ %ara%t:res ind$it $ne
inga&it de ,*,e sens s$r &es %haCnes. Ave% %es e/'&i%ati#ns0 &e &e%te$r est invit . t$dier &es rs$&tats d$ 'r#gra,,e 'r%dent.
1.3.8.8 7xpressions "oolennes
Les #'rate$rs s#nt &es s$ivants 4
Oprations logiques/de bits
N#t0 And0 ;r0 3#r0 AndA&s#0 ;rE&se
N#t 4 et &#gi-$e0 ;r 4 #$ &#gi-$e0 N#t 4 ngati#n0 3#r 4 #$ e/%&$si+.
#'F AndA&s# #' 4 si #'F est +a$/0 #' n'est 'as va&$ et &e rs$&tat est +a$/.
#'F ;rE&se #' 4 si #'F est vrai0 #' n'est 'as va&$ et &e rs$&tat est vrai.
La 'ri#rit de %es #'rate$rs entre-e$/ est &a s$ivante 4
NOT logique
N#t
AND logique
And0 AndA&s#
OR logique
;r0 ;rE&se
XOR logique
3#r
Le rs$&tat d'$ne e/'ressi#n (##&enne est $n (##&en.
1.3.8./ %raitement de "its
;n retr#$ve d'$ne 'art &es ,*,es #'rate$rs -$e &es #'rate$rs (##&ens ave% &a ,*,e 'ri#rit. ;n tr#$ve ga&e,ent de$/
#'rate$rs de d'&a%e,ent 4 __ et ``. S#ient i et B de$/ entiers.
i<<n
d%a&e i de n (its s$r &a ga$%he. Les (its entrants s#nt des Qr#s.
i>>n
d%a&e i de n (its s$r &a dr#ite. Si i est $n entier sign <signed %har0 int0 &#ng= &e (it de signe est 'rserv.
i & j
+ait &e ET &#gi-$e de i et B (it . (it.
i | j
+ait &e ;U &#gi-$e de i et B (it . (it.
~i
%#,'&,ente i . F
i^j
+ait &e ;U E35LUSIJ de i et B
S#it &e 'r#gra,,e s$ivant 4
Module operationsbit
Sub main()
' manipulation de bits
Dim i As Short = &H123F
Dim k As Short = &H7123
Console.Out.WriteLine("i<<4=" & (i << 4).ToString("X"))
Console.Out.WriteLine("i>>4=" & (i >> 4).ToString("X"))
Console.Out.WriteLine("k>>4=" & (k >> 4).ToString("X"))
Console.Out.WriteLine("i and 4=" & (i And 4).ToString("X"))
Console.Out.WriteLine("i or 4 =" & (i Or 4).ToString("X"))
Console.Out.WriteLine("not i=" & (Not i).ToString("X"))
End Sub
End Module
S#n e/%$ti#n d#nne &es rs$&tats s$ivants 4
i<<4=23F0
i>>4=123
k>>4=712
i and 4=4
Les (ases de VB.NET
FL
i or k =123F
not i=EDC0
1.3.8.< 5prateur associ = une a##ectation
I& est '#ssi(&e d'%rire aMV( -$i signi+ie aVaM(. La &iste des #'rate$rs '#$vant se %#,niner ave% &'#'rati#n d'a++e%tati#n est &a
s$ivante 4
combinaison d'oprateurs
\V0 WV0 NV0 ^V0 MV0 -V0 SV
1.3.8.> -riorit gnrale des oprateurs
=atgorie 8prateurs
Primaire
T#$tes &es e/'ressi#ns sans #'rate$r
lvation la puissance
\
Ngation unaire
M0 -
Multiplication
W0 N
Division par un entier
^
Modulo
M#d
Addition
M0 -
Concatnation
S
Dplacement
__0 ``
Relationnel
V0 _`0 _0 `0 _V0 `V0 LiRe0 Is0 TA'e;+...Is
NOT logique
N#t
AND logique
And0 AndA&s#
OR logique
;r0 ;rE&se
XOR logique
3#r
L#rs-$'$n #'rande est '&a% entre de$/ #'rate$rs de ,*,e 'ri#rit0 &'ass#%iativit des #'rate$rs rgit &'#rdre dans &e-$e& &es
#'rati#ns s#nt e++e%t$es. T#$s &es #'rate$rs s#nt ass#%iati+s . ga$%he0 %e -$i signi+ie -$e &es #'rati#ns s#nt e/%$tes de ga$%he
. dr#ite. La 'ri#rit et &'ass#%iativit 'e$vent *tre %#ntr[&es . &'aide d'e/'ressi#ns entre 'arenth:ses.
1.3.8.? .es con!ersions de type
I& e/iste $n %ertain n#,(re de +#n%ti#n 'rd+inies 'er,ettant de 'asser d'$n tA'e de d#nnes . $n a$tre. Le$r &iste est &a s$ivante 4
%&ool'%&(te'%%har'%)ate'%)bl'%)ec'%#nt'%*ng'%!bj'%+hort'%+ng'%+tr
5es +#n%ti#ns a%%e'tent %#,,e arg$,ent $ne e/'ressi#n n$,ri-$e #$ $ne %haCne de %ara%t:res. Le tA'e d$ rs$&tat est indi-$
dans &e ta(&ea$ s$ivant 4
fonction rsultat /o+aine de valeurs du para+?tre de la fonction
%&ool
B##&ean T#$te %haCne #$ e/'ressi#n n$,ri-$e va&ide.
%&(te
BAte ! . II P &es +ra%ti#ns s#nt arr#ndies.
%%har
5har T#$te e/'ressi#n String va&ide P &a va&e$r 'e$t *tre %#,'rise entre ! et KI IHI.
%)ate
Date T#$te re'rsentati#n va&ide de &a date et de &'he$re.
%)bl
D#$(&e -F0OLOKLHFH"EKHFEMH!E .
-"0L"!KIK"IE"F"OE-H" '#$r &es va&e$rs ngatives P "0L"!KIK"IE"F"OE-H" . F0OLOKLHFH"EKHFEMH!E
'#$r &es va&e$rs '#sitives.
%)ec
De%i,a& MN-OL E FK IF" K" HHO ILH I"H LI! HHI '#$r &es n#,(res sans d%i,a&es. La '&age de va&e$rs des
n#,(res . E d%i,a&es est
MN-O0LEFKIF"K"HHOILHI"HLI!HHI. Le '&$s 'etit n#,(re di++rent de Qr# est
!0!!!!!!!!!!!!!!!!!!!!!!!!!!!F.
%#nt
Integer - F"O "EH K"E . F"O "EH K"O P &es +ra%ti#ns s#nt arr#ndies.
Les (ases de VB.NET
!
fonction rsultat /o+aine de valeurs du para+?tre de la fonction
%*ng
L#ng -L H HO !HK EI" OOI E!E . L H HO !HK EI" OOI E!O P &es +ra%ti#ns s#nt arr#ndies.
%!bj
;(Be%t T#$te e/'ressi#n va&ide.
%+hort
Sh#rt -H OKE . H OKO P &es +ra%ti#ns s#nt arr#ndies.
%+ng
Sing&e -H0"!EHEMHE . -F0"!FLEE-"I '#$r &es va&e$rs ngatives P F0"!FLEE-"I . H0"!EHEMHE '#$r &es va&e$rs
'#sitives.
%+tr
String Les va&e$rs ret#$rnes 'ar &a +#n%ti#n 5str d'endent de &'arg$,ent e/'ressi#n.
V#i%i $n 'r#gra,,e e/e,'&e 4
Module conversion
Sub main()
Dim var1 As Boolean = CBool("true")
Dim var2 As Byte = CByte("100")
Dim var3 As Char = CChar("A")
Dim var4 As Date = CDate("30 janvier 2004")
Dim var5 As Double = CDbl("100,45")
Dim var6 As Decimal = CDec("1000,67")
Dim var7 As Integer = CInt("-30")
Dim var8 As Long = CLng("456")
Dim var9 As Short = CShort("-14")
Dim var10 As Single = CSng("56,78")
Console.Out.WriteLine("var1=" & var1)
Console.Out.WriteLine("var2=" & var2)
Console.Out.WriteLine("var3=" & var3)
Console.Out.WriteLine("var4=" & var4)
Console.Out.WriteLine("var5=" & var5)
Console.Out.WriteLine("var6=" & var6)
Console.Out.WriteLine("var7=" & var7)
Console.Out.WriteLine("var8=" & var8)
Console.Out.WriteLine("var9=" & var9)
Console.Out.WriteLine("var10=" & var10)
End Sub
End Module
et &es rs$&tats de s#n e/%$ti#n 4
var1=True
var2=100
var3=A
var4=30/01/2004
var5=100,45
var6=1000,67
var7=-30
var8=456
var9=-14
var10=56,78
;n 'e$t ga&e,ent $ti&iser &a +#n%ti#n =Type0expression, type1 %#,,e &e ,#ntre &e 'r#gra,,e s$ivant 4
Module ctype1
Sub main()
Dim var1 As Boolean = CType("true", Boolean)
Dim var2 As Byte = CType("100", Byte)
Dim var3 As Char = CType("A", Char)
Dim var4 As Date = CType("30 janvier 2004", Date)
Dim var5 As Double = CType("100,45", Double)
Dim var6 As Decimal = CType("1000,67", Decimal)
Dim var7 As Integer = CType("-30", Integer)
Dim var8 As Long = CType("456", Long)
Dim var9 As Short = CType("-14", Short)
Dim var10 As Single = CType("56,78", Single)
Dim var11 As String = CType("47,89", String)
Dim var12 As String = 47.89.ToString
Dim var13 As String = "" & 47.89
Console.Out.WriteLine("var1=" & var1)
Console.Out.WriteLine("var2=" & var2)
Console.Out.WriteLine("var3=" & var3)
Console.Out.WriteLine("var4=" & var4)
Console.Out.WriteLine("var5=" & var5)
Console.Out.WriteLine("var6=" & var6)
Console.Out.WriteLine("var7=" & var7)
Console.Out.WriteLine("var8=" & var8)
Console.Out.WriteLine("var9=" & var9)
Les (ases de VB.NET
F
Console.Out.WriteLine("var10=" & var10)
Console.Out.WriteLine("var11=" & var11)
Console.Out.WriteLine("var12=" & var12)
Console.Out.WriteLine("var13=" & var13)
End Sub
End Module
-$i d#nne &es rs$&tats s$ivants 4
var1=True
var2=100
var3=A
var4=30/01/2004
var5=100,45
var6=1000,67
var7=-30
var8=456
var9=-14
var10=56,78
var11=47,89
var12=47,89
var13=47,89
F." Les instr$%ti#ns de %#ntr[&e d$ dr#$&e,ent d$ 'r#gra,,e
F.".F Arr*t
La ,th#de Exit d+inie dans &a %&asse 7n!ironment 'er,et d'arr*ter &'e/%$ti#n d'$n 'r#gra,,e 4
,ublic +hared +ub "it-&(.al exitCode /s Integer 0
arr*te &e 'r#%ess$s en %#$rs et rend &a va&e$r exit(ode a$ 'r#%ess$s ':re. La va&e$r de exit(ode 'e$t *tre $ti&ise 'ar %e&$i-%i. S#$s
D;S0 %ette varia(&e stat$s est rend$e . D;S dans &a varia(&e sAst:,e E@@8@5EVE5 d#nt &a va&e$r 'e$t *tre teste dans $n
+i%hier (at%h. S#$s Uni/0 %'est &a varia(&e AB -$i r%$':re &a va&e$r de exit(ode.
Environment.Exit(0)

arr*tera &'e/%$ti#n d$ 'r#gra,,e ave% $ne va&e$r d'tat . !.
F.". Str$%t$re de %h#i/ si,'&e
if condition then
actions_alors
else
actions_sinon
end if
%ha-$e a%ti#n est s$r $ne &igne
&a %&a$se else 'e$t *tre a(sente.
;n 'e$t i,(ri-$er &es str$%t$res de %h#i/ %#,,e &e ,#ntre &'e/e,'&e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module if1
Sub main()
Dim i As Integer = 10
If i > 4 Then
Console.Out.WriteLine(i & " est > " & 4)
Else
If i = 4 Then
Console.Out.WriteLine(i & " est = " & 4)
Else
Console.Out.WriteLine(i & " est < " & 4)
End If
End If
Les (ases de VB.NET

End Sub
End Module
Le rs$&tat #(ten$ 4
10 est > 4
F.".H Str$%t$re de %as
La sAnta/e est &a s$ivante 4
select case expression
case liste_valeurs1
actions1
case liste_valeurs2
actions2
...
case else
actions_sinon
end select
&e tA'e de Te/'ressi#nU d#it *tre &'$n des tA'es s$ivants 4
Boolean, Byte, Char, Date, Decimal, Double, Integer, Long, Object, Short, Single et String
&a %&a$se T%ase e&seU 'e$t *tre a(sente.
T&istecva&e$rsiU s#nt des va&e$rs '#ssi(&es de &'e/'ressi#n. T&istescva&e$rsiU re'rsente $ne &iste de %#nditi#ns %#nditi#nF0
%#nditi#n0 ...0 %#nditi#n/. Si Te/'ressi#nU vr#+ie &'$ne des %#nditi#ns0 &es a%ti#ns derri:re &a %&a$se T&istecva&e$rsiU s#nt
e/%$tes. Les %#nditi#ns 'e$vent 'rendre &a +#r,e s$ivante 4
- va&F t# va& 4 vrai si Te/'ressi#nU a''artient a$ d#,aine Tva&F0va&U
- va&F 4 vrai si Te/'ressi#nU est ga& . va&F
- is ` va&F 4 vrai si Te/'ressi#nU ` va&F. Le ,#t %& TisU 'e$t *tre a(sent
- ide, ave% &es #'rate$rs V0 _0 _V0 `0 `V0 _`
se$&es &es a%ti#ns &ies . &a 're,i:re %#nditi#n vri+ie s#nt e/%$tes.
5#nsidr#ns &e 'r#gra,,e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module selectcase1
Sub main()
Dim i As Integer = 10
Select Case i
Case 1 To 4, 7 To 8
Console.Out.WriteLine("i est dans l'intervalle [1,4] ou [7,8]")
Case Is > 12
Console.Out.WriteLine("i est > 12")
Case Is < 15
Console.Out.WriteLine("i est < 15")
Case Is < 20
Console.Out.WriteLine("i est < 20")
End Select
End Sub
End Module
I& d#nne &es rs$&tats s$ivants 4
i est < 15
F."." Str$%t$re de r'titi#n
1.0.0.1 @om"re de rptitions connu
1or counter [ /s datatype ] 2 start 3o end [ +tep step ]
actions
Les (ases de VB.NET
H
4et [ counter ]
Les a%ti#ns s#nt e++e%t$es '#$r %ha%$ne des va&e$rs 'rises 'ar &a varia(&e T%#$nterU. 5#nsidr#ns &e 'r#gra,,e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module for1
Sub main()
Dim somme As Integer = 0
Dim rsultat As String = "somme("
For i As Integer = 0 To 10 Step 2
somme += i
rsultat += " " + i.ToString
Next
rsultat += ")=" + somme.ToString
Console.Out.WriteLine(rsultat)
End Sub
End Module
Les rs$&tats 4
somme( 0 2 4 6 8 10)=30
Une a$tre str$%t$re d'itrati#n . n#,(re d'itrati#ns %#nn$ est &a s$ivante 4
1or "ach element [ /s datatype ] #n groupe
[ actions ]
4et [ element ]
groupe est $ne %#&&e%ti#n d'#(Bets. La %#&&e%ti#n d'#(Bets -$e n#$s %#nnaiss#ns dB. est &e ta(&ea$
datatype est &e tA'e des #(Bets de &a %#&&e%ti#n. P#$r $n ta(&ea$0 %e serait &e tA'e des &,ents d$ ta(&ea$
element est $ne varia(&e &#%a&e . &a (#$%&e -$i va 'rendre s$%%essive,ent '#$r va&e$r0 t#$tes &es va&e$rs de &a %#&&e%ti#n.
Ainsi &e %#de s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module foreach1
Sub main()
Dim amis() As String = {"paul", "hlne", "jacques", "sylvie"}
For Each nom As String In amis
Console.Out.WriteLine(nom)
Next
End Sub
End Module
a++i%herait 4
paul
hlne
jacques
sylvie
1.0.0.2 @om"re de rptitions inconnu
I& e/iste de n#,(re$ses str$%t$res en VB.NET '#$r %e %as.
Do { 5hile | 6ntil } condition
[ statements ]
Loop
;n (#$%&e tant -$e &a %#nditi#n est vri+ie <2hi&e= #$ B$s-$'. %e -$e &a %#nditi#n s#it vri+ie <$nti&=. La (#$%&e 'e$t ne Ba,ais *tre
e/%$te.
Les (ases de VB.NET
"
Do
[ statements ]
Loop { 5hile | 6ntil } condition
;n (#$%&e tant -$e &a %#nditi#n est vri+ie <2hi&e= #$ B$s-$'. %e -$e &a %#nditi#n s#it vri+ie <$nti&=. La (#$%&e est t#$B#$rs
e/%$te a$ ,#ins $ne +#is.
5hile condition
[ statements ]
"nd 5hile
;n (#$%&e tant -$e &a %#nditi#n est vri+ie. La (#$%&e 'e$t ne Ba,ais *tre e/%$te. Les (#$%&es s$ivantes %a&%$&ent t#$tes &a
s#,,e des F! 're,iers n#,(res entiers.
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module boucles1
Sub main()
Dim i, somme As Integer
i = 0 : somme = 0
Do While i < 11
somme += i
i += 1
Loop
Console.Out.WriteLine("somme=" + somme.ToString)
i = 0 : somme = 0
Do Until i = 11
somme += i
i += 1
Loop
Console.Out.WriteLine("somme=" + somme.ToString)
i = 0 : somme = 0
Do
somme += i
i += 1
Loop Until i = 11
Console.Out.WriteLine("somme=" + somme.ToString)
i = 0 : somme = 0
Do
somme += i
i += 1
Loop While i < 11
Console.Out.WriteLine("somme=" + somme.ToString)
End Sub
End Module
somme=55
somme=55
somme=55
somme=55
1.0.0.3 Instructions de gestion de "oucle
exit do
+ait s#rtir d'$ne (#$%&e d# ... &##'
exit for
+ait s#rtir d'$ne (#$%&e +#r
F.I La str$%t$re d'$n 'r#gra,,e VB.NET
Un 'r#gra,,e VB.NET n'$ti&isant 'as de %&asse d+inie 'ar &'$ti&isate$r ni de +#n%ti#ns a$tres -$e &a +#n%ti#n 'rin%i'a&e :ain
'#$rra av#ir &a str$%t$re s$ivante 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports espace1
Les (ases de VB.NET
I
Imports ....
Module nomDuModule
Sub main()
....
End Sub
End Module
La dire%tive T;'ti#n E/'&i%it #nU +#r%e &a d%&arati#n des varia(&es. En VB.NET0 %e&&e-%i n'est 'as #(&igat#ire. Une varia(&e n#n
d%&are est a&#rs de tA'e 8bCect.
La dire%tive T;'ti#n Stri%t #nU interdit t#$te %#nversi#n de tA'es de d#nnes '#$vant entraCner $ne 'erte de d#nnes et t#$te
%#nversi#n entre &es tA'es n$,ri-$es et &es %haCnes. I& +a$t a&#rs e/'&i%ite,ent $ti&iser des +#n%ti#ns de %#nversi#n.
Le 'r#gra,,e i,'#rte t#$s &es es'a%es de n#,s d#nt i& a (es#in. N#$s n'av#ns 'as intr#d$it en%#re %ette n#ti#n. N#$s av#ns0
dans &es 'r#gra,,es 'r%dents0 s#$vent ren%#ntr des instr$%ti#ns d$ genre 4
Console.Out.WriteLine(unechaine)
N#$s a$ri#ns d$ %rire en +ait 4
System.Console.Out.WriteLine(unechaine)
#> .yste+ est &'es'a%e de n#,s %#ntenant &a %&asse T5#ns#&eU. En i,'#rtant &'es'a%e de n#,s TSAste,U ave% $ne instr$%ti#n
I,'#rts0 VB.NET &'e/'&#rera sAst,ati-$e,ent &#rs-$'i& ren%#ntrera $ne %&asse -$'i& ne %#nnaCt 'as. I& r'tera &a re%her%he
ave% t#$s &es es'a%es de n#,s d%&ars B$s-$'. tr#$ver &a %&asse re%her%he. ;n %rit a&#rs 4
' espaces de noms
Imports System
....
Console.Out.WriteLine(unechaine)
Un e/e,'&e de 'r#gra,,e '#$rrait *tre &e s$ivant 4
' options
Option Explicit On
Option Strict On
'espaces de noms
Imports System
' module principal
Module main1
Sub main()
Console.Out.WriteLine("main1")
End Sub
End Module
Le ,*,e 'r#gra,,e 'e$t *tre %rit de &a +a@#n s$ivante 4
' options
Option Explicit On
Option Strict On
'espaces de noms
Imports System
' classe de test
Public Class main2
Public Shared Sub main()
Console.Out.WriteLine("main2")
End Sub
End Class
I%i0 n#$s $ti&is#ns &e %#n%e't de %&asse -$i sera intr#d$it a$ %ha'itre s$ivant. L#rs-$'$ne te&&e %&asse %#ntient $ne 'r#%d$re stati-$e
<shared= a''e&e +ain0 %e&&e-%i est e/%$te. Si n#$s intr#d$is#ns %ette %rit$re i%i0 %'est 'ar%e -$e &e &angage B$,ea$ de VB.NET
-$'est 56 ne %#nnaCt -$e &e %#n%e't de %&asse0 %.a.d. -$e t#$t %#de e/%$t a''artient n%essaire,ent . $ne %&asse. La n#ti#n de
%&asse a''artient . &a 'r#gra,,ati#n #(Bet. L'i,'#ser dans &a %#n%e'ti#n de t#$t 'r#gra,,e est $n 'e$ ,a&adr#it. ;n &e v#it i%i
dans &a versi#n d$ 'r#gra,,e 'r%dent #> #n est a,en . intr#d$ire $n %#n%e't de %&asse et de ,th#de stati-$e &. #> i& n'A en
a 'as (es#in. A$ssi0 'ar &a s$ite0 n'intr#d$ir#ns-n#$s &e %#n%e't de %&asse -$e &#rs-$'i& est n%essaire. Dans &es a$tres %as0 n#$s
$ti&iser#ns &a n#ti#n de ,#d$&e %#,,e dans &a versi#n F %i-dess$s.
Les (ases de VB.NET
K
F.K 5#,'i&ati#n et e/%$ti#n d'$n 'r#gra,,e VB.NET
La %#,'i&ati#n d'$n 'r#gra,,e VB.NET ne n%essite -$e &e SDd.NET. Pren#ns &e 'r#gra,,e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module boucles1
Sub main()
Dim i, somme As Integer
i = 0 : somme = 0
Do While i < 11
somme += i
i += 1
Loop
Console.Out.WriteLine("somme=" + somme.ToString)
i = 0 : somme = 0
Do Until i = 11
somme += i
i += 1
Loop
Console.Out.WriteLine("somme=" + somme.ToString)
i = 0 : somme = 0
Do
somme += i
i += 1
Loop Until i = 11
Console.Out.WriteLine("somme=" + somme.ToString)
i = 0 : somme = 0
Do
somme += i
i += 1
Loop While i < 11
Console.Out.WriteLine("somme=" + somme.ToString)
End Sub
End Module
S$''#s#ns -$'i& s#it dans $n +i%hier a''e& T(#$%&esF.v(U. P#$r &e %#,'i&er0 n#$s 'r#%d#ns ainsi 4
dos>dir boucles1.vb
11/03/2004 15:55 583 boucles1.vb
dos>vbc boucles1.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4
pour Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. Tous droits rservs.
dos>dir boucles1.*
11/03/2004 16:04 601 boucles1.vb
11/03/2004 16:04 3 584 boucles1.exe
Le 'r#gra,,e v(%.e/e est &e %#,'i&ate$r VB.NET. I%i0 i& tait dans &e PATe d$ D;S 4
dos>path
PATH=E:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE;E:\Program Files\Microsoft Visual
Studio .NET 2003\VC7\BIN;E:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools;E:\Program
Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin\prerelease;E:\Program Files\Microsoft Visual
Studio .NET 2003\Common7\Tools\bin;E:\Program Files\Microsoft Visual Studio .NET
2003\SDK\v1.1\bin;E:\WINNT\Microsoft.NET\Framework\v1.1.4322;e:\winnt\system32;e:\winnt;
dos>dir E:\WINNT\Microsoft.NET\Framework\v1.1.4322\vbc.exe
21/02/2003 10:20 737 280 vbc.exe
Le %#,'i&ate$r Tv(%U 'r#d$it $n +i%hier .e/e e/$ta(&e 'ar &a ,a%hine virt$e&&e .NET 4
dos>boucles1
somme=55
somme=55
somme=55
somme=55
Les (ases de VB.NET
O
F.O L'e/e,'&e IMP;TS
;n se 'r#'#se d'%rire $n 'r#gra,,e 'er,ettant de %a&%$&er &'i,'[t d'$n %#ntri($a(&e. ;n se '&a%e dans &e %as si,'&i+i d'$n
%#ntri($a(&e n'aAant -$e s#n se$& sa&aire . d%&arer 4
#n %a&%$&e &e n#,(re de 'arts d$ sa&ari nbParts=nbEnfantsD% E! s'i& n'est 'as ,ari0 nbEnfantsD%E% s'i& est ,ari0 #>
n"7n#ants est s#n n#,(re d'en+ants.
s'i& a a$ ,#ins tr#is en+ants0 i& a $ne de,i-'art de '&$s
#n %a&%$&e s#n reven$ i,'#sa(&e @=(.F%G. #> S est s#n sa&aire ann$e&
#n %a&%$&e s#n %#e++i%ient +a,i&ia& HF=@DnbParts
#n %a&%$&e s#n i,'[t I. 5#nsidr#ns &e ta(&ea$ s$ivant 4
1252>.> > >
1319> >.>. 531
1.5'> >.1 129>..
2'7'> >.1. 2>72..
3181> >.2 33>9..
3997> >.2. '9>>
'835> >.3 5898..
..79> >.3. 9315..
9297> >.' 121>5
12785> >.'. 157.'..
1.12.> >..> 231'7..
172>'> >... 3>71>
19.>>> >.5> 39312
> >.5. '9>52
5ha-$e &igne a H %ha,'s. P#$r %a&%$&er &'i,'[t I0 #n re%her%he &a 're,i:re &igne #> ABCDchamp1. Par e/e,'&e0 si fJVH!!! #n
tr#$vera &a &igne
%"F"( (.!# %(F%.#
L'i,'[t I est a&#rs ga& . (.!#G@ I %(F%.#GnbParts. Si fJ est te& -$e &a re&ati#n ABCDchamp1 n'est Ba,ais vri+ie0 a&#rs %e s#nt &es
%#e++i%ients de &a derni:re &igne -$i s#nt $ti&iss. I%i 4
! !.KI "L!K
%e -$i d#nne &'i,'[t IV!.KIWR - "L!KWn(Parts. Le 'r#gra,,e VB.NET %#rres'#ndant est &e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module impots
' ------------ main
Sub Main()
' tableau de donnes ncessaires au calcul de l'imp7t
Dim Limites() As Decimal = {12620D, 13190D, 15640D, 24740D, 31810D, 39970D, 48360D, 55790D, 92970D,
127860D, 151250D, 172040D, 195000D, 0D}
Dim CoeffN() As Decimal = {0D, 631D, 1290.5D, 2072.5D, 3309.5D, 4900D, 6898.5D, 9316.5D, 12106D,
16754.5D, 23147.5D, 30710D, 39312D, 49062D}
' on rcupre le statut marital
Dim OK As Boolean = False
Dim reponse As String = Nothing
While Not OK
Console.Out.Write("Etes-vous mari(e) (O/N) ? ")
reponse = Console.In.ReadLine().Trim().ToLower()
If reponse <> "o" And reponse <> "n" Then
Console.Error.WriteLine("Rponse incorrecte. Recommencez")
Else
OK = True
End If
End While
Dim Marie As Boolean = reponse = "o"
' nombre d'enfants
OK = False
Dim NbEnfants As Integer = 0
While Not OK
Console.Out.Write("Nombre d'enfants : ")
reponse = Console.In.ReadLine()
Try
NbEnfants = Integer.Parse(reponse)
Les (ases de VB.NET
E
If NbEnfants >= 0 Then
OK = True
Else
Console.Error.WriteLine("Rponse incorrecte. Recommencez")
End If
Catch
Console.Error.WriteLine("Rponse incorrecte. Recommencez")
End Try
End While
' salaire
OK = False
Dim Salaire As Integer = 0
While Not OK
Console.Out.Write("Salaire annuel : ")
reponse = Console.In.ReadLine()
Try
Salaire = Integer.Parse(reponse)
If Salaire >= 0 Then
OK = True
Else
Console.Error.WriteLine("Rponse incorrecte. Recommencez")
End If
Catch
Console.Error.WriteLine("Rponse incorrecte. Recommencez")
End Try
End While
' calcul du nombre de parts
Dim NbParts As Decimal
If Marie Then
NbParts = CDec(NbEnfants) / 2 + 2
Else
NbParts = CDec(NbEnfants) / 2 + 1
End If
If NbEnfants >= 3 Then
NbParts += 0.5D
End If
' revenu imposable
Dim Revenu As Decimal
Revenu = 0.72D * Salaire
' $uotient familial
Dim QF As Decimal
QF = Revenu / NbParts
' recherche de la tranche d'impots correspondant 81
Dim i As Integer
Dim NbTranches As Integer = Limites.Length
Limites((NbTranches - 1)) = QF
i = 0
While QF > Limites(i)
i += 1
End While
' l'imp7t
Dim impots As Integer = CInt(i * 0.05D * Revenu - CoeffN(i) * NbParts)
' on affiche le rsultat
Console.Out.WriteLine(("Impt payer : " & impots))
End Sub
End Module
Le 'r#gra,,e est %#,'i& dans $ne +en*tre D#s 'ar 4
dos>vbc impots1.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir impots1.exe
24/02/2004 15:42 5 632 impots1.exe
La %#,'i&ati#n 'r#d$it $n e/%$ta(&e impots.exe. I& +a$t n#ter -$e impots.exe n'est 'as dire%te,ent e/%$ta(&e 'ar &e 'r#%esse$r. I&
%#ntient en ra&it d$ %#de inter,diaire -$i n'est e/%$ta(&e -$e s$r $ne '&ate-+#r,e .NET. Les rs$&tats #(ten$s s#nt &es s$ivants
4
dos>impots1
Etes-vous mari(e) (O/N) ? o
Nombre d'enfants : 3
Salaire annuel : 200000
Impt payer : 16400
Les (ases de VB.NET
L
dos>impots1
Etes-vous mari(e) (O/N) ? n
Nombre d'enfants : 2
Salaire annuel : 200000
Impt payer : 33388
dos>impots1
Etes-vous mari(e) (O/N) ? w
Rponse incorrecte. Recommencez
Etes-vous mari(e) (O/N) ? q
Rponse incorrecte. Recommencez
Etes-vous mari(e) (O/N) ? o
Nombre d'enfants : q
Rponse incorrecte. Recommencez
Nombre d'enfants : 2
Salaire annuel : q
Rponse incorrecte. Recommencez
Salaire annuel : 1
Impt payer : 0
F.E Arg$,ents d$ 'r#gra,,e 'rin%i'a&
La 'r#%d$re 'rin%i'a&e :ain 'e$t ad,ettre %#,,e 'ara,:tre $n ta(&ea$ de %haCnes 4
Sub main(ByVal args() As String)
Le 'ara,:tre args est $n ta(&ea$ de %haCnes de %ara%t:res -$i re@#it &es arg$,ents 'asss s$r &a &igne de %#,,ande &#rs de &'a''e&
d$ 'r#gra,,e.
args..ength est &e n#,(re d'&e,ents d$ ta(&ea$ args
args)i+ est &'&,ent i d$ ta(&ea$
Si #n &an%e &e 'r#gra,,e P ave% &a %#,,ande 4 P arg! argF Z argn et si &a 'r#%d$re :ain d$ 'r#gra,,e P est d%&are %#,,e
s$it 4
Sub main(ByVal args() As String)
#n a$ra arg<!=VDarg!D0 arg<F=VDargFD Z V#i%i $n e/e,'&e 4
' directives
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module arg
Sub main(ByVal args() As String)
' nombre d'arguments
console.out.writeline("Il y a " & args.length & " arguments")
Dim i As Integer
For i = 0 To args.Length - 1
Console.Out.WriteLine("argument n " & i & "=" & args(i))
Next
End Sub
End Module
L'e/%$ti#n d#nne &es rs$&tats s$ivants 4
dos>arg1 a b c
Il y a 3 arguments
argument n 0=a
argument n 1=b
argument n 2=c
F.L Les n$,rati#ns
Une n$,rati#n est $n tA'e de d#nnes d#nt &e d#,aine de va&e$rs est $n ense,(&e de %#sntantes enti:res. 5#nsidr#ns $n
'r#gra,,e -$i a . grer des ,enti#ns . $n e/a,en. I& A en a$rait %in- 4 Passable,AssezBien,Bien,TrsBien,
Excellent. ;n '#$rrait a&#rs d+inir $ne n$,rati#n '#$r %es %in- %#nstantes 4
Enum mention
Les (ases de VB.NET
H!
Passable
AssezBien
Bien
TrsBien
Excellent
End Enum
De +a@#n interne0 %es %in- %#nstantes s#nt %#des 'ar des entiers %#ns%$ti+s %#,,en@ant 'ar ! '#$r &a 're,i:re %#nstante0 F '#$r
&a s$ivante0 et%... Une varia(&e 'e$t *tre d%&are %#,,e 'renant %es va&e$rs dans &'n$,rati#n 4
' une variable qui prend ses valeurs dans l'numration mention
Dim maMention As mention = mention.Passable
;n 'e$t %#,'arer $ne varia(&e a$/ di++rentes va&e$rs '#ssi(&es de &'n$,rati#n 4
' test avec valeur de l'numration
If (maMention = mention.Passable) Then
Console.Out.WriteLine("Peut mieux faire")
End If
;n 'e$t #(tenir t#$tes &es va&e$rs de &'n$,rati#n 4
For Each m In mention.GetValues(maMention.GetType)
Console.Out.WriteLine(m)
Next
De &a ,*,e +a@#n -$e &e tA'e si,'&e Integer est -$iva&ent . &a str$%t$re Int320 &e tA'e si,'&e 7num est -$iva&ent . &a str$%t$re
7num. 5ette %&asse a $ne ,th#de stati-$e EetFalues -$i 'er,et d'#(tenir t#$tes &es va&e$rs d'$n tA'e n$,r -$e &'#n 'asse en
'ara,:tre. 5e&$i-%i d#it *tre $n #(Bet de tA'e Type -$i est $ne %&asse d'in+#r,ati#n s$r &e tA'e d'$ne d#nne. Le tA'e d'$ne varia(&e
! est #(ten$ 'ar !.Eet%ype)+. D#n% i%i ma:ention.Eet%ype)+ d#nne &'#(Bet %ype de &'n$,rati#n mentions et
7num.EetFalues)ma:ention.Eet%ype)++ &a &iste des va&e$rs de &'n$,rati#n mentions.
5'est %e -$e ,#ntre &e 'r#gra,,e s$ivant 4
' directives
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Public Module enum2
' une numration
Enum mention
Passable
AssezBien
Bien
TrsBien
Excellent
End Enum
' pg de test
Sub Main()
' une variable $ui prend ses valeurs dans l'numration mention
Dim maMention As mention = mention.Passable
' affichage valeur variable
Console.Out.WriteLine("mention=" & maMention)
' test avec valeur de l'numration
If (maMention = mention.Passable) Then
Console.Out.WriteLine("Peut mieux faire")
End If
' liste des mentions littrales
For Each m As mention In [Enum].GetValues(maMention.GetType)
Console.Out.WriteLine(m.ToString)
Next
' liste des mentions entires
For Each m As Integer In [Enum].GetValues(maMention.GetType)
Console.Out.WriteLine(m)
Next
End Sub
End Module
Les (ases de VB.NET
HF
Les rs$&tats d'e/%$ti#n s#nt &es s$ivants 4
dos>enum2
mention=0
Peut mieux faire
Passable
AssezBien
Bien
r!sBien
"xcellent
0
1
2
#
$
F.F! La gesti#n des e/%e'ti#ns
De n#,(re$ses +#n%ti#ns VB.NET s#nt s$s%e'ti(&es de gnrer des e/%e'ti#ns0 %'est . dire des erre$rs. L#rs-$'$ne +#n%ti#n est
s$s%e'ti(&e de gnrer $ne e/%e'ti#n0 &e 'r#gra,,e$r devrait &a grer dans &e ($t d'#(tenir des 'r#gra,,es '&$s rsistants a$/
erre$rs 4 i& +a$t t#$B#$rs viter &e D'&antageD sa$vage d'$ne a''&i%ati#n.
La gesti#n d'$ne e/%e'ti#n se +ait se&#n &e s%h,a s$ivant 4
try
appel de la fonction susceptible de gnrer l'exception
catch e as Exception e)
traiter l'exception e
end try
instruction suivante
Si &a +#n%ti#n ne gn:re 'as d'e/%e'ti#n0 #n 'asse a&#rs . instruction sui!ante0 sin#n #n 'asse dans &e %#r's de &a %&a$se catch '$is .
instruction sui!ante. N#t#ns &es '#ints s$ivants 4
e est $n #(Bet driv d$ tA'e 7xception. ;n 'e$t *tre '&$s 'r%is en $ti&isant des tA'es te&s -$e I57xception* System7xception*
et%Z 4 i& e/iste '&$sie$rs tA'es d'e/%e'ti#ns. En %rivant catch e as 7xception0 #n indi-$e -$'#n ve$t grer t#$tes &es tA'es
d'e/%e'ti#ns. Si &e %#de de &a %&a$se try est s$s%e'ti(&e de gnrer '&$sie$rs tA'es d'e/%e'ti#ns0 #n 'e$t v#$&#ir *tre '&$s 'r%is
en grant &'e/%e'ti#n ave% '&$sie$rs %&a$ses catch 4
try
appel de la fonction susceptible de gnrer l'exception
catch e as IOException
traiter l'exception e
catch e as SystemException
traiter l'exception e
end try
instruction suivante
;n 'e$t aB#$ter a$/ %&a$ses try/catch0 $ne %&a$se finally 4
try
appel de la fonction susceptible de gnrer l'exception
catch e as Exception
traiter l'exception e
finally
code excut aprs try ou catch
end try
instruction suivante
f$'i& A ait e/%e'ti#n #$ 'as0 &e %#de de &a %&a$se #inally sera t#$B#$rs e/%$t.
Dans &a %&a$se catch0 #n 'e$t ne 'as v#$&#ir $ti&iser &'#(Bet 7xception dis'#ni(&e. A$ &ie$ d'%rire catch e as 7xception0 #n %rit a&#rs
catch.
La %&asse 7xception a $ne 'r#'rit <essage -$i est $n ,essage dtai&&ant &'erre$r -$i s'est 'r#d$ite. Ainsi si #n ve$t a++i%her
%e&$i-%i0 #n %rira 4
catch e as Exception
Console.Error.WriteLine("L'erreur suivante s'est produite : "+e.Message);
...
Les (ases de VB.NET
H
end try
La %&asse 7xception a $ne ,th#de To.tring -$i rend $ne %haCne de %ara%t:res indi-$ant &e tA'e de &'e/%e'ti#n ainsi -$e &a
va&e$r de &a 'r#'rit :essage. ;n '#$rra ainsi %rire 4
catch ex as 7xception
(onsole.7rror.6rite.ine)&.;erreur sui!ante s;est produite : &4ex.%oString+
...
end try
L'e/e,'&e s$ivant ,#ntre $ne e/%e'ti#n gnre 'ar &'$ti&isati#n d'$n &,ent de ta(&ea$ ine/istant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module tab1
Sub Main()
' dclaration 9 initialisation d'un tableau
Dim tab() As Integer = {0, 1, 2, 3}
Dim i As Integer
' affichage tableau avec un for
For i = 0 To tab.Length - 1
Console.Out.WriteLine(("tab[" & i & "]=" & tab(i)))
Next i
' affichage tableau avec un for each
Dim lmt As Integer
For Each lmt In tab
Console.Out.WriteLine(lmt)
Next lmt
' gnration d'une eception
Try
tab(100) = 6
Catch e As Exception
Console.Error.WriteLine(("L'erreur suivante s'est produite : " & e.Message))
End Try
End Sub
End Module
L'e/%$ti#n d$ 'r#gra,,e d#nne &es rs$&tats s$ivants 4
dos>exception1
tab%0&=0
tab%1&=1
tab%2&=2
tab%#&=#
0
1
2
#
'(erreur suivante s(est produite ) '(index se trouve en de*ors des limites du tableau.
V#i%i $n a$tre e/e,'&e #> #n g:re &'e/%e'ti#n 'r#v#-$e 'ar &'a++e%tati#n d'$ne %haCne de %ara%t:res . $n n#,(re &#rs-$e &a %haCne
ne re'rsente 'as $n n#,(re 4
' options
Option Strict On
Option Explicit On
'imports
Imports System
Public Module console1
Public Sub Main()
' !n demande le nom
System.Console.Write("Nom : ")
' lecture rponse
Dim nom As String = System.Console.ReadLine()
' on demande l':ge
Dim age As Integer
Les (ases de VB.NET
HH
Dim ageOK As Boolean = False
Do While Not ageOK
' $uestion
Console.Out.Write("ge : ")
' lecture-vrification rponse
Try
age = Int32.Parse(System.Console.ReadLine())
If age < 0 Then Throw New Exception
ageOK = True
Catch
Console.Error.WriteLine("Age incorrect, recommencez...")
End Try
Loop
' affichage final
Console.Out.WriteLine("Vous vous appelez [" & nom & "] et vous avez [" & age & "] ans")
End Sub
End Module
f$e&-$es rs$&tats d'e/%$ti#n 4
dos>console1
Nom : dupont
ge : 23
Vous vous appelez dupont et vous avez 23 ans
dos>console1
Nom : dupont
ge : xx
Age incorrect, recommencez...
ge : 12
Vous vous appelez dupont et vous avez 12 ans
F.FF Passage de 'ara,:tres . $ne +#n%ti#n
N#$s n#$s intress#ns i%i a$ ,#de de 'assage des 'ara,:tres d'$ne +#n%ti#n. 5#nsidr#ns &a +#n%ti#n 4
Sub changeInt(ByVal a As Integer)
a = 30
Console.Out.WriteLine(("Paramtre formel a=" & a))
End Sub
Dans &a d+initi#n de &a +#n%ti#n0 a est a''e& $n 'ara,:tre +#r,e&. I& n'est &. -$e '#$r &es (es#ins de &a d+initi#n de &a +#n%ti#n
changeInt. I& a$rait t#$t a$ssi (ien '$ s'a''e&er ". 5#nsidr#ns ,aintenant $ne $t&isati#n de %ette +#n%ti#n 4
Sub Main()
Dim age As Integer = 20
changeInt(age)
Console.Out.WriteLine(("Paramtre effectif age=" & age))
End Sub
I%i dans &'instr$%ti#n changeInt(age)0 age est &e 'ara,:tre e++e%ti+ -$i va trans,ettre sa va&e$r a$ 'ara,:tre +#r,e& a. N#$s n#$s
intress#ns . &a +a@#n d#nt $n 'ara,:tre +#r,e& r%$':re &a va&e$r d$ 'ara,:tre e++e%ti+ -$i &$i %#rres'#nd.
F.FF.F Passage 'ar va&e$r
L'e/e,'&e s$ivant n#$s ,#ntre -$e &es 'ara,:tres d'$ne +#n%ti#nN'r#%d$re s#nt 'ar d+a$t 'asss 'ar va&e$r 4 %'est . dire -$e &a
va&e$r d$ 'ara,:tre e++e%ti+ est re%#'ie dans &e 'ara,:tre +#r,e& %#rres'#ndant. ;n a de$/ entits distin%tes. Si &a +#n%ti#n
,#di+ie &e 'ara,:tre +#r,e&0 &e 'ara,:tre e++e%ti+ n'est &$i en rien ,#di+i.
' options
Option Explicit On
Option Strict On
' passage de paramtres par valeur une fonction
Imports System
Module param1
Sub Main()
Dim age As Integer = 20
changeInt(age)
Console.Out.WriteLine(("Paramtre effectif age=" & age))
Les (ases de VB.NET
H"
End Sub
Sub changeInt(ByVal a As Integer)
a = 30
Console.Out.WriteLine(("Paramtre formel a=" & a))
End Sub
End Module
Les s7l!a!s #&!e$7s s#$! les s7"%a$!s M
Paramtre formel a=30
Paramtre effectif age=20
La va&e$r ! d$ 'ara,:tre e++e%ti+ a t re%#'ie dans &e 'ara,:tre +#r,e& a. 5e&$i-%i a t ens$ite ,#di+i. Le 'ara,:tre e++e%ti+ est
&$i rest in%hang. 5e ,#de de 'assage %#nvient a$/ 'ara,:tres d'entre d'$ne +#n%ti#n.
F.FF. Passage 'ar r+ren%e
Dans $n 'assage 'ar r+ren%e0 &e 'ara,:tre e++e%ti+ et &e 'ara,:tre +#r,e& s#nt $ne se$&e et ,*,e entit. S" la =#$c!"#$ :#d"="e le
6aa:O!e =#:elI le 6aa:O!e e==ec!"= es! l7" a7ss" :#d"=". En VB.NET0 &e 'ara,:tre +#r,e& d#it *tre 'r%d d$ ,#t %&
By@ef . V#i%i $n e/e,'&e 4
' options
Option Explicit On
Option Strict On
' passage de paramtres par valeur une fonction
Imports System
Module param2
Sub Main()
Dim age As Integer = 20
changeInt(age)
Console.Out.WriteLine(("Paramtre effectif age=" & age))
End Sub
Sub changeInt(ByRef a As Integer)
a = 30
Console.Out.WriteLine(("Paramtre formel a=" & a))
End Sub
End Module
et &es rs$&tats d'e/%$ti#n 4
Paramtre formel a=30
Paramtre effectif age=30
Le 'ara,:tre e++e%ti+ a s$ivi &a ,#di+i%ati#n d$ 'ara,:tre +#r,e&. 5e ,#de de 'assage %#nvient a$/ 'ara,:tres de s#rtie d'$ne
+#n%ti#n.
Les (ases de VB.NET
HI
. 5&asses0 st$%t$res0 inter+a%es
.F L' #(Bet 'ar &'e/e,'&e
.F.F Gnra&its
N#$s a(#rd#ns ,aintenant0 'ar &'e/e,'&e0 &a 'r#gra,,ati#n #(Bet. Un #(Bet est $ne entit -$i %#ntient des d#nnes -$i d+inissent
s#n tat <#n &es a''e&&e des 'r#'rits= et des +#n%ti#ns <#n &es a''e&&e des ,th#des=. Un #(Bet est %r se&#n $n ,#d:&e -$'#n
a''e&&e $ne %&asse 4
Public Class c1
' attributs
Private p1 As type1
Private p2 As type2
....
' mthode
Public Sub m1(....)
...
End Sub
' mthode
Public Function m2(...)
....
End Function
End Class
A 'artir de &a %&asse (1 'r%dente0 #n 'e$t %rer de n#,(re$/ #(Bets 51* 52*G T#$s a$r#nt &es 'r#'rits p1* p2*G et &es
,th#des m3* m0* G Mais i&s a$r#nt des va&e$rs di++rentes '#$r &e$rs 'r#'rits pi aAant ainsi %ha%$n $n tat -$i &e$r est 'r#'re.
Par ana&#gie &a d%&arati#n
dim i, j as integer
%re de$/ #(Bets <&e ter,e est in%#rre%t i%i= de tA'e <%&asse= Integer. Le$r se$&e 'r#'rit est &e$r va&e$r. Si 51 est $n #(Bet de tA'e (10
51.p1 dsigne &a 'r#'rit p1 de 51 et 51.m1 &a ,th#de m1 de 51. 5#nsidr#ns $n 're,ier ,#d:&e d'#(Bet 4 &a %&asse personne.
.F. D+initi#n de &a %&asse 'ers#nne
La d+initi#n de &a %&asse personne sera &a s$ivante 4
Public Class personne
' attributs
Private prenom As String
Private nom As String
Private age As Integer
' mthode
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub
' mthode
Public Sub identifie()
Console.Out.WriteLine((prenom & "," & nom & "," & age))
End Sub
End Class
N#$s av#ns i%i &a d+initi#n d'$ne %&asse0 d#n% d'$n tA'e de d#nnes. L#rs-$'#n va %rer des varia(&es de %e tA'e0 #n &es a''e&&era
des #(Bets #$ des instan%es de %&asses. Une %&asse est d#n% $n ,#$&e . 'artir d$-$e& s#nt %#nstr$its des #(Bets. Les ,e,(res #$
%ha,'s d'$ne %&asse 'e$vent *tre des d#nnes <attri($ts=0 des ,th#des <+#n%ti#ns=0 des 'r#'rits. Les 'r#'rits s#nt des
,th#des 'arti%$&i:res servant . %#nnaCtre #$ +i/er &a va&e$r d'attri($ts de &'#(Bet. 5es %ha,'s 'e$vent *tre a%%#,'agns de &'$n des
tr#is ,#ts %&s s$ivants 4
priv
Un %ha,' 'riv <'rivate= n'est a%%essi(&e -$e 'ar &es se$&es ,th#des internes de &a %&asse
public
Un %ha,' '$(&i% <'$(&i%= est a%%essi(&e 'ar t#$te +#n%ti#n d+inie #$ n#n a$ sein de &a %&asse
5&asses0 Str$%t$res0 Inter+a%es
HK
protg
Un %ha,' 'r#tg <'r#te%ted= n'est a%%essi(&e -$e 'ar &es se$&es ,th#des internes de &a %&asse #$ d'$n #(Bet driv <v#ir
$&trie$re,ent &e %#n%e't d'hritage=.
En gnra&0 &es d#nnes d'$ne %&asse s#nt d%&ares 'rives a&#rs -$e ses ,th#des et 'r#'rits s#nt d%&ares '$(&i-$es. 5e&a
signi+ie -$e &'$ti&isate$r d'$n #(Bet <&e 'r#gra,,e$r= 4
n'a$ra 'as a%%:s dire%te,ent a$/ d#nnes 'rives de &'#(Bet
'#$rra +aire a''e& a$/ ,th#des '$(&i-$es de &'#(Bet et n#ta,,ent . %e&&es -$i d#nner#nt a%%:s . ses d#nnes 'rives.
La sAnta/e de d%&arati#n d'$ne %&ase est &a s$ivante 4
public class classe
private donne ou mthode ou proprit prive
public donne ou mthode ou proprit publique
protected donne ou mthode ou proprit protge
end class
L'#rdre de d%&arati#n des attri($ts pri!ate* protected et pu"lic est -$e&%#n-$e.
.F.H La ,th#de initia&ise
Reven#ns . n#tre %&asse T'ers#nneU d%&are %#,,e 4
Public Class personne
' attributs
Private prenom As String
Private nom As String
Private age As Integer
' mthode
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub
' mthode
Public Sub identifie()
Console.Out.WriteLine((prenom & "," & nom & "," & age))
End Sub
End Class
f$e& est &e r[&e de &a ,th#de initialise X Par%e -$e nom0 prenom et age s#nt des d#nnes 'rives de &a %&asse personne0 &es instr$%ti#ns 4
dim p1 as personne p1
p1.prenom="Jean"
p1.nom="Dupont"
p1.age=30
s#nt i&&ga&es. I& n#$s +a$t initia&iser $n #(Bet de tA'e personne via $ne ,th#de '$(&i-$e. 5'est &e r[&e de &a ,th#de initialise. ;n
%rira 4
dim p1 as personne
p1.initialise("Jean","Dupont",30)
L'%rit$re p1.initialise est &ga&e %ar initialise est d'a%%:s '$(&i%.
.F." L'#'rate$r ne2
La s-$en%e d'instr$%ti#ns
dim p1 as personne
p1.initialise("Jean","Dupont",30)
est in%#rre%te. L'instr$%ti#n
dim p1 as personne
d%&are p1 %#,,e $ne r+ren%e . $n #(Bet de tA'e personne. 5et #(Bet n'e/iste 'as en%#re et d#n% p1 n'est 'as initia&is. 5'est %#,,e
si #n %rivait 4
5&asses0 Str$%t$res0 Inter+a%es
HO
dim p1 as personne=nothing
#> #n indi-$e e/'&i%ite,ent ave% &e ,#t %& nothing -$e &a varia(&e p1 ne r+ren%e en%#re a$%$n #(Bet. L#rs-$'#n %rit ens$ite
p1.initialise("Jean","Dupont",30)
#n +ait a''e& . &a ,th#de initialise de &'#(Bet r+ren% 'ar p1. ;r %et #(Bet n'e/iste 'as en%#re et &e %#,'i&ate$r signa&era &'erre$r.
P#$r -$e p1 r+ren%e $n #(Bet0 i& +a$t %rire 4
dim p1 as personne=new personne()
5e&a a '#$r e++et de %rer $n #(Bet de tA'e personne n#n en%#re initia&is 4 &es attri($ts nom et prenom -$i s#nt des r+ren%es d'#(Bets
de tA'e String a$r#nt &a va&e$r nothing0 et age &a va&e$r 3. I& A a d#n% $ne initia&isati#n 'ar d+a$t. Maintenant -$e p1 r+ren%e $n
#(Bet0 &'instr$%ti#n d'initia&isati#n de %et #(Bet
p1.initialise("Jean","Dupont",30)
est va&ide.
.F.I Le ,#t %& Me
Regard#ns &e %#de de &a ,th#de initialise 4
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub
L'instr$%ti#n :e.prenomD- signi+ie -$e &'attri($t prenom de &'#(Bet %#$rant <:e= re@#it &a va&e$r -. Le ,#t %& :e dsigne &'#(Bet
%#$rant 4 %e&$i dans &e-$e& se tr#$ve &a ,th#de e/%$te. 5#,,ent &e %#nnaCt-#n X Regard#ns %#,,ent se +ait &'initia&isati#n de
&'#(Bet r+ren% 'ar 'F dans &e 'r#gra,,e a''e&ant 4
p1.initialise("Jean","Dupont",30)
5'est &a ,th#de initialise de &'#(Bet p1 -$i est a''e&e. L#rs-$e dans %ette ,th#de0 #n r+ren%e &'#(Bet :e0 #n r+ren%e en +ait
&'#(Bet p1. La ,th#de initialise a$rait a$ssi '$ *tre %rite %#,,e s$it 4
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
prenom = P
nom = N
Me.age = age
End Sub
L#rs-$'$ne ,th#de d'$n #(Bet r+ren%e $n attri($t H de %et #(Bet0 &'%rit$re :e.H est i,'&i%ite. ;n d#it &'$ti&iser e/'&i%ite,ent
&#rs-$'i& A a %#n+&it d'identi+i%ate$rs. 5'est &e %as de &'instr$%ti#n 4
;e.age=age;
#> age dsigne $n attri($t de &'#(Bet %#$rant ainsi -$e &e 'ara,:tre age re@$ 'ar &a ,th#de. I& +a$t a&#rs &ever &'a,(ig$gt en
dsignant &'attri($t age 'ar :e.age.
.F.K Un 'r#gra,,e de test
V#i%i $n %#$rt 'r#gra,,e de test 4
Public Class personne
' attributs
Private prenom As String
Private nom As String
Private age As Integer
' mthode
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub
' mthode
Public Sub identifie()
Console.Out.WriteLine((prenom & "," & nom & "," & age))
5&asses0 Str$%t$res0 Inter+a%es
HE
End Sub
End Class
et &es rs$&tats #(ten$s 4
dos>vbc personne1.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>personne1
Jean,Dupont,30
.F.O Uti&iser $n +i%hier de %&asses %#,'i&es <asse,(&A=
;n n#tera -$e dans &'e/e,'&e 'r%dent i& A a de$/ %&asses dans n#tre 'r#gra,,e de test 4 &es %&asses personne et test1. I& A a $ne
a$tre +a@#n de 'r#%der 4
- #n %#,'i&e &a %&asse personne dans $n +i%hier 'arti%$&ier a''e& $n asse,(&age <asse,(&A=. 5e +i%hier a $ne e/tensi#n .d&&
- #n %#,'i&e &a %&asse test! en r+ren@ant &'asse,(&age -$i %#ntient &a %&asse 'ers#nne.
Les de$/ +i%hiers s#$r%e deviennent &es s$ivants 4
test.vb
Module test1
Sub Main()
Dim p1 As New personne
p1.initialise("Jean", "Dupont", 30)
p1.identifie()
End Sub
End module
personne%.vb
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Public Class personne
' attributs
Private prenom As String
Private nom As String
Private age As Integer
' mthode
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub'initialise
' mthode
Public Sub identifie()
Console.Out.WriteLine((prenom & "," & nom & "," & age))
End Sub'identifie
End Class 'personne
La %&asse personne est %#,'i&e 'ar &'instr$%ti#n s$ivante 4
dos>vbc /t:library personne2.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir
24/02/2004 16:50 509 personne2.vb
24/02/2004 16:49 143 test.vb
24/02/2004 16:50 3 584 personne2.dll
La %#,'i&ati#n a 'r#d$it $n +i%hier personne2.dll. 5'est &'#'ti#n de %#,'i&ati#n /t:li"rary -$i indi-$e de 'r#d$ire $n +i%hier
Dasse,(&AD. Maintenant %#,'i&#ns &e +i%hier test.!" 4
dos>vbc /r:personne2.dll test.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
5&asses0 Str$%t$res0 Inter+a%es
HL
dos>dir
24/02/2004 16:50 509 personne2.vb
24/02/2004 16:49 143 test.vb
2$+02+200$ 1,)-0 # -.$ personne2.dll
24/02/2004 16:51 3 072 test.exe
L'#'ti#n de %#,'i&ati#n /r:personne2.dll indi-$e a$ %#,'i&ate$r -$'i& tr#$vera %ertaines %&asses dans &e +i%hier personne2.dll. L#rs-$e
dans &e +i%hier s#$r%e test.!"0 i& tr#$vera $ne r+ren%e . &a %&asse personne %&asse n#n d%&are dans &e s#$r%e test.!"0 i& %her%hera &a
%&asse personne dans &es +i%hiers .d&& r+ren%s 'ar &'#'ti#n /r. I& tr#$vera i%i &a %&asse personne dans &'asse,(&age personne2.dll. ;n a$rait
'$ ,ettre dans %et asse,(&age d'a$tres %&asses. P#$r $ti&iser &#rs de &a %#,'i&ati#n '&$sie$rs +i%hiers de %&asses %#,'i&es0 #n %rira 4
vbc /r:fic1.dll /r:fic2.dll ... fichierSource.vb
L'e/%$ti#n d$ 'r#gra,,e test1.exe d#nne &es rs$&tats s$ivants 4
dos>test
Jean,Dupont,30
.F.E Une a$tre ,th#de initia&ise
5#nsidr#ns t#$B#$rs &a %&asse personne et raB#$t#ns-&$i &a ,th#de s$ivante 4
' mthode
Public Sub initialise(ByVal P As personne)
prenom = P.prenom
nom = P.nom
Me.age = P.age
End Sub
;n a ,aintenant de$/ ,th#des '#rtant &e n#, initialise 4 %'est &ga& tant -$'e&&es ad,ettent des 'ara,:tres di++rents. 5'est &e %as
i%i. Le 'ara,:tre est ,aintenant $ne r+ren%e - . $ne 'ers#nne. Les attri($ts de &a 'ers#nne - s#nt a&#rs a++e%ts . &'#(Bet %#$rant
<:e=. ;n re,ar-$era -$e &a ,th#de initialise a $n a%%:s dire%t a$/ attri($ts de &'#(Bet - (ien -$e %e$/-%i s#ient de tA'e pri!ate. 5'est
t#$B#$rs vrai 4 $n #(Bet 51 d'$ne %&asse ( a t#$B#$rs a%%:s a$/ attri($ts des #(Bets de &a ,*,e %&asse (. V#i%i $n test de &a n#$ve&&e
%&asse personne0 %e&&e-%i aAant t %#,'i&e dans personne.dll %#,,e i& a t e/'&i-$ 'r%de,,ent 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Module test1
Sub Main()
Dim p1 As New personne
p1.initialise("Jean", "Dupont", 30)
Console.Out.Write("p1=")
p1.identifie()
Dim p2 As New personne
p2.initialise(p1)
Console.Out.Write("p2=")
p2.identifie()
End Sub
End Module
et ses rs$&tats 4
p1=Jean,Dupont,30
p2=Jean,Dupont,30
.F.L 5#nstr$%te$rs de &a %&asse 'ers#nne
Un %#nstr$%te$r est $ne 'r#%d$re -$i '#rte &e n#, Ne2 et -$i est a''e&e &#rs de &a %rati#n de &'#(Bet. ;n s'en sert gnra&e,ent
'#$r &'initia&iser. Si $ne %&asse a $n %#nstr$%te$r a%%e'tant n arg$,ents argi0 &a d%&arati#n et &'initia&isati#n d'$n #(Bet de %ette %&asse
'#$rra se +aire s#$s &a +#r,e 4
dim objet as classe =new classe(arg1/arg2/ ... argn)
#$
dim objet as classe
.
objet=new classe(arg1/arg2/ ... argn)
5&asses0 Str$%t$res0 Inter+a%es
"!
L#rs-$'$ne %&asse a $n #$ '&$sie$rs %#nstr$%te$rs0 &'$n de %es %#nstr$%te$rs d#it *tre #(&igat#ire,ent $ti&is '#$r %rer $n #(Bet de
%ette %&asse. Si $ne %&asse ( n'a a$%$n %#nstr$%te$r0 e&&e en a $n 'ar d+a$t -$i est &e %#nstr$%te$r sans 'ara,:tres 4 pu"lic @eI)+. Les
attri($ts de &'#(Bet s#nt a&#rs initia&iss ave% des va&e$rs 'ar d+a$t. 5'est %e -$i s'est 'ass dans &es 'r#gra,,es 'r%dents0 #> #n
avait %rit 4
dim p1 as personne
p1=new personne
5r#ns de$/ %#nstr$%te$rs . n#tre %&asse personne 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' la classe personne
Public Class personne
' attributs
Private prenom As String
Private nom As String
Private age As Integer
' constructeurs
Public Sub New(ByVal P As [String], ByVal N As [String], ByVal age As Integer)
initialise(P, N, age)
End Sub
Public Sub New(ByVal P As personne)
initialise(P)
End Sub
' mthodes d'initialisation de l'objet
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub
Public Sub initialise(ByVal P As personne)
prenom = P.prenom
nom = P.nom
Me.age = P.age
End Sub
' mthode
Public Sub identifie()
Console.Out.WriteLine((prenom & "," & nom & "," & age))
End Sub
End Class
N#s de$/ %#nstr$%te$rs se %#ntentent de +aire a''e& a$/ ,th#des initialise %#rres'#ndantes. ;n ra''e&&e -$e &#rs-$e dans $n
%#nstr$%te$r0 #n tr#$ve &a n#tati#n initialise)-+ 'ar e/e,'&e0 &e %#,'i&ate$r trad$it 'ar :e.initialise)-+. Dans &e %#nstr$%te$r0 &a
,th#de initialise est d#n% a''e&e '#$r travai&&er s$r &'#(Bet r+ren% 'ar :e0 %'est . dire &'#(Bet %#$rant0 %e&$i -$i est en %#$rs de
%#nstr$%ti#n. V#i%i $n %#$rt 'r#gra,,e de test 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
Dim p1 As New personne("Jean", "Dupont", 30)
Console.Out.Write("p1=")
p1.identifie()
Dim p2 As New personne(p1)
Console.Out.Write("p2=")
p2.identifie()
End Sub
End Module
et &es rs$&tats #(ten$s 4
5&asses0 Str$%t$res0 Inter+a%es
"F
p1=Jean,Dupont,30
p2=Jean,Dupont,30
.F.F! Les r+ren%es d'#(Bets
N#$s $ti&is#ns t#$B#$rs &a ,*,e %&asse personne. Le 'r#gra,,e de test devient &e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
' p1
Dim p1 As New personne("Jean", "Dupont", 30)
Console.Out.Write("p1=")
p1.identifie()
' p2 rfrence le m<me objet $ue p1
Dim p2 As personne = p1
Console.Out.Write("p2=")
p2.identifie()
' p= rfrence un objet $ui sera une copie de l'objet rfrenc par p1
Dim p3 As New personne(p1)
Console.Out.Write("p3=")
p3.identifie()
' on change l'tat de l'objet rfrenc par p1
p1.initialise("Micheline", "Benot", 67)
Console.Out.Write("p1=")
p1.identifie()
' comme p22p1' l'objet rfrenc par p2 a du changer d'tat
Console.Out.Write("p2=")
p2.identifie()
' comme p= ne rfrence pas le m<me objet $ue p1' l'objet rfrenc par p= n'a pas du changer
Console.Out.Write("p3=")
p3.identifie()
End Sub
End Module
Les rs$&tats #(ten$s s#nt &es s$ivants 4
p1=Jean,Dupont,30
p2=Jean,Dupont,30
p3=Jean,Dupont,30
p1=Micheline,Benot,67
p2=Micheline,Benot,67
p3=Jean,Dupont,30
L#rs-$'#n d%&are &a varia(&e p1 'ar
dim p1 as personne=new personne("Jean","Dupont",30)
p1 r+ren%e &'#(Bet personne)&Jean&*&Dupont&*33+ ,ais n'est 'as &'#(Bet &$i-,*,e. En 50 #n dirait -$e %'est $n '#inte$r0 %.a.d. &'adresse
de &'#(Bet %r. Si #n %rit ens$ite 4
p1=nothing
5e n'est 'as &'#(Bet personne)&Jean&*&Dupont&*33+ -$i est ,#di+i0 %'est &a r+ren%e p1 -$i %hange de va&e$r. L'#(Bet
personne)&Jean&*&Dupont&*33+ sera D'erd$D s'i& n'est r+ren% 'ar a$%$ne a$tre varia(&e.
L#rs-$'#n %rit 4
dim p2 as personne=p1
#n initia&ise &e '#inte$r p2 4 i& D'#inteD s$r &e ,*,e #(Bet <i& dsigne &e ,*,e #(Bet= -$e &e '#inte$r p1. Ainsi si #n ,#di+ie &'#(Bet
D'#intD <#$ r+ren%= 'ar p10 #n ,#di+ie %e&$i r+ren% 'ar p2.
5&asses0 Str$%t$res0 Inter+a%es
"
L#rs-$'#n %rit 4
dim p3 as personne =new personne(p1);
i& A a %rati#n d'$n n#$ve& #(Bet0 %#'ie de &'#(Bet r+ren% 'ar p1. 5e n#$ve& #(Bet sera r+ren% 'ar p3. Si #n ,#di+ie &'#(Bet
D'#intD <#$ r+ren%= 'ar p10 #n ne ,#di+ie en rien %e&$i r+ren% 'ar p3. 5'est %e -$e ,#ntrent &es rs$&tats #(ten$s.
.F.FF Les #(Bets te,'#raires
Dans $ne e/'ressi#n0 #n 'e$t +aire a''e& e/'&i%ite,ent a$ %#nstr$%te$r d'$n #(Bet 4 %e&$i-%i est %#nstr$it0 ,ais n#$s n'A av#ns 'as
a%%:s <'#$r &e ,#di+ier 'ar e/e,'&e=. 5et #(Bet te,'#raire est %#nstr$it '#$r &es (es#ins d'va&$ati#n de &'e/'ressi#n '$is
a(and#nn. L'es'a%e ,,#ire -$'i& #%%$'ait sera a$t#,ati-$e,ent r%$'r $&trie$re,ent 'ar $n 'r#gra,,e a''e& Dra,asse-
,iettesD d#nt &e r[&e est de r%$'rer &'es'a%e ,,#ire #%%$' 'ar des #(Bets -$i ne s#nt '&$s r+ren%s 'ar des d#nnes d$
'r#gra,,e. 5#nsidr#ns &e n#$vea$ 'r#gra,,e de test s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
Dim p As New personne(New personne("Jean", "Dupont", 30))
p.identifie()
End Sub
End Module
et ,#di+i#ns &es %#nstr$%te$rs de &a %&asse personne a+in -$'i&s a++i%hent $n ,essage 4
' constructeurs
Public Sub New(ByVal P As [String], ByVal N As [String], ByVal age As Integer)
Console.Out.WriteLine("Constructeur personne(String, String, integer)")
initialise(P, N, age)
End Sub
Public Sub New(ByVal P As personne)
Console.Out.WriteLine("Constructeur personne(personne)")
initialise(P)
End Sub
N#$s #(ten#ns &es rs$&tats s$ivants 4
dos>test
Constructeur personne(String, String, integer)
Constructeur personne(personne)
Jean,Dupont,30
,#ntrant &a %#nstr$%ti#n s$%%essive des de$/ #(Bets te,'#raires.
.F.F Mth#des de &e%t$re et d'%rit$re des attri($ts 'rivs
N#$s raB#$t#ns . &a %&asse personne &es ,th#des n%essaires '#$r &ire #$ ,#di+ier &'tat des attri($ts des #(Bets 4
Imports System
Public Class personne
' attributs
Private prenom As [String]
Private nom As [String]
Private age As Integer
' constructeurs
Public Sub New(ByVal P As [String], ByVal N As [String], ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub
Public Sub New(ByVal P As personne)
Me.prenom = P.prenom
5&asses0 Str$%t$res0 Inter+a%es
"H
Me.nom = P.nom
Me.age = P.age
End Sub
' identifie
Public Sub identifie()
Console.Out.WriteLine((prenom + "," + nom + "," + age))
End Sub
' accesseurs
Public Function getPrenom() As [String]
Return prenom
End Function
Public Function getNom() As [String]
Return nom
End Function
Public Function getAge() As Integer
Return age
End Function
'modifieurs
Public Sub setPrenom(ByVal P As [String])
Me.prenom = P
End Sub
Public Sub setNom(ByVal N As [String])
Me.nom = N
End Sub
Public Sub setAge(ByVal age As Integer)
Me.age = age
End Sub
End Class
N#$s test#ns &a n#$ve&&e %&asse ave% &e 'r#gra,,e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' pg de test
Public Module test
Sub Main()
Dim P As New personne("Jean", "Michelin", 34)
Console.Out.WriteLine(("P=(" & P.getPrenom() & "," & P.getNom() & "," & P.getAge() & ")"))
P.setAge(56)
Console.Out.WriteLine(("P=(" & P.getPrenom() & "," & P.getNom() & "," & P.getAge() & ")"))
End Sub
End Module
et n#$s #(ten#ns &es rs$&tats s$ivants 4
P=(Jean,Michelin,34)
P=(Jean,Michelin,56)
.F.FH Les 'r#'rits
I& e/iste $ne a$tre +a@#n d'av#ir a%%:s a$/ attri($ts d'$ne %&asse %'est de %rer des 'r#'rits. 5e&&es-%i n#$s 'er,ettent de ,ani'$&er
des attri($ts 'rivs %#,,e s'i&s taient '$(&i%s. 5#nsidr#ns &a %&asse personne s$ivante #> &es a%%esse$rs et ,#di+ie$rs 'r%dents
#nt t re,'&a%s 'ar des proprits en &e%t$re et %rit$re 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' classe personne
Public Class personne
' attributs
Private _prenom As [String]
5&asses0 Str$%t$res0 Inter+a%es
""
Private _nom As [String]
Private _age As Integer
' constructeurs
Public Sub New(ByVal P As [String], ByVal N As [String], ByVal age As Integer)
Me._prenom = P
Me._nom = N
Me._age = age
End Sub
Public Sub New(ByVal P As personne)
Me._prenom = P._prenom
Me._nom = P._nom
Me._age = P._age
End Sub
' identifie
Public Sub identifie()
Console.Out.WriteLine((_prenom & "," & _nom & "," & _age))
End Sub
' proprits
Public Property prenom() As String
Get
Return _prenom
End Get
Set(ByVal Value As String)
_prenom = Value
End Set
End Property
Public Property nom() As String
Get
Return _nom
End Get
Set(ByVal Value As String)
_nom = Value
End Set
End Property
Public Property age() As Integer
Get
Return _age
End Get
Set(ByVal Value As Integer)
' age valide >
If Value >= 0 Then
_age = Value
Else
Throw New Exception("ge (" & Value & ") invalide")
End If
End Set
End Property
End Class
Une 'r#'rit Pr#'ertA 'er,et de &ire <get= #$ de +i/er <set= &a va&e$r d'$n attri($t. Dans n#tre e/e,'&e0 n#$s av#ns 'r+i/ &es
n#,s des attri($ts d$ signe c a+in -$e &es 'r#'rits '#rtent &e n#, des attri($ts 'ri,iti+s. En e++et0 $ne 'r#'rit ne 'e$t '#rter &e
,*,e n#, -$e &'attri($t -$'e&&e g:re %ar a&#rs i& A a $n %#n+&it de n#,s dans &a %&asse. N#$s av#ns d#n% a''e& n#s attri($ts
$prenom0 $nom0 $age et ,#di+i &es %#nstr$%te$rs et ,th#des en %#ns-$en%e. N#$s av#ns ens$ite %r tr#is 'r#'rits nom0 prenom
et age. Une 'r#'rit est d%&are %#,,e s$it 4
Public Property nom() As Type
Get
...
End Get
Set(ByVal Value As Type)
...
End Set
End Property
#> %ype d#it *tre &e tA'e de &'attri($t gr 'ar &a 'r#'rit. E&&e 'e$t av#ir de$/ ,th#des a''e&es get et set. La ,th#de get est
ha(it$e&&e,ent %harge de rendre &a va&e$r de &'attri($t -$'e&&e g:re <e&&e '#$rrait rendre a$tre %h#se0 rien ne &'e,'*%he=. La ,th#de
set re@#it $n 'ara,:tre a''e& value -$'e&&e a++e%te n#r,a&e,ent . &'attri($t -$'e&&e g:re. E&&e 'e$t en 'r#+iter '#$r +aire des
vri+i%ati#ns s$r &a va&idit de &a va&e$r re@$e et vent$e&&e,ent &an%er $n e/%e'ti#n si &a va&e$r se rv:&e inva&ide. 5'est %e -$i est +ait
i%i '#$r &'hge.
5&asses0 Str$%t$res0 Inter+a%es
"I
5#,,ent %es ,th#des get et set s#nt-e&&es a''e&es X 5#nsidr#ns &e 'r#gra,,e de test s$ivant 4
' options
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
Dim P As New personne("Jean", "Michelin", 34)
Console.Out.WriteLine(("P=(" & P.prenom & "," & P.nom & "," & P.age & ")"))
P.age = 56
Console.Out.WriteLine(("P=(" & P.prenom & "," & P.nom & "," & P.age & ")"))
Try
P.age = -4
Catch ex As Exception
Console.Error.WriteLine(ex.Message)
End Try
End Sub
End Module
Dans &'instr$%ti#n
Console.Out.WriteLine(("P=(" & P.prenom & "," & P.nom & "," & P.age & ")"))
#n %her%he . av#ir &es va&e$rs des 'r#'rits prenom0 nom et age de &a 'ers#nne P. 5'est &a ,th#de get de %es 'r#'rits -$i est a&#rs
a''e&e et -$i rend &a va&e$r de &'attri($t -$'e&&es g:rent.
Dans &'instr$%ti#n
P.age = 56
#n ve$t +i/er &a va&e$r de &a 'r#'rit age. 5'est a&#rs &a ,th#de set de %ette 'r#'rit -$i est a&#rs a''e&e. E&&e re%evra IK dans s#n
'ara,:tre value.
Une 'r#'rit P d'$ne %&asse = -$i ne d+inirait -$e &a ,th#de get est dite en &e%t$re se$&e. Si % est $n #(Bet de %&asse 50
&'#'rati#n c.-D!aleur sera a&#rs re+$se 'ar &e %#,'i&ate$r.
L'e/%$ti#n d$ 'r#gra,,e de test 'r%dent d#nne &es rs$&tats s$ivants 4
P=(Jean,Michelin,34)
P=(Jean,Michelin,56)
ge (-4) invalide
Les 'r#'rits n#$s 'er,ettent d#n% de ,ani'$&er des attri($ts 'rivs %#,,e s'i&s taient '$(&i%s.
.F.F" Les ,th#des et attri($ts de %&asse
S$''#s#ns -$'#n ve$i&&e %#,'ter &e n#,(re d'#(Bets T'ers#nneU %res dans $ne a''&i%ati#n. ;n 'e$t s#i-,*,e grer $n %#,'te$r
,ais #n ris-$e d'#$(&ier &es #(Bets te,'#raires -$i s#nt %rs i%i #$ &.. I& se,(&erait '&$s s?r d'in%&$re dans &es %#nstr$%te$rs de &a
%&asse T'ers#nneU0 $ne instr$%ti#n in%r,entant $n %#,'te$r. Le 'r#(&:,e est de 'asser $ne r+ren%e de %e %#,'te$r a+in -$e &e
%#nstr$%te$r '$isse &'in%r,enter 4 i& +a$t &e$r 'asser $n n#$vea$ 'ara,:tre. ;n 'e$t a$ssi in%&$re &e %#,'te$r dans &a d+initi#n de
&a %&asse. 5#,,e %'est $n attri($t de &a %&asse e&&e-,*,e et n#n d'$n #(Bet 'arti%$&ier de %ette %&asse0 #n &e d%&are di++re,,ent
ave% &e ,#t %& Shared 4
Private Shared _nbPersonnes As Long = 0
P#$r &e r+ren%er0 #n %rit personne.$n"-ersonnes '#$r ,#ntrer -$e %'est $n attri($t de &a %&asse personne e&&e-,*,e. I%i0 n#$s av#ns
%r $n attri($t 'riv a$-$e& #n n'a$ra 'as a%%:s dire%te,ent en-deh#rs de &a %&asse. ;n %re d#n% $ne 'r#'rit '$(&i-$e '#$r
d#nner a%%:s . &'attri($t de %&asse n"-ersonnes. P#$r rendre &a va&e$r de n"-ersonnes &a ,th#de get de %ette 'r#'rit n'a 'as (es#in
d'$n #(Bet personne 'arti%$&ier 4 en e++et cn"-ersonnes n'est 'as &'attri($t d'$n #(Bet 'arti%$&ier0 i& est &'attri($t de t#$te $ne %&asse. A$ssi
a-t-#n (es#in d'$ne 'r#'rit d%&are e&&e-a$ssi Shared 4
Public Shared ReadOnly Property nbPersonnes() As Long
Get
Return _nbPersonnes
End Get
End Property
-$i de &'e/trie$r sera a''e&e ave% &a sAnta/e personne.n"-ersonnes. La 'r#'rit est d%&are en &e%t$re se$&e <Read;n&A= %ar e&&e ne
'r#'#se 'as de ,th#de set. V#i%i $n e/e,'&e. La %&asse personne devient &a s$ivante 4
5&asses0 Str$%t$res0 Inter+a%es
"K
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' classe
Public Class personne
' attributs de classe
Private Shared _nbPersonnes As Long = 0
' attributs d'instance
Private _prenom As [String]
Private _nom As [String]
Private _age As Integer
' constructeurs
Public Sub New(ByVal P As [String], ByVal N As [String], ByVal age As Integer)
' une personne de plus
_nbPersonnes += 1
Me._prenom = P
Me._nom = N
Me._age = age
End Sub
Public Sub New(ByVal P As personne)
' une personne de plus
_nbPersonnes += 1
Me._prenom = P._prenom
Me._nom = P._nom
Me._age = P._age
End Sub
' identifie
Public Sub identifie()
Console.Out.WriteLine((_prenom & "," & _nom & "," & _age))
End Sub
' proprit de classe
Public Shared ReadOnly Property nbPersonnes() As Long
Get
Return _nbPersonnes
End Get
End Property
' proprits d'instance
Public Property prenom() As String
Get
Return _prenom
End Get
Set(ByVal Value As String)
_prenom = Value
End Set
End Property
Public Property nom() As String
Get
Return _nom
End Get
Set(ByVal Value As String)
_nom = Value
End Set
End Property
Public Property age() As Integer
Get
Return _age
End Get
Set(ByVal Value As Integer)
' age valide >
If Value >= 0 Then
_age = Value
Else
Throw New Exception("ge (" & Value & ") invalide")
End If
End Set
End Property
End Class
Ave% &e 'r#gra,,e s$ivant 4
5&asses0 Str$%t$res0 Inter+a%es
"O
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
Dim p1 As New personne("Jean", "Dupont", 30)
Dim p2 As New personne(p1)
Console.Out.WriteLine(("Nombre de personnes cres : " & personne.nbPersonnes))
End Sub
End Module
#n #(tient &es rs$&tats s$ivants 4
Nombre de personnes cres : 2
.F.FI Passage d'$n #(Bet . $ne +#n%ti#n
N#$s av#ns dB. dit -$e 'ar d+a$t VB.NET 'assait &es 'ara,:tres e++e%ti+s d'$ne +#n%ti#n 'ar va&e$r 4 &es va&e$rs des 'ara,:tres
e++e%ti+s s#nt re%#'ies dans &es 'ara,:tres +#r,e&s. Dans &e %as d'$n #(Bet0 i& ne +a$t 'as se &aisser tr#,'er 'ar &'a($s de &angage -$i
est +ait sAst,ati-$e,ent en 'ar&ant d'#(Bet a$ &ie$ de r+ren%e d'#(Bet. Un #(Bet n'est ,ani'$& -$e via $ne r+ren%e <$n '#inte$r=
s$r &$i. 5e -$i est d#n% trans,is . $ne +#n%ti#n0 n'est 'as &'#(Bet &$i-,*,e ,ais $ne r+ren%e s$r %et #(Bet. 5'est d#n% &a va&e$r de
&a r+ren%e et n#n &a va&e$r de &'#(Bet &$i-,*,e -$i est d$'&i-$e dans &e 'ara,:tre +#r,e& 4 i& n'A a 'as %#nstr$%ti#n d'$n n#$ve&
#(Bet. Si $ne r+ren%e d'#(Bet RF est trans,ise . $ne +#n%ti#n0 e&&e sera re%#'ie dans &e 'ara,:tre +#r,e& %#rres'#ndant R. A$ssi
&es r+ren%es R et RF dsignent-e&&es &e ,*,e #(Bet. Si &a +#n%ti#n ,#di+ie &'#(Bet '#int 'ar R0 e&&e ,#di+ie vide,,ent %e&$i
r+ren% 'ar RF '$is-$e %'est &e ,*,e.
5'est %e -$e ,#ntre &'e/e,'&e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
' une personne p1
Dim p1 As New personne("Jean", "Dupont", 30)
' affichage p1
Console.Out.Write("Paramtre effectif avant modification : ")
p1.identifie()
' modification p1
modifie(p1)
' affichage p1
Console.Out.Write("Paramtre effectif aprs modification : ")
p1.identifie()
End Sub
Sub modifie(ByVal P As personne)
' affichage personne ,
Console.Out.Write("Paramtre formel avant modification : ")
P.identifie()
' modification ,
P.prenom = "Sylvie"
P.nom = "Vartan"
P.age = 52
5&asses0 Str$%t$res0 Inter+a%es
"E
RF #(Bet
R
Re%#'ie
' affichage ,
Console.Out.Write("Paramtre formel aprs modification : ")
P.identifie()
End Sub
End Module
Les rs$&tats #(ten$s s#nt &es s$ivants 4
Paramtre effectif avant modification : Jean,Dupont,30
Paramtre formel avant modification : Jean,Dupont,30
Paramtre formel aprs modification : Sylvie,Vartan,52
Paramtre effectif aprs modification : Sylvie,Vartan,52
;n v#it -$'i& n'A a %#nstr$%ti#n -$e d'$n #(Bet 4 %e&$i de &a 'ers#nne p1 de &a 'r#%d$re Main et -$e &'#(Bet a (ien t ,#di+i 'ar &a
+#n%ti#n modi#ie.
.F.FK Un ta(&ea$ de 'ers#nnes
Un #(Bet est $ne d#nne %#,,e $ne a$tre et . %e titre '&$sie$rs #(Bets 'e$vent *tre rasse,(&s dans $n ta(&ea$ 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
' un tableau de personnes
Dim amis(2) As personne
amis(0) = New personne("Jean", "Dupont", 30)
amis(1) = New personne("Sylvie", "Vartan", 52)
amis(2) = New personne("Neil", "Armstrong", 66)
' affichage
Console.Out.WriteLine("----------------")
Dim i As Integer
For i = 0 To amis.Length - 1
amis(i).identifie()
Next i
End Sub
End Module
L'instr$%ti#n Di, a,is<= As 'ers#nne %re $n ta(&ea$ de H &,ents de tA'e personne. 5es H &,ents s#nt initia&iss i%i ave% &a
va&e$r nothing0 %.a.d. -$'i&s ne r+ren%ent a$%$n #(Bet. De n#$vea$0 'ar a($s de &angage0 #n 'ar&e de ta(&ea$ d'#(Bets a&#rs -$e %e
n'est -$'$n ta(&ea$ de r+ren%es d'#(Bets. La %rati#n d$ ta(&ea$ d'#(Bets0 -$i est $n #(Bet &$i-,*,e ne %re a$%$n #(Bet d$ tA'e de
ses &,ents 4 i& +a$t &e +aire ens$ite. ;n #(tient &es rs$&tats s$ivants 4
Jean,Dupont,30
Sylvie,Vartan,52
Neil,Armstrong,66
. L'hritage 'ar &'e/e,'&e
..F Gnra&its
N#$s a(#rd#ns i%i &a n#ti#n d'hritage. Le ($t de &'hritage est de D'ers#nna&iserD $ne %&asse e/istante '#$r -$'e&&e satis+asse . n#s
(es#ins. S$''#s#ns -$'#n ve$i&&e %rer $ne %&asse enseignant 4 $n enseignant est $ne 'ers#nne 'arti%$&i:re. I& a des attri($ts -$'$ne
a$tre 'ers#nne n'a$ra 'as 4 &a ,ati:re -$'i& enseigne 'ar e/e,'&e. Mais i& a a$ssi &es attri($ts de t#$te 'ers#nne 4 'rn#,0 n#, et
hge. Un enseignant +ait d#n% '&eine,ent 'artie de &a %&asse personne ,ais a des attri($ts s$''&,entaires. P&$t[t -$e d'%rire $ne
%&asse enseignant . 'artir de rien0 #n 'r+:rerait re'rendre &'a%-$is de &a %&asse personne -$'#n ada'terait a$ %ara%t:re 'arti%$&ier des
enseignants. 5'est &e %#n%e't d'-ritage -$i n#$s 'er,et %e&a. P#$r e/'ri,er -$e &a %&asse enseignant hrite des 'r#'rits de &a
%&asse personne0 #n %rira 4
Public Class enseignant
Inherits personne
;n n#tera &a sAnta/e 'arti%$&i:re s$r de$/ &ignes. La %&asse personne est a''e&e &a %&asse 'arent <#$ ,:re= et &a %&asse enseignant &a
%&asse drive <#$ +i&&e=. Un #(Bet enseignant a t#$tes &es -$a&its d'$n #(Bet personne 4 i& a &es ,*,es attri($ts et &es ,*,es ,th#des.
5&asses0 Str$%t$res0 Inter+a%es
"L
5es attri($ts et ,th#des de &a %&asse 'arent ne s#nt 'as r'tes dans &a d+initi#n de &a %&asse +i&&e 4 #n se %#ntente d'indi-$er &es
attri($ts et ,th#des raB#$ts 'ar &a %&asse +i&&e. N#$s s$''#s#ns -$e &a %&asse personne est d+inie %#,,e s$it 4
' options
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' classe personne
Public Class personne
' attributs de classe
Private Shared _nbPersonnes As Long = 0
' attributs d'instance
Private _prenom As [String]
Private _nom As [String]
Private _age As Integer
' constructeurs
Public Sub New(ByVal P As [String], ByVal N As [String], ByVal age As Integer)
' une personne de plus
_nbPersonnes += 1
' construction
Me._prenom = P
Me._nom = N
Me._age = age
' suivi
Console.Out.WriteLine("Construction personne(string, string, int)")
End Sub
Public Sub New(ByVal P As personne)
' une personne de plus
_nbPersonnes += 1
' construction
Me._prenom = P._prenom
Me._nom = P._nom
Me._age = P._age
' suivi
Console.Out.WriteLine("Construction personne(string, string, int)")
End Sub
' proprit de classe
Public Shared ReadOnly Property nbPersonnes() As Long
Get
Return _nbPersonnes
End Get
End Property
' proprits d'instance
Public Property prenom() As String
Get
Return _prenom
End Get
Set(ByVal Value As String)
_prenom = Value
End Set
End Property
Public Property nom() As String
Get
Return _nom
End Get
Set(ByVal Value As String)
_nom = Value
End Set
End Property
Public Property age() As Integer
Get
Return _age
End Get
Set(ByVal Value As Integer)
' age valide >
If Value >= 0 Then
_age = Value
5&asses0 Str$%t$res0 Inter+a%es
I!
Else
Throw New Exception("ge (" & Value & ") invalide")
End If
End Set
End Property
Public ReadOnly Property identite() As String
Get
Return "personne(" & _prenom & "," & _nom & "," & age & ")"
End Get
End Property
End Class
La ,th#de identi#ie a t re,'&a%e 'ar &a 'r#'rit identit en &e%t$re se$&e et -$i identi+ie &a 'ers#nne. N#$s %r#ns $ne %&asse
enseignant hritant de &a %&asse personne 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Public Class enseignant
Inherits personne
' attributs
Private _section As Integer
' constructeur
Public Sub New(ByVal P As String, ByVal N As String, ByVal age As Integer, ByVal section As Integer)
MyBase.New(P, N, age)
Me._section = section
' suivi
Console.Out.WriteLine("Construction enseignant(string,string,int,int)")
End Sub
' proprit section
Public Property section() As Integer
Get
Return _section
End Get
Set(ByVal Value As Integer)
_section = Value
End Set
End Property
End Class
La %&asse enseignant raB#$te a$/ ,th#des et attri($ts de &a %&asse personne 4
$n attri($t section -$i est &e nY de se%ti#n a$-$e& a''artient &'enseignant dans &e %#r's des enseignants <$ne se%ti#n 'ar
dis%i'&ine en gr#s=
$n n#$vea$ %#nstr$%te$r 'er,ettant d'initia&iser t#$s &es attri($ts d'$n enseignant
La d%&arati#n
Public Class enseignant
Inherits personne
indi-$e -$e &a %&asse enseignant drive de &a %&asse personne.
.. 5#nstr$%ti#n d'$n #(Bet enseignant
Le %#nstr$%te$r de &a %&asse enseignant est &e s$ivant 4
' constructeur
Public Sub New(ByVal P As String, ByVal N As String, ByVal age As Integer, ByVal section As Integer)
MyBase.New(P, N, age)
Me._section = section
' suivi
Console.Out.WriteLine("Construction enseignant(string,string,int,int)")
End Sub
La d%&arati#n
Public Sub New(ByVal P As String, ByVal N As String, ByVal age As Integer, ByVal section As Integer)
5&asses0 Str$%t$res0 Inter+a%es
IF
d%&are -$e &e %#nstr$%te$r re@#it -$atre 'ara,:tres -0 @0 age0 section. E&&e d#it en 'asser tr#is )-*@*age+ . sa %&asse de (ase0 i%i &a
%&asse personne. ;n sait -$e %ette %&asse a $n %#nstr$%te$r personne)string* string* int+ -$i va 'er,ettre de %#nstr$ire $ne 'ers#nne ave%
&es 'ara,:tres 'assss )-*@*age+. La %&asse TenseignantU 'asse &es 'ara,:tres <P0N0age= . sa %&asse de (ase de &a +a@#n s$ivante 4
MyBase.New(P, N, age)
Une +#is &a %#nstr$%ti#n de &a %&asse de (ase ter,ine0 &a %#nstr$%ti#n de &'#(Bet enseignant se '#$rs$it 'ar &'e/%$ti#n d$ %#r's d$
%#nstr$%te$r 4
Me._section = section
En rs$,0 &e %#nstr$%te$r d'$ne %&asse drive 4
'asse . sa %&asse de (ase &es 'ara,:tres d#nt e&&e a (es#in '#$r se %#nstr$ire
$ti&ise &es a$tres 'ara,:tres '#$r initia&iser &es attri($ts -$i &$i s#nt 'r#'res
;n a$rait '$ 'r+rer %rire 4
Public Sub New(ByVal P As String, ByVal N As String, ByVal age As Integer, ByVal section As Integer)
Me._prenom = P
Me._nom = N
Me._age = age
Me._section = section
' suivi
Console.Out.WriteLine("Construction enseignant(string,string,int,int)")
End Sub
5'est i,'#ssi(&e. La %&asse personne a d%&ar 'rivs <pri!ate= ses tr#is %ha,'s cprenom0 cnom et cage. Se$&s des #(Bets de &a ,*,e
%&asse #nt $n a%%:s dire%t . %es %ha,'s. T#$s &es a$tres #(Bets0 A %#,'ris des #(Bets +i&s %#,,e i%i0 d#ivent 'asser 'ar des
,th#des '$(&i-$es '#$r A av#ir a%%:s. 5e&a a$rait t di++rent si &a %&asse personne avait d%&ar 'r#tgs <protected= &es tr#is %ha,'s 4
e&&e a$t#risait a&#rs des %&asses drives . av#ir $n a%%:s dire%t a$/ tr#is %ha,'s. Dans n#tre e/e,'&e0 $ti&iser &e %#nstr$%te$r de &a
%&asse 'arent tait d#n% &a (#nne s#&$ti#n et %'est &a ,th#de ha(it$e&&e 4 &#rs de &a %#nstr$%ti#n d'$n #(Bet +i&s0 #n a''e&&e d'a(#rd &e
%#nstr$%te$r de &'#(Bet 'arent '$is #n %#,'&:te &es initia&isati#ns 'r#'res %ette +#is . &'#(Bet +i&s <section dans n#tre e/e,'&e=.
5#,'i&#ns &es %&asses personne et enseignant dans des asse,(&ages 4
dos>vbc /t:library personne.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>vbc /r:personne.dll /t:library enseignant.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir
25/02/2004 10:08 1 828 personne.vb
25/02/2004 10:11 675 enseignant.vb
25/02/2004 10:12 223 test.vb
25/02/2004 10:16 4 096 personne.dll
25/02/2004 10:16 3 584 enseignant.dll
;n re,ar-$era -$e '#$r %#,'i&er &a %&asse +i&&e enseignant0 i& a +a&&$ r+ren%er &e +i%hier personne.dll -$i %#ntient &a %&asse personne.
Tent#ns $n 're,ier 'r#gra,,e de test 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test
Sub Main()
Console.Out.WriteLine(New enseignant("Jean", "Dupont", 30, 27).identite)
End Sub
End Module
5e 'r#gra,,e %e %#ntente de %rer $n #(Bet enseignant <ne2= et de &'identi+ier. La %&asse enseignant n'a 'as de ,th#de identit ,ais sa
%&asse 'arent en a $ne -$i de '&$s est '$(&i-$e 4 e&&e devient 'ar hritage $ne ,th#de '$(&i-$e de &a %&asse enseignant. Les rs$&tats
#(ten$s s#nt &es s$ivants 4
dos>vbc /r:personne.dll /r:enseignant.dll test.vb
5&asses0 Str$%t$res0 Inter+a%es
I
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>test
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
personne(Jean,Dupont,30)
;n v#it -$e 4
$n #(Bet personne a t %#nstr$it avant &'#(Bet enseignant
&'identit #(ten$e est %e&&e de &'#(Bet personne
..H S$r%harge d'$ne ,th#de #$ d'$ne 'r#'rit
Dans &'e/e,'&e 'r%dent0 n#$s av#ns e$ &'identit de &a 'artie personne de &'enseignant ,ais i& ,an-$e %ertaines in+#r,ati#ns
'r#'res . &a %&asse enseignant <&a se%ti#n=. ;n est d#n% a,en . %rire $ne 'r#'rit 'er,ettant d'identi+ier &'enseignant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Public Class enseignant
Inherits personne
' attributs
Private _section As Integer
' constructeur
Public Sub New(ByVal P As String, ByVal N As String, ByVal age As Integer, ByVal section As Integer)
MyBase.New(P, N, age)
Me._section = section
' suivi
Console.Out.WriteLine("Construction enseignant(string,string,int,int)")
End Sub
' proprit section
Public Property section() As Integer
Get
Return _section
End Get
Set(ByVal Value As Integer)
_section = Value
End Set
End Property
' surcharge proprit identit
Public Shadows ReadOnly Property identite() As String
Get
Return "enseignant(" & MyBase.identite & "," & _section & ")"
End Get
End Property
End Class
La ,th#de identite de &a %&asse enseignant s'a''$ie s$r &a ,th#de identite de sa %&asse ,:re <MABase.identite= '#$r a++i%her sa 'artie
DpersonneD '$is %#,'&:te ave% &e %ha,' csection -$i est 'r#'re . &a %&asse enseignant. N#t#ns &a d%&arati#n de &a 'r#'rit identite 4
Public Shadows ReadOnly Property identite() As String
-$i indi-$e -$e &a 'r#'rit identite D%a%heD &a ,th#de de ,*,e n#, -$i '#$rrait e/ister dans &a %&asse 'arent. S#it $n #(Bet
enseignant E. 5et #(Bet %#ntient en s#n sein $n #(Bet personne 4
5&asses0 Str$%t$res0 Inter+a%es
IH
enseignant
identite
'ers#nne
identite
E
La 'r#'rit identit est d+inie . &a +#is dans &a %&asse enseignant et sa %&asse ,:re personne. Dans &a %&asse +i&&e enseignant0 &a 'r#'rit
identite d#it *tre 'r%de d$ ,#t %& s-ado2s '#$r indi-$er -$'#n red+init $ne n#$ve&&e 'r#'rit identite '#$r &a %&asse enseignant.
Public Shadows ReadOnly Property identite() As String
La %&asse enseignant dis'#se ,aintenant de de$/ 'r#'rits identite 4
%e&&e hrite de &a %&asse 'arent personne
&a sienne 'r#'re
Si E est $n #Bet enseignant0 7.identite dsigne &a ,th#de identite de &a %&asse enseignant. ;n dit -$e &a 'r#'rit identite de &a %&asse ,:re
est Dred+inieD 'ar &a 'r#'rit identite de &a %&asse +i&&e. De +a@#n gnra&e0 si 5 est $n #(Bet et : $ne ,th#de0 '#$r e/%$ter &a
,th#de 5.:0 &e sAst:,e %her%he $ne ,th#de : dans &'#rdre s$ivant 4
dans &a %&asse de &'#(Bet ;
dans sa %&asse ,:re s'i& en a $ne
dans &a %&asse ,:re de sa %&asse ,:re si e&&e e/iste
et%Z
L'hritage 'er,et d#n% de red+inir dans &a %&asse +i&&e des ,th#desN'r#'rits de ,*,e n#, dans &a %&asse ,:re. 5'est %e -$i
'er,et d'ada'ter &a %&asse +i&&e . ses 'r#'res (es#ins. Ass#%ie a$ '#&A,#r'his,e -$e n#$s a&&#ns v#ir $n 'e$ '&$s &#in0 &a s$r%harge
de ,th#desN'r#'rits est &e 'rin%i'a& intr*t de &'hritage. 5#nsidr#ns &e ,*,e e/e,'&e -$e 'r%de,,ent 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test
Sub Main()
Console.Out.WriteLine(New enseignant("Jean", "Dupont", 30, 27).identite)
End Sub
End Module
Les rs$&tats #(ten$s s#nt %ette +#is &es s$ivants 4
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
enseignant(personne(Jean,Dupont,30),27)
.." Le '#&A,#r'his,e
5#nsidr#ns $ne &igne de %&asses 4 5
!
5
F
5

Z 5
n
#> (
i
(
,
indi-$e -$e &a %&asse (
,
est drive de &a %&asse (
i
. 5e&a
entraCne -$e &a %&asse (
,
a t#$tes &es %ara%tristi-$es de &a %&asse (
i
'&$s d'a$tres. S#ient des #(Bets ;
i
de tA'e 5
i
. I& est &ga& d'%rire 4
;
i
V;
B
ave% B`i
En e++et0 'ar hritage0 &a %&asse 5
B
a t#$tes &es %ara%tristi-$es de &a %&asse 5
i
'&$s d'a$tres. D#n% $n #(Bet ;
B
de tA'e 5
B
%#ntient en
&$i $n #(Bet de tA'e 5
i
. L'#'rati#n
;
i
V;
B
+ait -$e ;
i
est $ne r+ren%e . &'#(Bet de tA'e 5
i
%#nten$ dans &'#(Bet ;
B
.
Le +ait -$'$ne varia(&e 5i de %&asse (i '$isse en +ait r+ren%er n#n se$&e,ent $n #(Bet de &a %&asse (i ,ais en +ait t#$t #(Bet driv
de &a %&asse (i est a''e& poly+orp-is+e 4 &a +a%$&t '#$r $ne varia(&e de r+ren%er di++rents tA'es d'#(Bets. Pren#ns $n e/e,'&e
et %#nsidr#ns &a +#n%ti#n s$ivante ind'endante de t#$te %&asse 4
Sub affiche(ByVal p As personne)
;n '#$rra a$ssi (ien %rire
dim p as personne
...
affiche(p);
-$e
dim e as enseignant
...
affiche(e);
5&asses0 Str$%t$res0 Inter+a%es
I"
Dans %e dernier %as0 &e 'ara,:tre +#r,e& de tA'e personne de &a +#n%ti#n a##iche va re%ev#ir $ne va&e$r de tA'e enseignant. 5#,,e &e
tA'e enseignant drive d$ tA'e personne0 %'est &ga&.
..I Red+initi#n et '#&A,#r'his,e
5#,'&t#ns n#tre 'r#%d$re a##iche 4
Sub affiche(ByVal p As personne)
' affiche identit de p
Console.Out.WriteLine(p.identite)
End Sub
La ,th#de p.identite rend $ne %haCne de %ara%t:res identi+iant &'#(Bet personne. f$e se 'asse-t-i& dans &e %as de n#tre e/e,'&e
'r%dent dans &e %as d'$n #(Bet enseignant 4
Dim e As New enseignant("Lucile", "Dumas", 56, 61)
affiche(e)
Regard#ns &'e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test
Sub Main()
' un enseignant
Dim e As New enseignant("Lucile", "Dumas", 56, 61)
affiche(e)
' une personne
Dim p As New personne("Jean", "Dupont", 30)
affiche(p)
End Sub
' affiche
Sub affiche(ByVal p As personne)
' affiche identit de p
Console.Out.WriteLine(p.identite)
End Sub
End Module
Les rs$&tats #(ten$s s#nt &es s$ivants 4
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
personne(Lucile,Dumas,56)
Construction personne(string, string, int)
personne(Jean,Dupont,30)
L'e/%$ti#n ,#ntre -$e &'instr$%ti#n p.identite a e/%$t . %ha-$e +#is &a 'r#'rit identite d'$ne personne0 &a 'ers#nne %#nten$e dans
&'enseignant e0 '$is &a personne ' e&&e-,*,e. E&&e ne s'est 'as ada'te . &'#(Bet re&&e,ent 'ass en 'ara,:tre . a##iche. ;n a$rait 'r+r
av#ir &'identit %#,'&:te de &'enseignant e. I& a$rait +a&&$ '#$r %e&a -$e &a n#tati#n p.identite r+ren%e &a 'r#'rit identite de &'#(Bet
re&&e,ent '#int 'ar p '&$t[t -$e &a 'r#'rit identite de 'artie DpersonneD de &'#(Bet re&&e,ent '#int 'ar p. I& est '#ssi(&e d'#(tenir
%e rs$&tat en d%&arant identite %#,,e $ne 'r#'rit redfinissable <overridable= dans &a %&asse de (ase personne 4
Public Overridable ReadOnly Property identite() As String
Get
Return "personne(" & _prenom & "," & _nom & "," & age & ")"
End Get
End Property
Le ,#t %& overridable +ait de identite $ne 'r#'rit r+inissa(&e #$ virt$e&&e. 5e ,#t %& 'e$t s'a''&i-$er ga&e,ent a$/ ,th#des.
Les %&asses +i&&es -$i red+inissent $ne 'r#'rit #$ ,th#de virt$e&&e d#ivent $ti&iser a&#rs &e ,#t %& overrides a$ &ie$ de s-ado2s
'#$r -$a&i+ier &e$r 'r#'ritN,th#de red+inie. Ainsi dans &a %&asse enseignant0 &a 'r#'rit identite est d+inie %#,,e s$it 4
' surcharge proprit identit
Public Overrides ReadOnly Property identite() As String
Get
Return "enseignant(" & MyBase.identite & "," & _section & ")"
End Get
End Property
5&asses0 Str$%t$res0 Inter+a%es
II
Le 'r#gra,,e de test 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test
Sub Main()
' un enseignant
Dim e As New enseignant("Lucile", "Dumas", 56, 61)
affiche(e)
' une personne
Dim p As New personne("Jean", "Dupont", 30)
affiche(p)
End Sub
' affiche
Sub affiche(ByVal p As personne)
' affiche identit de p
Console.Out.WriteLine(p.identite)
End Sub
End Module
'r#d$it a&#rs &es rs$&tats s$ivants 4
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
enseignant(personne(Lucile,Dumas,56),61)
Construction personne(string, string, int)
personne(Jean,Dupont,30)
5ette +#is-%i0 #n a (ien e$ &'identit %#,'&:te de &'enseignant. Red+iniss#ns ,aintenant $ne ,th#de '&$t[t -$'$ne 'r#'rit. La
%&asse #",ect est &a %&asse D,:reD de t#$tes &es %&asses VB.NET. Ainsi &#rs-$'#n %rit 4
public class personne
#n %rit i,'&i%ite,ent 4
public class personne
inherits object
La %&asse o",ect d+init $ne ,th#de virt$e&&e To.tring 4
La ,th#de %oString rend &e n#, de &a %&asse . &a-$e&&e a''artient &'#(Bet %#,,e &e ,#ntre &'e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test2
Sub Main()
' un enseignant
Console.Out.WriteLine(New enseignant("Lucile", "Dumas", 56, 61).ToString())
' une personne
Console.Out.WriteLine(New personne("Jean", "Dupont", 30).ToString())
5&asses0 Str$%t$res0 Inter+a%es
IK
End Sub
End Module
Les rs$&tats 'r#d$its s#nt &es s$ivants 4
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
enseignant
Construction personne(string, string, int)
personne
;n re,ar-$era -$e (ien -$e n#$s n'aA#ns 'as red+ini &a ,th#de %oString dans &es %&asses personne et enseignant0 #n 'e$t %e'endant
%#nstater -$e &a ,th#de %oString de &a %&asse o",ect est -$and ,*,e %a'a(&e d'a++i%her &e n#, re& de &a %&asse de &'#(Bet.
Red+iniss#ns &a ,th#de %oString dans &es %&asses personne et enseignant 4
' 3o+tring
Public Overrides Function ToString() As String
' on rend la proprit identite
Return identite
End Function
La d+initi#n est &a ,*,e dans &es de$/ %&asses. 5#nsidr#ns &e 'r#gra,,e de test s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test
Sub Main()
' un enseignant
Dim e As New enseignant("Lucile", "Dumas", 56, 61)
affiche(e)
' une personne
Dim p As New personne("Jean", "Dupont", 30)
affiche(p)
End Sub
' affiche
Sub affiche(ByVal p As personne)
' affiche identit de p
Console.Out.WriteLine(p.identite)
End Sub
End Module
Les rs$&tats d'e/%$ti#n s#nt &es s$ivants 4
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
enseignant(personne(Lucile,Dumas,56),61)
Construction personne(string, string, int)
personne(Jean,Dupont,30)
.H D+inir $n inde/e$r '#$r $ne %&asse
5#nsidr#ns &a %&asse TArraAListU 'rd+inie dans &a '&ate-+#r,e .NET. 5ette %&asse 'er,et de ,,#riser des #(Bets dans $ne &iste.
E&&e a''artient . &'es'a%e de n#,s TSAste,.5#&&e%ti#nsU. Dans &'e/e,'&e s$ivant0 n#$s $ti&is#ns %ette %&asse '#$r ,,#riser $ne &iste
de 'ers#nnes <a$ sens &arge= 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
' classe liste)e,ersonnes
Public Class listeDePersonnes
Inherits ArrayList
' pour ajouter une personne la liste
5&asses0 Str$%t$res0 Inter+a%es
IO
Public Overloads Sub Add(ByVal p As personne)
MyBase.Add(p)
End Sub
' un indeeur
Default Public Shadows Property Item(ByVal i As Integer) As personne
Get
Return CType(MyBase.Item(i), personne)
End Get
Set(ByVal Value As personne)
MyBase.Item(i) = Value
End Set
End Property
' un autre indeeur
Default Public Shadows ReadOnly Property Item(ByVal N As String) As Integer
Get
' on recherche la personne de nom 4
Dim i As Integer
For i = 0 To Count - 1
If CType(Me(i), personne).nom = N Then
Return i
End If
Next i
Return -1
End Get
End Property
' to+tring
Public Overrides Function ToString() As String
' rend -l1' l2' ???' ln0
Dim liste As String = "("
Dim i As Integer
' on parcourt le tableau d(nami$ue
For i = 0 To (Count - 2)
liste += "[" + Me(i).ToString + "]" + ","
Next i 'for
' dernier lment
If Count <> 0 Then
liste += "[" + Me(i).ToString + "]"
End If
liste += ")"
Return liste
End Function
End Class
D#nn#ns -$e&-$es in+#r,ati#ns s$r %ertaines 'r#'rits et ,th#des de &a %&asse TArraAListU 4
Count
attri($t d#nnant &e n#,(re d'&,ents de &a &iste
Add(Object)
,th#de 'er,ettant d'aB#$ter $n #(Bet . &a &iste
Item(Integer i)
,th#de d#nnant &'&,ent i de &a &iste
N#$s re,ar-$#ns -$e '#$r #(tenir &'&,ent nY i de &iste0 n#$s n'av#ns 'as %rit T&iste.Ite,<i=U ,ais dire%te,ent T&iste<i=U0 %e -$i .
'ri#ri se,(&e err#n. 5e%i est nan,#ins '#ssi(&e 'ar%e -$e &a %&asse TArraAListU d+init $ne 'r#'rit 'ar d+a$t TIte,U se&#n &a
sAnta/e ana&#g$e . &a s$ivante 4
Default Public Property Item(ByVal i As Integer) As Object
Get
...
End Get
Set(ByVal Value As personne)
...
End Set
End Property
L#rs-$e &e %#,'i&ate$r ren%#ntre &a n#tati#n T&iste<i=U0 i& %her%he si &a %&asse TArraAListU a d+ini $ne 'r#'rit ave% &a signat$re
s$ivante 4
Default Public Property Proc(ByVal var As Integer) As Type
I%i0 i& tr#$vera &a 'r#%d$re TIte,U. I& trad$ira a&#rs &'%rit$re T&iste<i=U en T&iste.Ite,<i=U. ;n a''e&&e &a 'r#'rit TIte,U0 &a 'r#'rit
inde/e 'ar d+a$t de &a %&asse TArraAListU. L'e/%$ti#n d$ 'r#gra,,e 'r%dent d#nne &es rs$&tats s$ivants 4
dos>vbc /r:personne.dll /r:enseignant.dll lstpersonnes1.vb
5&asses0 Str$%t$res0 Inter+a%es
IE
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir
11/03/2004 18:26 3 584 enseignant.dll
12/03/2004 15:34 3 584 lstpersonnes1.exe
12/03/2004 13:39 661 lstpersonnes1.vb
11/03/2004 18:26 4 096 personne.dll
dos>lstpersonnes1
Construction personne(string, string, int)
Construction personne(string, string, int)
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
personne(paul,chenou,31)
personne(nicole,chenou,11)
enseignant(personne(jacques,sileau,33),61)
5r#ns $ne %&asse a''e& T&isteDePers#nnesU -$i serait $ne &iste de 'ers#nnes0 d#n% $ne &iste 'arti%$&i:re -$'i& se,(&e nat$re& de
driver de &a %&asse TArraAListU 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
' classe liste)e,ersonnes
Public Class listeDePersonnes
Inherits ArrayList
' pour ajouter une personne la liste
Public Shadows Sub Add(ByVal p As Object)
' il faut $ue p soit une personne
If Not TypeOf (p) Is personne Then
Throw New Exception("L'objet ajout (" + p.ToString + ") n'est pas une personne")
Else
MyBase.Add(p)
End If
End Sub
' un indeeur
Default Public Shadows Property Index(ByVal i As Integer) As personne
Get
Return CType(MyBase.Item(i), personne)
End Get
Set(ByVal Value As personne)
MyBase.Item(i) = Value
End Set
End Property
' to+tring
Public Overrides Function ToString() As String
' rend -l1' l2' ???' ln0
Dim liste As String = "("
Dim i As Integer
' on parcourt le tableau d(nami$ue
For i = 0 To (Count - 2)
liste += "[" + Me(i).ToString + "]" + ","
Next i 'for
' dernier lment
If Count <> 0 Then
liste += "[" + Me(i).ToString + "]"
End If
liste += ")"
Return liste
End Function
End Class
La %&asse 'rsente &es ,th#des et 'r#'rits s$ivantes 4
ToString
rend $ne %haCne de %ara%t:res Dre'rsentantD &e %#nten$ de &a &iste
Add(personne)
,th#de 'er,ettant d'aB#$ter $ne 'ers#nne . &a &iste
Item(Integer i)
'r#'rit inde/e 'ar d+a$t d#nnant &a 'ers#nne i de &a &iste
5&asses0 Str$%t$res0 Inter+a%es
IL
5#nsidr#ns &es '#ints n#$vea$/ 4
Une n#$ve&&e ,th#de TAddU est %re.
' pour ajouter une personne la liste
Public Shadows Sub Add(ByVal p As Object)
' il faut que p soit une personne
If Not TypeOf (p) Is personne Then
Throw New Exception("L'objet ajout (" + p.ToString + ") n'est pas une personne")
Else
MyBase.Add(p)
End If
End Sub
I& en e/iste dB. $ne dans &a %&asse 'arent TArraAListU ave% &a ,*,e signat$re0 d'#> &e ,#t %& TShad#2sU '#$r indi-$er -$e &a
n#$ve&&e 'r#%d$re re,'&a%e %e&&e de &a %&asse 'arent. La ,th#de TAddU de &a %&asse +i&&e vri+ie -$e &'#(Bet aB#$t est (ien de tA'e
T'ers#nneU #$ driv ave% &a +#n%ti#n TTA'e;+U. Si %e n'est 'as &e %as0 $ne e/%e'ti#n est &an%e ave% &'instr$%ti#n TThr#2U. Si &'#(Bet
aB#$t est (ien de tA'e T'ers#nneU0 &a ,th#de TAddU de &a %&asse de (ase est $ti&ise '#$r +aire &'aB#$t.
Une 'r#'rit inde/e est %re 4
' un indexeur
Default Public Shadows Property Index(ByVal i As Integer) As personne
Get
Return CType(MyBase.Item(i), personne)
End Get
Set(ByVal Value As personne)
MyBase.Item(i) = Value
End Set
End Property
I& e/iste dB. $ne 'r#'rit 'ar d+a$t a''e&e TIte,U dans &a %&asse de (ase ave% &a ,*,e signat$re. A$ssi est-#n #(&ig d'$ti&iser &e
,#t %& TShad#2sU '#$r indi-$er -$e &a n#$ve&&e 'r#'rit inde/e TInde/U va D%a%herD %e&&e de &a %&asse de (ase TIte,U. ;n n#tera
-$e %e%i est vrai ,*,e si &es de$/ 'r#'rits ne '#rtent 'as &e ,*,e n#,. La 'r#'rit TInde/U 'er,et de r+ren%er &a 'ers#nne nY
i de &a &iste. E&&e s'a''$ie s$r &a 'r#'rit TIte,U de &a %&asse de (ase '#$r av#ir a%%:s . &'&,ent nY i de &'#(Bet TArraAListU s#$s-
Ba%ent. Des %hange,ents de tA'e s#nt #'rs '#$r tenir %#,'te -$e &a 'r#'rit TIte,U travai&&e ave% des &,ents de tA'e T;(Be%tU
a&#rs -$e &a 'r#'rit TInde/U travai&&e ave% des &,ents de tA'e T'ers#nneU.
En+in0 n#$s red+iniss#ns <;verrides= &a ,th#de TT#StringU de &a %&asse TArraAListU 4
' toString
Public Overrides Function ToString() As String
' rend (l1, l2, ..., ln)
Dim liste As String = "("
Dim i As Integer
' on parcourt le tableau dynamique
For i = 0 To (Count - 2)
liste += "[" + Me(i).ToString + "]" + ","
Next i 'for
' dernier lment
If Count <> 0 Then
liste += "[" + Me(i).ToString + "]"
End If
liste += ")"
Return liste
End Function
5ette ,th#de rend $ne %haCne de %ara%t:res de &a +#r,e D<eF0e0...0en=D #> ei s#nt &es &,ents de &a &iste. ;n re,ar-$era &a
n#tati#n TMe<i=U -$i dsigne &'&,ent nY i de &'#(Bet %#$rant TMeU. 5'est &a 'r#'rit inde/e 'ar d+a$t -$i est $ti&ise. Ainsi TMe<i=U
est -$iva&ent . TMe.Inde/<i=U.
Le %#de de &a %&asse est '&a% dans &e +i%hier T&st'ers#nnes.v(U et %#,'i& 4
dos>dir
11/03/2004 18:26 3 584 enseignant.dll
12/03/2004 15:45 970 lstpersonnes2.vb
11/03/2004 18:26 4 096 personne.dll
dos>vbc /r:personne.dll /r:enseignant.dll /t:library lstpersonnes2.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
5&asses0 Str$%t$res0 Inter+a%es
K!
dos>dir
11/03/2004 18:26 3 584 enseignant.dll
12/03/2004 15:50 3 584 lstpersonnes2.dll
12/03/2004 15:45 970 lstpersonnes2.vb
11/03/2004 18:26 4 096 personne.dll
Un 'r#gra,,e de test est %#nstr$it 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Imports System.Collections
Module test
Sub Main()
' cration d'une liste vide de personnes
Dim liste As listeDePersonnes = New listeDePersonnes
' cration de personnes
Dim p1 As personne = New personne("paul", "chenou", 31)
Dim p2 As personne = New personne("nicole", "chenou", 11)
Dim e1 As enseignant = New enseignant("jacques", "sileau", 33, 61)
' remplissage de la liste
liste.Add(p1)
liste.Add(p2)
liste.Add(e1)
' affichage de la liste
Console.Out.WriteLine(liste.ToString)
' ajout d'un objet diffrent de personne
Try
liste.Add(4)
Catch e As Exception
Console.Error.WriteLine(e.Message)
End Try
End Sub
End Module
I& est %#,'i& 4
dos>vbc /r:personne.dll /r:enseignant.dll /r:lstpersonnes2.dll test.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir
11/03/2004 18:26 3 584 enseignant.dll
12/03/2004 15:50 3 584 lstpersonnes2.dll
12/03/2004 15:45 970 lstpersonnes2.vb
11/03/2004 18:26 4 096 personne.dll
12/03/2004 15:50 3 584 test.exe
12/03/2004 15:49 623 test.vb
'$is e/%$t 4
dos>test
Construction personne(string, string, int)
Construction personne(string, string, int)
Construction personne(string, string, int)
Construction enseignant(string,string,int,int)
([personne(paul,chenou,31)],[personne(nicole,chenou,11)],[enseignant(personne(jacques,sileau,33),61)])
L'objet ajout (4) n'est pas une personne
;n '#$rrait v#$&#ir %rire
dim p as personne=l("nom")
#> & serait de tA'e T&isteDePers#nnesU. I%i0 #n ve$t inde/er &a &iste & n#n '&$s 'ar $n nY d'&,ent ,ais 'ar $n n#, de 'ers#nne.
P#$r %e&a #n d+init $ne n#$ve&&e 'r#'rit inde/e 'ar d+a$t 4
' un autre indeeur
Default Public Shadows ReadOnly Property Item(ByVal N As String) As Integer
Get
' on recherche la personne de nom 4
Dim i As Integer
For i = 0 To Count - 1
If CType(Me(i), personne).nom = N Then
5&asses0 Str$%t$res0 Inter+a%es
KF
Return i
End If
Next i
Return -1
End Get
End Property
La 're,i:re &igne
Default Public Shadows ReadOnly Property Index(ByVal N As String) As Integer
indi-$e -$'#n %re de n#$vea$ $ne 'r#'rit inde/e 'ar d+a$t. T#$tes &es 'r#'rits 'ar d+a$t d#ivent '#rter &e ,e,e n#,0 i%i
TInde/U. La n#$ve&&e 'r#'rit TInde/U inde/e &a %&asse listeDe-ersonnes 'ar $ne %haCne de %ara%t:res N. Le rs$&tat de
listeDe-ersonnes)@+ est $n entier. 5et entier sera &a '#siti#n dans &a &iste0 de &a 'ers#nne '#rtant &e n#, N #$ -F si %ette 'ers#nne
n'est 'as dans &a &iste. ;n ne d+init -$e &a 'r#'rit get interdisant ainsi &'%rit$re listeDe-ersonnes <&nom&+D!aleur -$i a$rait n%essit &a
d+initi#n de &a 'r#'rit set. D'#> &e ,#t %& TRead;n&AU. Le ,#t %& TShad#2sU est n%essaire '#$r %a%her &a 'r#'rit 'ar d+a$t de
&a %&asse de (ase <(ien -$'e&&e n'ait 'as &a ,*,e signat$re=.
Dans &e %#r's d$ get0 #n 'ar%#$rt &a &iste des 'ers#nnes . &a re%her%he d$ n#, N 'ass en 'ara,:tre. Si #n &e tr#$ve en '#siti#n i0
#n renv#ie i sin#n #n renv#ie -F.
Un n#$vea$ 'r#gra,,e de test '#$rrait *tre &e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' pg de test
Module test
Sub Main()
' une liste de personnes
Dim l As New listeDePersonnes
' ajout de personnes
l.Add(New personne("jean", "dumornet", 10))
l.Add(New personne("pauline", "duchemin", 12))
' affichage
Console.Out.WriteLine(("l=" + l.ToString))
l.Add(New personne("jacques", "tartifume", 27))
Console.Out.WriteLine(("l=" + l.ToString))
' changement lment 1
l(1) = New personne("sylvie", "cachan", 5)
' affichage lment 1
Console.Out.WriteLine(("l[1]=" + l(1).ToString))
' affichage liste l
Console.Out.WriteLine(("l=" + l.ToString))
' recherche de personnes
Dim noms() As String = New [String]() {"cachan", "inconnu"}
Dim i As Integer
For i = 0 To noms.Length - 1
Dim inom As Integer = l(noms(i))
If inom <> -1 Then
Console.Out.WriteLine(("personne(" & noms(i) & ")=" & l(inom).ToString))
Else
Console.Out.WriteLine(("personne(" + noms(i) + ") n'existe pas"))
End If
Next i
End Sub
End Module
L'e/%$ti#n d#nne &es rs$&tats s$ivants 4
personne(string, string, int)
Construction personne(string, string, int)
l=([personne(jean,dumornet,10)],[personne(pauline,duchemin,12)])
Construction personne(string, string, int)
l=([personne(jean,dumornet,10)],[personne(pauline,duchemin,12)],[personne(jacques,tartifume,27)])
Construction personne(string, string, int)
l[1]=personne(sylvie,cachan,5)
l=([personne(jean,dumornet,10)],[personne(sylvie,cachan,5)],[personne(jacques,tartifume,27)])
personne(cachan)=personne(sylvie,cachan,5)
personne(inconnu) n'existe pas
5&asses0 Str$%t$res0 Inter+a%es
K
." Les str$%t$res
La str$%t$re VB.NET est dire%te,ent iss$e de &a str$%t$re d$ &angage 5 et est tr:s 'r#%he de &a %&asse. Une str$%t$re est d+inie
%#,,e s$it 4
Structure spersonne
' attributs
...
' proprits
...
' constructeurs
...
' mthodes
End Structure
I& A a0 ,a&gr $ne si,i&it$de de d%&arati#n0 des di++ren%es i,'#rtantes entre classe et structure. La n#ti#n d'hritage n'e/iste 'ar
e/e,'&e 'as ave% &es str$%t$res. Si #n %rit $ne %&asse -$i ne d#it 'as *tre drive0 -$e&&es s#nt &es di++ren%es entre str$%t$re et
%&asse -$i v#nt n#$s aider . %h#isir entre &es de$/ X Aid#ns-n#$s de &'e/e,'&e s$ivant '#$r &e d%#$vrir 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' structure spersonne
Structure spersonne
Public nom As String
Public age As Integer
End Structure
' classe cpersonne
Class cpersonne
Public nom As String
Public age As Integer
End Class
' une module de test
Public Module test
Sub Main()
' une spersonne p1
Dim sp1 As spersonne
sp1.nom = "paul"
sp1.age = 10
Console.Out.WriteLine(("sp1=spersonne(" & sp1.nom & "," & sp1.age & ")"))
' une spersonne p2
Dim sp2 As spersonne = sp1
Console.Out.WriteLine(("sp2=spersonne(" & sp2.nom & "," & sp2.age & ")"))
' sp2 est modifi
sp2.nom = "nicole"
sp2.age = 30
' vrification sp1 et sp2
Console.Out.WriteLine(("sp1=cpersonne(" & sp1.nom & "," & sp1.age & ")"))
Console.Out.WriteLine(("sp2=cpersonne(" & sp2.nom & "," & sp2.age & ")"))
' une cpersonne cp1
Dim cp1 As New cpersonne
cp1.nom = "paul"
cp1.age = 10
Console.Out.WriteLine(("cP1=cpersonne(" & cp1.nom & "," & cp1.age & ")"))
' une cpersonne ,2
Dim cp2 As cpersonne = cp1
Console.Out.WriteLine(("cP2=cpersonne(" & cp2.nom & "," & cp2.age & ")"))
' ,2 est modifi
cp2.nom = "nicole"
cp2.age = 30
' vrification ,1 et ,2
Console.Out.WriteLine(("cP1=cpersonne(" & cp1.nom & "," & cp1.age & ")"))
Console.Out.WriteLine(("cP2=cpersonne(" & cp2.nom & "," & cp2.age & ")"))
End Sub
End Module
Si #n e/%$te %e 'r#gra,,e0 #n #(tient &es rs$&tats s$ivants 4
sp1=spersonne(paul,10)
sp2=spersonne(paul,10)
sp1=cpersonne(paul,10)
5&asses0 Str$%t$res0 Inter+a%es
KH
sp2=cpersonne(nicole,30)
cP1=cpersonne(paul,10)
cP2=cpersonne(paul,10)
cP1=cpersonne(nicole,30)
cP2=cpersonne(nicole,30)
L. #> dans &es 'ages 'r%dentes de %e %ha'itre #n $ti&isait $ne %&asse personne0 n#$s $ti&is#ns ,aintenant $ne str$%t$re spersonne 4
' structure spersonne
Structure spersonne
Public nom As String
Public age As Integer
End Structure
La d%&arati#n
Dim sp1 As spersonne
%re $ne str$%t$re <n#,0age= et &a va&e$r de s'F est %ette str$%t$re e&&e-,*,e.
La d%&arati#n
Dim cp1 As New cpersonne
%re $n #(Bet T%'ers#nneU <gr#ss# ,#d# &'-$iva&ent de n#tre str$%t$re= et cp1 est a&#rs &'adresse <&a r+ren%e= de %et #(Bet.
Rs$,#ns
dans &e %as de &a str$%t$re0 &a valeur de s'F est &a str$%t$re e&&e-,*,e
dans &e %as de &a %&asse0 &a valeur de 'F est &'adresse de &'#(Bet %r
Str$%t$re 'F
;(Bet 'F
L#rs-$e dans &e 'r#gra,,e #n %rit
Dim sp2 As spersonne = sp1
$ne n#$ve&&e str$%t$re <n#,0age= est %re et initia&ise ave% &a va&e$r de p1 d#n% &a str$%t$re e&&e-,*,e.
La str$%t$re de s'F est d#n% duplique dans s'. 5'est $ne re%#'ie de va&e$r.
L'instr$%ti#n
Dim cp2 As cpersonne = cp1
agit di++re,,ent. La va&e$r de %'F est re%#'ie dans %'0 ,ais %#,,e %ette va&e$r est en +ait &'adresse de &'#(Bet0 %e&$i-%i n'est 'as
d$'&i-$. I& a si,'&e,ent de$/ r+ren%es s$r &$i 4
5&asses0 Str$%t$res0 Inter+a%es
K"
s'F n#,
age
'F
n#,
age
s'F
'a$&
F!
s'
'a$&
F!
%#ntient
'#inte
s$r
Dans &e %as de &a str$%t$re0 si #n ,#di+ie &a va&e$r de sp2 #n ne ,#di+ie 'as &a va&e$r de sp10 %e -$e ,#ntre &e 'r#gra,,e. Dans &e
%as de &'#(Bet0 si #n ,#di+ie &'#(Bet '#int 'ar cp20 %e&$i '#int 'ar cp1 est ,#di+i '$is-$e %'est &e ,*,e. 5'est %e -$e ,#ntrent
ga&e,ent &es rs$&tats d$ 'r#gra,,e.
;n retiendra d#n% de %es e/'&i%ati#ns -$e 4
&a va&e$r d'$ne varia(&e de tA'e str$%t$re est &a str$%t$re e&&e-,*,e
&a va&e$r d'$ne varia(&e de tA'e #(Bet est &'adresse de &'#(Bet '#int
Une +#is %ette di++ren%e +#nda,enta&e %#,'rise0 &a str$%t$re se ,#ntre tr:s 'r#%he de &a %&asse %#,,e &e ,#ntre &e n#$ve&
e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' structure personne
Structure personne
' attributs
Private _nom As String
Private _age As Integer
' proprits
Public Property nom() As String
Get
Return _nom
End Get
Set(ByVal Value As String)
_nom = value
End Set
End Property
Public Property age() As Integer
Get
Return _age
End Get
Set(ByVal Value As Integer)
_age = value
End Set
End Property
' %onstructeur
Public Sub New(ByVal NOM As String, ByVal AGE As Integer)
_nom = NOM
_age = AGE
End Sub'4e@
' 3!+3A#4B
Public Overrides Function ToString() As String
Return "personne(" & nom & "," & age & ")"
End Function
End Structure
' un module de test
Module test
Sub Main()
' une personne p1
Dim p1 As New personne("paul", 10)
Console.Out.WriteLine(("p1=" & p1.ToString))
' une personne p2
Dim p2 As personne = p1
Console.Out.WriteLine(("p2=" & p2.ToString))
' p2 est modifi
p2.nom = "nicole"
p2.age = 30
' vrification p1 et p2
Console.Out.WriteLine(("p1=" & p1.ToString))
Console.Out.WriteLine(("p2=" & p2.ToString))
End Sub
5&asses0 Str$%t$res0 Inter+a%es
KI
%'F
'a$&
F!
%'
---------`
---------`
End Module
;n #(tient &es rs$&tats d'e/%$ti#n s$ivants 4
p1=personne(paul,10)
p2=personne(paul,10)
p1=personne(paul,10)
p2=personne(nicole,30)
La se$&e n#ta(&e di++ren%e i%i entre str$%t$re et %&asse0 %'est -$'ave% $ne %&asse0 &es #(Bets 'F et ' a$raient e$ &a ,*,e va&e$r . &a
+in d$ 'r#gra,,e0 %e&&e de '.
.I Les inter+a%es
Une inter+a%e est $n ense,(&e de 'r#t#tA'es de ,th#des #$ de 'r#'rits -$i +#r,e $n %#ntrat. Une %&asse -$i d%ide
d'i,'&,enter $ne inter+a%e s'engage . +#$rnir $ne i,'&,entati#n de t#$tes &es ,th#des d+inies dans &'inter+a%e. 5'est &e
%#,'i&ate$r -$i vri+ie %ette i,'&,entati#n. V#i%i 'ar e/e,'&e &a d+initi#n de &'inter+a%e Istats 4
Public Interface Istats
Function moyenne() As Double
Function cartType() As Double
End Interface
T#$te %&asse i,'&,entant %ette inter+a%e sera d%&are %#,,e
public class C
Implements Istats
...
function moyenne() as Double Implements Istats.moyenne
...
end function
function cartType () as Double Implements Istats. cartType
...
end function
end class
Les ,th#des 2moyenne et 2cart%ype devr#nt *tre d+inies dans &a %&asse 5. 5#nsidr#ns &e %#de s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' structure
Public Structure lve
Public _nom As String
Public _note As Double
' constructeur
Public Sub New(ByVal NOM As String, ByVal NOTE As Double)
Me._nom = NOM
Me._note = NOTE
End Sub
End Structure
' classe notes
Public Class notes
' attribut
Protected _matire As String
Protected _lves() As lve
' constructeur
Public Sub New(ByVal MATIERE As String, ByVal ELEVES() As lve)
' mmorisation lves 9 matire
Me._matire = MATIERE
Me._lves = ELEVES
End Sub
' 3o+tring
Public Overrides Function ToString() As String
Dim valeur As String = "matire=" + _matire + ", notes=("
Dim i As Integer
' on concatne toutes les notes
For i = 0 To (_lves.Length - 1) - 1
5&asses0 Str$%t$res0 Inter+a%es
KK
valeur &= "[" & _lves(i)._nom & "," & _lves(i)._note & "],"
Next i
'dernire note
If _lves.Length <> 0 Then
valeur &= "[" & _lves(i)._nom & "," & _lves(i)._note & "]"
End If
valeur += ")"
' fin
Return valeur
End Function
End Class
La %&asse notes rasse,(&e &es n#tes d'$ne %&asse dans $ne ,ati:re 4
Public Class notes
' attribut
Protected _matire As String
Protected _lves() As lve
Les attri($ts s#nt d%&ars protected '#$r *tre a%%essi(&es d'$ne %&asse drive. Le tA'e lK!e est $ne str$%t$re ,,#risant &e n#, de
&'&:ve et sa n#te dans &a ,ati:re 4
Public Structure lve
Public _nom As String
Public _note As Double
' constructeur
Public Sub New(ByVal NOM As String, ByVal NOTE As Double)
Me._nom = NOM
Me._note = NOTE
End Sub
End Structure
N#$s d%id#ns de driver %ette %&asse notes dans $ne %&asse notesStats -$i a$rait de$/ attri($ts s$''&,entaires0 &a ,#Aenne et &'%art-
tA'e des n#tes 4
Public Class notesStats
Inherits notes
Implements Istats
' attributs
Private _moyenne As Double
Private _cartType As Double
La %&asse notesStats i,'&,ente &'inter+a%e Istats s$ivante 4
Public Interface Istats
Function moyenne() As Double
Function cartType() As Double
End Interface
5e&a signi+ie -$e &a %&asse notesStats d#it av#ir de$/ ,th#des a''e&es moyenne et cart%ype ave% &a signat$re indi-$e dans &'inter+a%e
Istats. La %&asse notesStats est &a s$ivante 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Public Class notesStats
Inherits notes
Implements Istats
' attributs
Private _moyenne As Double
Private _cartType As Double
' constructeur
Public Sub New(ByVal MATIERE As String, ByVal ELEVES() As lve)
MyBase.New(MATIERE, ELEVES)
' calcul mo(enne des notes
Dim somme As Double = 0
Dim i As Integer
For i = 0 To ELEVES.Length - 1
somme += ELEVES(i)._note
Next i
5&asses0 Str$%t$res0 Inter+a%es
KO
If ELEVES.Length <> 0 Then
_moyenne = somme / ELEVES.Length
Else
_moyenne = -1
End If
' cart-t(pe
Dim carrs As Double = 0
For i = 0 To ELEVES.Length - 1
carrs += Math.Pow(ELEVES(i)._note - _moyenne, 2)
Next i
If ELEVES.Length <> 0 Then
_cartType = Math.Sqrt((carrs / ELEVES.Length))
Else
_cartType = -1
End If
End Sub
' 3o+tring
Public Overrides Function ToString() As String
Return MyBase.ToString() & ",moyenne=" & _moyenne & ",cart-type=" & _cartType
End Function '3o+tring
' mthodes de l'interface #stats
Public Function moyenne() As Double Implements Istats.moyenne
' rend la mo(enne des notes
Return _moyenne
End Function
Public Function cartType() As Double Implements Istats.cartType
' rend l'cart-t(pe
Return _cartType
End Function
End Class
La ,#Aenne $moyenne et &'%art-tA'e $ecart%ype s#nt %a&%$&s d:s &a %#nstr$%ti#n de &'#(Bet. A$ssi &es ,th#des moyenne et cart%ype
n'#nt-e&&es -$'. rendre &a va&e$r des attri($ts $moyenne et $ecart%ype. Les de$/ ,th#des rendent -F si &e ta(&ea$ des &:ves est vide.
La %&asse de test s$ivante 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test
Sub Main()
' $$s lves 9 notes
Dim ELEVES() As lve = {New lve("paul", 14), New lve("nicole", 16), New lve("jacques", 18)}
' $u'on enregistre dans un objet notes
Dim anglais As New notes("anglais", ELEVES)
' et $u'on affiche
Console.Out.WriteLine((anglais.ToString))
' idem avec mo(enne et cart-t(pe
anglais = New notesStats("anglais", ELEVES)
Console.Out.WriteLine((anglais.ToString))
End Sub
End Module
d#nne &es rs$&tats 4
matire=anglais, notes=([paul,14],[nicole,16],[jacques,18])
matire=anglais, notes=([paul,14],[nicole,16],[jacques,18]),moyenne=16,cart-type=1,63299316185545
La %&asse notesStats a$rait tr:s (ien '$ i,'&,enter &es ,th#des moyenne et cart%ype '#$r e&&e-,*,e sans indi-$er -$'e&&e
i,'&,entait &'inter+a%e Istats. f$e& est &'intr*t des inter+a%es X 5'est &e s$ivant 4 $ne +#n%ti#n 'e$t ad,ettre '#$r 'ara,:tre +#r,e&
$ne d#nne aAant &e tA'e d'$ne inter+a%e I. T#$t #(Bet d'$ne %&asse 5 i,'&,entant &'inter+a%e I '#$rra a&#rs *tre 'ara,:tre e++e%ti+
de %ette +#n%ti#n. 5#nsidr#ns &'e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' une interface #eemple
5&asses0 Str$%t$res0 Inter+a%es
KE
Public Interface Iexemple
Function ajouter(ByVal i As Integer, ByVal j As Integer) As Integer
Function soustraire(ByVal i As Integer, ByVal j As Integer) As Integer
End Interface
' une 1re classe
Public Class classe1
Implements Iexemple
Public Function ajouter(ByVal a As Integer, ByVal b As Integer) As Integer Implements Iexemple.ajouter
Return a + b + 10
End Function
Public Function soustraire(ByVal a As Integer, ByVal b As Integer) As Integer Implements
Iexemple.soustraire
Return a - b + 20
End Function
End Class
'une 2ime classe
Public Class classe2
Implements Iexemple
Public Function ajouter(ByVal a As Integer, ByVal b As Integer) As Integer Implements Iexemple.ajouter
Return a + b + 100
End Function
Public Function soustraire(ByVal a As Integer, ByVal b As Integer) As Integer Implements
Iexemple.soustraire
Return a - b + 200
End Function
End Class
L'inter+a%e Iexemple d+init de$/ ,th#des a,outer et soustraire. Les %&asses classe1 et classe2 i,'&,entent %ette inter+a%e. ;n
re,ar-$era -$e %es %&asses ne +#nt rien d'a$tre0 %e%i 'ar s#$%i de si,'&i+i%ati#n de &'e/e,'&e. Maintenant %#nsidr#ns &'e/e,'&e
s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
' classe de test
Module test
'calculer
Sub calculer(ByVal i As Integer, ByVal j As Integer, ByVal inter As Iexemple)
Console.Out.WriteLine(inter.ajouter(i, j))
Console.Out.WriteLine(inter.soustraire(i, j))
End Sub
' la fonction ;ain
Sub Main()
' cration de deu objets classe1 et classe2
Dim c1 As New classe1
Dim c2 As New classe2
' appels de la fonction stati$ue calculer
calculer(4, 3, c1)
calculer(14, 13, c2)
End Sub
End Module
La +#n%ti#n calculer ad,et '#$r 'ara,:tre $n &,ent de tA'e Iexemple. E&&e '#$rra d#n% re%ev#ir '#$r %e 'ara,:tre a$ssi (ien $n
#(Bet de tA'e classe1 -$e de tA'e classe2. 5'est %e -$i est +ait dans &a 'r#%d$re :ain ave% &es rs$&tats s$ivants 4
17
21
127
201
;n v#it d#n% -$'#n a &. $ne 'r#'rit 'r#%he d$ '#&A,#r'his,e v$ '#$r &es %&asses. Si $n ense,(&e de %&asses =i n#n &ies entre-
e&&es 'ar hritage <d#n% #n ne 'e$t $ti&iser &e '#&A,#r'his,e de &'hritage= 'rsente $n ense,(&e de ,th#des de ,*,e signat$re0 i&
'e$t *tre intressant de regr#$'er %es ,th#des dans $ne inter+a%e I d#nt hriteraient t#$tes &es %&asses %#n%ernes. Des instan%es
de %es %&asses =i 'e$vent a&#rs *tre $ti&ises %#,,e 'ara,:tres de +#n%ti#ns ad,ettant $n 'ara,:tre de tA'e I0 %.a.d. des +#n%ti#ns
n'$ti&isant -$e &es ,th#des des #(Bets =i d+inies dans &'inter+a%e I et n#n &es attri($ts et ,th#des 'arti%$&iers des di++rentes
%&asses =i. N#t#ns en+in -$e &'hritage d'inter+a%es 'e$t *tre ,$&ti'&e0 %.a.d. -$'#n 'e$t %rire
5&asses0 Str$%t$res0 Inter+a%es
KL
Public Class classe
Implements I1,I2,...
#> &es I
B
s#nt des inter+a%es.
.K Les es'a%es de n#,s
P#$r %rire $ne &igne . &'%ran0 n#$s $ti&is#ns &'instr$%ti#n
Console.Out.WriteLine(...)
Si n#$s regard#ns &a d+initi#n de &a %&asse (onsole
4amespaceC System
/ssembl(C Mscorlib (in Mscorlib.dll)
#n d%#$vre -$'e&&e +ait 'artie de &'es'a%e de n#,s System. 5e&a signi+ie -$e &a %&asse (onsole devrait *tre dsigne 'ar System.(onsole et
#n devrait en +ait %rire 4
System.Console.Out.WriteLine(...)
;n vite %e&a en $ti&isant $ne %&a$se imports 4
imports System
...
Console.Out.WriteLine(...)
;n dit -$'#n i+porte &'es'a%e de n#,s System ave% &a %&a$se imports. L#rs-$e &e %#,'i&ate$r va ren%#ntrer &e n#, d'$ne %&asse <i%i
(onsole= i& va %her%her . &a tr#$ver dans &es di++rents es'a%es de n#,s i,'#rts 'ar &es %&a$ses imports. I%i i& tr#$vera &a %&asse (onsole
dans &'es'a%e de n#,s System. N#t#ns ,aintenant &a se%#nde in+#r,ati#n atta%he . &a %&asse (onsole 4
/ssembl(C Mscorlib (in Mscorlib.dll)
5ette &igne indi-$e dans -$e&&e Dasse,(&ageD se tr#$ve &a d+initi#n de &a %&asse (onsole. L#rs-$'#n %#,'i&e en-deh#rs de Vis$a&
St$di#.NET et -$'#n d#it d#nner &es r+ren%es des di++rentes dll %#ntenant &es %&asses -$e &'#n d#it $ti&iser %ette in+#r,ati#n 'e$t
s'avrer $ti&e. ;n ra''e&&e -$e '#$r r+ren%er &es dll n%essaires . &a %#,'i&ati#n d'$ne %&asse0 #n %rit 4
vbc /r:fic1.dll /r:fic2.dll ... prog.vb
L#rs-$'#n %re $ne %&asse0 #n 'e$t &a %rer . &'intrie$r d'$n es'a%e de n#,s. Le ($t de %es es'a%es de n#,s est d'viter &es %#n+&its
de n#,s entre %&asses &#rs-$e %e&&es-%i s#nt vend$es 'ar e/e,'&e. 5#nsidr#ns de$/ entre'rises EF et E distri($ant des %&asses
e,'a-$etes res'e%tive,ent dans &es dll0 71.dll et 72.dll. S#it $n %&ient 5 -$i a%h:te %es de$/ ense,(&es de %&asses dans &es-$e&&es
&es de$/ entre'rises #nt d+ini t#$tes de$/ $ne %&asse personne. Le %&ient 5 %#,'i&e $n 'r#gra,,e de &a +a@#n s$ivante 4
vbc /r:E1.dll /r:E2.dll prog.vb
Si &e s#$r%e prog.!" $ti&ise &a %&asse personne0 &e %#,'i&ate$r ne sa$ra 'as s'i& d#it 'rendre &a %&asse personne de 71.dll #$ %e&&e de 72.dll. I&
signa&era $ne erre$r. Si &'entre'rise EF 'rend s#in de %rer ses %&asses dans $n es'a%e de n#,s a''e& EF et &'entre'rise E dans $n
es'a%e de n#,s a''e& E0 &es de$/ %&asses personne s'a''e&&er#nt a&#rs 71.personne et 72.personne. Le %&ient devra e,'&#Aer dans ses
%&asses s#it 71.personne0 s#it 72.personne ,ais 'as personne. L'es'a%e de n#,s 'er,et de &ever &'a,(ig$gt. P#$r %rer $ne %&asse dans
$n es'a%e de n#,s0 #n %rit 4
Namespace istia.st
Public Class personne
' dfinition de la classe
...
end class
end namespace
P#$r &'e/e,'&e0 %r#ns dans $n es'a%e de n#,s n#tre %&asse personne t$die 'r%de,,ent. N#$s %h#isir#ns istia.st %#,,e es'a%e
de n#,s. La %&asse personne devient 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
5&asses0 Str$%t$res0 Inter+a%es
O!
' cration de l'espace de nom istia?st
Namespace istia.st
Public Class personne
' attributs
Private prenom As String
Private nom As String
Private age As Integer
' mthode
Public Sub initialise(ByVal P As String, ByVal N As String, ByVal age As Integer)
Me.prenom = P
Me.nom = N
Me.age = age
End Sub
' mthode
Public Sub identifie()
Console.Out.WriteLine((prenom & "," & nom & "," & age))
End Sub
End Class
End Namespace
5ette %&asse est %#,'i&e dans personne.dll 4
dos>dir
11/03/2004 18:27 610 personne.vb
dos>vbc /t:library personne.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir
12/03/2004 18:06 3 584 personne.dll
11/03/2004 18:27 610 personne.vb
Maintenant $ti&is#ns &a %&asse personne dans $ne %&asse de test 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports istia.st
' pg test
Public Module test
Sub Main()
Dim p1 As New personne
p1.initialise("Jean", "Dupont", 30)
p1.identifie()
End Sub
End Module
P#$r viter d'%rire
Dim p1 As New istia.st.personne
n#$s av#ns i,'#rt &'es'a%e de n#,s istia.st ave% $ne %&a$se imports 4
Imports istia.st
Maintenant %#,'i&#ns &e 'r#gra,,e de test 4
dos>dir
12/03/2004 18:06 3 584 personne.dll
11/03/2004 18:27 610 personne.vb
12/03/2004 18:05 254 test.vb
dos>vbc /r:personne.dll test.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir
12/03/2004 18:06 3 584 personne.dll
11/03/2004 18:27 610 personne.vb
5&asses0 Str$%t$res0 Inter+a%es
OF
12/03/2004 18:08 3 072 test.exe
12/03/2004 18:05 254 test.vb
5e&a 'r#d$it $n +i%hier test.exe -$i e/%$t d#nne &es rs$&tats s$ivants 4
Jean,Dupont,30
.O L'e/e,'&e IMP;TS
;n re'rend &e %a&%$& de &'i,'[t dB. t$di dans &e %ha'itre 'r%dent et #n &e traite en $ti&isant $ne %&asse. Ra''e&#ns &e 'r#(&:,e 4
;n se '&a%e dans &e %as si,'&i+i d'$n %#ntri($a(&e n'aAant -$e s#n se$& sa&aire . d%&arer 4
#n %a&%$&e &e n#,(re de 'arts d$ sa&ari nbParts=nbEnfantsD% E! s'i& n'est 'as ,ari0 nbEnfantsD%E% s'i& est ,ari0 #>
n"7n#ants est s#n n#,(re d'en+ants.
s'i& a a$ ,#ins tr#is en+ants0 i& a $ne de,ie 'art de '&$s
#n %a&%$&e s#n reven$ i,'#sa(&e @=(.F%G. #> S est s#n sa&aire ann$e&
#n %a&%$&e s#n %#e++i%ient +a,i&ia& HF=@DnbParts
#n %a&%$&e s#n i,'[t I. 5#nsidr#ns &e ta(&ea$ s$ivant 4
1252>.> > >
1319> >.>. 531
1.5'> >.1 129>..
2'7'> >.1. 2>72..
3181> >.2 33>9..
3997> >.2. '9>>
'835> >.3 5898..
..79> >.3. 9315..
9297> >.' 121>5
12785> >.'. 157.'..
1.12.> >..> 231'7..
172>'> >... 3>71>
19.>>> >.5> 39312
> >.5. '9>52
5ha-$e &igne a H %ha,'s. P#$r %a&%$&er &'i,'[t I0 #n re%her%he &a 're,i:re &igne #> ABCDchamp1. Par e/e,'&e0 si fJVH!!! #n
tr#$vera &a &igne
%"F"( (.!# %(F%.#
L'i,'[t I est a&#rs ga& . (.!#G@ I %(F%.#GnbParts. Si fJ est te& -$e &a re&ati#n ABCDchamp1 n'est Ba,ais vri+ie0 a&#rs %e s#nt &es
%#e++i%ients de &a derni:re &igne -$i s#nt $ti&iss. I%i 4
! !.KI "L!K
%e -$i d#nne &'i,'[t IV!.KIWR - "L!KWn(Parts.
La %&asse i+pot sera d+inie %#,,e s$it 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Public Class impot
' les donnes ncessaires au calcul de l'imp7t
' proviennent d'une source etrieure
Private limites(), coeffR(), coeffN() As Decimal
' constructeur
Public Sub New(ByVal LIMITES() As Decimal, ByVal COEFFR() As Decimal, ByVal COEFFN() As Decimal)
' on vrifie $ue les = tableau ont la m<me taille
Dim OK As Boolean = LIMITES.Length = COEFFR.Length And LIMITES.Length = COEFFN.Length
If Not OK Then
Throw New Exception("Les 3 tableaux fournis n'ont pas la mme taille(" & LIMITES.Length & "," &
COEFFR.Length & "," & COEFFN.Length & ")")
End If
' c'est bon
Me.limites = LIMITES
Me.coeffR = COEFFR
Me.coeffN = COEFFN
End Sub
5&asses0 Str$%t$res0 Inter+a%es
O
' calcul de l'imp7t
Public Function calculer(ByVal mari As Boolean, ByVal nbEnfants As Integer, ByVal salaire As Long) As
Long
' calcul du nombre de parts
Dim nbParts As Decimal
If mari Then
nbParts = CDec(nbEnfants) / 2 + 2
Else
nbParts = CDec(nbEnfants) / 2 + 1
End If
If nbEnfants >= 3 Then
nbParts += 0.5D
End If
' calcul revenu imposable 9 8uotient familial
Dim revenu As Decimal = 0.72D * salaire
Dim QF As Decimal = revenu / nbParts
' calcul de l'imp7t
limites((limites.Length - 1)) = QF + 1
Dim i As Integer = 0
While QF > limites(i)
i += 1
End While
Return CLng(revenu * coeffR(i) - nbParts * coeffN(i))
End Function
End Class
Un #(Bet i+pJt est %r ave% &es d#nnes 'er,ettant &e %a&%$& de &'i,'[t d'$n %#ntri($a(&e. 5'est &a 'artie sta(&e de &'#(Bet. Une +#is
%et #(Bet %r0 #n 'e$t a''e&er de +a@#n r'te sa ,th#de calculer -$i %a&%$&e &'i,'[t d$ %#ntri($a(&e . 'artir de s#n stat$t
,arita& <,ari #$ n#n=0 s#n n#,(re d'en+ants et s#n sa&aire ann$e&. Un 'r#gra,,e de test '#$rait *tre &e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports Microsoft.VisualBasic
Module test
Sub Main()
' programme interactif de calcul d'imp7t
' l'utilisateur tape trois donnes au clavier C mari nb"nfants salaire
' le programme affiche alors l'imp7t pa(er
Const syntaxe As String = "syntaxe : mari nbEnfants salaire" + ControlChars.Lf + "mari : o pour
mari, n pour non mari" + ControlChars.Lf + "nbEnfants : nombre d'enfants" + ControlChars.Lf + "salaire
: salaire annuel en F"
' tableau de donnes ncessaires au calcul de l'imp7t
Dim limites() As Decimal = {12620D, 13190D, 15640D, 24740D, 31810D, 39970D, 48360D, 55790D, 92970D,
127860D, 151250D, 172040D, 195000D, 0D}
Dim coeffR() As Decimal = {0D, 0.05D, 0.1D, 0.15D, 0.2D, 0.25D, 0.3D, 0.35D, 0.4D, 0.45D, 0.5D,
0.55D, 0.6D, 0.65D}
Dim coeffN() As Decimal = {0D, 631D, 1290.5D, 2072.5D, 3309.5D, 4900D, 6898.5D, 9316.5D, 12106D,
16754.5D, 23147.5D, 30710D, 39312D, 49062D}
' cration d'un objet imp7t
Dim objImpt As impot = Nothing
Try
objImpt = New impot(limites, coeffR, coeffN)
Catch ex As Exception
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
Environment.Exit(1)
End Try
' boucle infinie
Dim mari As String
Dim nbEnfants As Integer
Dim salaire As Long
While True
' on demande les paramtres du calcul de l'imp7t
Console.Out.Write("Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour
arrter :")
Dim paramtres As String = Console.In.ReadLine().Trim()
' $$ chose faire >
If paramtres Is Nothing OrElse paramtres = "" Then
Exit While
End If
' vrification du nombre d'arguments dans la ligne saisie
Dim erreur As Boolean = False
Dim args As String() = paramtres.Split(Nothing)
Dim nbParamtres As Integer = args.Length
5&asses0 Str$%t$res0 Inter+a%es
OH
If nbParamtres <> 3 Then
Console.Error.WriteLine(syntaxe)
erreur = True
End If
' vrification de la validit des paramtres
If Not erreur Then
' mari
mari = args(0).ToLower()
If mari <> "o" And mari <> "n" Then
erreur = True
End If
' nb"nfants
Try
nbEnfants = Integer.Parse(args(1))
If nbEnfants < 0 Then
Throw New Exception
End If
Catch
erreur = True
End Try
' salaire
Try
salaire = Integer.Parse(args(2))
If salaire < 0 Then
Throw New Exception
End If
Catch
erreur = True
End Try
End If
' si les paramtres sont corrects - on calcule l'imp7t
If Not erreur Then
Console.Out.WriteLine(("impt=" & objImpt.calculer(mari = "o", nbEnfants, salaire) & " F"))
Else
Console.Error.WriteLine(syntaxe)
End If
End While
End Sub
End Module
V#i%i $n e/e,'&e d'e/%$ti#n d$ 'r#gra,,e 'r%dent 4
dir>dir
12/03/2004 18:20 1 483 impots.vb
12/03/2004 18:21 2 805 test.vb
dos>vbc /t:library impots.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dir>dir
12/03/2004 18:24 4 096 impots.dll
12/03/2004 18:20 1 483 impots.vb
12/03/2004 18:21 2 805 test.vb
dos>vbc /r:impots.dll test.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>dir
12/03/2004 18:24 4 096 impots.dll
12/03/2004 18:20 1 483 impots.vb
12/03/2004 18:26 6 144 test.exe
12/03/2004 18:21 2 805 test.vb
dos>test
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :x x x
syntaxe : mari nbEnfants salaire
mari : o pour mari, n pour non mari
nbEnfants : nombre d'enfants
salaire : salaire annuel en F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :o 2 200000
impt=22504 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :
5&asses0 Str$%t$res0 Inter+a%es
O"
H. 5&asses .NET d'$sage %#$rant
N#$s 'rsent#ns i%i -$e&-$es %&asses de &a '&ate-+#r,e .NET 'rsentant $n intr*t0 ,*,e '#$r $n d($tant. N#$s ,#ntr#ns t#$t
d'a(#rd %#,,ent #(tenir des renseigne,ents s$r &es %entaines de %&asses dis'#ni(&es.
H.F 5her%her de &'aide ave% SDd.NET
H.F.F 2in%v
Si #n a insta&& se$&e,ent &e SDd et 'as Vis$a& St$di#.NET #n '#$rra $ti&iser &e 'r#gra,,e Iinc!.exe sit$ n#r,a&e,ent dans
&'ar(#res%en%e d$ sdR0 'ar e/e,'&e (:L-rogram BilesL:icroso#t Fisual Studio .@7% 2333LSDML!1.1. L#rs-$'#n &an%e %et $ti&itaire0 #n a
&'inter+a%e s$ivante 4
;n ta'e en <F= &e n#, de &a %&asse dsire. 5e&a ra,:ne en <= divers th:,es '#ssi(&es. ;n %h#isit %e&$i -$i %#nvient et #n a &e
rs$&tat en <H=0 i%i &a %&asse Nash%a"le. 5ette ,th#de %#nvient si #n %#nnaCt &e n#, de &a %&asse -$e &'#n %her%he. Si #n ve$t e/'&#rer
&a &iste des '#ssi(i&ts #++ertes 'ar &a '&ate-+#r,e .NET #$ '#$rra $ti&iser &e +i%hier eTML StartNere.htm sit$ &$i a$ssi dire%te,ent
dans &e d#ssier d'insta&&ati#n de SSd.Net0 'ar e/e,'&e (:L-rogram BilesL:icroso#t Fisual Studio .@7% 2333LSDML!1.
E/e,'&es de %&asses .NET OI
F

H
Le &ien .@7% BrameIorO SDM Documentation est %e&$i -$'i& +a$t s$ivre '#$r av#ir $ne v$e d'ense,(&e des %&asses .NET 4
L.0 #n s$ivra &e &ien 2Pi"liothK9ue de classes. ;n A tr#$ve &a &iste de t#$tes &es %&asses de .NET 4
S$iv#ns 'ar e/e,'&e &e &ien System.(ollections. 5et es'a%e de n#,s regr#$'e diverses %&asses i,'&,entant des %#&&e%ti#ns d#nt &a
%&asse Nash%a"le 4
E/e,'&es de %&asses .NET OK
S$iv#ns &e &ien Nash%a"le %i-dess#$s 4
N#$s #(ten#ns &a 'age s$ivante 4
;n re,ar-$era %i-dess#$s0 &a '#siti#n de &a ,ain. E&&e '#inte s$r $n &ien 'er,ettant de 'r%iser &e &angage dsir0 i%i Vis$a& Basi%.
;n A tr#$ve &e 'r#t#tA'e de &a %&asse ainsi -$e des e/e,'&es d'$ti&isati#n. S$iv#ns &e &ien Teashta(&e0 ,e,(resU %i-dess#$s 4
;n #(tient &a des%ri'ti#n %#,'&:te de &a %&asse 4
5ette ,th#de est &a ,ei&&e$re '#$r d%#$vrir &e SDd et ses %&asses. L'#$ti& 1in5V s'av:re $ti&e &#rs-$'#n %#nnaCt dB. $n 'e$ &a
%&asse et -$'#n a #$(&i %ertains de ses ,e,(res. 1in5V 'er,et a&#rs de retr#$ver ra'ide,ent &a %&asse et ses ,e,(res.
E/e,'&es de %&asses .NET OO
H. 5her%her de &'aide s$r &es %&asses ave% VS.NET
N#$s d#nn#ns i%i -$e&-$es indi%ati#ns '#$r tr#$ver de &'aide ave% Vis$a& St$di#.NET
H..F ;'ti#n Aide
Pren#ns &'#'ti#n TXU d$ ,en$.
;n #(tient &a +en*tre s$ivante 4
Dans &a &iste dr#$&ante0 #n 'e$t %h#isir $n +i&tre d'aide. I%i0 #n 'rendra &e +i&tre TVis$a& Basi%U.
De$/ aides s#nt $ti&es 4
&'aide s$r &e &angage VB.NET &$i-,*,e <sAnta/e=
&'aide s$r &es %&asses.NET $ti&isa(&es 'ar &e &angage VB.NET
L'aide a$ &angage VB.NET est a%%essi(&e via TVis$a& St$di#.NETNVis$a& Basi% et Vis$a& 56NRe+eren%eNVis$a& Basi%U 4
;n #(tient &a 'age d'aide s$ivante 4
E/e,'&es de %&asses .NET OE
A 'artir de &.0 &es di++rentes s#$s-r$(ri-$es n#$s 'er,ettent d'av#ir de &'aide s$r di++rents th:,es de VB.NET. ;n 'r*tera
attenti#n a$/ t$t#rie&s de VB.NET 4
P#$r av#ir a%%:s a$/ di++rentes %&asses de &a '&ate-+#r,e .NET0 #n %h#isira &'aide TVis$a& St$di#.NETN.NET Jra,e2#rRU.
;n s'intressera n#ta,,ent . &a r$(ri-$e TR+ren%eNBi(&i#th:-$e de %&assesU 4
E/e,'&es de %&asses .NET OL
S$''#s#ns -$'#n s'intresse . &a %&asse TArraAListU. E&&e se tr#$ve dans &'es'a%e de n#,s TSAste,.5#&&e%ti#nsU. I& +a$t &e sav#ir sin#n
#n 'r+:rera &a ,th#de de re%her%he e/'#se %i-a'r:s. ;n #(tient &'aide s$ivante 4
Le &ien TArraAList0 %&asseU d#nne $ne v$e d'ense,(&e de &a %&asse 4
5e tA'e de 'age e/iste '#$r t#$tes &es %&asses. E&&e d#nne $n rs$, de &a %&asse ave% des e/e,'&es. P#$r $ne des%ri'ti#n des
,e,(res de &a %&asse0 #n s$ivra &e &ien TArraAList0 ,e,(resU 4
H.. AideNInde/
L'#'ti#n TAideNinde/U 'er,et de %her%her $ne aide '&$s %i(&e -$e &'aide 'r%dente. I& s$++it de ta'er &e ,#t %& %her%h 4
E/e,'&es de %&asses .NET E!
L'avantage de %ette ,th#de 'ar ra''#rt . &a 'r%dente est -$'#n n'a 'as (es#in de sav#ir #> se tr#$ve %e -$'#n %her%he dans &e
sAst:,e d'aide. 5'est 'r#(a(&e,ent &a ,th#de . 'r+rer &#rs-$'#n +ait $ne re%her%he %i(&0 &'a$tre ,th#de tant '&$s a''r#'rie .
$ne d%#$verte de t#$t %e -$e 'r#'#se &'aide.
H.H La %&asse String
La %&asse .tring 'rsente de n#,(re$ses 'r#'rits et ,th#des. En v#i%i -$e&-$es-$nes 4
Public ReadOnly Property Length As Integer
n#,(re de %ara%t:res de &a %haCne
Public Default ReadOnly Property Chars(ByVal index
As Integer) As Char
'r#'rit inde/e 'ar d+a$t. TStringU.5hars<i= est &e %ara%t:re nY i
de &a %haCne
Public Function EndsWith(ByVal value As String) As
Boolean
rend vrai si &a %haCne se ter,ine 'ar va&$e
Public Function StartsWith(ByVal value As String) As
Boolean
rend vrai si &a %haCne %#,,en%e 'ar va&$e
Overloads Public Function Equals(ByVal value As
String) As Boolean
rend vrai si &a %haCne est ga&e . va&$e
Overloads Public Function IndexOf(ByVal value As
String) As Integer
rend &a 're,i:re '#siti#n dans &a %haCne de &a %haCne va&$e - &a
re%her%he %#,,en%e . 'artir d$ %ara%t:re nY !
Overloads Public Function IndexOf(ByVal value As
String,ByVal startIndex As Integer) As Integer
rend &a 're,i:re '#siti#n dans &a %haCne de &a %haCne va&$e - &a
re%her%he %#,,en%e . 'artir d$ %ara%t:re nY startInde/
Overloads Public Shared Function Join(ByVal
separator As String,ByVal value() As String) As
String
,th#de de %&asse - rend $ne %haCne de %ara%t:res0 rs$&tat de &a
%#n%atnati#n des va&e$rs d$ ta(&ea$ va&$e ave% &e s'arate$r
se'arat#r
Overloads Public Function Replace(ByVal oldChar As
Char,ByVal newChar As Char) As String
rend $ne %haCne %#'ie de &a %haCne %#$rante #> &e %ara%t:re
#&d5har a t re,'&a% 'ar &e %ara%t:re ne25har
Overloads Public Function Split(ByVal ParamArray
separator() As Char) As String()
&a %haCne est v$e %#,,e $ne s$ite de %ha,'s s'ars 'ar &es
%ara%t:res 'rsents dans &e ta(&ea$ se'arat#r. Le rs$&tat est &e
ta(&ea$ de %es %ha,'s
Overloads Public Function Substring(ByVal startIndex
As Integer,ByVal length As Integer) As String
s#$s-%haCne de &a %haCne %#$rante %#,,en@ant . &a '#siti#n
startInde/ et aAant &ength %ara%t:res
Overloads Public Function ToLower() As String
rend &a %haCne %#$rante en ,in$s%$&es
Overloads Public Function ToUpper() As String
rend &a %haCne %#$rante en ,aB$s%$&es
Overloads Public Function Trim() As String
rend &a %haCne %#$rante d(arrasse de ses es'a%es de d($t et
+in
Une %haCne 5 'e$t *tre %#nsidre %#,,e $n ta(&ea$ de %ara%t:res. Ainsi
=.=-ars0i1 est &e %ara%t:re i de 5
=.5engt- est &e n#,(re de %ara%t:res de 5
5#nsidr#ns &'e/e,'&e s$ivant 4
E/e,'&es de %&asses .NET EF
' options
Option Strict On
Option Explicit On
' espaces de noms
I,'#rts SAste,
Module test
Sub Main()
Dim uneChaine As String = "l'oiseau vole au-dessus des nuages"
affiche("uneChaine=" + uneChaine)
affiche("uneChaine.Length=" & uneChaine.Length)
affiche("chaine[10]=" + uneChaine.Chars(10))
affiche("uneChaine.IndexOf(""vole"")=" & uneChaine.IndexOf("vole"))
affiche("uneChaine.IndexOf(""x"")=" & uneChaine.IndexOf("x"))
affiche("uneChaine.LastIndexOf('a')=" & uneChaine.LastIndexOf("a"c))
affiche("uneChaine.LastIndexOf('x')=" & uneChaine.LastIndexOf("x"c))
affiche("uneChaine.Substring(4,7)=" + uneChaine.Substring(4, 7))
affiche("uneChaine.ToUpper()=" + uneChaine.ToUpper())
affiche("uneChaine.ToLower()=" + uneChaine.ToLower())
affiche("uneChaine.Replace('a','A')=" + uneChaine.Replace("a"c, "A"c))
Dim champs As String() = uneChaine.Split(Nothing)
Dim i As Integer
For i = 0 To champs.Length - 1
affiche("champs[" & i & "]=[" & champs(i) & "]")
Next i
affiche("Join("":"",champs)=" + System.String.Join(":", champs))
affiche("("" abc "").Trim()=[" + " abc ".Trim() + "]")
End Sub
' affiche
Sub affiche(ByVal msg As [String])
' affiche msg
Console.Out.WriteLine(msg)
End Sub
End M#d$&e
L'e/%$ti#n d#nne &es rs$&tats s$ivants 4
dos>vbc string1.vb
dos>string1
uneChaine=l'oiseau vole au-dessus des nuages
uneChaine.Length=34
chaine[10]=o
uneChaine.IndexOf("vole")=9
uneChaine.IndexOf("x")=-1
uneChaine.LastIndexOf('a')=30
uneChaine.LastIndexOf('x')=-1
uneChaine.Substring(4,7)=seau vo
uneChaine.ToUpper()=L'OISEAU VOLE AU-DESSUS DES NUAGES
uneChaine.ToLower()=l'oiseau vole au-dessus des nuages
uneChaine.Replace('a','A')=l'oiseAu vole Au-dessus des nuAges
champs[0]=[l'oiseau]
champs[1]=[vole]
champs[2]=[au-dessus]
champs[3]=[des]
champs[4]=[nuages]
Join(":",champs)=l'oiseau:vole:au-dessus:des:nuages
(" abc ").Trim()=[abc]
5#nsidr#ns $n n#$ve& e/e,'&e 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module string2
Sub Main()
' la ligne anal(ser
Dim ligne As String = "un:deux::trois:"
' les sparateurs de champs
Dim sparateurs() As Char = {":"c}
' split
Dim champs As String() = ligne.Split(sparateurs)
E/e,'&es de %&asses .NET E
Dim i As Integer
For i = 0 To champs.Length - 1
Console.Out.WriteLine(("Champs[" & i & "]=" & champs(i)))
Next i
' join
Console.Out.WriteLine(("join=[" + System.String.Join(":", champs) + "]"))
End Sub
End Module
et &es rs$&tats d'e/%$ti#n 4
Champs[0]=un
Champs[1]=deux
Champs[2]=
Champs[3]=trois
Champs[4]=
join=[un:deux::trois:]
La ,th#de .plit de &a %&asse String 'er,et de ,ettre dans $n ta(&ea$ &es %ha,'s d'$ne %haCne de %ara%t:res. La d+initi#n de &a
,th#de $ti&ise i%i est &a s$ivante 4
Overloads Public Function Split(ByVal ParamArray separator() As Char) As String()
separator
ta(&ea$ de %ara%t:res. 5es %ara%t:res re'rsentent &es %ara%t:res $ti&iss '#$r s'arer &es %ha,'s de &a %haCne de
%ara%t:res. Ainsi si &a %haCne est T%ha,'F0 %ha,'0 %ha,'HU #n '#$rra $ti&iser separatorDneI char)+ Q&*&cR. Si &e
s'arate$r est $ne s$ite d'es'a%es #n $ti&isera separatorDnothing.
rsultat
ta(&ea$ de %haCnes de %ara%t:res #> %ha-$e &,ent est $n %ha,' de &a %haCne.
La ,th#de Koin est $ne ,th#de stati-$e de &a %&asse String 4
Overloads Public Shared Function Join(ByVal separator As String,ByVal value() As String) As String
value
ta(&ea$ de %haCnes de %ara%t:res
separator
$ne %haCne de %ara%t:res -$i servira de s'arate$r de %ha,'s
rsultat
$ne %haCne de %ara%t:res +#r,e de &a %#n%atnati#n des &,ents d$ ta(&ea$ !alue s'ars 'ar &a %haCne separator.
H." La %&asse ArraA
La %&asse :rray i,'&,ente $n ta(&ea$. N#$s $ti&iser#ns dans n#tre e/e,'&e &es 'r#'rits et ,th#des s$ivantes 4
Public ReadOnly Property Length As Integer
'r#'rit - n#,(re d'&,ents d$ ta(&ea$
Overloads Public Shared Function BinarySearch(ByVal
array As Array,ByVal index As Integer,ByVal length
As Integer,ByVal value As Object) As Integer
,th#de de %&asse - rend &a '#siti#n de !alue dans &e ta(&ea$ tri
array - %her%he . 'artir de &a '#siti#n index et ave% length &,ents
Overloads Public Shared Sub Copy(ByVal sourceArray
As Array,ByVal destinationArray As Array,ByVal
length As Integer)
,th#de de %&asse - %#'ie length &,ents de sourceHrray dans
destinationHrray - destinationHrray est %r '#$r &'#%%asi#n
Overloads Public Shared Sub Sort(ByVal array As
Array)
,th#de de %&asse - trie &e ta(&ea$ array - %e&$i d#it %#ntenir $n
tA'e de d#nnes aAant $ne +#n%ti#n d'#rdre 'ar d+a$t <%haCnes0
n#,(res=.
Le 'r#gra,,e s$ivant i&&$stre &'$ti&isati#n de &a %&asse Hrray 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Module test
Sub Main()
' lecture des lments d'un tableau taps au clavier
Dim termin As [Boolean] = False
Dim i As Integer = 0
E/e,'&es de %&asses .NET EH
Dim lments1 As Double() = Nothing
Dim lments2 As Double() = Nothing
Dim lment As Double = 0
Dim rponse As String = Nothing
Dim erreur As [Boolean] = False
While Not termin
' $uestion
Console.Out.Write(("Elment (rel) " & i & " du tableau (rien pour terminer) : "))
' lecture de la rponse
rponse = Console.ReadLine().Trim()
' fin de saisie si chane vide
If rponse.Equals("") Then
Exit While
End If
' vrification saisie
Try
lment = [Double].Parse(rponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' nouveau tableau pour accueillir le nouvel lment
lments2 = New Double(i) {}
' copie ancien tableau vers nouveau tableau
If i <> 0 Then
Array.Copy(lments1, lments2, i)
End If
' nouveau tableau devient ancien tableau
lments1 = lments2
' plus besoin du nouveau tableau
lments2 = Nothing
' insertion nouvel lment
lments1(i) = lment
' un lmt de plus dans le tableau
i += 1
End If
End While
' affichage tableau non tri
System.Console.Out.WriteLine("Tableau non tri")
For i = 0 To lments1.Length - 1
Console.Out.WriteLine(("lments[" & i & "]=" & lments1(i)))
Next i
' tri du tableau
System.Array.Sort(lments1)
' affichage tableau tri
System.Console.Out.WriteLine("Tableau tri")
For i = 0 To lments1.Length - 1
Console.Out.WriteLine(("lments[" & i & "]=" & lments1(i)))
Next i
' Aecherche
While Not termin
' $uestion
Console.Out.Write("Elment cherch (rien pour arrter) : ")
' lecture-vrification rponse
rponse = Console.ReadLine().Trim()
' fini >
If rponse.Equals("") Then
Exit While
End If
' vrification
Try
lment = [Double].Parse(rponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' on cherche l'lment dans le tableau tri
i = System.Array.BinarySearch(lments1, 0, lments1.Length, lment)
' /ffichage rponse
If i >= 0 Then
Console.Out.WriteLine(("Trouv en position " & i))
Else
Console.Out.WriteLine("Pas dans le tableau")
End If
E/e,'&es de %&asses .NET E"
End If
End While
End Sub
End Module
Les rs$&tats %ran s#nt &es s$ivants 4
Elment (rel) 0 du tableau (rien pour terminer) : 10,4
Elment (rel) 1 du tableau (rien pour terminer) : 5,2
Elment (rel) 2 du tableau (rien pour terminer) : 8,7
Elment (rel) 3 du tableau (rien pour terminer) : 3,6
Elment (rel) 4 du tableau (rien pour terminer) :
Tableau non tri
lments[0]=10,4
lments[1]=5,2
lments[2]=8,7
lments[3]=3,6
Tableau tri
lments[0]=3,6
lments[1]=5,2
lments[2]=8,7
lments[3]=10,4
Elment cherch (rien pour arrter) : 8,7
Trouv en position 2
Elment cherch (rien pour arrter) : 11
Pas dans le tableau
Elment cherch (rien pour arrter) : a
Saisie incorrecte, recommencez
Elment cherch (rien pour arrter) :
La 're,i:re 'artie d$ 'r#gra,,e %#nstr$it $n ta(&ea$ . 'artir de d#nnes n$,ri-$es ta'es a$ %&avier. Le ta(&ea$ ne 'e$t *tre
di,ensi#nn . 'ri#ri '$is-$'#n ne %#nnaCt 'as &e n#,(re d'&,ents -$e va ta'er &'$ti&isate$r. ;n travai&&e a&#rs ave% de$/ ta(&ea$/
lments1 et lments2.
' nouveau tableau pour accueillir le nouvel lment
lments2 = New Double(i) {}
' copie ancien tableau vers nouveau tableau
If i <> 0 Then
Array.Copy(lments1, lments2, i)
End If
' nouveau tableau devient ancien tableau
lments1 = lments2
' plus besoin du nouveau tableau
lments2 = Nothing
' insertion nouvel lment
lments1(i) = lment
' un lmt de plus dans le tableau
i += 1
Le ta(&ea$ lments1 %#ntient &es va&e$rs a%t$e&&e,ent saisies. L#rs-$e &'$ti&isate$r aB#$te $ne n#$ve&&e va&e$r0 #n %#nstr$it $n ta(&ea$
lments2 ave% $n &,ent de '&$s -$e lments10 #n %#'ie &e %#nten$ de lments1 dans lments2 <ArraA.5#'A=0 #n +ait D'#interD
lments1 s$r lments2 et en+in #n aB#$te &e n#$ve& &,ent . lments1. 5'est $n 'r#%ess$s %#,'&e/e -$i 'e$t *tre si,'&i+i si a$ &ie$
d'$ti&iser $n ta(&ea$ de tai&&e +i/e <Hrray= #n $ti&ise $n ta(&ea$ de tai&&e varia(&e <Hrray.ist=.
Le ta(&ea$ est tri ave% &a ,th#de :rray..ort. 5ette ,th#de 'e$t *tre a''e&e ave% di++rents 'ara,:tres 'r%isant &es r:g&es de
tri. Sans 'ara,:tres0 %'est i%i $n tri en #rdre %r#issant -$i est +ait 'ar d+a$&t. En+in0 &a ,th#de :rray.Binary.earc- 'er,et de
%her%her $n &,ent dans $n ta(&ea$ tri.
H.I La %&asse ArraAList
La %&asse Hrray.ist 'er,et d'i,'&,enter des ta(&ea$/ de tai&&e varia(&e a$ %#$rs de &'e/%$ti#n d$ 'r#gra,,e0 %e -$e ne 'er,et
'as &a %&asse Hrray 'r%dente. V#i%i -$e&-$es-$nes des 'r#'rits et ,th#des %#$rantes 4
Public Sub New()
%#nstr$it $ne &iste vide
Public Overridable ReadOnly Property Count As
Integer Implements ICollection.Count
n#,(re d'&,ents de &a %#&&e%ti#n
Public Overridable Function Add(ByVal value As
Object) As Integer Implements IList.Add
aB#$te &'#(Bet va&$e . &a +in de &a %#&&e%ti#n
Public Overridable Sub Clear() Implements
IList.Clear
e++a%e &a &iste
E/e,'&es de %&asses .NET EI
Overloads Public Overridable Function IndexOf(ByVal
value As Object) As Integer Implements IList.IndexOf
indi%e de &'#(Bet va&$e dans &a &iste #$ -F s'i& n'e/iste 'as
Overloads Public Overridable Function IndexOf(ByVal
value As Object, ByVal startIndex As Integer) As
Integer
ide, ,ais en %her%hant . 'artir de &'&,ent nY startInde/
Overloads Public Overridable Function
LastIndexOf(ByVal value As Object) As Integer
ide, ,ais rend &'indi%e de &a derni:re #%%$rren%e de va&$e dans
&a &iste
Overloads Public Overridable Function
LastIndexOf(ByVal value As Object, ByVal startIndex
As Integer) As Integer
ide, ,ais en %her%hant . 'artir de &'&,ent nY startInde/
Public Overridable Sub Remove( ByVal obj As Object)
Implements IList.Remove
en&:ve &'#(Bet #(B s'i& e/iste dans &a &iste
Public Overridable Sub RemoveAt(ByVal index As
Integer) Implements IList.RemoveAt
en&:ve &'&,ent inde/ de &a &iste
Overloads Public Overridable Function
BinarySearch(ByVal value As Object) As Integer
rend &a '#siti#n de &'#(Bet va&$e dans &a &iste #$ -F s'i& ne s'A
tr#$ve 'as. La &iste d#it *tre trie
Overloads Public Overridable Sub Sort()
trie &a &iste. 5e&&e-%i d#it %#ntenir des #(Bets aAant $ne re&ati#n
d'#rdre 'rd+inie <%haCnes0 n#,(res=
Overloads Public Overridable Sub Sort(ByVal comparer
As IComparer)
trie &a &iste se&#n &a re&ati#n d'#rdre ta(&ie 'ar &a +#n%ti#n
%#,'arer
Re'ren#ns &'e/e,'&e trait ave% des #(Bets de tA'e Hrray et trait#ns-&e ave% des #(Bets de tA'e Hrray.ist 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Module test
Sub Main()
' lecture des lments d'un tableau taps au clavier
Dim termin As [Boolean] = False
Dim i As Integer = 0
Dim lments As New ArrayList
Dim lment As Double = 0
Dim rponse As String = Nothing
Dim erreur As [Boolean] = False
While Not termin
' $uestion
Console.Out.Write(("Elment (rel) " & i & " du tableau (rien pour terminer) : "))
' lecture de la rponse
rponse = Console.ReadLine().Trim()
' fin de saisie si chane vide
If rponse.Equals("") Then
Exit While
End If
' vrification saisie
Try
lment = Double.Parse(rponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' un lmt de plus dans le tableau
lments.Add(lment)
End If
End While
' affichage tableau non tri
E/e,'&es de %&asses .NET EK
System.Console.Out.WriteLine("Tableau non tri")
For i = 0 To lments.Count - 1
Console.Out.WriteLine(("lments[" & i & "]=" & lments(i).ToString))
Next i ' tri du tableau
lments.Sort()
' affichage tableau tri
System.Console.Out.WriteLine("Tableau tri")
For i = 0 To lments.Count - 1
Console.Out.WriteLine(("lments[" & i & "]=" & lments(i).ToString))
Next i
' Aecherche
While Not termin
' $uestion
Console.Out.Write("Elment cherch (rien pour arrter) : ")
' lecture-vrification rponse
rponse = Console.ReadLine().Trim()
' fini >
If rponse.Equals("") Then
Exit While
End If
' vrification
Try
lment = [Double].Parse(rponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' on cherche l'lment dans le tableau tri
i = lments.BinarySearch(lment)
' /ffichage rponse
If i >= 0 Then
Console.Out.WriteLine(("Trouv en position " & i))
Else
Console.Out.WriteLine("Pas dans le tableau")
End If
End If
End While
End Sub
End Module
Les rs$&tats d'e/%$ti#n s#nt &es s$ivants 4
Elment (rel) 0 du tableau (rien pour terminer) : 10,4
Elment (rel) 0 du tableau (rien pour terminer) : 5,2
Elment (rel) 0 du tableau (rien pour terminer) : a
Saisie incorrecte, recommencez
Elment (rel) 0 du tableau (rien pour terminer) : 3,7
Elment (rel) 0 du tableau (rien pour terminer) : 15
Elment (rel) 0 du tableau (rien pour terminer) :
Tableau non tri
lments[0]=10,4
lments[1]=5,2
lments[2]=3,7
lments[3]=15
Tableau tri
lments[0]=3,7
lments[1]=5,2
lments[2]=10,4
lments[3]=15
Elment cherch (rien pour arrter) : a
Saisie incorrecte, recommencez
Elment cherch (rien pour arrter) : 15
Trouv en position 3
Elment cherch (rien pour arrter) : 1
Pas dans le tableau
Elment cherch (rien pour arrter) :
H.K La %&asse eashta(&e
La %&asse Nashta"le 'er,et d'i,'&,enter $n di%ti#nnaire. ;n 'e$t v#ir $n di%ti#nnaire %#,,e $n ta(&ea$ . de$/ %#&#nnes 4
E/e,'&es de %&asses .NET EO
cl valeur
%&F va&e$rF
%& va&e$r
.. ...
Les %&s s#nt $ni-$es0 %.a.d. -$'i& ne 'e$t A av#ir de$/ %&s indenti-$es. Les ,th#des et 'r#'rits 'rin%i'a&es de &a %&asse
Las-table s#nt &es s$ivantes 4
Public Sub New()
%re $n di%ti#nnaire vide
Public Overridable Sub Add(ByVal key As
Object,ByVal value As Object) Implements
IDictionary.Add
aB#$te $ne &igne <ReA0va&$e= dans &e di%ti#nnaire #> ReA et va&$e s#nt des
r+ren%es d'#(Bets.
Public Overridable Sub Remove(ByVal key As
Object) Implements IDictionary.Remove
&i,ine d$ di%ti#nnaire &a &igne de %&VReA
Public Overridable Sub Clear() Implements
IDictionary.Clear
vide &e di%ti#nnaire
Public Overridable Function ContainsKey(ByVal
key As Object) As Boolean
rend vrai <tr$e= si &a %& ReA a''artient a$ di%ti#nnaire.
Public Overridable Function
ContainsValue(ByVal value As Object) As
Boolean
rend vrai <tr$e= si &a va&e$r va&$e a''artient a$ di%ti#nnaire.
Public Overridable ReadOnly Property Count As
Integer Implements ICollection.Count
'r#'rit 4 n#,(re d'&,ents d$ di%ti#nnaire <%&0va&e$r=
Public Overridable ReadOnly Property Keys As
ICollection Implements IDictionary.Keys
'r#'rit 4 %#&&e%ti#n des %&s d$ di%ti#nnaire
Public Overridable ReadOnly Property Values As
ICollection Implements IDictionary.Values
'r#'rit 4 %#&&e%ti#n des va&e$rs d$ di%ti#nnaire
Public Overridable Default Property Item(ByVal
key As Object) As Object Implements
IDictionary.Item
'r#'rit inde/e 4 'er,et de %#nnaCtre #$ de +i/er &a va&e$r ass#%ie .
$ne %& ReA
5#nsidr#ns &e 'r#gra,,e e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Module test
Sub Main()
Dim liste() As [String] = {"jean:20", "paul:18", "mlanie:10", "violette:15"}
Dim i As Integer
Dim champs As [String]() = Nothing
Dim sparateurs() As Char = {":"c}
' remplissage du dictionnaire
Dim dico As New Hashtable
For i = 0 To liste.Length - 1
champs = liste(i).Split(sparateurs)
dico.Add(champs(0), champs(1))
Next i
' nbre d'lments dans le dictionnaire
Console.Out.WriteLine(("Le dictionnaire a " & dico.Count & " lments"))
' liste des cls
Console.Out.WriteLine("[Liste des cls]")
Dim cls As IEnumerator = dico.Keys.GetEnumerator()
While cls.MoveNext()
Console.Out.WriteLine(cls.Current)
End While
' liste des valeurs
Console.Out.WriteLine("[Liste des valeurs]")
E/e,'&es de %&asses .NET EE
Dim valeurs As IEnumerator = dico.Values.GetEnumerator()
While valeurs.MoveNext()
Console.Out.WriteLine(valeurs.Current)
End While
' liste des cls 9 valeurs
Console.Out.WriteLine("[Liste des cls & valeurs]")
cls.Reset()
While cls.MoveNext()
Console.Out.WriteLine(("cl=" & cls.Current.ToString & " valeur=" & dico(cls.Current).ToString))
End While
' on supprime la cl DpaulD
Console.Out.WriteLine("[Suppression d'une cl]")
dico.Remove("paul")
' liste des cls 9 valeurs
Console.Out.WriteLine("[Liste des cls & valeurs]")
cls = dico.Keys.GetEnumerator()
While cls.MoveNext()
Console.Out.WriteLine(("cl=" & cls.Current.ToString & " valeur=" & dico(cls.Current).ToString))
End While
' recherche dans le dictionnaire
Dim nomCherch As [String] = Nothing
Console.Out.Write("Nom recherch (rien pour arrter) : ")
nomCherch = Console.ReadLine().Trim()
Dim value As [Object] = Nothing
While Not nomCherch.Equals("")
If dico.ContainsKey(nomCherch) Then
value = dico(nomCherch)
Console.Out.WriteLine((nomCherch + "," + CType(value, [String])))
Else
Console.Out.WriteLine(("Nom " + nomCherch + " inconnu"))
End If
' recherche suivante
Console.Out.Write("Nom recherch (rien pour arrter) : ")
nomCherch = Console.ReadLine().Trim()
End While
End Sub
End Module
Les rs$&tats d'e/%$ti#n s#nt &es s$ivants 4
Le dictionnaire a 4 lments
[Liste des cls]
mlanie
paul
violette
jean
[Liste des valeurs]
10
18
15
20
[Liste des cls & valeurs]
cl=mlanie valeur=10
cl=paul valeur=18
cl=violette valeur=15
cl=jean valeur=20
[Suppression d'une cl]
[Liste des cls & valeurs]
cl=mlanie valeur=10
cl=violette valeur=15
cl=jean valeur=20
Nom recherch (rien pour arrter) : paul
Nom paul inconnu
Nom recherch (rien pour arrter) : mlanie
mlanie,10
Nom recherch (rien pour arrter) :
Le 'r#gra,,e $ti&ise ga&e,ent $n #(Bet Ienu+erator '#$r 'ar%#$rir &es %#&&e%ti#ns de %&s et de va&e$rs d$ di%ti#nnaire de tA'e
I=ollection <%+ %i-dess$s &es 'r#'rits deAs et Va&$es=. Une %#&&e%ti#n est $n ense,(&e d'#(Bets -$'#n 'e$t 'ar%#$rir. L'inter+a%e
I(ollection est d+inie %#,,e s$it 4
E/e,'&es de %&asses .NET EL
La 'r#'rit (ount n#$s 'er,et de %#nnaCtre &e n#,(re d'&,ents de &a %#&&e%ti#n. L'inter+a%e I(ollection drive de &'inter+a%e
IEnu+erable 4
5ette inter+a%e n'a -$'$ne ,th#de 6etEnu+erator -$i n#$s 'er,et d'#(tenir $n #(Bet de tA'e IEnu+erator 4
La ,th#de Eet7numerator)+ d'$ne %#&&e%ti#n I(ollection n#$s 'er,et de 'ar%#$rir &a %#&&e%ti#n ave% &es ,th#des s$ivantes 4
MoveNext
'#siti#nne s$r &'&,ent s$ivant de &a %#&&e%ti#n. Rend vrai <tr$e= si %et &,ent e/iste0 +a$/ <+a&se= sin#n. Le
're,ier :o!e@ext '#siti#nne s$r &e Fer &,ent. L'&,ent D%#$rantD de &a %#&&e%ti#n est a&#rs dis'#ni(&e dans &a
'r#'rit (urrent de &'n$,rate$r
Current
'r#'rit 4 &,ent %#$rant de &a %#&&e%ti#n
Reset
re'#siti#nne &'n$,rate$r en d($t de %#&&e%ti#n0 %.a.d. avant &e Fer &,ent.
La str$%t$re d'itrati#n s$r &es &,ents d'$ne %#&&e%ti#n <I(ollection= 5 est d#n% &a s$ivante 4
' dfinir la collection
dim C as ICollection C=...
' obtenir un numrateur de cette collection
E/e,'&es de %&asses .NET L!
dim itrateur as IEnumerator=C.GetEnumerator();
' parcourir la collection avec cet numrateur
while(itrateur.MoveNext())
' on a un lment courant
' exploiter itrateur.Current
end while
H.O La %&asse Strea,Reader
La %&asse StreamReader 'er,et de &ire &e %#nten$ d'$n +i%hier. V#i%i -$e&-$es-$nes de ses 'r#'rits et ,th#des 4
Public Sub New(ByVal path As String)
#$vre $n +&$/ . 'artir d$ +i%hier 'ath. Une e/%e'ti#n est &an%e si
%e&$i-%i n'e/iste 'as
Overrides Public Sub Close()
+er,e &e +&$/
Overrides Public Function ReadLine() As String
&it $ne &igne d$ +&$/ #$vert
Overrides Public Function ReadToEnd() As String
&it &e reste d$ +&$/ de'$is &a '#siti#n %#$rante
V#i%i $n e/e,'&e 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Imports System.IO
Module test
Sub Main()
Dim ligne As String = Nothing
Dim fluxInfos As StreamReader = Nothing
' lecture contenu du fichier
Try
fluxInfos = New StreamReader("infos.txt")
ligne = fluxInfos.ReadLine()
While Not (ligne Is Nothing)
System.Console.Out.WriteLine(ligne)
ligne = fluxInfos.ReadLine()
End While
Catch e As Exception
System.Console.Error.WriteLine("L'erreur suivante s'est produite : " & e.ToString)
Finally
Try
fluxInfos.Close()
Catch
End Try
End Try
End Sub
End Module
et ses rs$&tats d'e/%$ti#n 4
dos>more infos.txt
12620:0:0
13190:0,05:631
15640:0,1:1290,5
24740:0,15:2072,5
31810:0,2:3309,5
39970:0,25:4900
48360:0,3:6898,5
55790:0,35:9316,5
92970:0,4:12106
127860:0,45:16754,5
151250:0,5:23147,5
172040:0,55:30710
195000:0,6:39312
0:0,65:49062
dos>file1
12620:0:0
13190:0,05:631
E/e,'&es de %&asses .NET LF
15640:0,1:1290,5
24740:0,15:2072,5
31810:0,2:3309,5
39970:0,25:4900
48360:0,3:6898,5
55790:0,35:9316,5
92970:0,4:12106
127860:0,45:16754,5
151250:0,5:23147,5
172040:0,55:30710
195000:0,6:39312
0:0,65:49062
H.E La %&asse Strea,1riter
La %&asse Stream6riter 'er,et d'%rire dans +i%hier. V#i%i -$e&-$es-$nes de ses 'r#'rits et ,th#des 4
Public Sub New(ByVal path As String)
#$vre $n +&$/ d'%rit$re . 'artir d$ +i%hier 'ath. Une e/%e'ti#n est
&an%e si %e&$i-%i ne 'e$t *tre %r
Public Overridable Property AutoFlush As Boolean
si ga& . vrai0 &'%rit$re dans &e +&$/ ne 'asse 'as 'ar &'inter,diaire
d'$ne ,,#ire ta,'#n sin#n &'%rit$re dans &e +&$/ n'est 'as
i,,diate 4 i& A a d'a(#rd %rit$re dans $ne ,,#ire ta,'#n '$is
dans &e +&$/ &#rs-$e &a ,,#ire ta,'#n est '&eine. Par d+a$t %'est &e
,#de ($++eris -$i est $ti&is. I& %#nvient (ien '#$r &es +&$/ +i%hier
,ais gnra&e,ent 'as '#$r &es +&$/ rsea$.
Public Overridable Property NewLine As String
'#$r +i/er #$ %#nnaCtre &a ,ar-$e de +in de &igne . $ti&iser 'ar &a
,th#de 1riteLine
Overrides Public Sub Close()
+er,e &e +&$/
Overloads Public Overridable Sub WriteLine(ByVal
value As String)
%rit $ne &igne dans &e +&$/ d'%rit$re
Overrides Public Sub Flush()
%rit &a ,,#ire ta,'#n dans &e +&$/
5#nsidr#ns &'e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Imports System.IO
Module test
Sub Main()
Dim ligne As String = Nothing ' une ligne de tete
Dim fluxInfos As StreamWriter = Nothing ' le fichier tete
Try
' cration du fichier tete
fluxInfos = New StreamWriter("infos.txt")
' lecture ligne tape au clavier
Console.Out.Write("ligne (rien pour arrter) : ")
ligne = Console.In.ReadLine().Trim()
' boucle tant $ue la ligne saisie est non vide
While ligne <> ""
' criture ligne dans fichier tete
fluxInfos.WriteLine(ligne)
' lecture nouvelle ligne au clavier
Console.Out.Write("ligne (rien pour arrter) : ")
ligne = Console.In.ReadLine().Trim()
End While
Catch e As Exception
System.Console.Error.WriteLine("L'erreur suivante s'est produite : " & e.ToString)
Finally
' fermeture fichier
Try
fluxInfos.Close()
Catch
E/e,'&es de %&asses .NET L
End Try
End Try
End Sub
End Module
et &es rs$&tats d'e/%$ti#n 4
dos>file2
ligne (rien pour arrter) : ligne1
ligne (rien pour arrter) : ligne2
ligne (rien pour arrter) : ligne3
ligne (rien pour arrter) :
dos>more infos.txt
ligne1
ligne2
ligne3
H.L La %&asse Rege/
La %&asse Regex 'er,et &'$ti&isati#n d'e/'ressi#n rg$&i:res. 5e&&es-%i 'er,ettent de tester &e +#r,at d'$ne %haCne de %ara%t:res. Ainsi
#n 'e$t vri+ier -$'$ne %haCne re'rsentant $ne date est (ien a$ +#r,at BBN,,Naa. ;n $ti&ise '#$r %e&a $n ,#d:&e et #n %#,'are &a
%haCne . %e ,#d:&e. Ainsi dans %et e/e,'&e0 B , et a d#ivent *tre des %hi++res. Le ,#d:&e d'$n +#r,at de date va&ide est a&#rs
MNdNdDNdNdDNdNdM #> &e sA,(#&e Nd dsigne $n %hi++re. Les sA,(#&es $ti&isa(&es dans $n ,#d:&e s#nt &es s$ivants
<d#%$,entati#n Mi%r#s#+t= 4
E/e,'&es de %&asses .NET LH
=aract?re /escription
\
Mar-$e &e %ara%t:re s$ivant %#,,e %ara%t:re s'%ia& #$ &ittra&. Par e/e,'&e0 DnD %#rres'#nd a$ %ara%t:re DnD. D^nD
%#rres'#nd . $n %ara%t:re de n#$ve&&e &igne. La s-$en%e D^^D %#rres'#nd . D^D0 tandis -$e D^<D %#rres'#nd . D<D.
^
5#rres'#nd a$ d($t de &a saisie.
$
5#rres'#nd . &a +in de &a saisie.
*
5#rres'#nd a$ %ara%t:re 'r%dent Qr# +#is #$ '&$sie$rs +#is. Ainsi0 DQ#WD %#rres'#nd . DQD #$ . DQ##D.
+
5#rres'#nd a$ %ara%t:re 'r%dent $ne #$ '&$sie$rs +#is. Ainsi0 DQ#MD %#rres'#nd . DQ##D0 ,ais 'as . DQD.
?
5#rres'#nd a$ %ara%t:re 'r%dent Qr# #$ $ne +#is. Par e/e,'&e0 DaXveXD %#rres'#nd . DveD dans D&everD.
.
5#rres'#nd . t#$t %ara%t:re $ni-$e0 sa$+ &e %ara%t:re de n#$ve&&e &igne.
-modle0
Re%her%he &e modKle et ,,#rise &a %#rres'#ndan%e. La s#$s-%haCne %#rres'#ndante 'e$t *tre e/traite de &a %#&&e%ti#n
<atc-es #(ten$e0 . &'aide d'Ite, O(P...OnP. P#$r tr#$ver des %#rres'#ndan%es ave% des %ara%t:res entre 'arenth:ses
< =0 $ti&iseQ D^<D #$ D^=D.
xEy
5#rres'#nd s#it . x s#it . y. Par e/e,'&e0 DQi+##tD %#rres'#nd . DQD #$ . D+##tD. D<Qi+=##D %#rres'#nd . DQ##D #$ .
D+##D.
{n}
n est $n n#,(re entier n#n ngati+. 5#rres'#nd e/a%te,ent . n +#is &e %ara%t:re. Par e/e,'&e0 D#jkD ne %#rres'#nd
'as . D#D dans DB#(0D ,ais a$/ de$/ 're,iers D#D dans D+#####tD.
{n,}
n est $n entier n#n ngati+. 5#rres'#nd . a$ ,#ins n +#is &e %ara%t:re. Par e/e,'&e0 D#j0kD ne %#rres'#nd 'as . D#D
dans DB#(D0 ,ais . t#$s &es D#D dans D+#####tD. D#jF0kD -$iva$t . D#MD et D#j!0kD -$iva$t . D#WD.
Fn'mG
m et n s#nt des entiers n#n ngati+s. 5#rres'#nd . a$ ,#ins n et . a$ '&$s m +#is &e %ara%t:re. Par e/e,'&e0 D#jF0HkD
%#rres'#nd a$/ tr#is 're,iers D#D dans D+######tD et D#j!0FkD -$iva$t . D#XD.
HxyzI
7e$ de %ara%t:res. 5#rres'#nd . &'$n des %ara%t:res indi-$s. Par e/e,'&e0 DTa(%UD %#rres'#nd . DaD dans D'&atD.
HJxyzI
7e$ de %ara%t:res ngati+. 5#rres'#nd . t#$t %ara%t:re n#n indi-$. Par e/e,'&e0 DT\a(%UD %#rres'#nd . D'D dans
D'&atD.
Ha0zI
P&age de %ara%t:res. 5#rres'#nd . t#$t %ara%t:re dans &a srie s'%i+ie. Par e/e,'&e0 DTa-QUD %#rres'#nd . t#$t
%ara%t:re a&'ha(ti-$e ,in$s%$&e %#,'ris entre DaD et DQD.
HJm0zI
P&age de %ara%t:res ngative. 5#rres'#nd . t#$t %ara%t:re ne se tr#$vant 'as dans &a srie s'%i+ie. Par e/e,'&e0 DT\,-
QUD %#rres'#nd . t#$t %ara%t:re ne se tr#$vant 'as entre D,D et DQD.
\b
5#rres'#nd . $ne &i,ite re'rsentant $n ,#t0 a$tre,ent dit0 . &a '#siti#n entre $n ,#t et $n es'a%e. Par e/e,'&e0
Der^(D %#rres'#nd . DerD dans D&everD0 ,ais 'as . DerD dans Dver(eD.
\B
5#rres'#nd . $ne &i,ite ne re'rsentant 'as $n ,#t. DenWt^BD %#rres'#nd . DentD dans D(ien entend$D.
\d
5#rres'#nd . $n %ara%t:re re'rsentant $n %hi++re. l-$iva$t . T!-LU.
\D
5#rres'#nd . $n %ara%t:re ne re'rsentant 'as $n %hi++re. l-$iva$t . T\!-LU.
\f
5#rres'#nd . $n %ara%t:re de sa$t de 'age.
\n
5#rres'#nd . $n %ara%t:re de n#$ve&&e &igne.
\r
5#rres'#nd . $n %ara%t:re de ret#$r %hari#t.
\s
5#rres'#nd . t#$t es'a%e (&an%0 A %#,'ris &'es'a%e0 &a ta($&ati#n0 &e sa$t de 'age0 et%. l-$iva$t . DT ^+^n^r^t^vUD.
\S
5#rres'#nd . t#$t %ara%t:re d'es'a%e n#n (&an%. l-$iva$t . DT\ ^+^n^r^t^vUD.
\t
5#rres'#nd . $n %ara%t:re de ta($&ati#n.
\v
5#rres'#nd . $n %ara%t:re de ta($&ati#n verti%a&e.
\w
5#rres'#nd . t#$t %ara%t:re re'rsentant $n ,#t et in%&$ant $n trait de s#$&igne,ent. l-$iva$t . DTA-ba-Q!-LcUD.
\W
5#rres'#nd . t#$t %ara%t:re ne re'rsentant 'as $n ,#t. l-$iva$t . DT\A-ba-Q!-LcUD.
Knum
5#rres'#nd . num0 #> num est $n entier '#siti+. Jait r+ren%e a$/ %#rres'#ndan%es ,,#rises. Par e/e,'&e0 D<.=^FD
%#rres'#nd . de$/ %ara%t:res identi-$es %#ns%$ti+s.
Kn
5#rres'#nd . n0 #> n est $ne va&e$r d'%ha''e,ent #%ta&e. Les va&e$rs d'%ha''e,ent #%ta&es d#ivent %#,'rendre F0
#$ H %hi++res. Par e/e,'&e0 D^FFD et D^!FFD %#rres'#ndent t#$s &es de$/ . $n %ara%t:re de ta($&ati#n. D^!!FFD
-$iva$t . D^!!FD S DFD. Les va&e$rs d'%ha''e,ent #%ta&es ne d#ivent 'as e/%der IK. Si %'tait &e %as0 se$&s &es de$/
're,iers %hi++res seraient 'ris en %#,'te dans &'e/'ressi#n. Per,et d'$ti&iser &es %#des AS5II dans des e/'ressi#ns
rg$&i:res.
\xn
5#rres'#nd . n0 #> n est $ne va&e$r d'%ha''e,ent he/ad%i,a&e. Les va&e$rs d'%ha''e,ent he/ad%i,a&es d#ivent
%#,'rendre de$/ %hi++res #(&igat#ire,ent. Par e/e,'&e0 D^/"FD %#rres'#nd . DAD. D^/!"FD -$iva$t . D^/!"D S DFD.
Per,et d'$ti&iser &es %#des AS5II dans des e/'ressi#ns rg$&i:res.
Un &,ent dans $n ,#d:&e 'e$t *tre 'rsent en F #$ '&$sie$rs e/e,'&aires. 5#nsidr#ns -$e&-$es e/e,'&es a$t#$r d$ sA,(#&e Nd
-$i re'rsente F %hi++re 4
+od?le signification
\d
$n %hi++re
\d?
! #$ F %hi++re
\d*
! #$ davantage de %hi++res
\d+
F #$ davantage de %hi++res
E/e,'&es de %&asses .NET L"
\d{2}
%hi++res
\d{3,}
a$ ,#ins H %hi++res
\d{5,7}
entre I et O %hi++res
I,agin#ns ,aintenant &e ,#d:&e %a'a(&e de d%rire &e +#r,at attend$ '#$r $ne %haCne de %ara%t:res 4
c-a>ne rec-erc-e +od?le
une date au format jj/mm/aa
^djkN^djkN^djk
une heure au format hh:mm:ss
^djk4^djk4^djk
un nombre entier non sign
^dM
un suite d'espaces ventuellement vide
^sW
un nombre entier non sign qui peut tre prcd ou suivi d'espaces
^sW^dM^sW
un nombre entier qui peut tre sign et prcd ou suivi d'espaces
^sWTMi-UX^sW^dM^sW
un nombre rel non sign qui peut tre prcd ou suivi d'espaces
^sW^dM<.^dW=X^sW
un nombre rel qui peut tre sign et prcd ou suivi d'espaces
^sWTMiUX^sW^dM<.^dW=X^sW
une chane contenant le mot juste
^(B$ste^(
;n 'e$t 'r%iser #> #n re%her%he &e ,#d:&e dans &a %haCne 4
+od?le signification
^modle
&e ,#d:&e %#,,en%e &a %haCne
modle$
&e ,#d:&e +init &a %haCne
^modle$
&e ,#d:&e %#,,en%e et +init &a %haCne
modle
&e ,#d:&e est %her%h 'art#$t dans &a %haCne en %#,,en@ant 'ar &e d($t de %e&&e-%i.
c-a>ne rec-erc-e +od?le
une chane se terminant par un point d'exclamation
mn
une chane se terminant par un point
^.n
une chane commenant par la squence //
\NN
une chane ne comportant qu'un mot ventuellement suivi ou prcd d'espaces
\^sW^2M^sWn
une chane ne comportant deux mot ventuellement suivis ou prcds d'espaces
\^sW^2M^sW^2M^sWn
une chane contenant le mot secret
^(se%ret^(
Les s#$s-ense,(&es d'$n ,#d:&e 'e$vent *tre Dr%$'rsD. Ainsi n#n se$&e,ent0 #n 'e$t vri+ier -$'$ne %haCne %#rres'#nd . $n
,#d:&e 'arti%$&ier ,ais #n 'e$t r%$'rer dans %ette %haCne &es &,ents %#rres'#ndant a$/ s#$s-ense,(&es d$ ,#d:&e -$i ont t
entours de parent-?ses. Ainsi si #n ana&Ase $ne %haCne %#ntenant $ne date BBN,,Naa et si #n ve$t de '&$s r%$'rer &es &,ents
BB0 ,,0 aa de %ette date #n $ti&isera &e ,#d:&e <^d^d=N<^d^d=N<^d^d=.
H.L.F Vri+ier -$'$ne %haCne %#rres'#nd . $n ,#d:&e d#nn
Un #(Bet de tA'e Rege/ se %#nstr$it de &a +a@#n s$ivante 4
Public Sub New(ByVal pattern As String)
Le %#nstr$%te$r %re $n #(Bet De/'ressi#n rg$&i:reD . 'artir d'$n ,#d:&e 'ass en 'ara,:tre <'attern=. Une +#is &'e/'ressi#n
rg$&i:re ,#d:&e %#nstr$it0 #n 'e$t &a %#,'arer . des %haCnes de %ara%t:res ave% &a ,th#de Is<atc- 4
Overloads Public Function IsMatch(ByVal input As String) As Boolean
IsMat%h rend vrai si &a %haCne in'$t %#rres'#nd a$ ,#d:&e de &'e/'ressi#n rg$&i:re. V#i%i $n e/e,'&e 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Imports System.Text.RegularExpressions
Module regex1
Sub Main()
' une epression rgulire modle
Dim modle1 As String = "^\s*\d+\s*$"
Dim regex1 As New Regex(modle1)
' comparer un eemplaire au modle
E/e,'&es de %&asses .NET LI
Dim exemplaire1 As String = " 123 "
If regex1.IsMatch(exemplaire1) Then
affiche(("[" + exemplaire1 + "] correspond au modle [" + modle1 + "]"))
Else
affiche(("[" + exemplaire1 + "] ne correspond pas au modle [" + modle1 + "]"))
End If
Dim exemplaire2 As String = " 123a "
If regex1.IsMatch(exemplaire2) Then
affiche(("[" + exemplaire2 + "] correspond au modle [" + modle1 + "]"))
Else
affiche(("[" + exemplaire2 + "] ne correspond pas au modle [" + modle1 + "]"))
End If
End Sub
' affiche
Sub affiche(ByVal msg As String)
Console.Out.WriteLine(msg)
End Sub
End Module
et &es rs$&tats d'e/%$ti#n 4
dos>vbc /r:system.dll regex1.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 pour Microsoft (R) .NET Framework version
1.1.4322.573
dos>regex1
[ 123 ] correspond au modle [^\s*\d+\s*$]
[ 123a ] ne correspond pas au modle [^\s*\d+\s*$]
H.L. Tr#$ver t#$s &es &,ents d'$ne %haCne %#rres'#ndant . $n ,#d:&e
La ,th#de <atc-es
Overloads Public Function Matches(ByVal input As String) As MatchCollection
rend $ne %#&&e%ti#n d'&,ents de &a %haCne input %#rres'#ndant a$ ,#d:&e %#,,e &e ,#ntre &'e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Imports System.Text.RegularExpressions
Module regex2
Sub Main()
' plusieurs occurrences du modle dans l'eemplaire
Dim modle2 As String = "\d+"
Dim regex2 As New Regex(modle2) '
Dim exemplaire3 As String = " 123 456 789 "
Dim rsultats As MatchCollection = regex2.Matches(exemplaire3)
affiche(("Modle=[" + modle2 + "],exemplaire=[" + exemplaire3 + "]"))
affiche(("Il y a " & rsultats.Count & " occurrences du modle dans l'exemplaire "))
Dim i As Integer
For i = 0 To rsultats.Count - 1
affiche((rsultats(i).Value & " en position " & rsultats(i).Index))
Next i
End Sub
'affiche
Sub affiche(ByVal msg As String)
Console.Out.WriteLine(msg)
End Sub
End Module
La %&asse <atc-=ollection a $ne 'r#'rit =ount -$i est &e n#,(re d'&,ents de &a %#&&e%ti#n. Si rsultats est $n #(Bet
:atch(ollection0 rsultats)i+ est &'&,ent i de %ette %#&&e%ti#n et est de tA'e <atc-. Dans n#tre e/e,'&e0 rsultats est &'ense,(&e des
&,ents de &a %haCne exemplaire3 %#rres'#ndant a$ ,#d:&e modKle2 et rsultats)i+ &'$n de %es &,ents. La %&asse :atch a de$/
'r#'rits -$i n#$s intressent i%i 4
Value 4 &a va&e$r de &'#(Bet Mat%h d#n% &'&,ent %#rres'#ndant a$ ,#d:&e
Inde& 4 &a '#siti#n #> &'&,ent a t tr#$v dans &a %haCne e/'&#re
E/e,'&es de %&asses .NET LK
Les rs$&tats de &'e/%$ti#n d$ 'r#gra,,e 'r%dent 4
dos>vbc /r:system.dll regex2.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4p our Microsoft (R) .NET Framework version
1.1.4322.573
dos>regex2
Modle=[\d+],exemplaire=[ 123 456 789 ]
Il y a 3 occurrences du modle dans l'exemplaire
123 en position 2
456 en position 7
789 en position 12
H.L.H R%$'rer des 'arties d'$n ,#d:&e
Des s#$s-ense,(&es d'$n ,#d:&e 'e$vent *tre Dr%$'rsD. Ainsi n#n se$&e,ent0 #n 'e$t vri+ier -$'$ne %haCne %#rres'#nd . $n
,#d:&e 'arti%$&ier ,ais #n 'e$t r%$'rer dans %ette %haCne &es &,ents %#rres'#ndant a$/ s#$s-ense,(&es d$ ,#d:&e -$i ont t
entours de parent-?ses. Ainsi si #n ana&Ase $ne %haCne %#ntenant $ne date BBN,,Naa et si #n ve$t de '&$s r%$'rer &es &,ents
BB0 ,,0 aa de %ette date #n $ti&isera &e ,#d:&e <^d^d=N<^d^d=N<^d^d=. E/a,in#ns &'e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Imports System.Text.RegularExpressions
Module regex2
Sub Main()
' capture d'lments dans le modle
Dim modle3 As String = "(\d\d):(\d\d):(\d\d)"
Dim regex3 As New Regex(modle3)
Dim exemplaire4 As String = "Il est 18:05:49"
' vrification modle
Dim rsultat As Match = regex3.Match(exemplaire4)
If rsultat.Success Then
' l'eemplaire correspond au modle
affiche(("L'exemplaire [" + exemplaire4 + "] correspond au modle [" + modle3 + "]"))
' on affiche les groupes
Dim i As Integer
For i = 0 To rsultat.Groups.Count - 1
affiche(("groupes[" & i & "]=[" & rsultat.Groups(i).Value & "] en position " &
rsultat.Groups(i).Index))
Next i
Else
' l'eemplaire ne correspond pas au modle
affiche(("L'exemplaire[" + exemplaire4 + " ne correspond pas au modle [" + modle3 + "]"))
End If
End Sub
'affiche
Sub affiche(ByVal msg As String)
Console.Out.WriteLine(msg)
End Sub
End Module
L'e/%$ti#n de %e 'r#gra,,e 'r#d$it &es rs$&tats s$ivants 4
dos>vbc /r:system.dll regex3.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4
dos>regex3
L'exemplaire [Il est 18:05:49] correspond au modle [(\d\d):(\d\d):(\d\d)]
groupes[0]=[18:05:49] en position 7
groupes[1]=[18] en position 7
groupes[2]=[05] en position 10
groupes[3]=[49] en position 13
La n#$vea$t se tr#$ve dans &a 'artie de %#de s$ivante 4
' vrification modle
Dim rsultat As Match = regex3.Match(exemplaire4)
If rsultat.Success Then
' l'eemplaire correspond au modle
affiche(("L'exemplaire [" + exemplaire4 + "] correspond au modle [" + modle3 + "]"))
' on affiche les groupes
E/e,'&es de %&asses .NET LO
Dim i As Integer
For i = 0 To rsultat.Groups.Count - 1
affiche(("groupes[" & i & "]=[" & rsultat.Groups(i).Value & "] en position " &
rsultat.Groups(i).Index))
Next i
Else
La %haCne exemplaire0 est %#,'are a$ ,#d:&e regex3 a$ travers de &a ,th#de :atch. 5e&&e-%i rend $n #(Bet :atch dB. 'rsent.
N#$s $ti&is#ns i%i de$/ n#$ve&&es 'r#'rits de %ette %&asse 4
.uccess 4 indi-$e s'i& A a e$ %#rres'#ndan%e
6roups 4 %#&&e%ti#n #>
o Gr#$'sT!U %#rres'#nd . &a 'artie de &a %haCne %#rres'#ndant a$ ,#d:&e
o Gr#$'sTiU <i`VF= %#rres'#nd a$ gr#$'e de 'arenth:ses nY i
Si rs$&tat est de tA'e :atch0 rsultats.Eroups est de tA'e Eroup(ollection et rsultats.Eroups2i de tA'e Eroup. La %&asse Eroup a de$/
'r#'rits -$e n#$s $ti&is#ns i%i 4
Value 4 &a va&e$r de &'#(Bet Gr#$' -$i &'&,ent %#rres'#ndant a$ %#nten$ d'$ne 'araenth:se
Inde& 4 &a '#siti#n #> &'&,ent a t tr#$v dans &a %haCne e/'&#re
H.L." Un 'r#gra,,e d'a''rentissage
Tr#$ver &'e/'ressi#n rg$&i:re -$i n#$s 'er,et de vri+ier -$'$ne %haCne %#rres'#nd (ien . $n %ertain ,#d:&e est 'ar+#is $n
vrita(&e d+i. Le 'r#gra,,e s$ivant 'er,et de s'entraCner. I& de,ande $n ,#d:&e et $ne %haCne et indi-$e a&#rs si &a %haCne
%#rres'#nd #$ n#n a$ ,#d:&e.
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Collections
Imports System.Text.RegularExpressions
Imports Microsoft.visualbasic
Module regex4
Sub Main()
' une epression rgulire modle
Dim modle, chaine As String
Dim regex As Regex = Nothing
Dim rsultats As MatchCollection
' on demande l'utilisateur les modles et les eemplaires comparer celui-ci
Dim termin1 As Boolean = False
Do While Not termin1
Dim erreur As Boolean = True
Do While Not termin1 And erreur
' on demande le modle
Console.Out.Write("Tapez le modle tester ou fin pour arrter :")
modle = Console.In.ReadLine()
' fini >
If modle.Trim().ToLower() = "fin" Then
termin1 = True
Else
' on cre l'epression rgulire
Try
regex = New Regex(modle)
erreur = False
Catch ex As Exception
Console.Error.WriteLine(("Erreur : " + ex.Message))
End Try
End If
Loop
' fini >
If termin1 Then Exit Sub
' on demande l'utilisateur les eemplaires comparer au modle
Dim termin2 As Boolean = False
Do While Not termin2
Console.Out.Write(("Tapez la chane comparer au modle [" + modle + "] ou fin pour arrter :"))
chaine = Console.In.ReadLine()
' fini >
If chaine.Trim().ToLower() = "fin" Then
termin2 = True
Else
' on fait la comparaison
rsultats = regex.Matches(chaine)
E/e,'&es de %&asses .NET LE
' succs >
If rsultats.Count = 0 Then
Console.Out.WriteLine("Je n'ai pas trouv de correspondances")
Else
' on affiche les lments correspondant au modle
Dim i As Integer
For i = 0 To rsultats.Count - 1
Console.Out.WriteLine(("J'ai trouv la correspondance [" & rsultats(i).Value & "] en
position " & rsultats(i).Index))
' des sous-lments
If rsultats(i).Groups.Count <> 1 Then
Dim j As Integer
For j = 1 To (rsultats(i).Groups.Count) - 1
Console.Out.WriteLine((ControlChars.Tab & "sous-lment [" & rsultats(i).Groups(j).Value
& "] en position " & rsultats(i).Groups(j).Index))
Next j
End If
Next i
End If
End If
Loop
Loop
End Sub
'affiche
Sub affiche(ByVal msg As String)
Console.Out.WriteLine(msg)
End Sub
End Module
V#i%i $n e/e,'&e d'e/%$ti#n 4
Tapez le modle tester ou fin pour arrter :\d+
Tapez la chane comparer au modle [\d+] ou fin pour arrter :123 456 789
J'ai trouv la correspondance [123] en position 0
J'ai trouv la correspondance [456] en position 4
J'ai trouv la correspondance [789] en position 8
Tapez la chane comparer au modle [\d+] ou fin pour arrter :fin
Tapez le modle tester ou fin pour arrter :(\d\d):(\d\d)
Tapez la chane comparer au modle [(\d\d):(\d\d)] ou fin pour arrter :14:15 abcd 17:18 xyzt
J'ai trouv la correspondance [14:15] en position 0
sous-lment [14] en position 0
sous-lment [15] en position 3
J'ai trouv la correspondance [17:18] en position 11
sous-lment [17] en position 11
sous-lment [18] en position 14
Tapez la chane comparer au modle [(\d\d):(\d\d)] ou fin pour arrter :fin
Tapez le modle tester ou fin pour arrter :^\s*\d+\s*$
Tapez la chane comparer au modle [^\s*\d+\s*$] ou fin pour arrter : 1456
J'ai trouv la correspondance [ 1456] en position 0
Tapez la chane comparer au modle [^\s*\d+\s*$] ou fin pour arrter :fin
Tapez le modle tester ou fin pour arrter :^\s*(\d+)\s*$
Tapez la chane comparer au modle [^\s*(\d+)\s*$] ou fin pour arrter :1456
J'ai trouv la correspondance [1456] en position 0
sous-lment [1456] en position 0
Tapez la chane comparer au modle [^\s*(\d+)\s*$] ou fin pour arrter :abcd 1
456
Je n'ai pas trouv de correspondances
Tapez la chane comparer au modle [^\s*(\d+)\s*$] ou fin pour arrter :fin
Tapez le modle tester ou fin pour arrter :fin
H.L.I La ,th#de S'&it
N#$s av#ns dB. ren%#ntr %ette ,th#de dans &a %&asse String 4
Overloads Public Function Split(ByVal ParamArray separator() As Char) As String()
La %haCne est v$e %#,,e $ne s$ite de %ha,'s s'ars 'ar &es %ara%t:res 'rsents dans &e ta(&ea$ Tse'arat#rU. Le rs$&tat est &e
ta(&ea$ de %es %ha,'s.
Le s'arate$r de %ha,'s de &a%haCne est i%i $n des %ara%t:res d$ ta(&ea$ separator. La ,th#de Split de &a %&asse Regex n#$s 'er,et
d'e/'ri,er &e s'arate$r en +#n%ti#n d'$n ,#d:&e 4
Overloads Public Function Split(ByVal input As String) As String()
E/e,'&es de %&asses .NET LL
La %haCne Tin'$tU est d%#,'#se en %ha,'s0 %e$/-%i tant s'ars 'ar $n s'arate$r %#rres'#ndant a$ ,#d:&e de &'#(Bet Regex
%#$rant. S$''#s#ns 'ar e/e,'&e -$e n#$s aA#ns dans $n +i%hier te/te des &ignes de &a +#r,e champ1* champ2* ..* champn. Les %ha,'s
s#nt s'ars 'ar $ne virg$&e ,ais %e&&e-%i 'e$t *tre 'r%de #$ s$ivie d'es'a%es. La ,th#de Split de &a %&asse string ne %#nvient a&#rs
'as. 5e&&e de &a ,th#de Reg7x a''#rte &a s#&$ti#n. Si &igne est &a &igne &$e0 &es %ha,'s '#$rr#nt *tre #(ten$s 'ar
dim champs() as string=new Regex("s*,\s*").Split(ligne)
%#,,e &e ,#ntre &'e/e,'&e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Text.RegularExpressions
Module regex5
Sub Main()
' une ligne
Dim ligne As String = "abc , def , ghi"
' un modle
Dim modle As New Regex("\s*,\s*")
' dcomposition de ligne en champs
Dim champs As String() = modle.Split(ligne)
' affichage
Dim i As Integer
For i = 0 To champs.Length - 1
Console.Out.WriteLine(("champs[" & i & "]=[" & champs(i) & "]"))
Next i
End Sub
End Module
Les rs$&tats d'e/%$ti#n 4
dos>vbc /r:system.dll regex5.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4
dos>regex5
champs[0]=[abc]
champs[1]=[def]
champs[2]=[ghi]
H.F! Les %&asses BinarAReader et BinarA1riter
Les %&asses Binary@eader et Binary7riter servent . &ire et %rire des +i%hiers (inaires. 5#nsidr#ns &'a''&i%ati#n s$ivante. ;n ve$t
%rire $n 'r#gra,,e -$i s'a''e&&erait de &a +a@#n s$ivante 4
// syntaxe pg texte bin
// on lit un fichier texte (texte) et on range son contenu dans un
// fichier binaire
// le fichier texte a des lignes de la forme nom : age
// qu'on rangera dans une structure string, int
Le +i%hier te/te a &e %#nten$ s$ivant 4
paul : 10
helene : 15
jacques : 11
sylvain : 12
Le 'r#gra,,e est &e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Text.RegularExpressions
Imports System.IO
E/e,'&es de %&asses .NET F!!
' &inar(5riter-0
Module bw1
' s(ntae pg tete bin
' on lit un fichier tete -tete0 et on range son contenu dans un
' fichier binaire
' le fichier tete a des lignes de la forme nom C age
' $u'on rangera dans une structure string' int
Sub Main(ByVal arguments() As String)
' il faut 2 arguments
Dim nbArgs As Integer = arguments.Length
If nbArgs <> 2 Then
Console.Error.WriteLine("syntaxe : pg texte binaire")
Environment.Exit(1)
End If
' ouverture du fichier tete en lecture
Dim input As StreamReader = Nothing
Try
input = New StreamReader(arguments(0))
Catch ex As Exception
Console.Error.WriteLine("Erreur d'ouverture du fichier " & arguments(0) & "(" & ex.Message & ")")
Environment.Exit(2)
End Try
' ouverture du fichier binaire en criture
Dim output As BinaryWriter = Nothing
Try
output = New BinaryWriter(New FileStream(arguments(1), FileMode.Create, FileAccess.Write))
Catch ex As Exception
Console.Error.WriteLine("Erreur d'ouverture du fichier " & arguments(1) & "(" & ex.Message & ")")
Environment.Exit(3)
End Try
' lecture fichier tete - criture fichier binaire
' ligne du fichier tete
Dim ligne As String
' le sparateur des champs de la ligne
Dim sparateur As New Regex("\s*:\s*")
' le modle de l':ge
Dim modAge As New Regex("\s*\d+\s*")
Dim numLigne As Integer = 0
Dim traitementFini As Boolean
Dim champs As String()
ligne = input.ReadLine()
While Not (ligne Is Nothing)
traitementFini = False
' ligne vide >
If ligne.Trim() = "" Then
traitementFini = True
End If
' une ligne de plus
If Not traitementFini Then
numLigne += 1
' une ligne nom C age
champs = sparateur.Split(ligne)
' il nous faut 2 champs
If champs.Length <> 2 Then
Console.Error.WriteLine(("La ligne n " & numLigne & " du fichier " & arguments(0) & " a un
nombre de champs incorrect"))
' ligne suivante
traitementFini = True
End If
End If
If Not traitementFini Then
' le second champ doit <tre un entier >2L
If Not modAge.IsMatch(champs(1)) Then
Console.Error.WriteLine(("La ligne n " & numLigne & " du fichier " & arguments(0) & " a un ge
incorrect"))
' ligne suivante
traitementFini = True
End If
' on crit les donnes dans le fichier binaire
output.Write(champs(0))
output.Write(Integer.Parse(champs(1)))
End If
'ligne suivante
ligne = input.ReadLine()
End While
' fermeture des fichiers
input.Close()
output.Close()
End Sub
E/e,'&es de %&asses .NET F!F
End Module
Attard#ns-n#$s s$r &es #'rati#ns %#n%ernant &a %&asse Pinary6riter 4
&'#(Bet Pinary6riter est #$vert 'ar &'#'rati#n
output = New BinaryWriter(New FileStream(arguments(1), FileMode.Create, FileAccess.Write))
L'arg$,ent d$ %#nstr$%te$r d#it *tre $n +&$/ <Strea,=. I%i %'est $n +&$/ %#nstr$it . 'artir d'$n +i%hier <Ji&eStrea,= d#nt #n
d#nne 4
o &e n#,
o &'#'rati#n . +aire0 i%i Bile:ode.(reate '#$r %rer &e +i%hier
o &e tA'e d'a%%:s0 i%i BileHccess.6rite '#$r $n a%%:s en %rit$re a$ +i%hier
&'#'rati#n d'%rit$re
' on crit les donnes dans le fichier binaire
output.Write(champs(0))
output.Write(Integer.Parse(champs(1)))
La %&asse Pinary6riter dis'#se de di++rentes ,th#des 6rite s$r%harges '#$r %rire &es di++rents tA'es de d#nnes si,'&es
&'#'rati#n de +er,et$re d$ +&$/
output.Close()
Les rs$&tats de &'e/%$ti#n 'r%dente v#nt n#$s *tre d#nns 'ar &e 'r#gra,,e -$i s$it. 5e&$i-%i a%%e'te ga&e,ent de$/
arg$,ents 4
' syntaxe pg bin texte
' on lit un fichier binaire bin et on range son contenu dans un fichier texte (texte)
' le fichier binaire a une structure string, int
' le fichier texte a des lignes de la forme nom : age
;n +ait d#n% &'#'rati#n inverse. ;n &it $n +i%hier (inaire '#$r %rer $n +i%hier te/te. Si &e +i%hier te/te 'r#d$it est identi-$e a$
+i%hier #rigine& #n sa$ra -$e &a %#nversi#n te/te --` (inaire --` te/te s'est (ien 'asse. Le %#de est &e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Text.RegularExpressions
Imports System.IO
Module br1
' s(ntae pg bin tete
' on lit un fichier binaire bin et on range son contenu dans un fichier tete -tete0
' le fichier binaire a une structure string' int
' le fichier tete a des lignes de la forme nom C age
Sub Main(ByVal arguments() As String)
' il faut 2 arguments
Dim nbArgs As Integer = arguments.Length
If nbArgs <> 2 Then
Console.Error.WriteLine("syntaxe : pg binaire texte")
Environment.Exit(1)
End If
' ouverture du fichier binaire en lecture
Dim dataIn As BinaryReader = Nothing
Try
dataIn = New BinaryReader(New FileStream(arguments(0), FileMode.Open, FileAccess.Read))
Catch ex As Exception
Console.Error.WriteLine("Erreur d'ouverture du fichier " & arguments(0) & "(" & ex.Message & ")")
Environment.Exit(2)
End Try
' ouverture du fichier tete en criture
Dim dataOut As StreamWriter = Nothing
Try
dataOut = New StreamWriter(arguments(1))
dataOut.AutoFlush = True
Catch ex As Exception
Console.Error.WriteLine("Erreur d'ouverture du fichier " & arguments(1) & "(" & ex.Message & ")")
E/e,'&es de %&asses .NET F!
Environment.Exit(3)
End Try
' lecture fichier binaire - criture fichier tete
Dim nom As String ' nom d'une personne
Dim age As Integer ' son :ge
' boucle d'eploitation du fichier binaire
While True
' lecture nom
Try
nom = dataIn.ReadString()
Catch
' fin du fichier
Exit Sub
End Try
' lecture age
Try
age = dataIn.ReadInt32()
Catch
Console.Error.WriteLine("Le fichier " & arguments(0) + " ne semble pas avoir un format correct")
Exit Sub
End Try
' criture dans fichier tete
dataOut.WriteLine(nom & ":" & age)
System.Console.WriteLine(nom & ":" & age)
End While
' on ferme tout
dataIn.Close()
dataOut.Close()
End Sub
End Module
Attard#ns-n#$s s$r &es #'rati#ns %#n%ernant &a %&asse PinaryReader 4
&'#(Bet BinarAReader est #$vert 'ar &'#'rati#n
dataIn = New BinaryReader(New FileStream(arguments(0), FileMode.Open, FileAccess.Read))
L'arg$,ent d$ %#nstr$%te$r d#it *tre $n +&$/ <Strea,=. I%i %'est $n +&$/ %#nstr$it . 'artir d'$n +i%hier <Ji&eStrea,= d#nt
#n d#nne 4
&e n#,
&'#'rati#n . +aire0 i%i Bile:ode.5pen '#$r #$vrir $n +i%hier e/istant
&e tA'e d'a%%:s0 i%i BileHccess.Read '#$r $n a%%:s en &e%t$re a$ +i%hier
&'#'rati#n de &e%t$re
nom = dataIn.ReadString()
age = dataIn.ReadInt32()
La %&asse PinaryReader dis'#se de di++rentes ,th#des ReadSS '#$r &ire &es di++rents tA'es de d#nnes si,'&es
&'#'rati#n de +er,et$re d$ +&$/
dataIn.Close()
Si #n e/%$te &es de$/ 'r#gra,,es . &a %haCne trans+#r,ant personnes.txt en personnes."in '$is personnes."in en personnes.txt2 #n a 4
dos>more personnes.txt
paul : 10
helene : 15
jacques : 11
sylvain : 12
dos>more personnes.txt2
paul:10
helene:15
jacques:11
sylvain:12
dos>dir
29/04/2002 18:19 54 personnes.txt
29/04/2002 18:19 44 personnes.bin
29/04/2002 18:20 44 personnes.txt2
E/e,'&es de %&asses .NET F!H
". Inter+a%es gra'hi-$es ave% VB.NET et
VS.NET
N#$s n#$s 'r#'#s#ns i%i de ,#ntrer %#,,ent %#nstr$ire des inter+a%es gra'hi-$es ave% VB.NET. N#$s v#A#ns t#$t d'a(#rd
-$e&&es s#nt &es %&asses de (ase de &a '&ate-+#r,e .NET -$i n#$s 'er,ettent de %#nstr$ire $ne inter+a%e gra'hi-$e. N#$s n'$ti&is#ns
dans $n 're,ier te,'s a$%$n #$ti& de gnrati#n a$t#,ati-$e. P$is n#$s $ti&iser#ns Vis$a& St$di#.NET <VS.NET=0 $n #$ti& de
dve&#''e,ent de Mi%r#s#+t +a%i&itant &e dve&#''e,ent d'a''&i%ati#ns ave% &es &angages .NET et n#ta,,ent &a %#nstr$%ti#n
d'inter+a%es gra'hi-$es. La versi#n VS.NET $ti&ise est &a versi#n ang&aise.
".F Les (ases des inter+a%es gra'hi-$es
".F.F Une +en*tre si,'&e
5#nsidr#ns &e %#de s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Drawing
Imports System.Windows.Forms
' la classe formulaire
Public Class Form1
Inherits Form
' le constructeur
Public Sub New()
' titre de la fen<tre
Me.Text = "Mon premier formulaire"
' dimensions de la fen<tre
Me.Size = New System.Drawing.Size(300, 100)
End Sub
' fonction de test
Public Shared Sub Main(ByVal args() As String)
' on affiche le formulaire
Application.Run(New Form1)
End Sub
End Class
Le %#de 'r%dent est %#,'i& '$is e/%$t
dos>vbc /r:system.dll /r:system.drawing.dll /r:system.windows.forms.dll frm1.vb
dos>frm1
L'e/%$ti#n a++i%he &a +en*tre s$ivante 4
Une inter+a%e gra'hi-$e drive en gnra& de &a %&asse de (ase System.6indoIs.Borms.Borm 4
Public Class Form1
Inherits Form
Inter+a%es gra'hi-$es
F!"
La %&asse de (ase Borm d+init $ne +en*tre de (ase ave% des (#$t#ns de +er,et$re0 agrandisse,entNrd$%ti#n0 $ne tai&&e aB$sta(&e0 ...
et g:re &es vne,ents s$r %es #(Bets gra'hi-$es. I%i n#$s s'%ia&is#ns &a %&asse de (ase en &$i +i/ant $n titre et ses &arge$r <H!!= et
ha$te$r <F!!=. 5e%i est +ait dans s#n %#nstr$%te$r 4
Public Sub New()
' titre de la fen<tre
Me.Text = "Mon premier formulaire"
' dimensions de la fen<tre
Me.Size = New System.Drawing.Size(300, 100)
End Sub
Le titre de &a +en*tre est +i/e 'ar &a 'r#'rit %ext et &es di,ensi#ns 'ar &a 'r#'rit SiTe. SiTe est d+ini dans &'es'a%e de n#,s
System.DraIing et est $ne str$%t$re. La 'r#%d$re Main &an%e &'a''&i%ati#n gra'hi-$e de &a +a@#n s$ivante 4
Application.Run(New Form1)
Un +#r,$&aire de tA'e Borm1 est %r et a++i%h0 '$is &'a''&i%ati#n se ,et . &'%#$te des vne,ents -$i se 'r#d$isent s$r &e
+#r,$&aire <%&i%s0 d'&a%e,ents de s#$ris0 ...= et +ait e/%$ter %e$/ -$e &e +#r,$&aire g:re. I%i0 n#tre +#r,$&aire ne g:re 'as d'a$tre
vne,ent -$e %e$/ grs 'ar &a %&asse de (ase Borm <%&i%s s$r (#$t#ns +er,et$re0 agrandisse,entNrd$%ti#n0 %hange,ent de tai&&e
de &a +en*tre0 d'&a%e,ent de &a +en*tre0 ...=.
".F. Un +#r,$&aire ave% (#$t#n
AB#$t#ns ,aintenant $n (#$t#n . n#tre +en*tre 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Drawing
Imports System.Windows.Forms
' la classe formulaire
Public Class Form1
Inherits Form
' attributs
Private cmdTest As Button
' le constructeur
Public Sub New()
' le titre
Me.Text = "Mon premier formulaire"
' les dimensions
Me.Size = New System.Drawing.Size(300, 100)
' un bouton
' cration
Me.cmdTest = New Button
' position
cmdTest.Location = New System.Drawing.Point(110, 20)
' taille
cmdTest.Size = New System.Drawing.Size(80, 30)
' libell
cmdTest.Text = "Test"
' gestionnaire d'vt
AddHandler cmdTest.Click, AddressOf cmdTest_Click
' ajout bouton au formulaire
Me.Controls.Add(cmdTest)
End Sub
' gestionnaire d'vnement
Private Sub cmdTest_Click(ByVal sender As Object, ByVal evt As EventArgs)
' il ( a eu un clic sur le bouton - on le dit
MessageBox.Show("Clic sur bouton", "Clic sur bouton", MessageBoxButtons.OK,
MessageBoxIcon.Information)
End Sub
' fonction de test
Public Shared Sub Main(ByVal args() As String)
' on affiche le formulaire
Application.Run(New Form1)
End Sub
End Class
N#$s av#ns raB#$t a$ +#r,$&aire $n (#$t#n 4
Inter+a%es gra'hi-$es
F!I
' un bouton
' cration
Me.cmdTest = New Button
' position
cmdTest.Location = New System.Drawing.Point(110, 20)
' taille
cmdTest.Size = New System.Drawing.Size(80, 30)
' libell
cmdTest.Text = "Test"
' gestionnaire d'vt
AddHandler cmdTest.Click, AddressOf cmdTest_Click
' ajout bouton au formulaire
Me.Controls.Add(cmdTest)
La 'r#'rit .ocation +i/e &es %##rd#nnes <FF!0!= d$ '#int s$'rie$r ga$%he d$ (#$t#n . &'aide d'$ne str$%t$re -oint. Les &arge$r et
ha$te$r d$ (#$t#n s#nt +i/es . <E!0H!= . &'aide d'$ne str$%t$re SiTe. La 'r#'rit %ext d$ (#$t#n 'er,et de +i/er &e &i(e&& d$
(#$t#n. La %&asse (#$t#n '#ss:de $n vne,ent 5&i%R d+ini %#,,e s$it 4
Public Event Click As EventHandler
#> 7!entNandler est +#n%ti#n Dd&g$eD aAant &a signat$re s$ivante 4
Public Delegate Sub EventHandler(ByVal sender As Object,ByVal e As EventArgs)
5e&a signi+ie -$e &e gesti#nnaire de &'vne,ent T5&i%RU s$r &e (#$t#n devra av#ir &a signat$re d$ d&g$ TEventeand&erU. I%i0 &#rs
d'$n %&i% s$r &e (#$t#n cmd%est0 &a ,th#de cmd%est$(licO sera a''e&e. 5e&&e-%i est d+inie %#,,e s$it %#n+#r,,ent a$ ,#d:&e
7!entNandler 'r%dent 4
' gestionnaire d'vnement
Private Sub cmdTest_Click(ByVal sender As Object, ByVal evt As EventArgs)
' il ( a eu un clic sur le bouton - on le dit
MessageBox.Show("Clic sur bouton", "Clic sur bouton", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
;n se %#ntente d'a++i%her $n ,essage 4
La %&asse est %#,'i&e et e/%$te 4
dos>vbc /r:system.dll /r:system.drawing.dll /r:system.windows.forms.dll frm2.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4
dos>frm2
La %&asse :essagePox sert . a++i%her des ,essages dans $ne +en*tre. N#$s av#ns $ti&is i%i &e %#nstr$%te$r
Overloads Public Shared Function Show(ByVal owner As IWin32Window,ByVal text As String,ByVal caption As
String,ByVal buttons As MessageBoxButtons,ByVal icon As MessageBoxIcon) As DialogResult
te&t &e ,essage . a++i%her
caption &e titre de &a +en*tre
buttons &es (#$t#ns 'rsents dans &a +en*tre
icon &'i%#ne 'rsente dans &a +en*tre
Le 'ara,:tre "uttons 'e$t 'rendre ses va&e$rs 'ar,i &es %#nstantes s$ivantes 4
constante boutons
Inter+a%es gra'hi-$es
F!K

AbortRetryIgnore

OK
OKCancel
RetryCancel
YesNo
YesNoCancel
Le 'ara,:tre icon 'e$t 'rendre ses va&e$rs 'ar,i &es %#nstantes s$ivantes 4
Asterisk Error
idem Stop
Exclamation
idem Warning
Hand
Inter+a%es gra'hi-$es
F!O
Information
idem Asterisk
None
Question Stop
idem Hand
Warning
La ,th#de ShoI est $ne ,th#de stati-$e -$i rend $n rs$&tat de tA'e System.Windows.Forms.ia!og"esu!t -$i est $ne
n$,rati#n 4
public enum System.Windows.Forms.DialogResult
{
Abort = 0x00000003,
Cancel = 0x00000002,
Ignore = 0x00000005,
No = 0x00000007,
None = 0x00000000,
OK = 0x00000001,
Retry = 0x00000004,
Yes = 0x00000006,
}
P#$r sav#ir s$r -$e& (#$t#n a a''$A &'$ti&isate$r '#$r +er,er &a +en*tre de tA'e :essagePox #n %rira 4
dim res as DialogResult=MessageBox.Show(..)
if res=DialogResult.Yes then
' il a appuy sur le bouton oui
...
end if
". 5#nstr$ire $ne inter+a%e gra'hi-$e ave% Vis$a& St$di#.NET
N#$s re'ren#ns %ertains des e/e,'&es v$s 'r%de,,ent en &es %#nstr$isant ,aintenant ave% Vis$a& St$di#.NET.
"..F 5rati#n initia&e d$ 'r#Bet
Inter+a%es gra'hi-$es
F!E
F. Lan%eQ VS.NET et 'rendre &'#'ti#n Bichier/@ou!eau/-ro,et
. d#nneQ &es %ara%tristi-$es de v#tre 'r#Bet
s&e%ti#nneQ &e tA'e de 'r#Bet -$e v#$s v#$&eQ %#nstr$ire0 i%i $n 'r#Bet VB.NET <F=
s&e%ti#nneQ &e tA'e d'a''&i%ati#n -$e v#$s v#$&eQ %#nstr$ire0 i%i $ne a''&i%ati#n 2ind#2s <=
indi-$eQ dans -$e& d#ssier v#$s v#$&eQ '&a%er &e s#$s-d#ssier d$ 'r#Bet <H=
indi-$eQ &e n#, d$ 'r#Bet <"=. 5e sera ga&e,ent &e n#, d$ d#ssier -$i %#ntiendra &es +i%hiers d$ 'r#Bet
&e n#, de %e d#ssier est ra''e& en <I=
H. Un %ertain n#,(re de d#ssiers et de +i%hiers s#nt a&#rs %rs s#$s &e d#ssier i0 4
sousIdossiers du dossier proCet!
De %es +i%hiers0 se$& $n est intressant0 &e +i%hier #orm1.cs -$i est &e +i%hier s#$r%e ass#%i a$ +#r,$&aire %r 'ar VS.NET. N#$s A
reviendr#ns.
Inter+a%es gra'hi-$es
F!L
F

H
"
I
".. Les +en*tre de &'inter+a%e de VS.NET
L'inter+a%e de VS.NET &aisse ,aintenant a''araCtre %ertains &,ents de n#tre 'r#Bet i0 4
N#$s av#ns $ne +en*tre de %#n%e'ti#n de &'inter+a%e gra'hi-$e 4
En 'renant des %#ntr[&es dans &a (arre d'#$ti&s <t##&(#/ = et en &es d'#sant s$r &a s$r+a%e de &a +en*tre <F=0 n#$s '#$v#ns
%#nstr$ire $ne inter+a%e gra'hi-$e. Si n#s a,en#ns &a s#$ris s$r &a Dt##&(#/D %e&&e-%i s'agrandit et &aisse a''araCtre $n
%ertain n#,(re de %#ntr[&es 4
P#$r &'instant0 n#$s n'en $ti&is#ns a$%$n. T#$B#$rs s$r &'%ran de VS.NET0 n#$s tr#$v#ns &a +en*tre de &'e/'&#rate$r de
s#&$ti#ns D7xplorer SolutionD 4
Dans $n 're,ier te,'s0 n#$s ne n#$s servir#ns 'e$ de %ette +en*tre. E&&e ,#ntre &'ense,(&e des +i%hiers +#r,ant &e 'r#Bet.
Un se$& d'entre-e$/ n#$s intresse 4 &e +i%hier s#$r%e de n#tre 'r#gra,,e0 i%i Borm1.!". En %&i-$ant dr#it s$r Borm1.!"0 #n
#(tient $n ,en$ 'er,ettant d'a%%der s#it a$ %#de s#$r%e de n#tre inter+a%e gra'hi-$e <H##icher le code= s#it . &'inter+a%e
gra'hi-$e e&&e-,*,e <(oncepteur de !ues= 4
;n 'e$t a%%:der . %es de$/ entits dire%te,ent . 'artir de &a +en*tre DSolution 7xplorerD 4
Inter+a%es gra'hi-$es
FF!
F

Les +en*tres #$vertes Ds'a%%$,$&entD dans &a +en*tre 'rin%i'a&e de %#n%e'ti#n 4


I%i Borm1.!"2Design dsigne &a +en*tre de %#n%e'ti#n et Borm1.!" &a +en*tre de %#de. I& s$++it de %&i-$er s$r &'$n des #ng&ets
'#$r 'asser d'$ne +en*tre . &'a$tre. Une a$tre +en*tre i,'#rtante 'rsente s$r &'%ran de VS.NET est &a +en*tre des
'r#'rits 4
Les 'r#'rits e/'#ses dans &a +en*tre s#nt %e&&es d$ %#ntr[&e a%t$e&&e,ent s&e%ti#nn dans &a +en*tre de %#n%e'ti#n
gra'hi-$e. ;n a a%%:s . di++rentes +en*tres d$ 'r#Bet ave% &e ,en$ H##ichage 4
;n A retr#$ve &es +en*tres 'rin%i'a&es -$i viennent d'*tre d%rites ainsi -$e &e$rs ra%%#$r%is %&avier.
"..H E/%$ti#n d'$n 'r#Bet
A&#rs ,*,e -$e n#$s n'av#ns %rit a$%$n %#de0 n#$s av#ns $n 'r#Bet e/%$ta(&e. Jaites B8 #$ D"oguer/Dmarrer '#$r &'e/%$ter.
N#$s #(ten#ns &a +en*tre s$ivante 4
Inter+a%es gra'hi-$es
FFF
5ette +en*tre 'e$t *tre agrandie0 ,ise en i%[ne0 redi,ensi#nne et +er,e.
".." Le %#de gnr 'ar VS.NET
Regard#ns &e %#de <H##ichage/(ode= de n#tre a''&i%ati#n 4
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Code gnr par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'%et appel est re$uis par le %oncepteur 5indo@s 1orm?
InitializeComponent()
'/jouteM une initialisation $uelcon$ue aprs l'appel #nitialiMe%omponent-0
End Sub
'*a mthode substitue )ispose du formulaire pour netto(er la liste des composants?
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Ae$uis par le %oncepteur 5indo@s 1orm
Private components As System.ComponentModel.IContainer
'A";/A86" C la procdure suivante est re$uise par le %oncepteur 5indo@s 1orm
'"lle peut <tre modifie en utilisant le %oncepteur 5indo@s 1orm?
'4e la modifieM pas en utilisant l'diteur de code?
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
Me.Text = "Form2"
End Sub
#End Region
End Class
Une inter+a%e gra'hi-$e drive de &a %&asse de (ase System.6indoIs.Borms.Borm 4
Public Class Form1
Inherits System.Windows.Forms.Form
La %&asse de (ase Borm d+init $ne +en*tre de (ase ave% des (#$t#ns de +er,et$re0 agrandisse,entNrd$%ti#n0 $ne tai&&e aB$sta(&e0 ...
et g:re &es vne,ents s$r %es #(Bets gra'hi-$es. Le %#nstr$%te$r d$ +#r,$&aire $ti&ise $ne ,th#de InitialiTe(omponent dans &a-$e&&e
&es %#ntr[&es d$ +#r,$&aires s#nt %rs et initia&iss.
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque aprs l'appel InitializeComponent()
End Sub
T#$t a$tre travai& . +aire dans &e %#nstr$%te$r 'e$t *tre +ait a'r:s &'a''e& . InitialiTe(omponent. La ,th#de InitialiTe(omponent
Inter+a%es gra'hi-$es
FF
Private Sub InitializeComponent()
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 53)
Me.Name = "Form1"
Me.Text = "Form1"
End Sub
+i/e &e titre de &a +en*tre DJ#r,FD0 sa &arge$r <L= et sa ha$te$r <IH=. Le titre de &a +en*tre est +i/e 'ar &a 'r#'rit %ext et &es
di,ensi#ns 'ar &a 'r#'rit SiTe. SiTe est d+ini dans &'es'a%e de n#,s System.DraIing et est $ne str$%t$re. P#$r e/%$ter %ette
a''&i%ati#n0 i& n#$s +a$t d+inir &e ,#d$&e 'rin%i'a& d$ 'r#Bet. P#$ %e&a0 n#$s $ti&is#ns &'#'ti#n TPr#BetsNPr#'ritsU 4
Dans T;(Bet de d,arrageU0 n#$s indi-$#ns TJ#r,FU -$i est &e +#r,$&aire -$e n#$s ven#ns de %rer. P#$r &an%er &'e/%$ti#n0 n#$s
$ti&is#ns &'#'ti#n TD(#g$erND,arrerU 4
"..I 5#,'i&ati#n dans $ne +en*tre d#s
Maintenant0 essaA#ns de %#,'i&er et e/%$ter %ette a''&i%ati#n dans $ne +en*tre d#s 4
dos>dir form1.vb
14/03/2004 11:53 514 Form1.vb
dos>vbc /r:system.dll /r:system.windows.forms.dll form1.vb
vbc : error BC30420: 'Sub Main' est introuvable dans 'Form1'.
Le %#,'i&ate$r indi-$e -$'i& ne tr#$ve 'as &a 'r#%d$re TMainU. En e++et0 VB.NET ne &'a 'as gnre. N#$s &'av#ns %e'endant dB.
ren%#ntre dans &es e/e,'&es 'r%dents. E&&e a &a +#r,e s$ivante 4
Shared Sub Main()
' on lance l'appli
Application.Run(New Form1) ' ou Form1 est le formulaire
End Sub
RaB#$t#ns dans &e %#de de TJ#r,F.v(U &e %#de 'r%dent et re%#,'i&#ns 4
dos>vbc /r:system.dll /r:system.windows.forms.dll form2.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4
Form2.vb(41) : error BC30451: Le nom 'Application' n'est pas dclar.
Application.Run(New Form2)
~~~~~~~~~~~
5ette +#is-%i0 &e n#, TA''&i%ati#nU n'est 'as %#nn$. 5e&a ve$t si,'&e,ent dire -$e n#$s n'av#ns 'as i,'#rt s#n es'a%e de n#,s
TSAste,.1ind#2s.J#r,sU. RaB#$t#ns &'instr$%ti#n s$ivante 4
Imports System.Windows.Forms
Inter+a%es gra'hi-$es
FFH
'$is re%#,'i&#ns 4
dos>vbc /r:system.dll /r:system.windows.forms.dll form1.vb
5ette +#is-%i0 @a 'asse. E/%$t#ns 4
dos>dir
14/03/2004 11:53 514 Form1.vb
14/03/2004 12:15 3 584 Form1.exe
dos>form1
Un +#r,$&aire de tA'e Borm1 est %r et a++i%h. ;n 'e$t viter &'aB#$t de &a 'r#%d$re TMainU en $ti&isant &'#'ti#n N, d$
%#,'i&ate$r -$i 'er,et de 'r%iser &a %&asse . e/%$ter dans &e %as #> %e&&e-%i hrite de SAste,.1ind#2s.J#r, 4
dos>vbc /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /m:form2 form2.vb
L'#'ti#n N,4+#r, indi-$e -$e &a %&asse . e/%$ter est &a %&asse de n#, T+#r,U.
"..K Gesti#n des vne,ents
Une +#is &e +#r,$&aire a++i%h0 &'a''&i%ati#n se ,et . &'%#$te des vne,ents -$i se 'r#d$isent s$r &e +#r,$&aire <%&i%s0 d'&a%e,ents
de s#$ris0 ...= et +ait e/%$ter %e$/ -$e &e +#r,$&aire g:re. I%i0 n#tre +#r,$&aire ne g:re 'as d'a$tre vne,ent -$e %e$/ grs 'ar &a
%&asse de (ase Borm <%&i%s s$r (#$t#ns +er,et$re0 agrandisse,entNrd$%ti#n0 %hange,ent de tai&&e de &a +en*tre0 d'&a%e,ent de &a
+en*tre0 ...=. Le +#r,$&aire gnr $ti&ise $n attri($t components -$i n'est $ti&is n$&&e 'art. La ,th#de dispose ne sert ga&e,ent . rien
i%i. I& en de ,*,e de %ertains es'a%es de n#,s <(ollections* (omponent:odel* Data= $ti&iss et de %e&$i d+ini '#$r &e 'r#Bet pro,et1.
A$ssi0 dans %et e/e,'&e &e %#de 'e$t *tre si,'&i+i . %e -$i s$it 4
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Inherits System.Windows.Forms.Form
' constructeur
Public Sub New()
' construction du formulaire avec ses composants
InitializeComponent()
End Sub
Private Sub InitializeComponent()
' taille de la fen<tre
Me.Size = New System.Drawing.Size(300, 300)
' titre de la fen<tre
Me.Text = "Form1"
End Sub
Shared Sub Main()
' on lance l'appli
Application.Run(New Form1)
End Sub
End Class
"..O 5#n%&$si#n
N#$s a%%e'ter#ns ,aintenant te& -$e& &e %#de gnr 'ar VS.NET et n#$s %#ntenter#ns d'A aB#$ter &e n[tre n#ta,,ent '#$r grer
&es vne,ents &is a$/ di++rents %#ntr[&es d$ +#r,$&aire.
Inter+a%es gra'hi-$es
FF"
".H Jen*tre ave% %ha,' de saisie0 (#$t#n et &i(e&&
".H.F 5#n%e'ti#n gra'hi-$e
Dans &'e/e,'&e 'r%dent0 n#$s n'avi#ns 'as ,is de %#,'#sants dans &a +en*tre. N#$s %#,,en@#ns $n n#$vea$ 'r#Bet a''e&
inter#ace2. P#$r %e&a n#$s s$iv#ns &a 'r#%d$re e/'&i%ite 'r%de,,ent '#$r %rer $n 'r#Bet 4
5#nstr$is#ns ,aintenant $ne +en*tre ave% $n (#$t#n0 $n &i(e&& et $n %ha,' de saisie 4

Les %ha,'s s#nt &es s$ivants 4
nQ no+ type rJle
F &(&Saisie La(e& $n &i(e&&
t/tSaisie Te/tB#/ $ne Q#ne de saisie
H (tnA++i%her B$tt#n '#$r a++i%her dans $ne (#Cte de dia&#g$e &e %#nten$ de &a Q#ne de saisie t/tSaisie
;n '#$rra 'r#%der %#,,e s$it '#$r %#nstr$ire %ette +en*tre 4 %&i-$eQ dr#it dans &a +en*tre en-deh#rs de t#$t %#,'#sant et
%h#isisseQ &'#'ti#n -roperties '#$r av#ir a%%:s a$/ 'r#'rits de &a +en*tre 4
La +en*tre de 'r#'rits a''araCt a&#rs s$r &a dr#ite 4
Inter+a%es gra'hi-$es
FFI
F

H
5ertaines de %es 'r#'rits s#nt . n#ter 4
BackColor
'#$r +i/er &a %#$&e$r de +#nd de &a +en*tre
ForeColor
'#$r +i/er &a %#$&e$r des dessins #$ d$ te/te s$r &a +en*tre
Menu
'#$r ass#%ier $n ,en$ . &a +en*tre
Text
'#$r d#nner $n titre . &a +en*tre
FormBorderStyle
'#$r +i/er &e tA'e de +en*tre
Font
'#$r +i/er &a '#&i%e de %ara%t:res des %rit$res dans &a +en*tre
Name
'#$r +i/er &e n#, de &a +en*tre
I%i0 n#$s +i/#ns &es 'r#'rits %ext et @ame 4
Text
Saisies S (#$t#ns - F
Name
+r,SaisiesB#$t#ns
A &'aide de &a (arre DB#Cte . #$ti&sD
s&e%ti#nneQ &es %#,'#sants d#nt v#$s aveQ (es#in
d'#seQ-&es s$r &a +en*tre et d#nneQ-&e$r &e$rs (#nnes di,ensi#ns
Une +#is &e %#,'#sant %h#isi dans &e Dt##&(#/D0 $ti&iseQ &a t#$%he DE%ha'D '#$r +aire
dis'araCtre &a (arre d'#$ti&s0 '$is d'#seQ et di,ensi#nneQ &e %#,'#sant. +aites-&e '#$r &es tr#is
%#,'#sants n%essaires 4 .a"el0 %extPox0 Putton. P#$r a&igner et di,ensi#nner %#rre%te,ent &es
%#,'#sants0 $ti&iseQ &e ,en$ Bormat 4
Inter+a%es gra'hi-$es
FFK
Le 'rin%i'e d$ +#r,atage est &e s$ivant 4
F. s&e%ti#nneQ &es di++rents %#,'#sants .
+#r,ater ense,(&e <t#$%he 5tr& a''$Ae=
. s&e%ti#nneQ &e tA'e de +#r,atage dsir
L'#'ti#n Hlign v#$s 'er,et d'a&igner des
%#,'#sants
L'#'ti#n :aOe Same SiTe 'er,et de +aire -$e des
%#,'#sants aient &a ,*,e ha$te$r #$ &a ,*,e
&arge$r 4
L'#'ti#n NoriTontal Spacing 'er,et 'ar e/e,'&e
d'a&igner h#riQ#nta&e,ent des %#,'#sants ave% des
interva&&es entre e$/ de ,*,e tai&&e. Ide, '#$r
&'#'ti#n Fertical Spacing '#$r a&igner verti%a&e,ent.
L'#'ti#n (enter in Borm 'er,et de %entrer $n
%#,'#sant h#riQ#nta&e,ent #$ verti%a&e,ent dans
&a +en*tre 4
Une +#is -$e &es %#,'#sants s#nt %#rre%te,ent
'&a%s s$r &a +en*tre0 +i/eQ &e$rs 'r#'rits. P#$r
%e&a0 %&i-$eQ dr#it s$r &e %#,'#sant et 'reneQ
&'#'ti#n -roperties 4
&'ti-$ette F <La(e&=
S&e%ti#nneQ &e %#,'#sant '#$r av#ir sa
+en*tre de 'r#'rits. Dans %e&&e-%i0 ,#di+ieQ
&es 'r#'rits s$ivantes 4 na+e 4 &(&Saisie0 te&t
4 Saisie
&e %ha,' de saisie <Te/tB#/=
S&e%ti#nneQ &e %#,'#sant '#$r av#ir sa
+en*tre de 'r#'rits. Dans %e&&e-%i0 ,#di+ieQ
&es 'r#'rits s$ivantes 4 na+e 4 t/tSaisie0 te&t
4 ne rien ,ettre
&e (#$t#n H <B$tt#n= 4 na+e 4 %,dA++i%her0
te&t 4 A++i%her
&a +en*tre e&&e-,*,e 4 na+e 4
+r,SaisiesSB#$t#ns0 te&t 4 Saisies S (#$t#ns
- F
Inter+a%es gra'hi-$es
FFO
N#$s '#$v#ns e/%$ter <%tr&-JI= n#tre 'r#Bet '#$r
av#ir $n 're,ier a'er@$ de &a +en*tre en a%ti#n 4
Jer,eQ &a +en*tre. I& n#$s reste . %rire &a 'r#%d$re &ie . $n %&i% s$r &e (#$t#n H##icher.
".H. Gesti#n des vne,ents d'$n +#r,$&aire
Regard#ns &e %#de -$i a t gnr 'ar &e %#n%e'te$r gra'hi-$e 4
...
Public Class frmSaisiesBoutons
Inherits System.Windows.Forms.Form
' composants
Private components As System.ComponentModel.Container = Nothing
Friend WithEvents btnAfficher As System.Windows.Forms.Button
Friend WithEvents lblsaisie As System.Windows.Forms.Label
Friend WithEvents txtsaisie As System.Windows.Forms.TextBox
' constructeur
Public Sub New()
InitializeComponent()
End Sub
...
' initialisation des composants
Private Sub InitializeComponent()
...
End Sub
End Class
;n n#tera t#$t d'a(#rd &a d%&arati#n 'arti%$&i:re des %#,'#sants 4
- &e ,#t %& Friend indi-$e $ne visi(i&it d$ %#,'#sant -$i s'tend . t#$tes &es %&asses d$ 'r#Bet
- &e ,#t %& 7it-Events indi-$e -$e &e %#,'#sant gn:re des vne,ents. N#$s n#$s intress#ns ,aintenant . &a +a@#n de
grer %es vne,ents
Jaites a++i%her &a +en*tre de %#de d$ +#r,$&aire <A++i%hageN%#de #$ JO= 4
La +en*tre %i-dess$s 'rsente de$/ &istes dr#$&antes <F= et <=. La &iste <F= est &a &iste des %#,'#sants d$ +#r,$&aire 4
Inter+a%es gra'hi-$es
FFE
F
La &iste<= &a &iste des vne,ents ass#%is a$ %#,'#sant s&e%ti#nn dans <F= 4
L'$n des vne,ents ass#%is a$ %#,'#sant est a++i%h en gras <i%i 5&i%R=. 5'est &'vne,ent 'ar d+a$t d$ %#,'#sant. L'a%%:s a$
gesti#nnaire de %et vne,ent 'arti%$&ier 'e$t se +aire en d#$(&e-%&i-$ant s$r &e %#,'#sant dans &a fenRtre de conception. VB.net
gn:re a&#rs a$t#,ati-$e,ent &e s-$e&ette d$ gesti#nnaire d'vne,ent dans &a +en*tre de %#de et '#siti#nne &'$ti&isate$r dess$s.
L'a%%:s a$/ gesti#nnaires des a$tres vne,ents se +ait &$i dans &a +en*tre de %#de0 en s&e%ti#nnant &e %#,'#sant dans &a &iste <F= et
&'vne,ent dans <=. VB.net gn:re a&#rs &e s-$e&ette d$ gesti#nnaire d'vne,ent #$ se '#siti#nne dess$s s'i& tait dB. gnr 4
Private Sub btnAfficher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnAfficher.Click
...
End Sub
Par d+a$t0 VB.net 5cE n#,,e &e gesti#nnaire de &'vne,ent E d$ %#,'#sant 5. ;n 'e$t %hanger %e n#, si %e&a n#$s %#nvient.
5'est %e'endant d%#nsei&&. Les dve&#''e$rs VB gardent en gnra& &e n#, gnr 'ar VB %e -$i d#nne $ne %#hren%e d$
n#,,age dans t#$s &es 'r#gra,,es VB. L'ass#%iati#n de &a 'r#%d$re btn:ffic-er'=licS . &'vne,ent =licS d$ %#,'#sant
btn:ffic-er ne se +ait 'ar &e n#, de &a 'r#%d$re ,ais 'ar &e ,#t %& -andles 4
Handles btnAfficher.Click
5i-dess$s0 &e ,#t %& -andles 'r%ise -$e &a 'r#%d$re g:re &'vne,ent =licS d$ %#,'#sant btn:ffic-er. Le gesti#nnaire
d'vne,ent 'r%dent a de$/ 'ara,:tres 4
sender
&'#(Bet . &a s#$r%e de &'vne,ent <i%i &e (#$t#n=
e
$n #(Bet 7!entHrgs -$i dtai&&e &'vne,ent -$i s'est 'r#d$it
N#$s n'$ti&iser#ns a$%$n de %es 'ara,:tres i%i. I& ne n#$s reste '&$s -$'. %#,'&ter &e %#de. I%i0 n#$s v#$&#ns 'rsenter $ne (#Cte
de dia&#g$e ave% dedans &e %#nten$ d$ %ha,' txtSaisie 4
Private Sub btnAfficher_Click(ByVal sender As Object, ByVal e As System.EventArgs)
' on affiche le tete $ui a t saisi dans la bote de saisie 3t+aisie
MessageBox.Show("texte saisi= " + txtsaisie.Text, "Vrification de la saisie", MessageBoxButtons.OK,
MessageBoxIcon.Information)
End Sub
Si #n e/%$te &'a''&i%ati#n #n #(tient &a %h#se s$ivante 4
Inter+a%es gra'hi-$es
FFL
".H.H Une a$tre ,th#de '#$r grer &es vne,ents
P#$r &e (#$t#n (tnA++i%her0 VS.NET a gnr &e %#de s$ivant 4
Private Sub InitializeComponent()
...
'
'btnAfficher
'
Me.btnAfficher.Location = New System.Drawing.Point(102, 48)
Me.btnAfficher.Name = "btnAfficher"
Me.btnAfficher.Size = New System.Drawing.Size(88, 24)
Me.btnAfficher.TabIndex = 2
Me.btnAfficher.Text = "Afficher"
...
End Sub
...
' gestionnaire d'vt clic sur bouton cmdAfficher
Private Sub btnAfficher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnAfficher.Click
...
End Sub
N#$s '#$v#ns ass#%ier &a 'r#%d$re btn:ffic-er'=licS . &'vne,ent =licS d$ (#$t#n btn:ffic-er d'$ne a$tre +a@#n 4
Private Sub InitializeComponent()
...
'
'btnAfficher
'
Me.btnAfficher.Location = New System.Drawing.Point(102, 48)
Me.btnAfficher.Name = "btnAfficher"
Me.btnAfficher.Size = New System.Drawing.Size(88, 24)
Me.btnAfficher.TabIndex = 2
Me.btnAfficher.Text = "Afficher"
AddHandler btnAfficher.Click, AddressOf btnAfficher_Click
...
End Sub
...
' gestionnaire d'vt clic sur bouton cmdAfficher
Private Sub btnAfficher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
...
End Sub
La 'r#%d$re btn:ffic-er'=licS a 'erd$ &e ,#t %& Landles 'erdant ainsi s#n ass#%iati#n ave% &'vne,ent btn:ffic-er.=licS.
5ette ass#%iati#n est ds#r,ais +aite . &'aide d$ ,#t %& :ddLandler 4
AddHandler btnAfficher.Click, AddressOf btnAfficher_Click
Le %#de %i-dess$s -$i sera '&a% dans &a 'r#%d$re InitialiTe=o+ponent d$ +#r,$&aire0 ass#%ie . &'vne,ent btn:ffic-er.=licS
&a 'r#%d$re '#rtant &e n#, btn:ffic-er'=licS. Par ai&&e$rs0 &e %#,'#sant (tnA++i%her n'a '&$s (es#in d$ ,#t %& 1ithEvents 4
Friend btnAfficher As System.Windows.Forms.Button
f$e&&e est &a di++ren%e entre &es de$/ ,th#des X
- &e ,#t %& -andles ne 'er,et d'ass#%ier $n vne,ent . $ne 'r#%d$re qu9au +o+ent de la conception. Le
%#n%e'te$r sait . &'avan%e -$'$ne 'r#%d$re P d#it grer &es vne,ents EF0 E0 ... et i& %rit &e %#de
Inter+a%es gra'hi-$es
F!
Private Sub btnAfficher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
handles E1, E2, ..., En
I& est en e++et '#ssi(&e '#$r $ne 'r#%d$re de grer '&$sie$rs vne,ents.
- &e ,#t %& add-andler 'er,et d'ass#%ier $n vne,ent . $ne 'r#%d$re au +o+ent de l9e&cution. 5e%i est $ti&e
dans $n %adre 'r#d$%te$r-%#ns#,,ate$r d'vne,ents. Un #(Bet 'r#d$it $n vne,ent 'arti%$&ier s$s%e'ti(&e
d'intresser d'a$tres #(Bets. 5e$/-%i s'a(#nnent a$'r:s d$ 'r#d$%te$r '#$r re%ev#ir &'vne,ent <$ne te,'rat$re
aAant d'ass $n se$i& %riti-$e0 'ar e/e,'&e=. A$ %#$rs de &'e/%$ti#n de &'a''&i%ati#n0 &e 'r#d$%te$r de &'vne,ent
sera a,en . e/%$ter di++rentes instr$%ti#ns 4
Addhandler E, AddressOf P1
Addhandler E, AddressOf P2
...
Addhandler E, AddressOf Pn
#> E est &'vne,ent 'r#d$it 'ar &e 'r#d$%te$r et Pi des 'r#%d$res a''artenant a$/ di++rents #(Bets
%#ns#,,ate$rs de %et vne,ent. N#$s a$r#ns &'#%%asi#n de revenir s$r $ne a''&i%ati#n 'r#d$%te$r-%#ns#,,ate$r
d'vne,ents dans $n 'r#%hain %ha'itre.
".H." 5#n%&$si#n
Des de$/ 'r#Bets t$dis0 n#$s '#$v#ns %#n%&$re -$'$ne +#is &'inter+a%e gra'hi-$e %#nstr$ite ave% VS.NET0 &e travai& d$
dve&#''e$r %#nsiste . %rire &es gesti#nnaires des vne,ents -$'i& ve$t grer '#$r %ette inter+a%e gra'hi-$e. N#$s ne 'rsenter#ns
ds#r,ais -$e &e %#de de %e$/-%i.
"." f$e&-$es %#,'#sants $ti&es
N#$s 'rsent#ns ,aintenant diverses a''&i%ati#ns ,ettant en Be$ &es %#,'#sants &es '&$s %#$rants a+in de d%#$vrir &es 'rin%i'a&es
,th#des et 'r#'rits de %e$/-%i. P#$r %ha-$e a''&i%ati#n0 n#$s 'rsent#ns &'inter+a%e gra'hi-$e et &e %#de intressant0
n#ta,,ent &es gesti#nnaires d'vne,ents.
".".F +#r,$&aire J#r,
N#$s %#,,en@#ns 'ar 'rsenter &e %#,'#sant indis'ensa(&e0 &e +#r,$&aire s$r &e-$e& #n d'#se des %#,'#sants. N#$s av#ns dB.
'rsent -$e&-$es-$nes de ses 'r#'rits de (ase. N#$s n#$s attard#ns i%i s$r -$e&-$es vne,ents i,'#rtants d'$n +#r,$&aire.
Load
&e +#r,$&aire est en %#$rs de %harge,ent
Closing
&e +#r,$&aire est en %#$rs de +er,et$re
Closed
&e +#r,$&aire est +er,
L'vne,ent .oad se 'r#d$it avant ,*,e -$e &e +#r,$&aire ne s#it a++i%h. L'vne,ent (losing se 'r#d$it &#rs-$e &e +#r,$&aire est
en %#$rs de +er,et$re. ;n 'e$t en%#re arr*ter %ette +er,et$re 'ar 'r#gra,,ati#n. N#$s %#nstr$is#ns $n +#r,$&aire de n#, Borm1
sans %#,'#sant 4
N#$s trait#ns &es tr#is vne,ents 'r%dents 4
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
' chargement initial du formulaire
MessageBox.Show("Evt Load", "Load")
End Sub
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
Handles MyBase.Closing
' le formulaire est en train de se fermer
MessageBox.Show("Evt Closing", "Closing")
' on demande confirmation
Inter+a%es gra'hi-$es
FF
Dim rponse As DialogResult = MessageBox.Show("Voulez-vous vraiment quitter l'application",
"Closing", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If rponse = DialogResult.No Then
e.Cancel = True
End If
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
' le formulaire est en train de se fermer
MessageBox.Show("Evt Closed", "Closed")
End Sub
N#$s $ti&is#ns &a +#n%ti#n :essagePox '#$r *tre averti des di++rents
vne,ents. L'vne,ent 5&#sing va se 'r#d$ire &#rs-$e &'$ti&isate$r
+er,e &a +en*tre.
N#$s &$i de,and#ns a&#rs s'i& ve$t vrai,ent -$itter &'a''&i%ati#n 4
S'i& r'#nd N#n0 n#$s +i/#ns &a 'r#'rit (ancel de &'vne,ent
(ancel7!entHrgs e -$e &a ,th#de a re@$ en 'ara,:tre. Si n#$s ,ett#ns
%ette 'r#'rit . Balse0 &a +er,et$re de &a +en*tre est a(and#nne0 sin#n
e&&e se '#$rs$it 4
".". ti-$ettes La(e& et (#Ctes de saisie Te/tB#/
N#$s av#ns dB. ren%#ntr %es de$/ %#,'#sants. .a"el est $n %#,'#sant te/te et %extPox $n %#,'#sant %ha,' de saisie. Le$r
'r#'rit 'rin%i'a&e est %ext -$i dsigne s#it &e %#nten$ d$ %ha,' de saisie #$ &e te/te d$ &i(e&&. 5ette 'r#'rit est en
&e%t$reN%rit$re. L'vne,ent ha(it$e&&e,ent $ti&is '#$r %extPox est %ext(hanged -$i signa&e -$e &'$ti&isate$r . ,#di+i &e %ha,' de
saisie. V#i%i $n e/e,'&e -$i $ti&ise &'vne,ent %ext(hanged '#$r s$ivre &es v#&$ti#ns d'$n %ha,' de saisie 4
nQ type no+ rJle
F Te/tB#/ t/tSaisie %ha,' de saisie
La(e& &(&5#ntr#&e a++i%he &e te/te de F en te,'s re&
H B$tt#n %,dE++a%er '#$r e++a%er &es %ha,'s F et
" B$tt#n %,df$itter '#$r -$itter &'a''&i%ati#n
Le %#de 'ertinent de %ette a''&i%ati#n est %e&$i des gesti#nnaires d'vne,ents 4
' clic sur btn $uitter
Private Sub cmdQuitter_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles cmdQuitter.Click
' clic sur bouton 8uitter - on $uitte l'application
Application.Exit()
End Sub
Inter+a%es gra'hi-$es
F
F

H
"
' modification champ tt+aisie
Private Sub txtSaisie_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles txtSaisie.TextChanged
' le contenu du 3et&o a chang - on le copie dans le *abel lbl%ontrole
lblControle.Text = txtSaisie.Text
End Sub
' clic sur btn effacer
Private Sub cmdEffacer_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles cmdEffacer.Click
' on efface le contenu de la bote de saisie
txtSaisie.Text = ""
End Sub
' une touche a t tape
Private Sub txtSaisie_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) _
Handles txtSaisie.KeyPress
' on regarde $uelle touche a t tape
Dim touche As Char = e.KeyChar
If touche = ControlChars.Cr Then
MessageBox.Show(txtSaisie.Text, "Contrle", MessageBoxButtons.OK, MessageBoxIcon.Information)
e.Handled = True
End If
End Sub
;n n#tera &a +a@#n de ter,iner &'a''&i%ati#n dans &a 'r#%d$re cmdAuitter$(licO 4 Hpplication.7xit)+. L'e/e,'&e s$ivant $ti&ise $n
%extPox ,$&ti&ignes 4
La &iste des %#ntr[&es est &a s$ivante 4
nQ type no+ rJle
F Te/tB#/ t/tM$&tiLignes %ha,' de saisie ,$&ti&ignes
Te/tB#/ t/tAB#$t %ha,' de saisie ,#n#&igne
H B$tt#n (tnAB#$ter AB#$te &e %#nten$ de . F
P#$r -$'$n Te/tB#/ devienne ,$&ti&ignes #n '#siti#nne &es 'r#'rits s$ivantes d$ %#ntr[&e 4
Multiline=true
'#$r a%%e'ter '&$sie$rs &ignes de te/te
ScrollBars=( None, Horizontal,
Vertical, Both)
'#$r de,ander . %e -$e &e %#ntr[&e ait des (arres de d+i&e,ent <e#riQ#nta&0 Verti%a&0
B#th= #$ n#n <N#ne=
AcceptReturn=(True, False)
si ga& . tr$e0 &a t#$%he Entre +era 'asser . &a &igne
AcceptTab=(True, False)
si ga& . tr$e0 &a t#$%he Ta( gnrera $ne ta($&ati#n dans &e te/te
Le %#de $ti&e est %e&$i -$i traite &e %&i% s$r &e (#$t#n TAB#$terU et %e&$i -$i traite &a ,#di+i%ati#n d$ %ha,' de saisie Tt/tAB#$tU 4
' vt btn/jouterN%licO
Private Sub btnAjouter_Click1(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnAjouter.Click
' ajout du contenu de tt/jout celui de tt;ultilignes
txtMultilignes.Text &= txtAjout.Text
txtAjout.Text = ""
End Sub
Inter+a%es gra'hi-$es
FH
F
H

' evt tt/joutN3et%hanged


Private Sub txtAjout_TextChanged1(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles txtAjout.TextChanged
' on fie l'tat du bouton /jouter
btnAjouter.Enabled = txtAjout.Text.Trim() <> ""
End Sub
".".H &istes dr#$&antes 5#,(#B#/
Un %#,'#sant (om"oPox est $ne &iste dr#$&ante d#$(&e d'$ne Q#ne de saisie 4 &'$ti&isate$r 'e$t s#it %h#isir $n &,ent dans <= s#it
ta'er d$ te/te dans <F=. I& e/iste tr#is s#rtes de 5#,(#B#/ +i/es 'ar &a 'r#'rit StA&e 4
Simple
&iste n#n dr#$&ante ave% Q#ne d'diti#n
DropDown
&iste dr#$&ante ave% Q#ne d'diti#n
DropDownList
&iste dr#$&ante sans Q#ne d'diti#n
Par d+a$t0 &e tA'e d'$n 5#,(#B#/ est DropDoIn. P#$r d%#$vrir &a %&asse (om"oPox0 ta'eQ (om"oPox dans &'inde/ de &'aide
<Hide/Index=. La %&asse (om"oPox a $n se$& %#nstr$%te$r 4
-u"lic Su" @eI)+ %re $n #(Bet 5#,(#B#/ vide
Les &,ents d$ 5#,(#B#/ s#nt dis'#ni(&es dans &a 'r#'rit Items 4
Public ReadOnly Property Items As ComboBox.ObjectCollection
5'est $ne 'r#'rit inde/e0 Items)i+ dsignant &'&,ent i d$ 5#,(#. S#it ( $n %#,(# et (.Items sa &iste d'&,ents. ;n a &es
'r#'rits s$ivantes 4
C.Items.Count
n#,(re d'&,ents d$ %#,(#
C.Items(i)
&,ent i d$ %#,(#
C.Add(object o)
aB#$te &'#(Bet # en dernier &e,ent d$ %#,(#
C.AddRange(object()
objets)
aB#$te $n ta(&ea$ d'#(Bets en +in de %#,(#
C.Insert(int i,
object o)
aB#$te &'#(Bet # en '#siti#n i d$ %#,(#
C.RemoveAt(int i)
en&:ve &'&,ent i d$ %#,(#
C.Remove(object o)
en&:ve &'#(Bet # d$ %#,(#
C.Clear()
s$''ri,e t#$s &es &,ents d$ %#,(#
C.IndexOf(object o)
rend &a '#siti#n i de &'#(Bet # dans &e %#,(#
;n 'e$t s't#nner -$'$n %#,(# '$isse %#ntenir des #(Bets a&#rs -$'ha(it$e&&e,ent i& %#ntient des %haCnes de %ara%t:res. A$ nivea$
vis$e&0 %e sera &e %as. Si $n (om"oPox %#ntient $n #(Bet o",0 i& a++i%he &a %haCne o",.%oString)+. ;n se ra''e&&e -$e t#$t #(Bet . $ne
,th#de %oString hrite de &a %&asse o",ect et -$i rend $ne %haCne de %ara%t:res Dre'rsentativeD de &'#(Bet. L'&,ent s&e%ti#nn
Inter+a%es gra'hi-$es
F"
F

dans &e %#,(# 5 est (.SelectedItem #$ (.Items)(.SelectedIndex+ #> (.SelectedIndex est &e nY de &'&,ent s&e%ti#nn0 %e nY 'artant de
Qr# '#$r &e 're,ier &,ent.
L#rs d$ %h#i/ d'$n &,ent dans &a &iste dr#$&ante se 'r#d$it &'vne,ent SelectedIndex(hanged -$i 'e$t *tre a&#rs $ti&is '#$r *tre
averti d$ %hange,ent de s&e%ti#n dans &e %#,(#. Dans &'a''&i%ati#n s$ivante0 n#$s $ti&is#ns %et vne,ent '#$r a++i%her &'&,ent
-$i a t s&e%ti#nn dans &a &iste.
N#$s ne 'rsent#ns -$e &e %#de 'ertinent de &a +en*tre. Dans &e %#nstr$%te$r d$ +#r,$&aire n#$s re,'&iss#ns &e %#,(# 4
Public Sub New()
' cration formulaire
InitializeComponent()
' remplissage combo
cmbNombres.Items.AddRange(New String() {"zro", "un", "deux", "trois", "quatre"})
' nous slectionnons le 1er lment de la liste
cmbNombres.SelectedIndex = 0
End Sub
N#$s trait#ns &'vne,ent SelectedIndex(hanged d$ %#,(# -$i signa&e $n n#$ve& &,ent s&e%ti#nn 4
Private Sub cmbNombres_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles cmbNombres.SelectedIndexChanged
' l'lment slectionn a chang - on l'affiche
MessageBox.Show("Elment slectionn : (" & cmbNombres.SelectedItem.ToString & "," &
cmbNombres.SelectedIndex & ")", "Combo", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
"."." %#,'#sant ListB#/
;n se 'r#'#se de %#nstr$ire &'inter+a%e s$ivante 4
Les %#,'#sants de %ette +en*tre s#nt &es s$ivants 4
nQ type no+ rJleDproprits
! J#r, J#r,F +#r,$&aire - B#rderStA&eVJi/edSing&e
F Te/tB#/ t/tSaisie %ha,' de saisie
B$tt#n (tnAB#$ter (#$t#n 'er,ettant d'aB#$ter &e %#nten$ d$ %ha,' de saisie F dans &a &iste H
Inter+a%es gra'hi-$es
FI
F
H
I
K
"
O E
!
H ListB#/ &istB#/F &iste F
" ListB#/ &istB#/ &iste
I B$tt#n (tnFT; trans+:re &es &,ents s&e%ti#nns de &iste F vers &iste
K B$tt#n %,dT! +ait &'inverse
O B$tt#n (tnE++a%erF vide &a &iste F
E B$tt#n (tnE++a%er vide &a &iste
Fonctionne+ent
L'$ti&isate$r ta'e d$ te/te dans &e %ha,' F. I& &'aB#$te . &a &iste F ave% &e (#$t#n H,outer <=. Le %ha,' de saisie <F= est a&#rs
vid et &'$ti&isate$r 'e$t aB#$ter $n n#$ve& &,ent.
I& 'e$t trans+rer des &,ents d'$ne &iste . &'a$tre en s&e%ti#nnant &'&,ent . trans+rer dans &'$ne des &istes et en
%h#ississant &e (#$t#n de trans+ert ad-$at I #$ K. L'&,ent trans+r est aB#$t . &a +in de &a &iste de destinati#n et en&ev
de &a &iste s#$r%e.
I& 'e$t d#$(&e-%&i-$er s$r $n &,ent de &a &iste F. 5e &,ent est a&#rs trans+r dans &a (#Cte de saisie '#$r ,#di+i%ati#n
et en&ev de &a &iste F.
Les (#$t#ns s#nt a&&$,s #$ teints se&#n &es r:g&es s$ivantes 4
&e (#$t#n H,outer n'est a&&$, -$e s'i& A a $n te/te n#n vide dans &e %ha,' de saisie
&e (#$t#n I de trans+ert de &a &iste F vers &a &iste n'est a&&$, -$e s'i& A a $n &,ent s&e%ti#nn dans &a &iste F
&e (#$t#n K de trans+ert de &a &iste vers &a &iste F n'est a&&$, -$e s'i& A a $n &,ent s&e%ti#nn dans &a &iste
&es (#$t#ns O et E d'e++a%e,ent des &istes F et ne s#nt a&&$,s -$e si &a &iste . e++a%er %#ntient des &,ents.
Dans &es %#nditi#ns 'r%dentes0 t#$s &es (#$t#ns d#ivent *tre teints &#rs d$ d,arrage de &'a''&i%ati#n. 5'est &a 'r#'rit 7na"led
des (#$t#ns -$'i& +a$t a&#rs '#siti#nner . #alse. ;n 'e$t &e +aire a$ ,#,ent de &a %#n%e'ti#n %e -$i a$ra '#$r e++et de gnrer &e
%#de %#rres'#ndant dans &a ,th#de InitialiTe(omponent #$ de &e +aire n#$s-,*,es dans &e %#nstr$%te$r %#,,e %i-dess#$s 4
Public Sub New()
' cration initiale du formulaire
InitializeComponent()
' initialisations complmentaires
' on inhibe un certain nombre de boutons
btnAjouter.Enabled = False
btn1TO2.Enabled = False
btn2TO1.Enabled = False
btnEffacer1.Enabled = False
btnEffacer2.Enabled = False
End Sub
L'tat d$ (#$t#n H,outer est %#ntr[& 'ar &e %#nten$ d$ %ha,' de saisie. 5'est &'vne,ent %ext(hanged -$i n#$s 'er,et de s$ivre &es
%hange,ents de %e %#nten$ 4
' chgt dans champ ttsaisie
Private Sub txtSaisie_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles txtSaisie.TextChanged
' le contenu de tt+aisie a chang
' le bouton /jouter n'est allum $ue si la saisie est non vide
btnAjouter.Enabled = txtSaisie.Text.Trim() <> ""
End Sub
L'tat des (#$t#ns de trans+ert d'end d$ +ait -$'$n &,ent a t s&e%ti#nn #$ n#n dans &a &iste -$'i&s %#ntr[&ent 4
' chgt de l'lment slectionn sans listbo1
Private Sub listBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles listBox1.SelectedIndexChanged
' un lment a t slectionn
' on allume le bouton de transfert 1 vers 2
btn1TO2.Enabled = True
End Sub
' chgt de l'lment slectionn sans listbo2
Private Sub listBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles listBox2.SelectedIndexChanged
' un lment a t slectionn
' on allume le bouton de transfert 2 vers 1
btn2TO1.Enabled = True
End Sub
Le %#de ass#%i a$ %&i% s$r &e (#$t#n H,outer est &e s$ivant 4
' clic sur btn /jouter
Inter+a%es gra'hi-$es
FK
Private Sub btnAjouter_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnAjouter.Click
' ajout d'un nouvel lment la liste 1
listBox1.Items.Add(txtSaisie.Text.Trim())
' raM de la saisie
txtSaisie.Text = ""
' *iste 1 n'est pas vide
btnEffacer1.Enabled = True
' retour du focus sur la bote de saisie
txtSaisie.Focus()
End Sub
;n n#tera &a ,th#de Bocus -$i 'er,et de ,ettre &e D+#%$sD s$r $n %#ntr[&e d$ +#r,$&aire. Le %#de ass#%i a$ %&i% s$r &es (#$t#ns
7##acer 4
' clic sur btn "ffacer1
Private Sub btnEffacer1_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnEffacer1.Click
' on efface la liste 1
listBox1.Items.Clear()
btnEffacer1.Enabled = False
End Sub
' clic sur btn effacer2
Private Sub btnEffacer2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
' on efface la liste 2
listBox2.Items.Clear()
btnEffacer2.Enabled = False
End Sub
Le %#de de trans+ert des &,ents s&e%ti#nns d'$ne &iste vers &'a$tre 4
' clic sur btn btn1to2
Private Sub btn1TO2_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btn1TO2.Click
' transfert de l'lment slectionn dans *iste 1 vers *iste 2
transfert(listBox1, listBox2)
' boutons "ffacer
btnEffacer2.Enabled = True
btnEffacer1.Enabled = listBox1.Items.Count <> 0
' boutons de transfert
btn1TO2.Enabled = False
btn2TO1.Enabled = False
End Sub
' clic sur btn btn2to1
Private Sub btn2TO1_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btn2TO1.Click
' transfert de l'lment slectionn dans *iste 2 vers *iste 1
transfert(listBox2, listBox1)
' boutons "ffacer
btnEffacer1.Enabled = True
btnEffacer2.Enabled = listBox2.Items.Count <> 0
' boutons de transfert
btn1TO2.Enabled = False
btn2TO1.Enabled = False
End Sub
' transfert
Private Sub transfert(ByVal l1 As ListBox, ByVal l2 As ListBox)
' transfert de l'lment slectionn de la liste 1 vers la liste l2
' un lment slectionn >
If l1.SelectedIndex = -1 Then Return
' ajout dans l2
l2.Items.Add(l1.SelectedItem)
' suppression dans l1
l1.Items.RemoveAt(l1.SelectedIndex)
End Sub
T#$t d'a(#rd0 #n %re $ne ,th#de
Private Sub transfert(ByVal l1 As ListBox, ByVal l2 As ListBox)
-$i trans+:re dans &a &iste l2 &'&,ent s&e%ti#nn dans &a &iste l1. 5e&a n#$s 'er,et d'av#ir $ne se$&e ,th#de a$ &ie$ de de$/ '#$r
trans+rer $n &,ent de listPox1 vers listPox2 #$ de listPox2 vers listPox1. Avat de +aire &e trans+ert0 #n s'ass$re -$'i& A a (ien $n
&,ent s&e%ti#nn dans &a &iste l1 4
' un lment slectionn >
Inter+a%es gra'hi-$es
FO
If l1.SelectedIndex = -1 Then Return
La 'r#'rit SelectedIndex va$t -F si a$%$n &,ent n'est a%t$e&&e,ent s&e%ti#nn. Dans &es 'r#%d$res
Private Sub btnXTOY_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnXTOY.Click
#n #':re &e trans+ert de &a &iste 3 vers &a &iste o et #n %hange &'tat de %ertains (#$t#ns '#$r re+&ter &e n#$ve& tat des &istes.
".".I %ases . %#%her 5he%RB#/0 (#$t#ns radi# B$tt#nRadi#
N#$s n#$s 'r#'#s#ns d'%rire &'a''&i%ati#n s$ivante 4
Les %#,'#sants de &a +en*tre s#nt &es s$ivants 4
nQ type no+ rJle
F Radi#B$tt#n radi#B$tt#nF
radi#B$tt#n
radi#B$tt#nH
H (#$t#ns radi#
5he%RB#/ %he%hB#/F
%he%hB#/
%he%hB#/H
H %ases . %#%her
H ListB#/ &stVa&e$rs $ne &iste
Si #n %#nstr$it &es tr#is (#$t#ns radi# &'$n a'r:s &'a$tre0 i&s +#nt 'artie 'ar d+a$t d'$n ,*,e gr#$'e. A$ssi &#rs-$e &'$n est %#%h0
&es a$tres ne &e s#nt 'as. L'vne,ent -$i n#$s intresse '#$r %es si/ %#ntr[&es est &'vne,ent (hecO(hanged indi-$ant -$e &'tat de
&a %ase . %#%her #$ d$ (#$t#n radi# a %hang. 5et tat est re'rsent dans &es de$/ %as 'ar &a 'r#'rit (##&enne (hecO -$i . vrai
signi+ie -$e &e %#ntr[&e est %#%h. N#$s av#ns i%i $ti&is $ne se$&e ,th#de '#$r traiter &es si/ vne,ents (hecO(hanged0 &a ,th#de
a##iche 4
' affiche
Private Sub affiche(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles checkBox1.CheckedChanged, checkBox2.CheckedChanged, checkBox3.CheckedChanged, _
radioButton1.CheckedChanged, radioButton2.CheckedChanged, radioButton3.CheckedChanged
' affiche l'tat du bouton radio ou de la case cocher
' est-ce un checObo >
If (TypeOf (sender) Is CheckBox) Then
Dim chk As CheckBox = CType(sender, CheckBox)
lstValeurs.Items.Insert(0, chk.Name & "=" & chk.Checked)
End If
' est-ce un radiobutton >
If (TypeOf (sender) Is RadioButton) Then
Dim rdb As RadioButton = CType(sender, RadioButton)
lstValeurs.Items.Insert(0, rdb.Name & "=" & rdb.Checked)
End If
End Sub
La sAnta/e TA'e;+ <sender= Is 5he%RB#/ 'er,et de vri+ier si &'#(Bet sender est de tA'e (hecOPox. 5e&a n#$s 'er,et ens$ite de +aire
$n transtA'age vers &e tA'e e/a%t de sender. La ,th#de a##iche %rit dans &a &iste lstFaleurs &e n#, d$ %#,'#sant . &'#rigine de
&'vne,ent et &a va&e$r de sa 'r#'rit (hecOed. A &'e/%$ti#n0 #n v#it -$'$n %&i% s$r $n (#$t#n radi# 'r#v#-$e de$/ vne,ents
(hecO(hanged 4 &'$n s$r &'an%ien (#$t#n %#%h -$i 'asse . Dn#n %#%hD et &'a$tre s$r &e n#$vea$ (#$t#n -$i 'asse . D%#%hD.
".".K variate$rs S%r#&&Bar
Inter+a%es gra'hi-$es
FE
F

H
I& e/iste '&$sie$rs tA'es de variate$r 4 &e variate$r h#riQ#nta& <hScrollPar=0 &e variate$r verti%a&
<!ScrollPar=0 &'in%r,ente$r <@umericUpDoIn=.
Ra&is#ns &'a''&i%ati#n s$ivante 4

nQ type no+ rJle
F hS%r#&&Bar hS%r#&&BarF $n variate$r h#riQ#nta&
hS%r#&&Bar hS%r#&&Bar $n variate$r h#riQ#nta& -$i s$it &es variati#ns d$ variate$r F
H Te/tB#/ t/tVa&e$r a++i%he &a va&e$r d$ variate$r h#riQ#nta&
Read;n&AVtr$e '#$r e,'*%her t#$te saisie
" N$,eri%U'D#2n in%r,ente$r 'er,et de +i/er &a va&e$r d$ variate$r
Un variate$r ScrollPar 'er,et . &'$ti&isate$r de %h#isir $ne va&e$r dans $ne '&age de va&e$rs enti:res sA,(#&ise 'ar &a
D(andeD d$ variate$r s$r &a-$e&&e se d'&a%e $n %$rse$r. La va&e$r d$ variate$r est dis'#ni(&e dans sa 'r#'rit Value.
P#$r $n variate$r h#riQ#nta&0 &'e/tr,it ga$%he re'rsente &a va&e$r ,ini,a&e de &a '&age0 &'e/tr,it dr#ite &a va&e$r
,a/i,a&e0 &e %$rse$r &a va&e$r a%t$e&&e %h#isie. P#$r $n variate$r verti%a&0 &e ,ini,$, est re'rsent 'ar &'e/tr,it ha$te0
&e ,a/i,$, 'ar &'e/tr,it (asse. 5es va&e$rs s#nt re'rsentes 'ar &es 'r#'rits <ini+u+ et <a&i+u+ et va&ent 'ar
d+a$t ! et F!!.
Un %&i% s$r &es e/tr,its d$ variate$r +ait varier &a va&e$r d'$n in%r,ent <'#siti+ #$ ngati+= se&#n &'e/tr,it %&i-$e
a''e&e .+all=-ange -$i est 'ar d+a$t F.
Un %&i% de 'art et d'a$tre d$ %$rse$r +ait varier &a va&e$r d'$n in%r,ent <'#siti+ #$ ngati+= se&#n &'e/tr,it %&i-$e
a''e&e 5arge=-ange -$i est 'ar d+a$t F!.
L#rs-$'#n %&i-$e s$r &'e/tr,it s$'rie$re d'$n variate$r verti%a&0 sa va&e$r di,in$e. 5e&a 'e$t s$r'rendre &'$ti&isate$r
,#Aen -$i s'attend n#r,a&e,ent . v#ir &a va&e$r D,#nterD. ;n r:g&e %e 'r#(&:,e en d#nnant $ne va&e$r ngative a$/
'r#'rits Small(hange et .arge(hange
5es %in- 'r#'rits <Value, <ini+u+, <a&i+u+, .+all=-ange, 5arge=-ange= s#nt a%%essi(&es en &e%t$re et
%rit$re.
L'vne,ent 'rin%i'a& d$ variate$r est %e&$i -$i signa&e $n %hange,ent de va&e$r 4 &'vne,ent .croll.
Un %#,'#sant Nu+ericUp/o2n est 'r#%he d$ variate$r 4 i& a &$i a$ssi &es 'r#'rits :inimum0 :aximum et Falue0 'ar d+a$t !0
F!!0 !. Mais i%i0 &a 'r#'rit Falue est a++i%he dans $ne (#Cte de saisie +aisant 'artie intgrante d$ %#ntr[&e. L'$ti&isate$r 'e$t &$i
,*,e ,#di+ier %ette va&e$r sa$+ si #n a ,is &a 'r#'rit Read5nly d$ %#ntr[&e . vrai. La va&e$r de &'in%r,ent est +i/ 'ar &a
'r#'rit Increment0 'ar d+a$t F. L'vne,ent 'rin%i'a& d$ %#,'#sant @umericUpDoIn est %e&$i -$i signa&e $n %hange,ent de va&e$r
4 &'vne,ent Value=-anged. Le %#de $ti&e de n#tre a''&i%ati#n est &e s$ivant 4
Le +#r,$&aire est ,is en +#r,e &#rs de sa %#nstr$%ti#n 4
' constructeur
Public Sub New()
' cration initiale du formulaire
InitializeComponent()
' on donne au variateur 2 les m<mes caractristi$ues $u'au variateur 1
hScrollBar2.Minimum = hScrollBar1.Value
hScrollBar2.Minimum = hScrollBar1.Minimum
hScrollBar2.Maximum = hScrollBar1.Maximum
hScrollBar2.LargeChange = hScrollBar1.LargeChange
hScrollBar2.SmallChange = hScrollBar1.SmallChange
' idem pour l'incrmenteur
incrmenteur.Minimum = hScrollBar1.Value
incrmenteur.Minimum = hScrollBar1.Minimum
incrmenteur.Maximum = hScrollBar1.Maximum
incrmenteur.Increment = hScrollBar1.SmallChange
Inter+a%es gra'hi-$es
FL
F

H
"
' on donne au 3et&o la valeur du variateur 1
txtValeur.Text = "" & hScrollBar1.Value
End Sub
Le gesti#nnaire -$i s$it &es variati#ns de va&e$r d$ variate$r F 4
' gestion variateur hscrollbar1
Private Sub hScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs)
_
Handles hScrollBar1.Scroll
' changement de valeur du variateur 1
' on rpercute sa valeur sur le variateur 2 et sur le tetbo 3t.aleur
hScrollBar2.Value = hScrollBar1.Value
txtValeur.Text = "" & hScrollBar1.Value
End Sub
Le gesti#nnaire -$i s$it &es variati#ns de va&e$r d$ variate$r 4
' gestion variateur hscrollbar2
Private Sub hScrollBar2_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs)
_
Handles hScrollBar2.Scroll
' on inhibe tout changement du variateur 2
' en le forPant garder la valeur du variateur 1
e.NewValue = hScrollBar1.Value
End Sub
Le gesti#nnaire -$i s$it &es variati#ns d$ %#ntr[&e incrmenteur 4
' gestion incrmenteur
Private Sub incrmenteur_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles incrmenteur.ValueChanged
' on fie la valeur du variateur 2
hScrollBar2.Value = CType(incrmenteur.Value, Integer)
End Sub
".I lvne,ents s#$ris
L#rs-$'#n dessine dans $n %#ntene$r0 i& est i,'#rtant de %#nnaCtre &a '#siti#n de &a s#$ris '#$r 'ar e/e,'&e a++i%her $n '#int &#rs
d'$n %&i%. Les d'&a%e,ents de &a s#$ris 'r#v#-$ent des vne,ents dans &e %#ntene$r dans &e-$e& e&&e se d'&a%e.
MouseEnter
&a s#$ris vient d'entrer dans &e d#,aine d$ %#ntr[&e
MouseLeave
&a s#$ris vient de -$itter &e d#,aine d$ %#ntr[&e
MouseMove
&a s#$ris (#$ge dans &e d#,aine d$ %#ntr[&e
MouseDown
Pressi#n s$r &e (#$t#n ga$%he de &a s#$ris
MouseUp
Re&h%he,ent d$ (#$t#n ga$%he de &a s#$ris
DragDrop
&'$ti&isate$r &h%he $n #(Bet s$r &e %#ntr[&e
DragEnter
&'$ti&isate$r entre dans &e d#,aine d$ %#ntr[&e en tirant $n #(Bet
DragLeave
&'$ti&isate$r s#rt d$ d#,aine d$ %#ntr[&e en tirant $n #(Bet
DragOver
&'$ti&isate$r 'asse a$-dess$s d#,aine d$ %#ntr[&e en tirant $n #(Bet
V#i%i $n 'r#gra,,e 'er,ettant de ,ie$/ a''rhender . -$e&s ,#,ents se 'r#d$isent &es di++rents vne,ents s#$ris 4
Inter+a%es gra'hi-$es
FH!
nQ type no+ rJle
F La(e& &(&P#siti#n '#$r a++i%her &a '#siti#n de &a s#$ris dans &e +#r,$&aire F0 &a &iste #$ &e (#$t#n H
ListB#/ &stEvts '#$r a++i%her &es vts s#$ris a$tres -$e M#$seM#ve
H B$tt#n (tnE++a%er '#$r e++a%er &e %#nten$ de
Les gesti#nnaires d'vne,ents s#nt &es s$ivants. P#$r s$ivre &es d'&a%e,ents de &a s#$ris s$r &es tr#is %#ntr[&es0 #n n'%rit -$'$n
se$& gesti#nnaire 4
' vt form1Nmousemove
Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseMove, lstEvts.MouseMove, btnEffacer.MouseMove, lstEvts.MouseMove
' mvt souris - on affiche les coordonnes -Q'R0 de celle-ci
lblPosition.Text = "(" & e.X & "," & e.Y & ")"
End Sub
I& +a$t sav#ir -$'. %ha-$e +#is -$e &a s#$ris entre dans &e d#,aine d'$n %#ntr[&e0 s#n sAst:,e de %##rd#nnes %hange. S#n #rigine
<!0!= est &e %#in s$'rie$r ga$%he d$ %#ntr[&e s$r &e-$e& e&&e se tr#$ve. Ainsi . &'e/%$ti#n0 &#rs-$'#n 'asse &a s#$ris d$ +#r,$&aire a$
(#$t#n0 #n v#it %&aire,ent &e %hange,ent de %##rd#nnes. A+in de ,ie$/ v#ir %es %hange,ents de d#,aine de &a s#$ris0 #n 'e$t
$ti&iser &a 'r#'rit (ursor des %#ntr[&es 4
5ette 'r#'rit 'er,et de +i/er &a +#r,e d$ %$rse$r de s#$ris &#rs-$e %e&&e-%i entre dans &e d#,aine d$ %#ntr[&e. Ainsi dans n#tre
e/e,'&e0 n#$s av#ns +i/ &e %$rse$r . /efault '#$r &e +#r,$&aire &$i-,*,e0 Land '#$r &a &iste et . No '#$r &e (#$t#n H %#,,e
&e ,#ntrent &es %#'ies d'%ran %i-dess#$s.
Inter+a%es gra'hi-$es
FHF
F

H
Dans &a ,th#de TInitia&iQe5#,'#nentU0 &e %#de gnr 'ar %es %h#i/ est &e s$ivant 4
Me.lstEvts.Cursor = System.Windows.Forms.Cursors.Hand
Me.btnEffacer.Cursor = System.Windows.Forms.Cursors.No
Par ai&&e$rs0 '#$r dte%ter &es entres et s#rties de &a s#$ris s$r &a &iste 0 n#$s trait#ns &es vne,ents <ouseEnter et
<ouse5eave de %ette ,*,e &iste 4
' evt lst"vtsN;ouse"nter
Private Sub lstEvts_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles lstEvts.MouseEnter
affiche("MouseEnter sur liste")
End Sub
' evt lst"vtsN;ouse*eave
Private Sub lstEvts_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles lstEvts.MouseLeave
affiche("MouseLeave sur liste")
End Sub
' affiche
Private Sub affiche(ByVal message As String)
' on affiche le message en haut de la liste des evts
lstEvts.Items.Insert(0, message)
End Sub
P#$r traiter &es %&i%s s$r &e +#r,$&aire0 n#$s trait#ns &es vne,ents :ouseDoIn et :ouseUp 4
' vt 1orm1N;ouse)o@n
Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseDown
affiche("MouseDown sur formulaire")
End Sub
' vt 1orm1N;ouse6p
Private Sub Form1_MouseUp(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseUp
affiche("MouseUp sur formulaire")
End Sub
Inter+a%es gra'hi-$es
FH
En+in0 &e %#de d$ gesti#nnaire de %&i% s$r &e (#$t#n 7##acer 4
' vt btn"ffacerN%licO
Private Sub btnEffacer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnEffacer.Click
' efface la liste des evts
lstEvts.Items.Clear()
End Sub
".K 5rer $ne +en*tre ave% ,en$
V#A#ns ,aintenant %#,,ent %rer $ne +en*tre ave% ,en$. N#$s a&&#ns %rer &a +en*tre s$ivante 4
Le %#ntr[&e F est $n %extPox en &e%t$re se$&e <Read5nlyDtrue= et de n#, txtStatut. L'ar(#res%en%e d$ ,en$ est &a s$ivante 4
Les #'ti#ns de ,en$ s#nt des %#ntr[&es %#,,e &es a$tres %#,'#sants vis$e&s et #nt des 'r#'rits et vne,ents. Par e/e,'&e &e
ta(&ea$ des 'r#'rits de &'#'ti#n de ,en$ AF 4
De$/ 'r#'rits s#nt $ti&ises dans n#tre e/e,'&e 4
Name
&e n#, d$ %#ntr[&e ,en$
Text
&e &i(e&& de &'#'ti#n de ,en$
Les 'r#'rits des di++rentes #'ti#ns de ,en$ de n#tre e/e,'&e s#nt &es s$ivantes 4
Na+e Te&t
mnuA
#'ti#ns A
Inter+a%es gra'hi-$es
FHH
F
mnuA1
AF
mnuA2
A
mnuA3
AH
mnuB
#'ti#ns B
mnuB1
BF
mnuSep1
- <s'arate$r=
mnuB2
B
mnuB3
BH
mnuB31
BHF
mnuB32
BH
P#$r %rer $n ,en$0 #n %h#isit &e %#,'#sant D:ain:enuD dans &a (arre D%oolPoxD 4
;n a a&#rs $n ,en$ vide -$i s'insta&&e s$r &e +#r,$&aire ave% des %ases vides intit$&es DTA'e eereD. I& s$++it d'A indi-$er &es
di++rentes #'ti#ns d$ ,en$ 4
P#$r insrer $n s'arate$r entre de$/ #'ti#ns %#,,e %i-dess$s entre &es #'ti#ns BF et B0 '#siti#nneQ-v#$s . &'e,'&a%e,ent d$
s'arate$r dans &e ,en$0 %&i-$eQ dr#it et 'reneQ &'#'ti#n Insert Separator 4
Si #n &an%e &'a''&i%ati#n 'ar %tr&-JI0 #n #(tient $n +#r,$&aire ave% $n ,en$ -$i '#$r &'instant ne +ait rien. Les #'ti#ns de ,en$ s#nt
traites %#,,e des %#,'#sants 4 e&&es #nt des 'r#'rits et des vne,ents. Dans T+en*tre de %#deU0 s&e%ti#nneQ &e %#,'#sant
,n$AF '$is s&e%ti#nneQ &es vne,ents ass#%is 4
Inter+a%es gra'hi-$es
FH"
Si %i-dess$s #n gn:re &'vne,ent (licO0 VS.NET gn:re a$t#,ati-$e,ent &a 'r#%d$re s$ivante 4
Private Sub mnuA1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuA.Click
....
End Sub
N#$s '#$rri#ns 'r#%der ainsi '#$r t#$tes &es #'ti#ns de ,en$. I%i0 &a ,*,e 'r#%d$re 'e$t *tre $ti&ise '#$r t#$tes &es #'ti#ns.
A$ssi ren#,,e-t-#n &a 'r#%d$re 'r%dente a##iche et n#$s d%&ar#ns &es vne,ents -$'e&&e g:re 4
Private Sub affiche(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles mnuA1.Click, mnuA2.Click, mnuB1.Click, mnuB2.Click, mnuB31.Click, mnuB32.Click
' affiche dans le TextBox le nom du sous-menu choisi
txtStatut.Text = (CType(sender, MenuItem)).Text
End Sub
Dans %ette ,th#de0 n#$s n#$s %#ntent#ns d'a++i%her &a 'r#'rit %ext de &'#'ti#n de ,en$ . &a s#$r%e de &'vne,ent. La s#$r%e
de &'vne,ent sender est de tA'e o",ect. Les #'ti#ns de ,en$ s#nt e&&es de tA'e :enuItem0 a$ssi est-#n #(&ig i%i de +aire $n
transtA'age de o",ect vers :enuItem. E/%$teQ &'a''&i%ati#n et s&e%ti#nneQ &'#'ti#n AF '#$r #(tenir &e ,essage s$ivant 4
Le %#de $ti&e de %ette a''&i%ati#n0 #$tre %e&$i de &a ,th#de a##iche0 est %e&$i de &a %#nstr$%ti#n d$ ,en$ dans &e %#nstr$%te$r d$
+#r,$&aire <InitialiTe(omponent= 4
Private Sub InitializeComponent()
Me.mainMenu1 = New System.Windows.Forms.MainMenu
Me.mnuA = New System.Windows.Forms.MenuItem
Me.mnuA1 = New System.Windows.Forms.MenuItem
Me.mnuA2 = New System.Windows.Forms.MenuItem
Me.mnuA3 = New System.Windows.Forms.MenuItem
Me.mnuB = New System.Windows.Forms.MenuItem
Me.mnuB1 = New System.Windows.Forms.MenuItem
Me.mnuB2 = New System.Windows.Forms.MenuItem
Me.mnuB3 = New System.Windows.Forms.MenuItem
Me.mnuB31 = New System.Windows.Forms.MenuItem
Me.mnuB32 = New System.Windows.Forms.MenuItem
Me.txtStatut = New System.Windows.Forms.TextBox
Me.mnuSep1 = New System.Windows.Forms.MenuItem
Me.SuspendLayout()
'
' mainMenu1
'
Me.mainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuA, Me.mnuB})
'
' mnuA
'
Me.mnuA.Index = 0
Me.mnuA.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuA1, Me.mnuA2, Me.mnuA3})
Me.mnuA.Text = "Options A"
'
' mnuA1
'
Me.mnuA1.Index = 0
Me.mnuA1.Text = "A1"
'
Inter+a%es gra'hi-$es
FHI
' mnuA2
'
Me.mnuA2.Index = 1
Me.mnuA2.Text = "A2"
'
' mnuA3
'
Me.mnuA3.Index = 2
Me.mnuA3.Text = "A3"
'
' mnuB
'
Me.mnuB.Index = 1
Me.mnuB.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuB1, Me.mnuSep1, Me.mnuB2,
Me.mnuB3})
Me.mnuB.Text = "Options B"
'
' mnuB1
'
Me.mnuB1.Index = 0
Me.mnuB1.Text = "B1"
'
' mnuB2
'
Me.mnuB2.Index = 2
Me.mnuB2.Text = "B2"
'
' mnuB3
'
Me.mnuB3.Index = 3
Me.mnuB3.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuB31, Me.mnuB32})
Me.mnuB3.Text = "B3"
'
' mnuB31
'
Me.mnuB31.Index = 0
Me.mnuB31.Text = "B31"
'
' mnuB32
'
Me.mnuB32.Index = 1
Me.mnuB32.Text = "B32"
'
' txtStatut
'
Me.txtStatut.Location = New System.Drawing.Point(8, 8)
Me.txtStatut.Name = "txtStatut"
Me.txtStatut.ReadOnly = True
Me.txtStatut.Size = New System.Drawing.Size(112, 20)
Me.txtStatut.TabIndex = 0
Me.txtStatut.Text = ""
'
' mnuSep1
'
Me.mnuSep1.Index = 1
Me.mnuSep1.Text = "-"
'
' Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(136, 42)
Me.Controls.Add(txtStatut)
Me.Menu = Me.mainMenu1
Me.Name = "Form1"
Me.Text = "Menus"
Me.ResumeLayout(False)
End Sub
;n n#tera &'instr$%ti#n -$i ass#%ie &e ,en$ a$ +#r,$&aire 4
Me.Menu = Me.mainMenu1
".O 5#,'#sants n#n vis$e&s
Inter+a%es gra'hi-$es
FHK
N#$s n#$s intress#ns ,aintenant . $n %ertain n#,(re de %#,'#sants n#n vis$e&s 4 #n &es $ti&ise &#rs de &a %#n%e'ti#n ,ais #n ne
&es v#it 'as &#rs de &'e/%$ti#n.
".O.F B#Ctes de dia&#g$e ;'enJi&eDia&#g et SaveJi&eDia&#g
N#$s a&&#ns %#nstr$ire &'a''&i%ati#n s$ivante 4
Les %#ntr[&es s#nt &es s$ivants 4
NQ type no+ rJle
F Te/tB#/ ,$&ti&ignes t/tTe/te te/te ta' 'ar &'$ti&isate$r #$ %harg . 'artir d'$n +i%hier
B$tt#n (tnSa$vegarde
r
'er,et de sa$vegarder &e te/te de F dans $n +i%hier te/te
H B$tt#n (tn5harger 'er,et de %harger &e %#nten$ d'$n +i%hier te/te dans F
" B$tt#n (tnE++a%er e++a%e &e %#nten$ de F
De$/ %#ntr[&es n#n vis$e&s s#nt $ti&iss 4
L#rs-$'i&s s#nt 'ris dans &e DT##&B#/ D et d'#ss s$r &e +#r,$&aire0 i&s s#nt '&a%s dans $ne Q#ne . 'art en (as d$ +#r,$&aire. Les
%#,'#sants DDia&#gD s#nt 'ris dans &e DT##&B#/D 4
Le %#de d$ (#$t#n 7##acer est si,'&e 4
Private Sub btnEffacer_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnEffacer.Click
' on efface la bote de saisie
txtTexte.Text = ""
End Sub
La %&asse .aveFile/ialog est d+inie %#,,e s$it 4
Inter+a%es gra'hi-$es
FHO
F
H "
E&&e drive de '&$sie$rs nivea$/ de %&asse. De %es n#,(re$ses 'r#'rits et ,th#des n#$s retiendr#ns &es s$ivantes 4
string Filter
&es tA'es de +i%hiers 'r#'#ss dans &a &iste dr#$&ante des tA'es de +i%hiers de &a (#Cte de dia&#g$e
int FilterIndex
&e nY d$ tA'e de +i%hier 'r#'#s 'ar d+a$t dans &a &iste %i-dess$s. 5#,,en%e . !.
string
InitialDirectory
&e d#ssier 'rsent initia&e,ent '#$r &a sa$vegarde d$ +i%hier
string FileName
&e n#, d$ +i%hier de sa$vegarde indi-$ 'ar &'$ti&isate$r
DialogResult.ShowDia
log()
,th#de -$i a++i%he &a (#Cte de dia&#g$e de sa$vegarde. Rend $n rs$&tat de tA'e Dia&#gRes$&t.
La ,th#de ShoIDialog a++i%he $ne (#Cte de dia&#g$e ana&#g$e . &a s$ivante 4
1
&iste dr#$&ante %#nstr$ite . 'artir de &a 'r#'rit Filter. Le tA'e de +i%hier 'r#'#s 'ar d+a$t est +i/ 'ar FilterInde&
2
d#ssier %#$rant0 +i/ 'ar Initial/irectory si %ette 'r#'rit a t renseigne
3
n#, d$ +i%hier %h#isi #$ ta' dire%te,ent 'ar &'$ti&isate$r. Sera dis'#ni(&e dans &a 'r#'rit FileNa+e
4
(#$t#ns EnregistrerD:nnuler. Si &e (#$t#n 7nregistrer est $ti&is0 &a +#n%ti#n ShoIDialog rend &e rs$&tat /ialog@esult.8V
La 'r#%d$re de sa$vegarde 'e$t s'%rire ainsi 4
Private Sub btnSauvegarder_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnSauvegarder.Click
Inter+a%es gra'hi-$es
FHE
F

H
"
' on sauvegarde la bote de saisie dans un fichier tete
' on paramtre la bote de dialogue savefile)ialog1
saveFileDialog1.InitialDirectory = Application.ExecutablePath
saveFileDialog1.Filter = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"
saveFileDialog1.FilterIndex = 0
' on affiche la bote de dialogue et on rcupre son rsultat
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
' on rcupre le nom du fichier
Dim nomFichier As String = saveFileDialog1.FileName
Dim fichier As StreamWriter = Nothing
Try
' on ouvre le fichier en criture
fichier = New StreamWriter(nomFichier)
' on crit le tete dedans
fichier.Write(txtTexte.Text)
Catch ex As Exception
' problme
MessageBox.Show("Problme l'criture du fichier (" + ex.Message + ")", "Erreur",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
Finally
' on ferme le fichier
Try
fichier.Close()
Catch
End Try
End Try
End If
End Sub
;n +i/e &e d#ssier initia& a$ d#ssier -$i %#ntient &'e/%$ta(&e de &'a''&i%ati#n 4
saveFileDialog1.InitialDirectory = Application.ExecutablePath
;n +i/e &es tA'es de +i%hiers . 'rsenter
saveFileDialog1.Filter = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"
;n n#tera &a sAnta/e des +i&tres +i&treFi+i&trei..i+i&tren ave% +i&treiV Te/tei,#d:&e de +i%hier. I%i &'$ti&isate$r a$ra &e %h#i/
entre &es +i%hiers W.t/t et W.W.
;n +i/e &e tA'e de +i%hier . 'rsenter a$ d($t
saveFileDialog1.FilterIndex = 0
I%i0 %e s#nt &es +i%hiers de tA'e W.t/t -$i ser#nt 'rsents t#$t d'a(#rd . &'$ti&isate$r.
La (#Cte de dia&#g$e est a++i%he et s#n rs$&tat r%$'r
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
Pendant -$e &a (#Cte de dia&#g$e est a++i%he0 &'$ti&isate$r n'a '&$s a%%:s a$ +#r,$&aire 'rin%i'a& <(#Cte de dia&#g$e dite
,#da&e=. L'$ti&isate$r +i/e &e n#, d$ +i%hier . sa$vegarder et -$itte &a (#Cte s#it 'ar &e (#$t#n Enregistrer0 s#it 'ar &e
(#$t#n Ann$&er s#it en +er,ant &a (#Cte. Le rs$&tat de &a ,th#de ShoIDialog est DialogResult.5M $ni-$e,ent si
&'$ti&isate$r a $ti&is &e (#$t#n 7nregistrer '#$r -$itter &a (#Cte de dia&#g$e.
5e%i +ait0 &e n#, d$ +i%hier . %rer est ,aintenant dans &a 'r#'rit Ji&eNa,e de &'#(Bet saveJi&eDia&#gF. ;n est a&#rs
ra,en . &a %rati#n %&assi-$e d'$n +i%hier te/te. ;n A %rit &e %#nten$ d$ %extPox 4 txt%exte.%ext t#$t en grant &es
e/%e'ti#ns -$i 'e$vent se 'r#d$ire.
La %&asse 8penFile/ialog est tr:s 'r#%he de &a %&asse Sa!eBileDialog et drive de &a ,*,e &igne de %&asses. De %es 'r#'rits et
,th#des n#$s retiendr#ns &es s$ivantes 4
string Filter
&es tA'es de +i%hiers 'r#'#ss dans &a &iste dr#$&ante des tA'es de +i%hiers de &a (#Cte de dia&#g$e
int FilterIndex
&e nY d$ tA'e de +i%hier 'r#'#s 'ar d+a$t dans &a &iste %i-dess$s. 5#,,en%e . !.
string InitialDirectory
&e d#ssier 'rsent initia&e,ent '#$r &a re%her%he d$ +i%hier . #$vrir
string FileName
&e n#, d$ +i%hier . #$vrir indi-$ 'ar &'$ti&isate$r
DialogResult.ShowDialog()
,th#de -$i a++i%he &a (#Cte de dia&#g$e de sa$vegarde. Rend $n rs$&tat de tA'e DialogResult.
La ,th#de ShoIDialog a++i%he $ne (#Cte de dia&#g$e ana&#g$e . &a s$ivante 4
Inter+a%es gra'hi-$es
FHL

1
&iste dr#$&ante %#nstr$ite . 'artir de &a 'r#'rit Filter. Le tA'e de +i%hier 'r#'#s 'ar d+a$t est +i/ 'ar FilterInde&
2
d#ssier %#$rant0 +i/ 'ar Initial/irectory si %ette 'r#'rit a t renseigne
3
n#, d$ +i%hier %h#isi #$ ta' dire%te,ent 'ar &'$ti&isate$r. Sera dis'#ni(&e dans &a 'r#'rit FileNa+e
4
(#$t#ns 8uvrirD:nnuler. Si &e (#$t#n 5u!rir est $ti&is0 &a +#n%ti#n ShoIDialog rend &e rs$&tat /ialog@esult.8V
La 'r#%d$re d'#$vert$re 'e$t s'%rire ainsi 4
Private Sub btnCharger_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnCharger.Click
' on charge un fichier tete dans la bote de saisie
' on paramtre la bote de dialogue openfile)ialog1
openFileDialog1.InitialDirectory = Application.ExecutablePath
openFileDialog1.Filter = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"
openFileDialog1.FilterIndex = 0
' on affiche la bote de dialogue et on rcupre son rsultat
If openFileDialog1.ShowDialog() = DialogResult.OK Then
' on rcupre le nom du fichier
Dim nomFichier As String = openFileDialog1.FileName
Dim fichier As StreamReader = Nothing
Try
' on ouvre le fichier en lecture
fichier = New StreamReader(nomFichier)
' on lit tout le fichier et on le met dans le 3et&o
txtTexte.Text = fichier.ReadToEnd()
Catch ex As Exception
' problme
MessageBox.Show("Problme la lecture du fichier (" + ex.Message + ")", "Erreur",
MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
Finally
' on ferme le fichier
Try
fichier.Close()
Catch
End Try
End Try
End If
End Sub
;n +i/e &e d#ssier initia& a$ d#ssier -$i %#ntient &'e/%$ta(&e de &'a''&i%ati#n 4
saveFileDialog1.InitialDirectory=Application.ExecutablePath
;n +i/e &es tA'es de +i%hiers . 'rsenter
saveFileDialog1.Filter = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"
Inter+a%es gra'hi-$es
F"!
F

H
"
;n +i/e &e tA'e de +i%hier . 'rsenter a$ d($t
saveFileDialog1.FilterIndex = 0
I%i0 %e s#nt &es +i%hiers de tA'e W.t/t -$i ser#nt 'rsents t#$t d'a(#rd . &'$ti&isate$r.
La (#Cte de dia&#g$e est a++i%he et s#n rs$&tat r%$'r
If openFileDialog1.ShowDialog() = DialogResult.OK Then
Pendant -$e &a (#Cte de dia&#g$e est a++i%he0 &'$ti&isate$r n'a '&$s a%%:s a$ +#r,$&aire 'rin%i'a& <(#Cte de dia&#g$e dite
,#da&e=. L'$ti&isate$r +i/e &e n#, d$ +i%hier . #$vrir et -$itte &a (#Cte s#it 'ar &e (#$t#n ;$vrir0 s#it 'ar &e (#$t#n Ann$&er
s#it en +er,ant &a (#Cte. Le rs$&tat de &a ,th#de ShoIDialog est DialogResult.5M $ni-$e,ent si &'$ti&isate$r a $ti&is &e (#$t#n
5u!rir '#$r -$itter &a (#Cte de dia&#g$e.
5e%i +ait0 &e n#, d$ +i%hier . %rer est ,aintenant dans &a 'r#'rit Bile@ame de &'#(Bet #'enJi&eDia&#gF. ;n est a&#rs
ra,en . &a &e%t$re %&assi-$e d'$n +i%hier te/te. ;n n#tera &a ,th#de -$i 'er,et de &ire &a t#ta&it d'$n +i%hier 4
txtTexte.Text=fichier.ReadToEnd
&e %#nten$ d$ +i%hier est ,is dans &e %extPox txt%exte. ;n g:re &es e/%e'ti#ns -$i 'e$vent se 'r#d$ire.
".O. B#Ctes de dia&#g$e J#nt5#&#r et 5#&#rDia&#g
N#$s %#ntin$#ns &'e/e,'&e 'r%dent en 'rsentant de$/ n#$vea$/ (#$t#ns 4
NQ type no+ rJle
K B$tt#n (tn5#$&e$r '#$r +i/er &a %#$&e$r des %ara%t:res d$ Te/tB#/
O B$tt#n (tnP#&i%e '#$r +i/er &a '#&i%e de %ara%t:res d$ Te/tB#/
N#$s d'#s#ns s$r &e +#r,$&aire $n %#ntr[&e (olorDialog et $n %#ntr[&e BontDialog 4
Les %&asses BontDialog et (olorDialog #nt $ne ,th#de ShoIDialog ana&#g$e . &a ,th#de ShoIDialog des %&asses 5penBileDialog et
Sa!eBileDialog. La ,th#de ShoIDialog de &a %&asse (olorDialog 'er,et de %h#isir $ne %#$&e$r 4
Inter+a%es gra'hi-$es
F"F
K
O
Si &'$ti&isate$r -$itte &a (#Cte de dia&#g$e ave% &e (#$t#n 5M0 &e rs$&tat de &a ,th#de ShoIDialog est DialogResult.5M et &a %#$&e$r
%h#isie est dans &a 'r#'rit (olor de &'#(Bet (olorDialog $ti&is. La ,th#de ShoIDialog de &a %&asse BontDialog 'er,et de %h#isir $ne
'#&i%e de %ara%t:res 4
Si &'$ti&isate$r -$itte &a (#Cte de dia&#g$e ave% &e (#$t#n 5M0 &e rs$&tat de &a ,th#de ShoIDialog est DialogResult.5M et &a '#&i%e
%h#isie est dans &a 'r#'rit Bont de &'#(Bet BontDialog $ti&is. N#$s av#ns &es &,ents '#$r traiter &es %&i%s s$r &es (#$t#ns (ouleur et
-olice 4
Private Sub btnCouleur_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnCouleur.Click
' choi d'une couleur de tete
If colorDialog1.ShowDialog() = DialogResult.OK Then
' on change la proprit forecolor du 3et&o
txtTexte.ForeColor = colorDialog1.Color
End If
End Sub
Private Sub btnPolice_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnPolice.Click
' choi d'une police de caractres
If fontDialog1.ShowDialog() = DialogResult.OK Then
Inter+a%es gra'hi-$es
F"
' on change la proprit font du 3et&o
txtTexte.Font = fontDialog1.Font
End If
End Sub
".O.H Ti,er
N#$s n#$s 'r#'#s#ns i%i d'%rire &'a''&i%ati#n s$ivante 4
nQ Type No+ @Jle
F Te/tB#/0 Read;n&AVtr$e t/t5hr#n# a++i%he $n %hr#n#,:tre
B$tt#n (tnArretMar%he (#$t#n Arr*tNMar%he d$ %hr#n#,:tre
H Ti,er ti,erF %#,'#sant ,ettant i%i $n vne,ent t#$tes &es se%#ndes
Le %hr#n#,:tre en ,ar%he 4
Le %hr#n#,:tre arr*t 4
P#$r %hanger t#$tes &es se%#ndes &e %#nten$ d$ Te/tB#/ txt(hrono0 i& n#$s +a$t $n %#,'#sant -$i gn:re $n vne,ent t#$tes &es
se%#ndes0 vne,ent -$'#n '#$rra inter%e'ter '#$r ,ettre . B#$r &'a++i%hage d$ %hr#n#,:tre. 5e %#,'#sant %'est &e %imer 4
Une +#is %e %#,'#sant insta&& s$r &e +#r,$&aire <dans &a 'artie des %#,'#sants n#n vis$e&s=0 $n #(Bet de tA'e %imer est %r dans &e
%#nstr$%te$r d$ +#r,$&aire. La %&asse System.6indoIs.Borms.%imer est d+inie %#,,e s$it 4
Inter+a%es gra'hi-$es
F"H
F
De ses 'r#'rits n#$s ne retiendr#ns -$e &es s$ivantes 4
Interval
n#,(re de ,i&&ise%#ndes a$ (#$t d$-$e& $n vne,ent %icO est ,is.
Tick
&'vne,ent 'r#d$it . &a +in de Inter!al ,i&&ise%#ndes
Enabled
rend &e ti,er a%ti+ <tr$e= #$ ina%ti+ <+a&se=
Dans n#tre e/e,'&e &e ti,er s'a''e&&e timer1 et timer1.Inter!al est ,is . F!!! ,s <Fs=. L'vne,ent %icO se 'r#d$ira d#n% t#$tes &es
se%#ndes. Le %&i% s$r &e (#$t#n Arr*tNMar%he est trait 'ar &a 'r#%d$re s$ivante 4
Private Sub btnArretMarche_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnArretMarche.Click
' arr<t ou marche >
If btnArretMarche.Text = "Marche" Then
' on note l'heure de dbut
dbut = DateTime.Now
' on l'affiche
txtChrono.Text = "00:00:00"
' on lance le timer
timer1.Enabled = True
' on change le libell du bouton
btnArretMarche.Text = "Arrt"
' fin
Return
End If '
If btnArretMarche.Text = "Arrt" Then
' arr<t du timer
timer1.Enabled = False
' on change le libell du bouton
btnArretMarche.Text = "Marche"
' fin
Return
End If
End Sub
Private Sub timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles timer1.Tick
' une seconde s'est coule
Dim maintenant As DateTime = DateTime.Now
Dim dure As TimeSpan = DateTime.op_Subtraction(maintenant, dbut)
txtChrono.Text = "" + dure.Hours.ToString("d2") + ":" + dure.Minutes.ToString("d2") + ":" +
dure.Seconds.ToString("d2")
End Sub
Le &i(e&& d$ (#$t#n ArretNMar%he est s#it DArr*tD s#it DMar%heD. ;n est d#n% #(&ig de +aire $n test s$r %e &i(e&& '#$r sav#ir -$#i
+aire.
dans &e %as de DMar%heD0 #n n#te &'he$re de d($t dans $ne varia(&e -$i est $ne varia(&e g&#(a&e de &'#(Bet +#r,$&aire0 &e
ti,er est &an% <Ena(&edVtr$e= et &e &i(e&& d$ (#$t#n 'asse . DArr*tD.
dans &e %as de DArr*tD0 #n arr*te &e ti,er <Ena(&edV+a&se= et #n 'asse &e &i(e&& d$ (#$t#n . DMar%heD.
Public Class Timer1
Inherits System.Windows.Forms.Form
Private WithEvents timer1 As System.Windows.Forms.Timer
Private WithEvents btnArretMarche As System.Windows.Forms.Button
Private components As System.ComponentModel.IContainer
Private WithEvents txtChrono As System.Windows.Forms.TextBox
Private WithEvents label1 As System.Windows.Forms.Label
' variables d'instance
Inter+a%es gra'hi-$es
F""
Private dbut As DateTime
L'attri($t d"ut %i-dess$s est %#nn$ dans t#$tes &es ,th#des de &a %&asse. I& n#$s reste . traiter &'vne,ent %icO s$r &'#(Bet timer10
vne,ent -$i se 'r#d$it t#$tes &es se%#ndes 4
Private Sub timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles timer1.Tick
' une seconde s'est coule
Dim maintenant As DateTime = DateTime.Now
Dim dure As TimeSpan = DateTime.op_Subtraction(maintenant, dbut)
txtChrono.Text = "" + dure.Hours.ToString("d2") + ":" + dure.Minutes.ToString("d2") + ":" +
dure.Seconds.ToString("d2")
End Sub
;n %a&%$&e &e te,'s %#$& de'$is &'he$re de &an%e,ent d$ %hr#n#,:tre. ;n #(tient $n #(Bet de tA'e %imeSpan -$i re'rsente $ne
d$re dans &e te,'s. 5e&&e-%i d#it *tre a++i%he dans &e %hr#n#,:tre s#$s &a +#r,e hh4,,4ss. P#$r %e&a n#$s $ti&is#ns &es 'r#'rits
Nours0 :inutes0 Seconds de &'#(Bet %imeS-an -$i re'rsentent res'e%tive,ent &es he$res0 ,in$tes0 se%#ndes de &a d$re -$e n#$s
a++i%h#ns a$ +#r,at %oString)&d2&+ '#$r av#ir $n a++i%hage s$r %hi++res.
".E L'e/e,'&e IMP;TS
;n re'rend &'a''&i%ati#n IMP;TS dB. traite de$/ +#is. N#$s A aB#$t#ns ,aintenant $ne inter+a%e gra'hi-$e 4
Les %#ntr[&es s#nt &es s$ivants
nQ type no+ rJle
F Radi#B$tt#n rd;$i %#%h si ,ari
Radi#B$tt#n rdN#n %#%h si 'as ,ari
H N$,eri%U'D#2n in%En+ants n#,(re d'en+ants d$ %#ntri($a(&e
Mini,$,V!0 Ma/i,$,V!0 In%re,entVF
" Te/tB#/ t/tSa&aire sa&aire ann$e& d$ %#ntri($a(&e en J
I Te/tB#/ t/tI,'#ts ,#ntant de &'i,'[t . 'aAer
Read;n&AVtr$e
K B$tt#n (tn5a&%$&er &an%e &e %a&%$& de &'i,'[t
O B$tt#n (tnE++a%er re,et &e +#r,$&aire dans s#n tat initia& &#rs d$ %harge,ent
E B$tt#n (tnf$itter '#$r -$itter &'a''&i%ati#n
@?gles de fonctionne+ent
&e (#$t#n 5a&%$&er reste teint tant -$'i& n'A a rien dans &e %ha,' d$ sa&aire
si &#rs-$e &e %a&%$& est &an%0 i& s'av:re -$e &e sa&aire est in%#rre%t0 &'erre$r est signa&e 4
Inter+a%es gra'hi-$es
F"I
F

H
"
I
K
O E
!
Le 'r#gra,,e est d#nn %i-dess#$s. I& $ti&ise &a %&asse impot %re dans &e %ha'itre s$r &es %&asses. Une 'artie d$ %#de 'r#d$it
a$t#,ati-$e,ent 'as VS.NET n'a 'as t i%i re'r#d$it.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Data
' classe formulaire
Public Class frmImpots
Inherits System.Windows.Forms.Form
Private WithEvents label1 As System.Windows.Forms.Label
Private WithEvents rdOui As System.Windows.Forms.RadioButton
Private WithEvents rdNon As System.Windows.Forms.RadioButton
Private WithEvents label2 As System.Windows.Forms.Label
Private WithEvents txtSalaire As System.Windows.Forms.TextBox
Private WithEvents label3 As System.Windows.Forms.Label
Private WithEvents label4 As System.Windows.Forms.Label
Private WithEvents groupBox1 As System.Windows.Forms.GroupBox
Private WithEvents btnCalculer As System.Windows.Forms.Button
Private WithEvents btnEffacer As System.Windows.Forms.Button
Private WithEvents btnQuitter As System.Windows.Forms.Button
Private WithEvents txtImpots As System.Windows.Forms.TextBox
Private components As System.ComponentModel.Container = Nothing
Private WithEvents incEnfants As System.Windows.Forms.NumericUpDown
' tableaux de donnes ncessaires au calcul de l'impt
Private limites() As Decimal = {12620D, 13190D, 15640D, 24740D, 31810D, 39970D, 48360D, 55790D,
92970D, 127860D, 151250D, 172040D, 195000D, 0D}
Private coeffR() As Decimal = {0D, 0.05D, 0.1D, 0.15D, 0.2D, 0.25D, 0.3D, 0.35D, 0.4D, 0.45D, 0.55D,
0.5D, 0.6D, 0.65D}
Private coeffN() As Decimal = {0D, 631D, 1290.5D, 2072.5D, 3309.5D, 4900D, 6898.5D, 9316.5D, 12106D,
16754.5D, 23147.5D, 30710D, 39312D, 49062D}
' objet impt
Private objImpt As impot = Nothing
Public Sub New()
InitializeComponent()
' initialisation du formulaire
btnEffacer_Click(Nothing, Nothing)
btnCalculer.Enabled = False
' cration d'un objet impt
Inter+a%es gra'hi-$es
F"K
Try
objImpt = New impot(limites, coeffR, coeffN)
Catch ex As Exception
MessageBox.Show("Impossible de crer l'objet impt (" + ex.Message + ")", "Erreur",
MessageBoxButtons.OK, MessageBoxIcon.Error)
' on inhibe le champ de saisie du salaire
txtSalaire.Enabled = False
End Try 'try-catch
End Sub
Protected Overloads Sub Dispose(ByVal disposing As Boolean)
....
End Sub
Private Sub InitializeComponent()
Me.btnQuitter = New System.Windows.Forms.Button
Me.groupBox1 = New System.Windows.Forms.GroupBox
Me.btnEffacer = New System.Windows.Forms.Button
Me.btnCalculer = New System.Windows.Forms.Button
Me.txtSalaire = New System.Windows.Forms.TextBox
Me.label1 = New System.Windows.Forms.Label
Me.label2 = New System.Windows.Forms.Label
Me.label3 = New System.Windows.Forms.Label
Me.rdNon = New System.Windows.Forms.RadioButton
Me.txtImpots = New System.Windows.Forms.TextBox
Me.label4 = New System.Windows.Forms.Label
Me.rdOui = New System.Windows.Forms.RadioButton
Me.incEnfants = New System.Windows.Forms.NumericUpDown
Me.groupBox1.SuspendLayout()
CType(Me.incEnfants, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
....
End Sub 'InitializeComponent
Public Shared Sub Main()
Application.Run(New frmImpots)
End Sub 'Main
Private Sub btnEffacer_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnEffacer.Click
' raz du formulaire
incEnfants.Value = 0
txtSalaire.Text = ""
txtImpots.Text = ""
rdNon.Checked = True
End Sub 'btnEffacer_Click
Private Sub txtSalaire_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles txtSalaire.TextChanged
' tat du bouton Calculer
btnCalculer.Enabled = txtSalaire.Text.Trim() <> ""
End Sub 'txtSalaire_TextChanged
Private Sub btnQuitter_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnQuitter.Click
' fin application
Application.Exit()
End Sub 'btnQuitter_Click
Private Sub btnCalculer_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnCalculer.Click
' le salaire est-il correct ?
Dim intSalaire As Integer = 0
Try
' rcupration du salaire
intSalaire = Integer.Parse(txtSalaire.Text)
' il doit tre >=0
If intSalaire < 0 Then
Throw New Exception("")
End If
Catch ex As Exception
' msg d'erreur
MessageBox.Show(Me, "Salaire incorrect", "Erreur de saisie", MessageBoxButtons.OK,
MessageBoxIcon.Error)
' focus sur champ erron
txtSalaire.Focus()
' slection du texte du champ de saisie
Inter+a%es gra'hi-$es
F"O
txtSalaire.SelectAll()
' retour l'interface visuelle
Return
End Try 'try-catch
' le salaire est correct - on calcule l'impt
txtImpots.Text = "" & CLng(objImpt.calculer(rdOui.Checked, CInt(incEnfants.Value), intSalaire))
End Sub 'btnCalculer_Click
End Class
N#$s $ti&is#ns i%i &'asse,(&age i+pots.dll rs$&tat de &a %#,'i&ati#n de &a %&asse i,'#ts d$ %ha'itre . Ra''e&#ns -$e %et
asse,(&age 'e$t *tre 'r#d$it en ,#de %#ns#&e 'ar &a %#,,ande
dos>vbc /t:library impots.vb
5ette %#,,ande 'r#d$it &e +i%hier impots.dll a''e& asse,(&age. 5et asse,(&age 'e$t *tre ens$ite $ti&is dans di++rents 'r#Bets. I%i0
dans n#tre 'r#Bet s#$s VS.NET0 n#$s $ti&is#ns &a +en*tre des 'r#'rits d$ 'r#Bet 4
P#$r aB#$ter $ne r+ren%e <$n asse,(&age= n#$s %&i-$#ns dr#it s$r &e &#t %& Re+eren%es %i-dess$s0 n#$s 'ren#ns &'#'ti#n TAB#$ter
$ne r+ren%eU et n#$s dsign#ns &'asse,(&age Ti,'#ts.d&&U -$e n#$s av#ns 'ris s#in de ,ettre dans &e d#ssier d$ 'r#Bet 4
dos>dir
01/03/2004 14:39 9 250 gui_impots.vb
01/03/2004 14:37 4 096 impots.dll
01/03/2004 14:41 12 288 gui_impots.exe
Une +#is in%&$s &'asse,(&age Ti,'#ts.d&&U dans &e 'r#Bet0 &a %&asse Ti,'#tsU devient %#nn$e d$ 'r#Bet. A$'aravant e&&e ne &'est 'as. Une
a$tre ,th#de est d'in%&$re &e s#$r%e i+pots.vb dans &e 'r#Bet. P#$r %e&a0 dans &a +en*tre des 'r#'rits d$ 'r#Bet0 #n %&i-$e dr#it
s$r &e 'r#Bet et #n 'rend &'#'ti#n TAB#$terNAB#$ter $n &,ent e/istantU et #n dsigne &e +i%hier i+pots.vb.
Inter+a%es gra'hi-$es
F"E
I. Gesti#n d'vne,ents
N#$s av#ns dans &e %ha'itre 'r%dent a(#rd &a n#ti#n d'vne,ents &is . des %#,'#sants. N#$s v#A#ns ,aintenant %#,,ent
%rer des vne,ents dans n#s 'r#'res %&asses. 5'est $ne n#ti#n di++i%i&e -$i n'intressera 'as &es dve&#''e$rs d($tants a$/-$e&s i&
est %#nsei&& de 'asser dire%te,ent a$ %ha'itre s$ivant.
I.F ;(Bets de&egate
L'instr$%ti#n
Delegate Function opration(ByVal n1 As Integer, ByVal n2 As Integer) As Integer
d+init $n tA'e a''e& opration -$i est en +ait $n 'r#t#tA'e de +#n%ti#n a%%e'tant de$/ entiers et rendant $n entier. 5'est &e ,#t %&
de!egate -$i +ait de opration $ne d+initi#n de 'r#t#tA'e de +#n%ti#n. Le tA'e T#'rati#nU 'e$t *tre a++e%t . $ne varia(&e de &a
+a@#n s$ivante 4
Dim op As New opration(AddressOf [fonction])
Une varia(&e de tA'e Td&g$U se %#nstr$it %#,,e $n #(Bet. Le 'ara,:tre d$ %#nstr$%te$r est &a +#n%ti#n ass#%ie . &'instan%e d$
d&g$. En VB0 %ette +#n%ti#n est d#nne s#$s &a +#r,e Address;+ +#n%ti#n0 #> T+#n%ti#nU est &e n#, de &a +#n%ti#n. Une +#is
&'instan%e d'$n d&g$ %re0 e&&e 'e$t *tre $ti&ise %#,,e $ne +#n%ti#n 4

' on ecute le dlgu
Dim n As Integer = op(4, 7)
Le d&g$ T#'rati#nU a t d+ini %#,,e re%evant de$/ 'ara,:tres de tA'e TintegerU et renv#Aant $n rs$&tat de ,*,e tA'e. D#n%
s#n instan%e T#'U %i-dess$s est $ti&ise %#,,e $ne te&&e +#n%ti#n. 5#nsidr#ns &'e/e,'&e s$ivant 4
' fonctions dlgues
Imports System
Public Class delegate1
' dfinition d'un protot(pe de fonction
' accepte 2 entiers en paramtre et rend un entier
Delegate Function opration(ByVal n1 As Integer, ByVal n2 As Integer) As Integer
' deu mthodes d'instance correspondant au protot(pe
' ajouter
Public Function ajouter(ByVal n1 As Integer, ByVal n2 As Integer) As Integer
Console.Out.WriteLine(("ajouter(" & n1 & "," & n2 & ")"))
Return n1 + n2
End Function
' soustraire
Public Function soustraire(ByVal n1 As Integer, ByVal n2 As Integer) As Integer
Console.Out.WriteLine(("soustraire(" & n1 & "," & n2 & ")"))
Return n1 - n2
End Function
' une mthode stati$ue correspondant au protot(pe
Public Shared Function augmenter(ByVal n1 As Integer, ByVal n2 As Integer) As Integer
Console.Out.WriteLine(("augmenter(" & n1 & "," & n2 & ")"))
Return n1 + 2 * n2
End Function
' programme de test
Public Shared Sub Main()
' on dfinit un objet de t(pe opration pour ( enregistrer des fonctions
' on enregistre la fonction stati$ue augmenter
Dim op As New opration(AddressOf delegate1.augmenter)
' on ecute le dlgu
Dim n As Integer = op(4, 7)
Console.Out.WriteLine(("n=" & n))
' cration d'un objet c1 de t(pe class1
Dim c1 As New delegate1
' on enregistre dans le dlgu la mthode ajouter de c1
op = New delegate1.opration(AddressOf c1.ajouter)
' ecution de l'objet dlgu
n = op(2, 3)
Console.Out.WriteLine(("n=" & n))
' on enregistre dans le dlgu la mthode soustraire de c1
op = New delegate1.opration(AddressOf c1.soustraire)
Inter+a%es gra'hi-$es
F"L
n = op(2, 3)
Console.Out.WriteLine(("n=" & n))
End Sub
End Class
Les rs$&tats de &'e/%$ti#n s#nt &es s$ivants 4
augmenter(4,7)
n=18
ajouter(2,3)
n=5
soustraire(2,3)
n=-1
I. Gesti#n d'vne,ents
A -$#i 'e$t servir $n #(Bet de tA'e delegate X
5#,,e n#$s &e verr#ns dans &'e/e,'&e s$ivant0 %e&a sert s$rt#$t . &a gesti#n des vne,ents. Une %&asse (1 'e$t gnrer des
vne,ents e!ti. L#rs d'$n vne,ent e!ti0 $n #(Bet de tA'e (1 &an%era &'e/%$ti#n d'$n #(Bet e!tiDclench de tA'e delegate. T#$tes &es
+#n%ti#ns enregistres dans &'#(Bet de&egate e!tiDclench ser#nt a&#rs e/%$tes. Si $n #(Bet (2 $ti&isant $n #(Bet (1 ve$t *tre averti
de &'#%%$rren%e de &'vne,ent e!ti s$r &'#(Bet (10 i& enregistrera &'$ne de ses ,th#des (2.# dans &'#(Bet d&g$ (1.e!tiDclench de
&'#(Bet (1 a+in -$e &a ,th#de (2.# s#it e/%$te . %ha-$e +#is -$e &'vne,ent e!ti se 'r#d$it s$r &'#(Bet (1. 5#,,e &'#(Bet d&g$
(1.e!tiDclench 'e$t enregistrer '&$sie$rs +#n%ti#ns0 di++rents #(Bets (i '#$rr#nt s'enregistrer a$'r:s d$ d&g$ (1.e!tiDclench
'#$r *tre 'rven$s de &'vne,ent e!ti s$r (1.
I..F D%&arati#n d'$n vne,ent
Un vne,ent se d%&are de &a +a@#n s$ivante <F= 4
Delegate Sub proc(liste d'arguments)
Public Event vnement as proc
#$ (ien <=
Public Event vnement(liste d'arguments)
5'est &e ,#t %& TEventU -$i d+init $ne d#nne %#,,e $n vne,ent. ;n ass#%ie . &'vne,ent &a signat$re -$e devr#nt av#ir &es
gesti#nnaires de %e&$i-%i. ;n 'e$t d+inir %ette signat$re a$ ,#Aen d'$n d&g$ <,th#de F=0 s#it dire%te,ent <,th#de =.
I.. D+inir &es gesti#nnaires d'$n vne,ent
L#rs-$'$n vne,ent est d%&en%h 'ar &'instr$%ti#n TRaiseEventU0 i& +a$t &e traiter. Les 'r#%d$res %harges de traiter &es
vne,ents s#nt a''e&es des gesti#nnaires d'vne,ents. A &a %rati#n d'$n #(Bet TEventU0 se$&e &a signat$re des gesti#nnaires de
&'vne,ent est d%&are. 5ette signat$re est %e&&e de &'#(Bet Tde&egateU ass#%i . &'vne,ent. 5e%i +ait0 #n va '#$v#ir ass#%ier .
&'vne,ent des gesti#nnaires. 5e$/-%i s#nt des 'r#%d$res -$i d#ivent av#ir &a ,*,e signat$re -$e &e Tde&egateU ass#%i .
&'vne,ent. P#$r ass#%ier $n gesti#nnaire d'vne,ent . $n vne,ent0 #n $ti&ise &'instr$%ti#n TAddeand&erU de sAnta/e 4
AddHandler event, AddressOf eventhandler
event 4 varia(&e vne,ent . -$i #n ass#%ie $n n#$vea$ gesti#nnaire d'vne,ents
event-andler 4 n#, d$ gesti#nnaire d'vne,ents - d#it av#ir &a signat$re d$ Td&g$U ass#%i . &'vne,ent
;n 'e$t ass#%ier a$tant de gesti#nnaires -$e &'#n ve$t . $n vne,ent. I&s ser#nt t#$s e/%$ts &#rs-$e &'vne,ent a$-$e& i&s s#nt
ass#%is sera d%&en%h.
I..H D%&en%her $n vne,ent
P#$r d%&en%her $n vne,ent 'ar 'r#gra,,e0 #n $ti&ise &'instr$%ti#n TRaiseEventU 4
RaiseEvent eventname[( argumentlist )]
Inter+a%es gra'hi-$es
FI!
eventna+e 4 varia(&e vne,ent <d%&are ave% &e ,#t %& Event=
argu+entlist 4 arg$,ents d$ d&g$ ass#%i . &'vne,ent.
T#$s &es gesti#nnaires -$i #nt t ass#%is . &'vne,ent 'ar &'instr$%ti#n Addeand&er v#nt *tre a''e&s. I&s v#nt re%ev#ir %#,,e
'ara,:tres0 &es 'ara,:tres d+inis dans &a signat$re de &'vne,ent.
I.." Un e/e,'&e
5#nsidr#ns &'e/e,'&e s$ivant 4
'gestion d'vnements
Imports System
Public Class myEventArgs
Inherits EventArgs
' la classe d'un vt
' attribut
Private _saisie As String
' constructeur
Public Sub New(ByVal saisie As String)
_saisie = saisie
End Sub
' proprit saisie en lecture seule
Public Overrides Function ToString() As String
Return _saisie
End Function
End Class
Public Class metteur
' la classe mettrice d'un vt
' attribut
Private _nom As String ' nom de l'metteur
' constructeur
Public Sub New(ByVal nom As String)
_nom = nom
End Sub
' 3o+tring
Public Overrides Function ToString() As String
Return _nom
End Function
' le protot(pe des fonctions charges de traiter l'vt
Delegate Sub _evtHandler(ByVal sender As Object, ByVal evt As myEventArgs)
' le pool des gestionnaires d'vts
Public Event evtHandler As _evtHandler
' mthode de demande d'mission d'un vt
Public Sub envoyerEvt(ByVal evt As myEventArgs)
' on prvient tous les abonns
' on fait comme si l'vt provenait d'ici
RaiseEvent evtHandler(Me, evt)
End Sub
End Class
' une classe de traitement de l'vt
Public Class souscripteur
' attribut
Private nom As String' nom du souscripteur
Private sender As metteur ' l'metteur des vts
' constructeur
Public Sub New(ByVal nom As String, ByVal e As metteur)
' on note le nom du souscripteur
Me.nom = nom
' et l'metteur des vts
Me.sender = e
' on s'inscrit pour recevoir les evts de l'metteur e
AddHandler e.evtHandler, AddressOf traitementEvt
End Sub
' gestionnaire d'vt
Public Sub traitementEvt(ByVal sender As Object, ByVal evt As myEventArgs)
' affichage evt
Inter+a%es gra'hi-$es
FIF
Console.Out.WriteLine(("L'objet [" + sender.ToString + "] a signal la saisie errone [" +
evt.ToString + "] au souscripteur [" + nom + "]"))
End Sub
End Class
' un programme de test
Public Class test
Public Shared Sub Main()
' cration d'un metteur d'evts
Dim metteur1 As New metteur("metteur1")
' cration d'un tableau de souscripteurs
' pour les vts mis par metteur1
Dim souscripteurs() As souscripteur = {New souscripteur("s1", metteur1), New souscripteur("s2",
metteur1)}
' on lit une suite d'entiers au clavier
' ds $ue l'un est erron' on met un vt
Console.Out.Write("Nombre entier (rien pour arrter) : ")
Dim saisie As String = Console.In.ReadLine().Trim()
' tant $ue la ligne saisie est non vide
While saisie <> ""
' la saisie est-elle un nombre entier >
Try
Dim n As Integer = Integer.Parse(saisie)
Catch
' ce n'est pas un entier
' on prvient tout le monde
metteur1.envoyerEvt(New myEventArgs(saisie))
End Try
' on prvient tout le monde
' nouvelle saisie
Console.Out.Write("Nombre entier (rien pour arrter) : ")
saisie = Console.In.ReadLine().Trim()
End While
' fin
Environment.Exit(0)
End Sub
End Class
Le %#de 'r%dent est asseQ %#,'&e/e. Dtai&&#ns-&e. Dans $ne gesti#n d'vne,ents0 i& A a $n ,ette$r d'vne,ents <sender= -$i
env#ie &e dtai& des vne,ents <7!entHrgs= . des s#$s%ri'te$rs -$i se s#nt d%&ars intresss 'ar &es vne,ents en -$esti#n. La
%&asse ,ettri%e des vne,ents est i%i &a s$ivante 4
Public Class metteur
' la classe mettrice d'un vt
' attribut
Private _nom As String ' nom de l'metteur
' constructeur
Public Sub New(ByVal nom As String)
_nom = nom
End Sub
' 3o+tring
Public Overrides Function ToString() As String
Return _nom
End Function
' le protot(pe des fonctions charges de traiter l'vt
Delegate Sub _evtHandler(ByVal sender As Object, ByVal evt As myEventArgs)
' le pool des gestionnaires d'vts
Public Event evtHandler As _evtHandler
' mthode de demande d'mission d'un vt
Public Sub envoyerEvt(ByVal evt As myEventArgs)
' on prvient tous les abonns
' on fait comme si l'vt provenait d'ici
RaiseEvent evtHandler(Me, evt)
End Sub
End Class
5ha-$e #(Bet metteur a $n nom +i/ 'ar %#nstr$%ti#n. La ,th#de %oString a t red+inie de te&&e +a@#n -$e &#rs-$'#n trans+#r,e $n
#(Bet metteur en string* %'est s#n n#, -$'#n r%$':re. La %&asse d+init $n vne,ent 4
' le protot(pe des fonctions charges de traiter l'vt
Delegate Sub _evtHandler(ByVal sender As Object, ByVal evt As myEventArgs)
' l'vnement
Public Event evtHandler As _evtHandler
Inter+a%es gra'hi-$es
FI
Le 're,ier arg$,ent d'$ne +#n%ti#n de traite,ent d'$n vne,ent sera &'#(Bet -$i ,et &'vne,ent. Le se%#nd arg$,ent sera de
tA'e my7!entHrgs0 $n #(Bet -$i d#nnera des dtai&s s$r &'vne,ent et s$r &e-$e& n#$s reviendr#ns. A+in de '#$v#ir d%&en%her $n
vne,ent de &'e/trie$r d'$n #(Bet metteur0 n#$s aB#$t#ns . &a %&asse &a ,th#de en!oyer7!t 4
' mthode de demande d'mission d'un vt
Public Sub envoyerEvt(ByVal evt As myEventArgs)
' on prvient tous les abonns
' on fait comme si l'vt provenait d'ici
RaiseEvent evtHandler(Me, evt)
End Sub
N#$s dev#ns d+inir -$e& sera &e tA'e d'vne,ents d%&en%hs 'ar &a %&asse metteur. N#$s av#ns '#$r %e&a d+ini &a %&asse
my7!entHrgs 4
Public Class myEventArgs
' la classe d'un vt
' attribut
Private _saisie As String
' constructeur
Public Sub New(ByVal saisie As String)
_saisie = saisie
End Sub
' proprit saisie en lecture seule
Public Overrides Function ToString() As String
Return _saisie
End Function
End Class
Les vne,ents -$i v#nt n#$s intresser s#nt des saisies a$ %&avier err#nes. ;n va de,ander . $n $ti&isate$r de ta'er des n#,(res
entiers a$ %&avier et d:s -$'i& ta'era $ne %haCne -$i ne re'rsente 'as $n entier0 #n d%&en%hera $n vne,ent. 5#,,e dtai& de
&'vne,ent0 n#$s n#$s %#nter#ns de d#nner &a saisie err#ne. 5'est &e sens de &'attri($t $saisie de &a %&asse. Un #(Bet my7!entHrgs est
d#n% %#nstr$it ave% '#$r 'ara,:tre &a saisie err#ne. ;n red+init 'ar ai&&e$rs &a ,th#de %oString '#$r -$e, &#rs-$'#n trans+#r,e
$n #(Bet my7!entHrgs en %haCne0 #n #(tienne &'attri($t $saisie.
N#$s av#ns d+ini &',ette$r des vne,ents et &e tA'e d'vne,ents -$'i& ,et. N#$s d+iniss#ns ens$ite &e tA'e des s#$s%ri'te$rs
intresss 'ar %es vne,ents.
' une classe de traitement de l'vt
Public Class souscripteur
' attribut
Private nom As String ' nom du souscripteur
Private sender As metteur ' l'metteur des vts
' constructeur
Public Sub New(ByVal nom As String, ByVal e As metteur)
' on note le nom du souscripteur
Me.nom = nom
' et l'metteur des vts
Me.sender = e
' on s'inscrit pour recevoir les evts de l'metteur e
AddHandler e.evtHandler, AddressOf traitementEvt
End Sub
' gestionnaire d'vt
Public Sub traitementEvt(ByVal sender As Object, ByVal evt As myEventArgs)
' affichage evt
Console.Out.WriteLine(("L'objet [" + sender.ToString + "] a signal la saisie errone [" +
evt.ToString + "] au souscripteur [" + nom + "]"))
End Sub
End Class
Un s#$s%ri'te$r sera d+ini 'ar de$/ 'ara,:tres 4 s#n n#, <attri($t nom= et &'#(Bet metteur d#nt i& ve$t traiter &es vne,ents
<attri($t sender=. 5es de$/ 'ara,:tres ser#nt 'asss a$ %#nstr$%te$r de &'#(Bet. A$ %#$rs de %ette ,*,e %#nstr$%ti#n0 &e s#$s%ri'te$r
s'a(#nne a$/ vne,ents de &',ette$r 4
' on s'inscrit pour recevoir les evts de l'metteur e
AddHandler e.evtHandler, AddressOf traitementEvt
La +#n%ti#n enregistre a$'r:s de &',ette$r est traitement7!t. 5ette ,th#de de &a %&asse souscripteur a++i%he &es de$/ arg$,ents
-$'e&&e a re@$es <sender0 e!t= ainsi -$e &e n#, d$ r%e'te$r <nom=. ;nt t d+inis0 &e tA'e des vne,ents 'r#d$its0 &e tA'e de
&',ette$r de %es vne,ents0 &e tA'e des s#$s%ri'te$rs. I& ne n#$s reste '&$s -$'. &es ,ettre en #e$vre 4
' un programme de test
Public Class test
Inter+a%es gra'hi-$es
FIH
Public Shared Sub Main()
' cration d'un metteur d'evts
Dim metteur1 As New metteur("metteur1")
' cration d'un tableau de souscripteurs
' pour les vts mis par metteur1
Dim souscripteurs() As souscripteur = {New souscripteur("s1", metteur1), New souscripteur("s2",
metteur1)}
' on lit une suite d'entiers au clavier
' ds $ue l'un est erron' on met un vt
Console.Out.Write("Nombre entier (rien pour arrter) : ")
Dim saisie As String = Console.In.ReadLine().Trim()
' tant $ue la ligne saisie est non vide
While saisie <> ""
' la saisie est-elle un nombre entier >
Try
Dim n As Integer = Integer.Parse(saisie)
Catch
' ce n'est pas un entier
' on prvient tout le monde
metteur1.envoyerEvt(New myEventArgs(saisie))
End Try
' on prvient tout le monde
' nouvelle saisie
Console.Out.Write("Nombre entier (rien pour arrter) : ")
saisie = Console.In.ReadLine().Trim()
End While
' fin
Environment.Exit(0)
End Sub
N#$s %r#ns $n #(Bet metteur 4
' cration d'un metteur d'evts
Dim metteur1 As New metteur("metteur1")
N#$s %r#ns $n ta(&ea$ de de$/ s#$s%ri'te$rs '#$r &es vne,ents ,is 'ar &'#(Bet metteur1 4
' cration d'un tableau de souscripteurs
' pour les vts mis par metteur1
Dim souscripteurs() As souscripteur = {New souscripteur("s1", metteur1), New souscripteur("s2",
metteur1)}
N#$s de,and#ns . &'$ti&isate$r de ta'er des n#,(res entiers a$ %&avier. D:s -$'$ne saisie est err#ne0 n#$s de,and#ns . metteur1
d'env#Aer $n vne,ent . ses s#$s%ri'te$rs 4
' on prvient tout le monde
metteur1.envoyerEvt(New myEventArgs(saisie))
L'vne,ent env#A est de tA'e my7!entHrgs et %#ntient &a saisie err#ne. Les de$/ s#$s%ri'te$rs devraient re%ev#ir %et vne,ent
et &e signa&er. 5'est %e -$e ,#ntre &'e/%$ti#n -$i s$it.
dos>evt1
Nombre entier (rien pour arrter) : 4
Nombre entier (rien pour arrter) : a
L'objet [metteur1] a signal la saisie errone [a] au souscripteur [s1]
L'objet [metteur1] a signal la saisie errone [a] au souscripteur [s2]
Nombre entier (rien pour arrter) : 1.6
L'objet [metteur1] a signal la saisie errone [1.6] au souscripteur [s1]
L'objet [metteur1] a signal la saisie errone [1.6] au souscripteur [s2]
Nombre entier (rien pour arrter) :
Inter+a%es gra'hi-$es
FI"
K. A%%:s a$/ (ases de d#nnes
K.F Gnra&its
I& e/iste de n#,(re$ses (ases de d#nnes '#$r &es '&ate-+#r,es 2ind#2s. P#$r A a%%der0 &es a''&i%ati#ns 'assent a$ travers de
'r#gra,,es a''e&s pilotes <drivers=.
Dans &e s%h,a %i-dess$s0 &e 'i&#te 'rsente de$/ inter+a%es 4
&'inter+a%e IF 'rsente . &'a''&i%ati#n
&'inter+a%e I vers &a (ase de d#nnes
A+in d'viter -$'$ne a''&i%ati#n %rite '#$r $ne (ase de d#nnes BF d#ive *tre r-%rite si #n ,igre vers $ne (ase de d#nnes B
di++rente0 $n e++#rt de n#r,a&isati#n a t +ait s$r &'inter+a%e IF. Si #n $ti&ise des (ases de d#nnes $ti&isant des 'i&#tes Dn#r,a&issD0
&a (ase BF sera +#$rnie ave% $n 'i&#te PF0 &a (ase B ave% $n 'i&#te P0 et &'inter+a%e IF de %es de$/ 'i&#tes sera identi-$e. A$ssi
n'a$ra-t-#n 'as . r-%rire &'a''&i%ati#n. ;n '#$rra ainsi0 'ar e/e,'&e0 ,igrer $ne (ase de d#nnes A55ESS vers $ne (ase de
d#nnes MASfL sans %hanger &'a''&i%ati#n.
I& e/iste de$/ tA'es de 'i&#tes n#r,a&iss 4
&es 'i&#tes ;DB5 <;'en DataBase 5#nne%tivitA=
&es 'i&#tes ;LE DB <;(Be%t LinRing and E,(edding DataBase=
Les 'i&#tes ;DB5 'er,ettent &'a%%:s . des (ases de d#nnes. Les s#$r%es de d#nnes '#$r &es 'i&#tes ;LE DB s#nt '&$s varies 4
(ases de d#nnes0 ,essageries0 ann$aires0 ... I& n'A a 'as de &i,ite. T#$te s#$r%e de d#nnes 'e$t +aire &'#(Bet d'$n 'i&#te ;&e DB si
$n dite$r &e d%ide. L'intr*t est vide,,ent grand 4 #n a $n a%%:s $ni+#r,e . $ne grande varit de d#nnes.
La '&ate-+#r,e .NET est &ivre ave% de$/ tA'es de %&asses d'a%%:s a$/ d#nnes 4
F. &es %&asses SfL Server.NET
. &es %&asses ;&e D(.NET
Les 're,i:res %&asses 'er,ettent $n a%%:s dire%t a$ SGBD SfL Server de Mi%r#s#+t sans 'i&#te inter,diaire. Les se%#ndes
'er,ettent &'a%%:s a$/ s#$r%es de d#nnes ;LE DB.
La '&ate-+#r,e .NET est +#$rnie <,ai !!= ave% tr#is 'i&#tes ;LE DB '#$r res'e%tive,ent 4 SfL Server0 ;ra%&e et Mi%r#s#+t 7et
<A%%ess=. Si #n ve$t travai&&er ave% $ne (ase de d#nnes aAant $n 'i&#te ;DB5 ,ais 'as de 'i&#te ;LE DB0 #n ne 'e$t 'as. Ainsi
#n ne 'e$t 'as travai&&er ave% &e SGBD MASfL -$i <,ai !!= ne +#$rnit 'as de 'i&#te ;LE DB. I& e/iste %e'endant $ne srie de
%&asses 'er,ettant &'a%%:s a$/ s#$r%es de d#nnes ;DB50 &es %&asses odbc.net. E&&es ne s#nt 'as &ivres en standard ave% &e SDd et
i& +a$t a&&er &es %her%her s$r &e site de Mi%r#s#+t. Dans &es e/e,'&es -$i v#nt s$ivre0 n#$s $ti&iser#ns s$rt#$t %es %&asses ;DB5 %ar &a
'&$'art des (ases de d#nnes s#$s 2ind#2s s#nt &ivres ave% $n te& 'i&#te. V#i%i 'ar e/e,'&e0 $ne &iste des 'i&#tes ;DB5 insta&&s
s$r $ne ,a%hine 1in !!! <:enu Dmarrer/-aramKtres/-anneau de con#iguration/5utils d;administration= 4
A%%:s a$/ (ases de d#nnes FII
A''&i%ati#n Base de
d#nnes
Pi&#te de (ase de d#nnes
IF I
;n %h#isit &'i%[ne Source de donnes 5DP( 4
K. Les de$/ ,#des d'e/'&#itati#n d'$ne s#$r%e de d#nnes
La '&ate-+#r,e .NET 'er,et &'e/'&#itati#n d'$ne s#$r%e de d#nnes de de$/ ,ani:res di++rentes 4
F. ,#de %#nne%t
. ,#de d%#nne%t
En ,#de connect0 &'a''&i%ati#n
F. #$vre $ne %#nne/i#n ave% &a s#$r%e de d#nnes
. travai&&e ave% &a s#$r%e de d#nnes en &e%t$reN%rit$re
H. +er,e &a %#nne/i#n
En ,#de dconnect0 &'a''&i%ati#n
F. #$vre $ne %#nne/i#n ave% &a s#$r%e de d#nnes
A%%:s a$/ (ases de d#nnes FIK
. #(tient $ne %#'ie ,,#ire de t#$t #$ 'artie des d#nnes de &a s#$r%e
H. +er,e &a %#nne/i#n
". travai&&e ave% &a %#'ie ,,#ire des d#nnes en &e%t$reN%rit$re
I. &#rs-$e &e travai& est +ini0 #$vre $ne %#nne/i#n0 env#ie &es d#nnes ,#di+ies . &a s#$r%e de d#nnes '#$r -$'e&&e &es
'renne en %#,'te0 +er,e &a %#nne/i#n
Dans &es de$/ %as0 %'est &'#'rati#n d'e/'&#itati#n et de ,ise . B#$r des d#nnes -$i 'rend d$ te,'s. I,agin#ns -$e %es ,ises . B#$r
s#ient +aites 'ar $n $ti&isate$r +aisant des saisies0 %ette #'rati#n 'e$t 'rendre des diQaines de ,in$tes. Pendant t#$t %e te,'s0 en
,#de %#nne%t0 &a %#nne/i#n ave% &a (ase est ,ainten$e et &es ,#di+i%ati#ns i,,diate,ent r'er%$tes. En ,#de d%#nne%t0 i&
n'A a 'as de %#nne/i#n . &a (ase 'endant &a ,ise . B#$r des d#nnes. Les ,#di+i%ati#ns s#nt +aites $ni-$e,ent s$r &a %#'ie
,,#ire. E&&es s#nt r'er%$tes s$r &a s#$r%e de d#nnes en $ne se$&e +#is &#rs-$e t#$t est ter,in.
f$e&s s#nt &es avantages et in%#nvnients des de$/ ,th#des X
Une %#nne/i#n est %#?te$se en ress#$r%es sAst:,e. S'i& A a (ea$%#$' de %#nne/i#ns si,$&tanes0 &e ,#de d%#nne%t
'er,et de rd$ire &e$rs d$res . $n ,ini,$,. 5'est &e %as des a''&i%ati#ns 2e( aAant des ,i&&iers d'$ti&isate$rs.
L'in%#nvnient d$ ,#de d%#nne%t est &a gesti#n d&i%ate des ,ises . B#$r si,$&tanes. L'$ti&isate$r UF #(tient des
d#nnes a$ te,'s TF et %#,,en%e . &es ,#di+ier. A$ te,'s T0 &'$ti&isate$r U a%%:de &$i a$ssi . &a s#$r%e de d#nnes et
#(tient &es ,*,es d#nnes. Entre-te,'s &'$ti&isate$r UF a ,#di+i %ertaines d#nnes ,ais ne &es a 'as en%#re trans,ises .
&a s#$r%e de d#nnes. U travai&&e d#n% ave% des d#nnes d#nt %ertaines s#nt err#nes. Les %&asses .NET #++rent des
s#&$ti#ns '#$r grer %e 'r#(&:,e ,ais i& n'est 'as si,'&e . rs#$dre.
En ,#de %#nne%t0 &a ,ise . B#$r si,$&tane de d#nnes 'ar '&$sie$rs $ti&isate$rs ne '#se n#r,a&e,ent 'as de 'r#(&:,e.
La %#nne/i#n ave% &a (ase de d#nnes tant ,ainten$e0 %'est &a (ase de d#nnes e&&e-,*,e -$i g:re %es ,ises . B#$r
si,$&tanes. Ainsi ;ra%&e verr#$i&&e $ne &igne de &a (ase de d#nnes d:s -$'$n $ti&isate$r &a ,#di+ie. E&&e restera verr#$i&&e
d#n% ina%%essi(&e a$/ a$tres $ti&isate$rs B$s-$'. %e -$e %e&$i -$i &'a ,#di+ie va&ide <%#,,it= sa ,#di+i%ati#n #$
&'a(and#nne <r#&&(a%R=.
Si &es d#nnes d#ivent %ir%$&er s$r &e rsea$0 &e ,#de d%#nne%t est . %h#isir. I& 'er,et d'av#ir $ne 'h#t# des d#nnes
dans $n #(Bet a''e& dataset -$i re'rsente $ne (ase de d#nnes . &$i t#$t se$&. 5et #(Bet 'e$t %ir%$&er s$r &e rsea$ entre
,a%hines.
N#$s t$di#ns d'a(#rd &e ,#de %#nne%t.
K.H A%%:s a$/ d#nnes en ,#de %#nne%t
K.H.F Les (ases de d#nnes de &'e/e,'&e
N#$s %#nsidr#ns $ne (ase de d#nnes A55ESS a''e&e articles.md" et n'aAant -$'$ne ta(&e a''e&e ARTI5LES ave% &a str$%t$re
s$ivante 4
no+ type
code %#de de &)arti%&e s$r " %ara%t:res
no+ s#n n#, <%haCne de %ara%t:res=
pri& s#n 'ri/ <re&=
stocS'actuel s#n st#%R a%t$e& <entier=
stocS'+ini+u+ &e st#%R ,ini,$, <entier= en-de@a d$-$e& i& +a$t ra''r#visi#nner &)arti%&e
S#n %#nten$ de d'art est &e s$ivant 4
N#$s $ti&iser#ns %ette (ase a$ssi (ien a$ travers d'$n 'i&#te ;DB5 -$'$n 'i&#te ;LE DB a+in de ,#ntrer &a si,i&it$de des de$/
a''r#%hes et 'ar%e -$e n#$s dis'#s#ns de %es de$/ tA'es de 'i&#tes '#$r A55ESS.
A%%:s a$/ (ases de d#nnes FIO
N#$s $ti&iser#ns ga&e,ent $ne (ase MASfL DBARTI5LES aAant &a ,*,e $ni-$e ta(&e ARTI5LES0 &e ,*,e %#nten$ et a%%d
a$ travers d'$n 'i&#te ;DB50 a+in de ,#ntrer -$e &'a''&i%ati#n %rite '#$r e/'&#iter &a (ase A55ESS n'a 'as . *tre ,#di+ie '#$r
$ti&iser &a (ase MASfL. La (ase DBARTI5LES est a%%essi(&e . $n $ti&isate$r a''e& admarticles ave% &e ,#t de 'asse mdparticles. La
%#'ie d'%ran s$ivante ,#ntre &e %#nten$ de &a (ase MASfL 4
C:\mysql\bin>mysql --database=dbarticles --user=admarticles --password=mdparticles
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.49-max-debug
Type 'help' for help.
mysql> show tables;
+----------------------+
| Tables_in_dbarticles |
+----------------------+
| articles |
+----------------------+
1 row in set (0.01 sec)
mysql> select * from articles;
+------+--------------------------------+------+--------------+---------------+
| code | nom | prix | stock_actuel | stock_minimum |
+------+--------------------------------+------+--------------+---------------+
| a300 | vlo | 2500 | 10 | 5 |
| b300 | pompe | 56 | 62 | 45 |
| c300 | arc | 3500 | 10 | 20 |
| d300 | flches - lot de 6 | 780 | 12 | 20 |
| e300 | combinaison de plonge | 2800 | 34 | 7 |
| f300 | bouteilles d'oxygne | 800 | 10 | 5 |
+------+--------------------------------+------+--------------+---------------+
6 rows in set (0.02 sec)
mysql> describe articles;
+---------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| code | text | YES | | NULL | |
| nom | text | YES | | NULL | |
| prix | double | YES | | NULL | |
| stock_actuel | smallint(6) | YES | | NULL | |
| stock_minimum | smallint(6) | YES | | NULL | |
+---------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> exit
Bye
P#$r d+inir &a (ase A55ESS %#,,e s#$r%e de d#nnes ;DB50 'r#%deQ %#,,e s$it 4
a%tiveQ &'ad,inistrate$r de s#$r%es de d#nnes ;DB5 %#,,e i& a t ,#ntr '&$s ha$t et s&e%ti#nneQ &'#ng&et User DSN
<DSNVData S#$r%e Na,e=
A%%:s a$/ (ases de d#nnes FIE
aB#$teQ $ne s#$r%e ave% &e (#$t#n Hdd 0 indi-$eQ -$e %ette s#$r%e est a%%essi(&e via $n 'i&#te Hccess et +aites %erminer 4
D#nneQ &e n#, articlesVaccess . &a s#$r%e de d#nnes0 ,etteQ $ne des%ri'ti#n &i(re et $ti&iseQ &e (#$t#n Slectionner '#$r
dsigner &e +i%hier .md" de &a (ase. Ter,ineQ 'ar 5M.
A%%:s a$/ (ases de d#nnes FIL
La n#$ve&&e s#$r%e de d#nnes a''araCt a&#rs dans &a &iste des s#$r%es DSN $ti&isate$r 4
P#$r d+inir &a (ase MASfL DBARTI5LES %#,,e s#$r%e de d#nnes ;DB50 'r#%deQ %#,,e s$it 4
a%tiveQ &'ad,inistrate$r de s#$r%es de d#nnes ;DB5 %#,,e i& a t ,#ntr '&$s ha$t et s&e%ti#nneQ &'#ng&et User DS@.
AB#$teQ $ne n#$ve&&e s#$r%e de d#nnes ave% Hdd et s&e%ti#nneQ &e 'i&#te ;DB5 de MASfL.
Jaites %erminer. A''araCt a&#rs $ne 'age de %#n+ig$rati#n de &a s#$r%e MASfL 4
A%%:s a$/ (ases de d#nnes FK!
F

H
"
I
dans <F= #n d#nne $n n#, . n#tre s#$r%e de d#nnes ;DB5
dans <= #n indi-$e &a ,a%hine s$r &a-$e&&e se tr#$ve &e serve$r MASfL. I%i n#$s ,ett#ns localhost '#$r indi-$er -$'i& est
s$r &a ,*,e ,a%hine -$e n#tre a''&i%ati#n. Si &e serve$r MASfL tait s$r $ne ,a%hine M distante0 #n ,ettrait &. s#n n#,
et n#tre a''&i%ati#n +#n%ti#nnerait a&#rs ave% $ne (ase de d#nnes distante sans ,#di+i%ati#n.
dans <H= #n ,et &e n#, de &a (ase. I%i e&&e s'a''e&&e DBARTI5LES.
dans <"= #n ,et &e &#gin admarticles et dans <I= &e ,#t de 'asse mdparticles.
K.H. Uti&isati#n d'$n 'i&#te ;DB5
Dans $ne a''&i%ati#n $ti&isant $ne (ase de d#nnes en ,#de %#nne%t0 #n tr#$vera gnra&e,ent &es ta'es s$ivantes 4
F. 5#nne/i#n . &a (ase de d#nnes
. l,issi#ns de re-$*tes SfL vers &a (ase
H. R%e'ti#n et traite,ent des rs$&tats de %es re-$*tes
". Jer,et$re de &a %#nne/i#n
Les ta'es et H s#nt ra&ises de +a@#n r'te0 &a +er,et$re de %#nne/i#n n)aAant &ie$ -$). &a +in de &)e/'&#itati#n de &a (ase. 5)est
$n s%h,a re&ative,ent %&assi-$e d#nt v#$s aveQ 'e$t-*tre &)ha(it$de si v#$s aveQ e/'&#it $ne (ase de d#nnes de +a@#n
intera%tive. 5es ta'es s#nt &es ,*,es -$e &a (ase s#it $ti&ise a$ travers d'$n 'i&#te ;DB5 #$ d'$n 'i&#te ;LE DB. N#$s
'rsent#ns %i-dess#$s $n e/e,'&e ave% &es %&asses .NET de gesti#n des s#$r%es de d#nnes ;DB5. Le 'r#gra,,e s'a''e&&e liste et
ad,et %#,,e 'ara,:tre &e n#, DSN d'$ne s#$r%e de d#nnes ;DB5 aAant $ne ta(&e ARTI5LES. I& a++i%he a&#rs &e %#nten$ de
%ette ta(&e 4
dos>liste
syntaxe : pg dsnArticles
dos>liste articles-access
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
a300 vlo 2500 10 5
b300 pompe 56 62 45
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
e300 combinaison de plonge 2800 34 7
f300 bouteilles d'oxygne 800 10 5
dos>liste mysql-artices
Erreur d'exploitation de la base de donnes (ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source
name not found and no default driver specified)
dos>liste mysql-articles
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
a300 vlo 2500 10 5
b300 pompe 56 62 45
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
e300 combinaison de plonge 2800 34 7
f300 bouteilles d'oxygne 800 10 5
S$r &es rs$&tats %i-dess$s0 n#$s v#A#ns -$e &e 'r#gra,,e a &ist a$ssi (ien &e %#nten$ de &a (ase A55ESS -$e de &a (ase MASfL.
Et$di#ns ,aintenant &e %#de de %e 'r#gra,,e 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Imports System.Data
Imports Microsoft.Data.Odbc
Imports Microsoft.VisualBasic
Module db1
Sub main(ByVal args As String())
' application console
' affiche le contenu d'une table /A3#%*"+ d'une base )+4
A%%:s a$/ (ases de d#nnes FKF
' dont le nom est pass en paramtre
Const syntaxe As String = "syntaxe : pg dsnArticles"
Const tabArticles As String = "articles" ' la table des articles
' vrification des paramtres
' a-t-on 1 paramtre
If args.Length <> 1 Then
' msg d'erreur
Console.Error.WriteLine(syntaxe)
' fin
Environment.Exit(1)
End If
' on rcupre le paramtre
Dim dsnArticles As String = args(0) ' la base )+4
' prparation de la conneion la bd
Dim articlesConn As OdbcConnection = Nothing ' la conneion
Dim myReader As OdbcDataReader = Nothing ' le lecteur de donnes
' on tente d'accder la base de donnes
Try
' chane de conneion la base
Dim connectString As String = "DSN=" + dsnArticles + ";"
articlesConn = New OdbcConnection(connectString)
articlesConn.Open()
' ecution d'une commande +8*
Dim sqlText As String = "select * from " + tabArticles
Dim myOdbcCommand As New OdbcCommand(sqlText)
myOdbcCommand.Connection = articlesConn
myReader = myOdbcCommand.ExecuteReader()
' "ploitation de la table rcupre
' affichage des colonnes
Dim ligne As String = ""
Dim i As Integer
For i = 0 To (myReader.FieldCount - 1) - 1
ligne += myReader.GetName(i) + ","
Next i
ligne += myReader.GetName(i)
Console.Out.WriteLine((ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf + ligne +
ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf))
' affichage des donnes
While myReader.Read()
' eploitation ligne courante
ligne = ""
For i = 0 To myReader.FieldCount - 1
ligne += myReader(i).ToString + " "
Next i
Console.WriteLine(ligne)
End While
Catch ex As Exception
Console.Error.WriteLine(("Erreur d'exploitation de la base de donnes " + ex.Message + ")"))
Environment.Exit(2)
Finally
' fermeture lecteur
myReader.Close()
' fermeture conneion
articlesConn.Close()
End Try
End Sub
End Module
Les %&asses de gesti#n des s#$r%es ;DB5 se tr#$vent dans &'es'a%e de n#,s :icroso#t.Data.5d"c -$'#n d#it d#n% i,'#rter. Par
ai&&e$rs0 $n %ertain n#,(re de %&asses se tr#$ve dans &'es'a%e de n#,s System.Data.
Imports System.Data
Imports Microsoft.Data.Odbc
Les es'a%es de n#,s $ti&iss 'ar &e 'r#gra,,e s#nt dans di++rents asse,(&ages. ;n %#,'i&e &e 'r#gra,,e ave% &a %#,,ande
s$ivante 4
dos1vbc +r)microsoft.data.odbc.dll +r)microsoft.visualbasic.dll +r)system.dll +r)system.data.dll db1.vb
A%%:s a$/ (ases de d#nnes FK
/.3.2.1 .a phase de connexion
Une %#nne/i#n ;DB5 $ti&ise &a %&asse 5d"c(onnection. Le %#nstr$%te$r de %ette %&asse ad,et %#,,e 'ara,:tre %e -$'#n a''e&&e $ne
c-a>ne de conne&ion. 5e&&e-%i est $ne %haCne de %ara%t:res -$i d+init t#$s &es 'ara,:tres n%essaires '#$r -$e &a %#nne/i#n . &a
(ase de d#nnes '$isse se +aire. 5es 'ara,:tres 'e$vent *tre tr:s n#,(re$/ et d#n% &a %haCne %#,'&e/e. La %haCne a &a +#r,e
&param1D!aleur1Wparam2D!aleur2W...Wparam,D!aleur,W&.V#i%i -$e&-$es 'ara,:tres param, '#ssi(&es 4
uid
n#, d'$n $ti&isate$r -$i va a%%der . &a (ase de d#nnes
password
,#t de 'asse de %et $ti&isate$r
dsn
n#, DSN de &a (ase si e&&e en a $n
data
source
n#, de &a (ase de d#nnes a%%de
...
Si #n d+init $ne s#$r%e de d#nnes %#,,e s#$r%e de d#nnes ;DB5 . &'aide de &'ad,inistrate$r de s#$r%es de d#nnes ;DB50
%es 'ara,:tres #nt dB. t d#nns et enregistrs. I& s$++it a&#rs de 'asser &e 'ara,:tre DSN -$i d#nne &e n#, DSN de &a s#$r%e de
d#nnes. 5'est %e -$i est +ait i%i 4
' prparation de la connexion la bd
Dim articlesConn As OdbcConnection = Nothing ' la connexion
Dim myReader As OdbcDataReader = Nothing ' le lecteur de donnes
Try
' on tente d'accder la base de donnes
' chane de connexion la base
Dim connectString As String = "DSN=" + dsnArticles + ";"
articlesConn = New OdbcConnection(connectString)
articlesConn.Open()
Une +#is &'#(Bet 5d"c(onnection %#nstr$it0 #n #$vre &a %#nne/i#n ave% &a ,th#de 5pen. 5ette #$vert$re 'e$t %h#$er %#,,e t#$te
a$tre #'rati#n s$r &a (ase. 5'est '#$r-$#i &'ense,(&e d$ %#de d'a%%:s . &a (ase est-i& dans $n tryVcatch. Une +#is &a %#nne/i#n ta(&ie0
#n 'e$t ,ettre des re-$*tes SfL s$r &a (ase.
/.3.2.2 Xmettre des re9uYtes SA.
P#$r ,ettre des re-$*tes SfL0 i& n#$s +a$t $n #(Bet (ommand0 i%i '&$s e/a%te,ent $n #(Bet 5d"c(ommand '$is-$e n#$s $ti&is#ns
$ne s#$r%e de d#nnes ;DB5. La %&asse 5d"c(ommand a '&$sie$rs %#nstr$%te$rs 4
5d"c(ommand)+ 4 %re $n #(Bet (ommand vide. I& +a$dra '#$r &'$ti&iser 'r%iser $&trie$re,ent diverses 'r#'rits 4
o =o++andTe&t 4 &e te/te de &a re-$*te SfL . e/%$ter
o =onnection 4 &'#(Bet 5d"c(onnection re'rsentant &a %#nne/i#n . &a (ase de d#nnes s$r &a-$e&&e &a re-$*te sera
+aite
o =o++andType 4 &e tA'e de &a re-$*te SfL. I& A a tr#is va&e$rs '#ssi(&es
F. (ommand%ype.%ext 4 &a 'r#'rit (ommand%ext %#ntient &e te/te d'$ne re-$*te SfL <va&e$r 'ar d+a$t=
. (ommand%ype.Stored-rocedure 4 &a 'r#'rit (ommand%ext %#ntient &e n#, d'$ne 'r#%d$re st#%Re dans &a
(ase
H. (ommand%ype.%a"leDirect 4 &a 'r#'rit (ommand%ext %#ntient &e n#, d'$ne ta(&e T. E-$iva&ent . select Z
#rom %. N'e/iste -$e '#$r &es 'i&#tes ;LE DB.
5d"c(ommand)string s9l%ext+ 4 &e 'ara,:tre s9l%ext sera a++e%t . &a 'r#'rit (ommand%ext. 5'est &e te/te de &a re-$*te SfL .
e/%$ter. La %#nne/i#n devra *tre 'r%ise dans &a 'r#'rit (onnection.
5d"c(ommand)string s9l%ext* 5d"c(onnection connexion+ 4 &e 'ara,:tre s9l%ext sera a++e%t . &a 'r#'rit (ommand%ext et &e
'ara,:tre connexion . &a 'r#'rit (onnection.
P#$r ,ettre &a re-$*te SfL0 #n dis'#se de de$/ ,th#des 4
8dbcdata@eader E&ecute@eader01 4 env#ie &a re-$*te SELE5T de (ommand%ext . &a %#nne/i#n (onnection et %#nstr$it
$n #(Bet 5d"cDataReader 'er,ettant &'a%%:s . t#$tes &es &ignes de &a ta(&e rs$&tat d$ select
int E&ecuteN8nHuery01 4 env#ie &a re-$*te de ,ise . B#$r <INSERT0 UPDATE0 DELETE= de (ommand%ext . &a
%#nne/i#n (onnection et rend &e n#,(re de &ignes a++e%tes 'ar %ette ,ise . B#$r.
Dans n#tre e/e,'&e0 a'r:s av#ir #$vert &a %#nne/i#n . &a (ase0 n#$s ,ett#ns $ne re-$*te SfL SELE5T '#$r av#ir &e %#nten$ de
&a ta(&e ARTI5LES 4
' excution d'une commande SQL
Dim sqlText As String = "select * from " + tabArticles
Dim myOdbcCommand As New OdbcCommand(sqlText)
myOdbcCommand.Connection = articlesConn
A%%:s a$/ (ases de d#nnes FKH
myReader = myOdbcCommand.ExecuteReader()
Une re-$*te d)interr#gati#n est %&assi-$e,ent $ne re-$*te d$ tA'e 4
select col!, col%,... fro+ table!, table%,...
2-ere condition
order by e&pression
...
Se$&s &es ,#ts %&s de &a 're,i:re &igne s#nt #(&igat#ires0 &es a$tres s#nt +a%$&tati+s. I& e/iste d)a$tres ,#ts %&s n#n 'rsents i%i.
F. Une B#int$re est +aite ave% t#$tes &es ta(&es -$i s#nt derri:re &e ,#t %& fro+
. Se$&es &es %#&#nnes -$i s#nt derri:re &e ,#t %& select s#nt %#nserves
H. Se$&es &es &ignes vri+iant &a %#nditi#n d$ ,#t %& 2-ere s#nt %#nserves
". Les &ignes rs$&tantes #rd#nnes se&#n &)e/'ressi#n d$ ,#t %& order by +#r,ent &e rs$&tat de &a re-$*te.
Le rs$&tat d)$n select est $ne ta(&e. Si #n %#nsid:re &a ta(&e ARTI5LES 'r%dente et -$)#n ve$i&&e &es n#,s des arti%&es d#nt &e
st#%R a%t$e& est a$-dess#$s d$ se$i& ,ini,a&0 #n %rira 4
select nom #rom articles Ihere stocO$actuelCstocO$minimum
Si #n &es ve$t 'ar #rdre a&'ha(ti-$e des n#,s0 #n %rira 4
select nom #rom articles Ihere stocO$actuelCstocO$minimum order "y nom
/.3.2.3 7xploitation du rsultat d;une re9uYte S7.7(%
Le rs$&tat d'$ne re-$*te SELE5T en ,#de n#n %#nne%t est $n #(Bet DataReader0 i%i $n #(Bet 5d"cDataReader. 5et #(Bet 'er,et
d'#(tenir s-$entie&&e,ent t#$tes &es &ignes d$ rs$&tat et d'av#ir des in+#r,ati#ns s$r &es %#&#nnes de %es rs$&tats. E/a,in#ns
-$e&-$es 'r#'rits et ,th#des de %ette %&asse 4
FieldCount
&e n#,(re de %#&#nnes de &a ta(&e
Item
Item)i+ re'rsente &a %#&#nne nY i de &a &igne %#$rante d$ rs$&tat
XXX GetXXX(i)
&a va&e$r de &a %#&#nne nY i de &a &igne %#$rante rend$e %#,,e tA'e 333<IntFK0 IntH0 IntK"0 D#$(&e0 String0
B##&ean0 ...=
string
GetName(i)
n#, de &a %#&#nne nY i
Close()
+er,e &'#(Bet 5d"cdataReader et &i(:re &es ress#$r%es ass#%ies
bool Read()
avan%e d'$ne &igne dans &a ta(&e des rs$&tats. Rend +a$/ si %e&a n'est 'as '#ssi(&e. La n#$ve&&e &igne devient &a
&igne %#$rante d$ &e%te$r.
L'e/'&#itati#n d$ rs$&tat d'$n select est tA'i-$e,ent $ne e/'&#itati#n s-$entie&&e ana&#g$e . %e&&e des +i%hiers te/te 4 #n ne 'e$t
-$'avan%er dans &a ta(&e0 'as re%$&er 4
While myReader.Read()
' on a une ligne - on l'exploite
....
' ligne suivante
end while
5es e/'&i%ati#ns s$++isent . %#,'rendre &e %#de s$ivant de n#tre e/e,'&e 4
' "ploitation de la table rcupre
' affichage des colonnes
Dim ligne As String = ""
Dim i As Integer
For i = 0 To (myReader.FieldCount - 1) - 1
ligne += myReader.GetName(i) + ","
Next i
ligne += myReader.GetName(i)
Console.Out.WriteLine((ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf + ligne +
ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf))
' affichage des donnes
While myReader.Read()
' eploitation ligne courante
ligne = ""
For i = 0 To myReader.FieldCount - 1
A%%:s a$/ (ases de d#nnes FK"
ligne += myReader(i).ToString + " "
Next i
Console.WriteLine(ligne)
End While
La se$&e di++i%$&t est dans &'instr$%ti#n #> &es va&e$rs des di++rentes %#&#nnes de &a &igne %#$rante s#nt %#n%atnes 4
For i = 0 To myReader.FieldCount - 1
ligne += myReader(i).ToString + " "
Next i
La n#tati#n ligne4DmyReader)i+.%oString est trad$it 'ar ligne4DmyReader.Item)i+.%oString)+ #> Item)i+ est &a va&e$r de &a %#&#nne i de &a
&igne %#$rante.
/.3.2.0 .i"ration des ressources
Les %&asses 5d"cReader et 5d"c(onnection '#ss:dent t#$tes de$/ $ne ,th#de =lose01 -$i &i(:re &es ress#$r%es ass#%ies a$/ #(Bets
ainsi +er,s.
' fermeture lecteur
myReader.Close()
' fermeture connexion
articlesConn.Close()
K.H.H Uti&isati#n d'$n 'i&#te ;LE DB
N#$s re'ren#ns &e ,*,e e/e,'&e0 %ette +#is ave% $ne (ase a%%de via $n 'i&#te ;LE DB. La '&ate-+#r,e .NET +#$rnit $n te&
'i&#te '#$r &es (ases A55ESS. A$ssi a&&#ns-n#$s $ti&iser &a ,*,e (ase articles.md" -$e 'r%de,,ent. N#$s %her%h#ns . ,#ntrer
i%i -$e si &es %&asses %hangent0 &es %#n%e'ts restent &es ,*,es 4
&a %#nne/i#n est re'rsente 'ar $n #(Bet 8le/b=onnection
$ne re-$*te SfL est ,ise grh%e . $n #(Bet 8le/b=o++and
si %ette re-$*te est $ne %&a$se SELE5T0 #n #(tiendra en ret#$r $n #(Bet 8le/b/ata@eader '#$r a%%der a$/ &ignes de
&a ta(&e rs$&tat
5es %&asses s#nt dans &'es'a%e de n#,s System.Data.5leD". Le 'r#gra,,e 'r%dent 'e$t *tre trans+#r, ais,ent '#$r grer $ne
(ase ;LE DB 4
#n re,'&a%e 'art#$t ;d(%33 'ar ;&eD(33
#n ,#di+ie &a %haCne de %#nne/i#n. P#$r $ne (ase A55ESS sans &#ginN,#t de 'asse0 &a %haCne de %#nne/i#n est
-ro!iderD:icroso#t.J7%.5.7DP.0.3WData SourceD2#ichier.md". La 'artie 'ara,:tra(&e de %ette %haCne est &e n#, d$ +i%hier
A55ESS . $ti&iser. N#$s ,#di+ier#ns n#tre 'r#gra,,e '#$r -$'i& a%%e'te en 'ara,:tre &e n#, de %e +i%hier.
&'es'a%e de n#,s . i,'#rter est ,aintenant System.Data.5leD".
N#tre 'r#gra,,e devient &e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Imports System.Data
Imports Microsoft.Data.Odbc
Imports Microsoft.VisualBasic
Imports System.Data.OleDb
Module db2
Public Sub Main(ByVal args() As String)
' application console
' affiche le contenu d'une table /AA3#%*"+ d'une base )+4
' dont le nom est pass en paramtre
Const syntaxe As String = "syntaxe : pg base_access_articles"
Const tabArticles As String = "articles" ' la table des articles
' vrification des paramtres
' a-t-on 1 paramtre
If args.Length <> 1 Then
' msg d'erreur
Console.Error.WriteLine(syntaxe)
' fin
A%%:s a$/ (ases de d#nnes FKI
Environment.Exit(1)
End If
' on rcupre le paramtre
Dim dbArticles As String = args(0) ' la base de donnes
' prparation de la conneion la bd
Dim articlesConn As OleDbConnection = Nothing ' la conneion
Dim myReader As OleDbDataReader = Nothing ' le lecteur de donnes
' on tente d'accder la base de donnes
Try
' chane de conneion la base
Dim connectString As String = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + dbArticles + ";"
articlesConn = New OleDbConnection(connectString)
articlesConn.Open()
' ecution d'une commande +8*
Dim sqlText As String = "select * from " + tabArticles
Dim myOleDbCommand As New OleDbCommand(sqlText)
myOleDbCommand.Connection = articlesConn
myReader = myOleDbCommand.ExecuteReader()
' "ploitation de la table rcupre
' affichage des colonnes
Dim ligne As String = ""
Dim i As Integer
For i = 0 To (myReader.FieldCount - 1) - 1
ligne += myReader.GetName(i) + ","
Next i
ligne += myReader.GetName(i)
Console.Out.WriteLine((ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf + ligne +
ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf))
' affichage des donnes
While myReader.Read()
' eploitation ligne courante
ligne = ""
For i = 0 To myReader.FieldCount - 1
ligne += myReader(i).ToString + " "
Next i
Console.WriteLine(ligne)
End While
Catch ex As Exception
Console.Error.WriteLine(("Erreur d'exploitation de la base de donnes (" + ex.Message + ")"))
Environment.Exit(2)
Finally
' fermeture lecteur
myReader.Close()
' fermeture conneion
articlesConn.Close()
End Try
' fin
Environment.Exit(0)
End Sub
End Module
Les rs$&tats #(ten$s 4
dos>vbc liste.vb
E:\data\serge\MSNET\vb.net\adonet\6>dir
07/05/2002 15:09 2 325 liste.CS
07/05/2002 15:09 4 608 liste.exe
20/08/2001 11:54 86 016 ARTICLES.MDB
dos>liste articles.mdb
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
a300 vlo 2500 10 5
b300 pompe 56 62 45
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
e300 combinaison de plonge 2800 34 7
f300 bouteilles d'oxygne 800 10 5
A%%:s a$/ (ases de d#nnes FKK
K.H." Mise . B#$r d'$ne ta(&e
Les e/e,'&es 'r%dents se %#ntentaient de &ister &e %#nten$ d'$ne ta(&e. N#$s ,#di+i#ns n#tre 'r#gra,,e de gesti#n de &a (ase
d'arti%&es a+in -$'i& '$isse ,#di+ier %e&&e-%i. Le 'r#gra,,e s'a''e&&e s9l. ;n &$i 'asse en 'ara,:tre &e n#, DSN de &a (ase d'arti%&es
. grer. L'$ti&isate$r ta'e dire%te,ent des %#,,andes SfL a$ %&avier -$e &e 'r#gra,,e e/%$te %#,,e &e ,#ntrent &es rs$&tats
-$i s$ivent #(ten$s s$r &a (ase MASfL d'arti%&es 4
dos>vbc /r:microsoft.data.odbc.dll sql.vb
dos>sql mysql-articles
Requte SQL (fin pour arrter) : select * from articles
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
a300 vlo 2500 10 5
b300 pompe 56 62 45
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
e300 combinaison de plonge 2800 34 7
f300 bouteilles d'oxygne 800 10 5
Requte SQL (fin pour arrter) : select * from articles where stock_actuel<stock_minimum
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
Requte SQL (fin pour arrter) : insert into articles values ("1","1",1,1,1)
Il y a eu 1 ligne(s) modifie(s)
Requte SQL (fin pour arrter) : select * from articles
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
a300 vlo 2500 10 5
b300 pompe 56 62 45
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
e300 combinaison de plonge 2800 34 7
f300 bouteilles d'oxygne 800 10 5
1 1 1 1 1
Requte SQL (fin pour arrter) : update articles set nom="2" where nom="1"
Il y a eu 1 ligne(s) modifie(s)
Requte SQL (fin pour arrter) : select * from articles
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
a300 vlo 2500 10 5
b300 pompe 56 62 45
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
e300 combinaison de plonge 2800 34 7
f300 bouteilles d'oxygne 800 10 5
1 2 1 1 1
Requte SQL (fin pour arrter) : delete from articles where code="1"
Il y a eu 1 ligne(s) modifie(s)
Requte SQL (fin pour arrter) : select * from articles
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
a300 vlo 2500 10 5
b300 pompe 56 62 45
c300 arc 3500 10 20
d300 flches - lot de 6 780 12 20
A%%:s a$/ (ases de d#nnes FKO
e300 combinaison de plonge 2800 34 7
f300 bouteilles d'oxygne 800 10 5
Requte SQL (fin pour arrter) : select * from articles order by nom asc
----------------------------------------
code,nom,prix,stock_actuel,stock_minimum
----------------------------------------
c300 arc 3500 10 20
f300 bouteilles d'oxygne 800 10 5
e300 combinaison de plonge 2800 34 7
d300 flches - lot de 6 780 12 20
b300 pompe 56 62 45
a300 vlo 2500 10 5
Requte SQL (fin pour arrter) : fin
Le 'r#gra,,e est &e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Imports System.Data
Imports Microsoft.Data.Odbc
Imports System.Data.OleDb
Imports System.Text.RegularExpressions
Imports System.Collections
Imports Microsoft.VisualBasic
Module db3
Public Sub Main(ByVal args() As String)
' application console
' ecute des re$u<tes +8* tapes au clavier sur une
' table /A3#%*"+ d'une base )+4 dont le nom est pass en paramtre
Const syntaxe As String = "syntaxe : pg dsnArticles"
' vrification des paramtres
' a-t-on 2 paramtres
If args.Length <> 1 Then
' msg d'erreur
Console.Error.WriteLine(syntaxe)
' fin
Environment.Exit(1)
End If 'if
' on rcupre le paramtre
Dim dsnArticles As String = args(0)
' chane de conneion la base
Dim connectString As String = "DSN=" + dsnArticles + ";"
' prparation de la conneion la bd
Dim articlesConn As OdbcConnection = Nothing
Dim sqlCommand As OdbcCommand = Nothing
Try
' on tente d'accder la base de donnes
articlesConn = New OdbcConnection(connectString)
articlesConn.Open()
' on cre un objet command
sqlCommand = New OdbcCommand("", articlesConn)
'tr(
Catch ex As Exception
' msg d'erreur
Console.Error.WriteLine(("Erreur d'exploitation de la base de donnes (" + ex.Message + ")"))
' libration des ressources
Try
articlesConn.Close()
Catch
End Try
Environment.Exit(2)
End Try 'catch
' on construit un dictionnaire des commandes s$l acceptes
Dim commandesSQL() As String = {"select", "insert", "update", "delete"}
Dim dicoCommandes As New Hashtable
Dim i As Integer
For i = 0 To commandesSQL.Length - 1
dicoCommandes.Add(commandesSQL(i), True)
Next i
A%%:s a$/ (ases de d#nnes FKE
' lecture-ecution des commandes +8* tapes au clavier
Dim requte As String = Nothing ' tete de la re$u<te +8*
Dim champs() As String ' les champs de la re$u<te
Dim modle As New Regex("\s+")
' boucle de saisie-ecution des commandes +8* tapes au clavier
While True
' pas d'erreur au dpart
Dim erreur As Boolean = False
' demande de la re$u<te
Console.Out.Write(ControlChars.Lf + "Requte SQL (fin pour arrter) : ")
requte = Console.In.ReadLine().Trim().ToLower()
' fini >
If requte = "fin" Then
Exit While
End If
' on dcompose la re$u<te en champs
champs = modle.Split(requte)
' re$u<te valide >
If champs.Length = 0 Or Not dicoCommandes.ContainsKey(champs(0)) Then
' msg d'erreur
Console.Error.WriteLine("Requte invalide. Utilisez select, insert, update, delete")
' re$u<te suivante
erreur = True
End If
If Not erreur Then
' prparation de l'objet %ommand pour ecuter la re$u<te
sqlCommand.CommandText = requte
' ecution de la re$u<te
Try
If champs(0) = "select" Then
executeSelect(sqlCommand)
Else
executeUpdate(sqlCommand)
End If
Catch ex As Exception
' msg d'erreur
Console.Error.WriteLine(("Erreur d'exploitation de la base de donnes (" + ex.Message + ")"))
End Try
End If
End While
' libration des ressources
Try
articlesConn.Close()
Catch
End Try
Environment.Exit(0)
End Sub
' ecution d'une re$u<te de mise jour
Sub executeUpdate(ByVal sqlCommand As OdbcCommand)
' ecute s$l%ommand' re$u<te de mise jour
Dim nbLignes As Integer = sqlCommand.ExecuteNonQuery()
' affichage
Console.Out.WriteLine(("Il y a eu " & nbLignes & " ligne(s) modifie(s)"))
End Sub
' ecution d'une re$u<te +elect
Sub executeSelect(ByVal sqlCommand As OdbcCommand)
' ecute s$l%ommand' re$u<te select
Dim myReader As OdbcDataReader = sqlCommand.ExecuteReader()
' "ploitation de la table rcupre
' affichage des colonnes
Dim ligne As String = ""
Dim i As Integer
For i = 0 To (myReader.FieldCount - 1) - 1
ligne += myReader.GetName(i) + ","
Next i
ligne += myReader.GetName(i)
Console.Out.WriteLine((ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf + ligne +
ControlChars.Lf + "".PadLeft(ligne.Length, "-"c) + ControlChars.Lf))
' affichage des donnes
While myReader.Read()
' eploitation ligne courante
ligne = ""
For i = 0 To myReader.FieldCount - 1
ligne += myReader(i).ToString + " "
Next i
' affichage
Console.WriteLine(ligne)
End While
A%%:s a$/ (ases de d#nnes FKL
' libration des ressources
myReader.Close()
End Sub
End Module
N#$s ne %#,,ent#ns i%i -$e %e -$i est n#$vea$ 'ar ra''#rt a$ 'r#gra,,e 'r%dent 4
N#$s %#nstr$is#ns $n di%ti#nnaire des %#,,andes s-& a%%e'tes 4
' on construit un dictionnaire des commandes sql acceptes
Dim commandesSQL() As String = {"select", "insert", "update", "delete"}
Dim dicoCommandes As New Hashtable
Dim i As Integer
For i = 0 To commandesSQL.Length - 1
dicoCommandes.Add(commandesSQL(i), True)
Next i
%e -$i n#$s 'er,et ens$ite de vri+ier si,'&e,ent si &e Fer ,#t <champs23= de &a re-$*te ta'e est &'$ne des -$atre %#,,andes
a%%e'tes 4
' requte valide ?
If champs.Length = 0 Or Not dicoCommandes.ContainsKey(champs(0)) Then
' msg d'erreur
Console.Error.WriteLine("Requte invalide. Utilisez select, insert, update, delete")
' requte suivante
erreur = True
End If 'if
A$'aravant &a re-$*te avait t d%#,'#se en %ha,'s . &'aide de &a ,th#de Split de &a %&asse Reg7x 4
Dim modle As New Regex("\s+")
....
' on dcompose la requte en champs
champs = modle.Split(requte)
Les ,#ts %#,'#sant &a re-$*te 'e$vent *tre s'ars d'$n n#,(re -$e&%#n-$e d'es'a%es.
L'e/%$ti#n d'$ne re-$*te select n'$ti&ise 'as &a ,*,e ,th#de -$e %e&&e d'$ne re-$*te d'$ne ,ise . B#$r <insert0 update0 delete=.
A$ssi d#it-#n +aire $n test et e/%$ter $ne +#n%ti#n di++rente '#$r %ha%$ de %es de$/ %as 4
' prparation de l'objet Command pour excuter la requte
sqlCommand.CommandText = requte
' excution de la requte
Try
If champs(0) = "select" Then
executeSelect(sqlCommand)
Else
executeUpdate(sqlCommand)
End If 'try
Catch ex As Exception
' msg d'erreur
Console.Error.WriteLine(("Erreur d'exploitation de la base de donnes (" + ex.Message + ")"))
End Try
L'e/%$ti#n d'$ne re-$*te SfL 'e$t gnrer $ne e/%e'ti#n -$i est i%i gre.
La +#n%ti#n executeSelect re'rend t#$t %e -$i a t v$ dans &es e/e,'&es 'r%dents.
La +#n%ti#n executeUpdate $ti&ise &a ,th#de 7xecute@onAuery de &a %&ass 5d"c(ommand -$i rend &e n#,(re de &ignes
a++e%tes 'ar &a %#,,ande.
K.H.I IMP;TS
N#$s re'ren#ns &'#(Bet impt %#nstr$it dans $n %ha'itre 'r%dent 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Public Class impt
' les donnes ncessaires au calcul de l'imp7t
' proviennent d'une source etrieure
A%%:s a$/ (ases de d#nnes FO!
Private limites(), coeffR(), coeffN() As Decimal
' constructeur
Public Sub New(ByVal LIMITES() As Decimal, ByVal COEFFR() As Decimal, ByVal COEFFN() As Decimal)
' on vrifie $ue les = tablaeu ont la m<me taille
Dim OK As Boolean = LIMITES.Length = COEFFR.Length And LIMITES.Length = COEFFN.Length
If Not OK Then
Throw New Exception("Les 3 tableaux fournis n'ont pas la mme taille(" & LIMITES.Length & "," &
COEFFR.Length & "," & COEFFN.Length & ")")
End If
' c'est bon
Me.limites = LIMITES
Me.coeffR = COEFFR
Me.coeffN = COEFFN
End Sub
' calcul de l'imp7t
Public Function calculer(ByVal mari As Boolean, ByVal nbEnfants As Integer, ByVal salaire As Integer)
As Long
' calcul du nombre de parts
Dim nbParts As Decimal
If mari Then
nbParts = CDec(nbEnfants) / 2 + 2
Else
nbParts = CDec(nbEnfants) / 2 + 1
End If
If nbEnfants >= 3 Then
nbParts += 0.5D
End If
' calcul revenu imposable 9 8uotient familial
Dim revenu As Decimal = 0.72D * salaire
Dim QF As Decimal = revenu / nbParts
' calcul de l'imp7t
limites((limites.Length - 1)) = QF + 1
Dim i As Integer = 0
While QF > limites(i)
i += 1
End While
' retour rsultat
Return CLng(revenu * coeffR(i) - nbParts * coeffN(i))
End Function
End Class
N#$s &$i aB#$t#ns $n n#$vea$ %#nstr$%te$r 'er,ettant d'initia&iser &es ta(&ea$/ limites0 coe##R0 coe##@ . 'artir d'$ne (ase de d#nnes
;DB5 4
Imports System.Data
Imports Microsoft.Data.Odbc
Imports System.Collections
...
' constructeur 2
Public Sub New(ByVal DSNimpots As String, ByVal Timpots As String, ByVal colLimites As String, ByVal
colCoeffR As String, ByVal colCoeffN As String)
' initialise les trois tableau limites' coeffA' coeff4 partir
' du contenu de la table 3impots de la base !)&% )+4impots
' col*imites' col%oeffA' col%oeff4 sont les trois colonnes de cette table
' peut lancer une eception
Dim connectString As String = "DSN=" + DSNimpots + ";" ' chane de conneion la base
Dim impotsConn As OdbcConnection = Nothing ' la conneion
Dim sqlCommand As OdbcCommand = Nothing ' la commande +8*
' la re$u<te +"*"%3
Dim selectCommand As String = "select " + colLimites + "," + colCoeffR + "," + colCoeffN + " from " +
Timpots
' tableau pour rcuprer les donnes
Dim tLimites As New ArrayList
Dim tCoeffR As New ArrayList
Dim tCoeffN As New ArrayList
' on tente d'accder la base de donnes
impotsConn = New OdbcConnection(connectString)
impotsConn.Open()
' on cre un objet command
sqlCommand = New OdbcCommand(selectCommand, impotsConn)
' on ecute la re$u<te
Dim myReader As OdbcDataReader = sqlCommand.ExecuteReader()
' "ploitation de la table rcupre
While myReader.Read()
' les donnes de la ligne courante sont mis dans les tableau
A%%:s a$/ (ases de d#nnes FOF
tLimites.Add(myReader(colLimites))
tCoeffR.Add(myReader(colCoeffR))
tCoeffN.Add(myReader(colCoeffN))
End While
' libration des ressources
myReader.Close()
impotsConn.Close()
' les tableau d(nami$ues sont mis dans des tableau stati$ues
Me.limites = New Decimal(tLimites.Count) {}
Me.coeffR = New Decimal(tLimites.Count) {}
Me.coeffN = New Decimal(tLimites.Count) {}
Dim i As Integer
For i = 0 To tLimites.Count - 1
limites(i) = Decimal.Parse(tLimites(i).ToString())
coeffR(i) = Decimal.Parse(tCoeffR(i).ToString())
coeffN(i) = Decimal.Parse(tCoeffN(i).ToString())
Next i
End Sub
Le 'r#gra,,e de test est &e s$ivant 4 i& re@#it en arg$,ents &es 'ara,:tres . trans,ettre a$ %#nstr$%te$r de &a %&asse impt. A'r:s
av#ir %#nstr$it $n #(Bet impt0 i& +ait des %a&%$&s d'i,'[t . 'aAer 4
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Imports Microsoft.VisualBasic
' pg de test
Module testimpots
Sub Main(ByVal arguments() As String)
' programme interactif de calcul d'imp7t
' l'utilisateur tape trois donnes au clavier C mari nb"nfants salaire
' le programme affiche alors l'imp7t pa(er
Const syntaxe1 As String = "pg DSNimpots tabImpots colLimites colCoeffR colCoeffN"
Const syntaxe2 As String = "syntaxe : mari nbEnfants salaire" + ControlChars.Lf + "mari : o pour
mari, n pour non mari" + ControlChars.Lf + "nbEnfants : nombre d'enfants" + ControlChars.Lf + "salaire
: salaire annuel en F"
' vrification des paramtres du programme
If arguments.Length <> 5 Then
' msg d'erreur
Console.Error.WriteLine(syntaxe1)
' fin
Environment.Exit(1)
End If 'if
' on rcupre les arguments
Dim DSNimpots As String = arguments(0)
Dim tabImpots As String = arguments(1)
Dim colLimites As String = arguments(2)
Dim colCoeffR As String = arguments(3)
Dim colCoeffN As String = arguments(4)
' cration d'un objet imp7t
Dim objImpt As impt = Nothing
Try
objImpt = New impt(DSNimpots, tabImpots, colLimites, colCoeffR, colCoeffN)
Catch ex As Exception
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
Environment.Exit(2)
End Try
' boucle infinie
While True
' au dpart pas d'erreurs
Dim erreur As Boolean = False
' on demande les paramtres du calcul de l'imp7t
Console.Out.Write("Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour
arrter :")
Dim paramtres As String = Console.In.ReadLine().Trim()
' $$ chose faire >
If paramtres Is Nothing Or paramtres = "" Then
Exit While
End If
' vrification du nombre d'arguments dans la ligne saisie
A%%:s a$/ (ases de d#nnes FO
Dim args As String() = paramtres.Split(Nothing)
Dim nbParamtres As Integer = args.Length
If nbParamtres <> 3 Then
Console.Error.WriteLine(syntaxe2)
erreur = True
End If
Dim mari As String
Dim nbEnfants As Integer
Dim salaire As Integer
If Not erreur Then
' vrification de la validit des paramtres
' mari
mari = args(0).ToLower()
If mari <> "o" And mari <> "n" Then
Console.Error.WriteLine((syntaxe2 + ControlChars.Lf + "Argument mari incorrect : tapez o ou
n"))
erreur = True
End If
' nb"nfants
nbEnfants = 0
Try
nbEnfants = Integer.Parse(args(1))
If nbEnfants < 0 Then
Throw New Exception
End If
Catch
Console.Error.WriteLine(syntaxe2 + "\nArgument nbEnfants incorrect : tapez un entier positif ou
nul")
erreur = True
End Try
' salaire
salaire = 0
Try
salaire = Integer.Parse(args(2))
If salaire < 0 Then
Throw New Exception
End If
Catch
Console.Error.WriteLine(syntaxe2 + "\nArgument salaire incorrect : tapez un entier positif ou
nul")
erreur = True
End Try
End If
If Not erreur Then
' les paramtres sont corrects - on calcule l'imp7t
Console.Out.WriteLine(("impt=" & objImpt.calculer(mari = "o", nbEnfants, salaire).ToString + "
F"))
End If
End While
End Sub
End Module
La (ase $ti&ise est $ne (ase MASfL de n#, DSN mys9lVimpots 4
C:\mysql\bin>mysql --database=impots --user=admimpots --password=mdpimpots
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.49-max-debug
Type 'help' for help.
mysql> show tables;
+------------------+
| Tables_in_impots |
+------------------+
| timpots |
+------------------+
mysql> select * from timpots;
+---------+--------+---------+
| limites | coeffR | coeffN |
+---------+--------+---------+
| 12620 | 0 | 0 |
| 13190 | 0.05 | 631 |
| 15640 | 0.1 | 1290.5 |
| 24740 | 0.15 | 2072.5 |
| 31810 | 0.2 | 3309.5 |
| 39970 | 0.25 | 4900 |
| 48360 | 0.3 | 6898 |
| 55790 | 0.35 | 9316.5 |
| 92970 | 0.4 | 12106 |
| 127860 | 0.45 | 16754 |
A%%:s a$/ (ases de d#nnes FOH
| 151250 | 0.5 | 23147.5 |
| 172040 | 0.55 | 30710 |
| 195000 | 0.6 | 39312 |
| 0 | 0.65 | 49062 |
+---------+--------+---------+
L'e/%$ti#n d$ 'r#gra,,e de test d#nne &es rs$&tats s$ivants 4
dos>D:\data\devel\vbnet\poly\chap6\impots>vbc /r:system.data.dll /r:microsoft.data.odbc.dll /r:system.dll
/t:library impots.vb
dos>vbc /r:impots.dll testimpots.vb
dos>test mysql-impots timpots limites coeffr coeffn
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :o 2 200000
impt=22506 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :n 2 200000
impt=33388 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :o 3 200000
impt=16400 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :n 3 300000
impt=50082 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :n 3 200000
impt=22506 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :
K." A%%:s a$/ d#nnes en ,#de d%#nne%t
5e s$Bet sera trait $&trie$re,ent.
A%%:s a$/ (ases de d#nnes FO"
O. Les threads d'e/%$ti#n
O.F Intr#d$%ti#n
L#rs-$'#n &an%e $ne a''&i%ati#n0 e&&e s'e/%$te dans $n +&$/ d'e/%$ti#n a''e& $n t-read. La %&asse .NET ,#d&isant $n thread est
&a %&asse System.%hreading.%hread et a &a d+initi#n s$ivante 4
N#$s n'$ti&iser#ns -$e %ertaines des 'r#'rits et ,th#des de %ette %&asse 4
CurrentThread - proprit statique
d#nne &e thread a%t$e&&e,ent en %#$rs d'e/%$ti#n
Name - proprit d'objet
n#, d$ thread
isAlive - proprit d'objet
indi-$e si &e thread est a%ti+<tr$e= #$ n#n <+a&se=
Start - mthode d'objet
&an%e &'e/%$ti#n d'$n thread
Abort - mthode d'objet
arr*te d+initive,ent &'e/%$ti#n d'$n thread
Sleep(n) - mthode statique
arr*te &'e/%$ti#n d'$n thread 'endant n ,i&&ise%#ndes
Suspend() - mthode d'objet
s$s'end te,'#raire,ent &'e/%$ti#n d'$n thread
Resume() - mthode d'objet
re'rend &'e/%$ti#n d'$n thread s$s'end$
Join() - mthode d'objet
#'rati#n (&#-$ante - attend &a +in d$ thread '#$r 'asser . &'instr$%ti#n s$ivante
Regard#ns $ne 're,i:re a''&i%ati#n ,ettant en viden%e &'e/isten%e d'$n thread 'rin%i'a& d'e/%$ti#n0 %e&$i dans &e-$e& s'e/%$te &a
+#n%ti#n :ain d'$ne %&asse 4
' utilisation de threads
Imports System
Imports System.Threading
Public Module thread1
Public Sub Main()
' init thread courant
Dim main As Thread = Thread.CurrentThread
' affichage
Console.Out.WriteLine(("Thread courant : " + main.Name))
' on change le nom
main.Name = "main"
' vrification
Console.Out.WriteLine(("Thread courant : " + main.Name))
' boucle infinie
While True
' affichage
Console.Out.WriteLine((main.Name + " : " + DateTime.Now.ToString("hh:mm:ss")))
' arr<t temporaire
Thread.Sleep(1000)
End While
End Sub
End Module
Les rs$&tats %ran 4
dos>thread1
Thread courant :
Les threads d'e/%$ti#n FOI
Thread courant : main
main : 06:13:55
main : 06:13:56
main : 06:13:57
main : 06:13:58
main : 06:13:59
^C
L'e/e,'&e 'r%dent i&&$stre &es '#ints s$ivants 4
&a +#n%ti#n :ain s'e/%$te (ien dans $n thread
#n a a%%:s a$/ %ara%tristi-$es de %e thread 'ar %hread.(urrent%hread
&e r[&e de &a ,th#de Sleep. I%i &e thread e/%$tant :ain se ,et en s#,,ei& rg$&i:re,ent 'endant F se%#nde entre de$/
a++i%hages.
O. 5rati#n de threads d'e/%$ti#n
I& est '#ssi(&e d'av#ir des a''&i%ati#ns #> des ,#r%ea$/ de %#de s'e/%$tent de +a@#n Dsi,$&taneD dans di++rents threads
d'e/%$ti#n. L#rs-$'#n dit -$e des threads s'e/%$tent de +a@#n si,$&tane0 #n %#,,et s#$vent $n a($s de &angage. Si &a ,a%hine
n'a -$'$n 'r#%esse$r %#,,e %'est en%#re s#$vent &e %as0 &es threads se 'artagent %e 'r#%esse$r 4 i&s en dis'#sent0 %ha%$n &e$r t#$r0
'endant $n %#$rt instant <-$e&-$es ,i&&ise%#ndes=. 5'est %e -$i d#nne &'i&&$si#n d$ 'ara&&&is,e d'e/%$ti#n. La '#rti#n de te,'s
a%%#rde . $n thread d'end de divers +a%te$rs d#nt sa 'ri#rit -$i a $ne va&e$r 'ar d+a$t ,ais -$i 'e$t *tre +i/e ga&e,ent 'ar
'r#gra,,ati#n. L#rs-$'$n thread dis'#se d$ 'r#%esse$r0 i& &'$ti&ise n#r,a&e,ent 'endant t#$t &e te,'s -$i &$i a t a%%#rd.
5e'endant0 i& 'e$t &e &i(rer avant ter,e 4
en se ,ettant en attente d'$n vne,ent <Iait* ,oin* suspend=
en se ,ettant en s#,,ei& 'endant $n te,'s dter,in <sleep=
F. Un t-read T est d'a(#rd %r 'ar s#n %#nstr$%te$r
Public Sub New(ByVal start As ThreadStart)
%hreadStart est de tA'e de&egate et d+init &e 'r#t#tA'e d'$ne +#n%ti#n sans 'ara,:tres 4
Public Delegate Sub ThreadStart()
Une %#nstr$%ti#n %&assi-$e est &a s$ivante 4
dim T as Thread=new Thread(new ThreadStart(run));
La +#n%ti#n run 'asse en 'ara,:tres sera e/%$te a$ &an%e,ent d$ Thread.
. L'e/%$ti#n d$ thread T est &an% 'ar T..tart01 4 &a +#n%ti#n Tr$nU 'asse a$ %#nstr$%te$r de T va a&#rs *tre e/%$te 'ar &e
thread T. Le 'r#gra,,e -$i e/%$te &'instr$%ti#n %.start)+ n'attend 'as &a +in de &a th%he T 4 i& 'asse a$ssit[t . &'instr$%ti#n
-$i s$it. ;n a a&#rs de$/ th%hes -$i s'e/%$tent en 'ara&&:&e. E&&es d#ivent s#$vent '#$v#ir %#,,$ni-$er entre e&&es '#$r
sav#ir #> en est &e travai& %#,,$n . ra&iser. 5'est &e 'r#(&:,e de sAn%hr#nisati#n des threads.
H. Une +#is &an%0 &e thread s'e/%$te de +a@#n a$t#n#,e. I& s'arr*tera &#rs-$e &a +#n%ti#n start -$'i& e/%$te a$ra +ini s#n travai&.
". ;n 'e$t env#Aer %ertains signa$/ . &a th%he T 4
a. T..uspend01 &$i dit de s'arr*ter ,#,entan,ent
(. T.@esu+e01 &$i dit de re'rendre s#n travai&
%. T.:bort01 &$i dit de s'arr*ter d+initive,ent
I. ;n 'e$t a$ssi attendre &a +in de s#n e/%$ti#n 'ar T.Coin01. ;n a &. $ne instr$%ti#n (&#-$ante 4 &e 'r#gra,,e -$i &'e/%$te
est (&#-$ B$s-$'. %e -$e &a th%he T ait ter,in s#n travai&. 5'est $n ,#Aen de sAn%hr#nisati#n.
E/a,in#ns &e 'r#gra,,e s$ivant 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Threading
Module thread2
Public Sub Main()
' init 3hread courant
Les threads d'e/%$ti#n FOK
Dim main As Thread = Thread.CurrentThread
' on fie un nom au 3hread
main.Name = "main"
' cration de threads d'ecution
Dim tches(4) As Thread
Dim i As Integer
For i = 0 To tches.Length - 1
' on cre le thread i
tches(i) = New Thread(New ThreadStart(AddressOf affiche))
' on fie le nom du thread
tches(i).Name = "tache_" & i
' on lance l'ecution du thread i
tches(i).Start()
Next i
' fin de main
Console.Out.WriteLine(("fin du thread " + main.Name))
End Sub
Public Sub affiche()
' affichage dbut d'ecution
Console.Out.WriteLine(("Dbut d'excution de la mthode affiche dans le Thread " +
Thread.CurrentThread.Name + " : " + DateTime.Now.ToString("hh:mm:ss")))
' mise en sommeil pendant 1 s
Thread.Sleep(1000)
' affichage fin d'ecution
Console.Out.WriteLine(("Fin d'excution de la mthode affiche dans le Thread " +
Thread.CurrentThread.Name + " : " + DateTime.Now.ToString("hh:mm:ss")))
End Sub
End Module
Le thread 'rin%i'a&0 %e&$i -$i e/%$te &a +#n%ti#n :ain0 %re I a$tres threads %hargs d'e/%$ter &a ,th#de stati-$e a##iche. Les
rs$&tats s#nt &es s$ivants 4
dos>thread2
fin du thread main
Dbut d'excution de la mthode affiche dans le Thread tache_0 : 05:27:53
Dbut d'excution de la mthode affiche dans le Thread tache_1 : 05:27:53
Dbut d'excution de la mthode affiche dans le Thread tache_2 : 05:27:53
Dbut d'excution de la mthode affiche dans le Thread tache_3 : 05:27:53
Dbut d'excution de la mthode affiche dans le Thread tache_4 : 05:27:53
Fin d'excution de la mthode affiche dans le Thread tache_0 : 05:27:54
Fin d'excution de la mthode affiche dans le Thread tache_1 : 05:27:54
Fin d'excution de la mthode affiche dans le Thread tache_2 : 05:27:54
Fin d'excution de la mthode affiche dans le Thread tache_3 : 05:27:54
Fin d'excution de la mthode affiche dans le Thread tache_4 : 05:27:54
5es rs$&tats s#nt tr:s instr$%ti+s 4
#n v#it t#$t d'a(#rd -$e &e &an%e,ent de &'e/%$ti#n d'$n thread n'est 'as (&#-$ante. La ,th#de :ain a &an% &'e/%$ti#n
de I threads en 'ara&&:&e et a ter,in s#n e/%$ti#n avant e$/. L'#'rati#n
' on lance l'excution du thread i
tches(i).Start()
&an%e &'e/%$ti#n d$ thread t[ches2i ,ais %e%i +ait0 &'e/%$ti#n se '#$rs$it i,,diate,ent ave% &'instr$%ti#n -$i s$it sans
attendre &a +in d'e/%$ti#n d$ thread.
t#$s &es threads %rs d#ivent e/%$ter &a ,th#de a##iche. L'#rdre d'e/%$ti#n est i,'rvisi(&e. M*,e si dans &'e/e,'&e0
&'#rdre d'e/%$ti#n se,(&e s$ivre &'#rdre des de,andes d'e/%$ti#n0 #n ne 'e$t en %#n%&$re de gnra&its. Le sAst:,e
d'e/'&#itati#n a i%i K threads et $n 'r#%esse$r. I& va distri($er &e 'r#%esse$r . %es K threads se&#n des r:g&es -$i &$i s#nt
'r#'res.
#n v#it dans &es rs$&tats $ne %#ns-$en%e de &a ,th#de Sleep. dans &'e/e,'&e0 %'est &e thread ! -$i e/%$te &e 're,ier &a
,th#de a##iche. Le ,essage de d($t d'e/%$ti#n est a++i%h '$is i& e/%$te &a ,th#de Sleep -$i &e s$s'end 'endant F
se%#nde. I& 'erd a&#rs &e 'r#%esse$r -$i devient ainsi dis'#ni(&e '#$r $n a$tre thread. L'e/e,'&e ,#ntre -$e %'est &e thread
F -$i va &'#(tenir. Le thread F va s$ivre &e ,*,e 'ar%#$rs ainsi -$e &es a$tres threads. L#rs-$e &a se%#nde de s#,,ei& d$
thread ! va *tre ter,ine0 s#n e/%$ti#n 'e$t re'rendre. Le sAst:,e &$i d#nne &e 'r#%esse$r et i& 'e$t ter,iner &'e/%$ti#n
de &a ,th#de a##iche.
M#di+i#ns n#tre 'r#gra,,e '#$r &e ter,iner &a ,th#de :ain 'ar &es instr$%ti#ns 4
' fin de main
Console.Out.WriteLine(("fin du thread " + main.Name))
Environment.Exit(0)
Les threads d'e/%$ti#n FOO
L'e/%$ti#n d$ n#$vea$ 'r#gra,,e d#nne 4
fin du thread main
Les threads %rs 'ar &a +#n%ti#n :ain ne s#nt 'as e/%$ts. 5'est &'instr$%ti#n
Environment.Exit(0)
-$i +ait %e&a 4 e&&e s$''ri,e t#$s &es threads de &'a''&i%ati#n et n#n si,'&e,ent &e thread :ain. La s#&$ti#n . %e 'r#(&:,e est -$e &a
,th#de :ain attende &a +in d'e/%$ti#n des threads -$'e&&e a %rs avant de se ter,iner e&&e-,*,e. 5e&a 'e$t se +aire ave% &a
,th#de Join de &a %&asse %hread 4
' on attend la fin d'excution de tous les threads
For i = 0 To tches.Length - 1
' attente de la fin d'excution du thread i
tches(i).Join()
Next i 'for
' fin de main
Console.Out.WriteLine(("fin du thread " + main.Name))
Environment.Exit(0)
;n #(tient a&#rs &es rs$&tats s$ivants 4
Dbut d'excution de la mthode affiche dans le Thread tache_1 : 05:34:48
Dbut d'excution de la mthode affiche dans le Thread tache_2 : 05:34:48
Dbut d'excution de la mthode affiche dans le Thread tache_3 : 05:34:48
Dbut d'excution de la mthode affiche dans le Thread tache_4 : 05:34:48
Dbut d'excution de la mthode affiche dans le Thread tache_0 : 05:34:48
Fin d'excution de la mthode affiche dans le Thread tache_2 : 05:34:50
Fin d'excution de la mthode affiche dans le Thread tache_1 : 05:34:50
Fin d'excution de la mthode affiche dans le Thread tache_3 : 05:34:50
Fin d'excution de la mthode affiche dans le Thread tache_0 : 05:34:50
Fin d'excution de la mthode affiche dans le Thread tache_4 : 05:34:50
fin du thread main
O.H Intr*t des threads
Maintenant -$e n#$s av#ns ,is en viden%e &'e/isten%e d'$n thread 'ar d+a$t0 %e&$i -$i e/%$te &a ,th#de :ain0 et -$e n#$s
sav#ns %#,,ent en %rer d'a$tres0 arr*t#ns-n#$s s$r &'intr*t '#$r n#$s des threads et s$r &a rais#n '#$r &a-$e&&e n#$s &es
'rsent#ns i%i. I& A a $n tA'e d'a''&i%ati#ns -$i se 'r*tent (ien . &'$ti&isati#n des threads0 %e s#nt &es a''&i%ati#ns %&ient-serve$r de
&'internet. Dans $ne te&&e a''&i%ati#n0 $n serve$r sit$ s$r $ne ,a%hine SF r'#nd a$/ de,andes de %&ients sit$s s$r des ,a%hines
distantes 5F0 50 ...0 5n.
N#$s $ti&is#ns t#$s &es B#$rs des a''&i%ati#ns de &'internet %#rres'#ndant . %e s%h,a 4 servi%es 1e(0 ,essagerie &e%tr#ni-$e0
%#ns$&tati#n de +#r$,s0 trans+ert de +i%hiers... Dans &e s%h,a %i-dess$s0 &e serve$r SF d#it servir &es %&ients 5i de +a@#n si,$&tane.
Si n#$s 'ren#ns &'e/e,'&e d'$n serve$r JTP <Ji&e Trans+er Pr#t#%#&= -$i d&ivre des +i%hiers . ses %&ients0 n#$s sav#ns -$'$n
trans+ert de +i%hier 'e$t 'rendre 'ar+#is '&$sie$rs he$res. I& est (ien s?r h#rs de -$esti#n -$'$n %&ient ,#n#'#&ise t#$t se$& &e
serve$r $ne te&&e d$re. 5e -$i est +ait ha(it$e&&e,ent0 %'est -$e &e serve$r %re a$tant de threads d'e/%$ti#n -$'i& A a de %&ients.
5ha-$e thread est a&#rs %harg de s'#%%$'er d'$n %&ient 'arti%$&ier. Le 'r#%esse$r tant 'artag %A%&i-$e,ent entre t#$s &es threads
a%ti+s de &a ,a%hine0 &e serve$r 'asse a&#rs $n 'e$ de te,'s ave% %ha-$e %&ient ass$rant ainsi &a si,$&tanit d$ servi%e.
Les threads d'e/%$ti#n FOE
Serve$r SF
5F
5
5n
O." A%%:s . des ress#$r%es 'artages
Dans &'e/e,'&e %&ient-serve$r v#-$ %i-dess$s0 %ha-$e thread sert $n %&ient de +a@#n &arge,ent ind'endante. Nan,#ins0 &es
threads 'e$vent *tre a,ens . %##'rer '#$r rendre &e servi%e de,and . &e$r %&ient n#ta,,ent '#$r &'a%%:s . des ress#$r%es
'artages. Le s%h,a %i-dess$s +ait 'enser a$/ g$i%hets d'$ne grande ad,inistrati#n0 $ne '#ste 'ar e/e,'&e #> . %ha-$e g$i%het $n
agent sert $n %&ient. S$''#s#ns -$e de te,'s en te,'s %es agents s#ient a,ens . +aire des 'h#t#%#'ies de d#%$,ents a,ens 'ar
&e$rs %&ients et -$'i& n'A ait -$'$ne 'h#t#%#'ie$se. De$/ agents ne 'e$vent $ti&iser &a 'h#t#%#'ie$se en ,*,e te,'s. Si &'agent i
tr#$ve &a 'h#t#%#'ie$se $ti&ise 'ar &'agent B0 i& devra attendre. ;n a''e&&e %ette sit$ati#n0 &'a%%:s . $ne ress#$r%e 'artage et en
in+#r,ati-$e e&&e est asseQ d&i%ate . grer. Pren#ns &'e/e,'&e s$ivant 4
$ne a''&i%ati#n va gnrer n threads0 n tant 'ass en 'ara,:tre
&a ress#$r%e 'artage est $n %#,'te$r -$i devra *tre in%r,ent 'ar %ha-$e thread gnr
. &a +in de &'a''&i%ati#n0 &a va&e$r d$ %#,'te$r est a++i%h. ;n devrait d#n% tr#$ver n.
Le 'r#gra,,e est &e s$ivant 4
' options
Option Explicit On
Option Strict On
' utilisation de threads
Imports System
Imports System.Threading
Public Class thread3
' variables de classe
Private Shared cptrThreads As Integer = 0
Public Overloads Shared Sub Main(ByVal args() As [String])
' mode d'emploi
Const syntaxe As String = "pg nbThreads"
Const nbMaxThreads As Integer = 100
' vrification nbre d'arguments
If args.Length <> 1 Then
' erreur
Console.Error.WriteLine(syntaxe)
' arr<t
Environment.Exit(1)
End If
' vrification $ualit de l'argument
Dim nbThreads As Integer = 0
Try
nbThreads = Integer.Parse(args(0))
If nbThreads < 1 Or nbThreads > nbMaxThreads Then
Throw New Exception
End If
Catch
' erreur
Console.Error.WriteLine("Nombre de threads incorrect (entre 1 et " & nbMaxThreads & ")")
' fin
Environment.Exit(2)
End Try
' cration et gnration des threads
Dim threads(nbThreads - 1) As Thread
Dim i As Integer
For i = 0 To nbThreads - 1
' cration
threads(i) = New Thread(New ThreadStart(AddressOf incrmente))
' nommage
threads(i).Name = "tache_" & i
Les threads d'e/%$ti#n FOL
thread F
thread
thread n
%&ient F
%&ient
%&ient n
.erveur =lients
' lancement
threads(i).Start()
Next i
' attente de la fin des threads
For i = 0 To nbThreads - 1
threads(i).Join()
Next i ' affichage compteur
Console.Out.WriteLine(("Nombre de threads gnrs : " & cptrThreads))
End Sub
Public Shared Sub incrmente()
' augmente le compteur de threads
' lecture compteur
Dim valeur As Integer = cptrThreads
' suivi
Console.Out.WriteLine(("A " + DateTime.Now.ToString("hh:mm:ss") & ", le thread " &
Thread.CurrentThread.Name & " a lu la valeur du compteur : " & cptrThreads))
' attente
Thread.Sleep(1000)
' incrmentation compteur
cptrThreads = valeur + 1
' suivi
Console.Out.WriteLine(("A " & DateTime.Now.ToString("hh:mm:ss") & ", le thread " &
Thread.CurrentThread.Name & " a crit la valeur du compteur : " & cptrThreads))
End Sub
End Class
N#$s ne n#$s attarder#ns 'as s$r &a 'artie gnrati#n de threads dB. t$die. Intress#ns-n#$s '&$t[t . &a ,th#de incrmente0
$ti&ise 'ar %ha-$e thread '#$r in%r,enter &e %#,'te$r stati-$e cptr%hreads.
F. &e %#,'te$r est &$
. &e thread s'arr*te F s. I& 'erd d#n% &e 'r#%esse$r
H. &e %#,'te$r est in%r,ent
L'ta'e n'est &. -$e '#$r +#r%er &e thread . 'erdre &e 'r#%esse$r. 5e&$i-%i va *tre d#nn . $n a$tre thread. Dans &a 'rati-$e0 rien
n'ass$re -$'$n thread ne sera 'as interr#,'$ entre &e ,#,ent #> i& va &ire &e %#,'te$r et &e ,#,ent #> i& va &'in%r,enter. Le
ris-$e e/iste de 'erdre &e 'r#%esse$r entre &e ,#,ent #> #n &it &a va&e$r d$ %#,'te$r et %e&$i #n %rit sa va&e$r in%r,ente de F.
En e++et0 &'#'rati#n d'in%r,entati#n va +aire &'#(Bet de '&$sie$rs instr$%ti#ns &,entaires a$ nivea$ d$ 'r#%esse$r -$i 'e$vent
*tre interr#,'$es. L'ta'e de s#,,ei& d'$ne se%#nde n'est d#n% &. -$e '#$r sAst,atiser %e ris-$e. Les rs$&tats #(ten$s s#nt &es
s$ivants 4
dos>thread3 5
A 05:44:34, le thread tache_0 a lu la valeur du compteur : 0
A 05:44:34, le thread tache_1 a lu la valeur du compteur : 0
A 05:44:34, le thread tache_2 a lu la valeur du compteur : 0
A 05:44:34, le thread tache_3 a lu la valeur du compteur : 0
A 05:44:34, le thread tache_4 a lu la valeur du compteur : 0
A 05:44:35, le thread tache_0 a crit la valeur du compteur : 1
A 05:44:35, le thread tache_1 a crit la valeur du compteur : 1
A 05:44:35, le thread tache_2 a crit la valeur du compteur : 1
A 05:44:35, le thread tache_3 a crit la valeur du compteur : 1
A 05:44:35, le thread tache_4 a crit la valeur du compteur : 1
Nombre de threads gnrs : 1
A &a &e%t$re de %es rs$&tats0 #n v#it (ien %e -$i se 'asse 4
$n 're,ier thread &it &e %#,'te$r. I& tr#$ve !.
i& s'arr*te F s d#n% 'erd &e 'r#%esse$r
$n se%#nd thread 'rend a&#rs &e 'r#%esse$r et &it &$i a$ssi &a va&e$r d$ %#,'te$r. E&&e est t#$B#$rs . ! '$is-$e &e thread
'r%dent ne &'a 'as en%#re in%r,ent. I& s'arr*te &$i a$ssi F s.
en F s0 &es I threads #nt &e te,'s de 'asser t#$s et de &ire t#$s &a va&e$r !.
&#rs-$'i&s v#nt se rvei&&er &es $ns a'r:s &es a$tres0 i&s v#nt in%r,enter &a va&e$r ! -$'i&s #nt &$e et %rire &a va&e$r F dans &e
%#,'te$r0 %e -$e %#n+ir,e &e 'r#gra,,e 'rin%i'a& <Main=.
D'#> vient &e 'r#(&:,e X Le se%#nd thread a &$ $ne ,a$vaise va&e$r d$ +ait -$e &e 're,ier avait t interr#,'$ avant d'av#ir
ter,in s#n travai& -$i tait de ,ettre . B#$r &e %#,'te$r dans &a +en*tre. 5e&a n#$s a,:ne . &a n#ti#n de ress#$r%e %riti-$e et de
se%ti#n %riti-$e d'$n 'r#gra,,e4
$ne ress#$r%e %riti-$e est $ne ress#$r%e -$i ne 'e$t *tre dten$e -$e 'ar $n thread . &a +#is. I%i &a ress#$r%e %riti-$e
est &e %#,'te$r.
$ne se%ti#n %riti-$e d'$n 'r#gra,,e est $ne s-$en%e d'instr$%ti#ns dans &e +&$/ d'e/%$ti#n d'$n thread a$ %#$rs de
&a-$e&&e i& a%%:de . $ne ress#$r%e %riti-$e. ;n d#it ass$rer -$'a$ %#$rs de %ette se%ti#n %riti-$e0 i& est &e se$& . av#ir
a%%:s . &a ress#$r%e.
Les threads d'e/%$ti#n FE!
O.I A%%:s e/%&$si+ . $ne ress#$r%e 'artage
Dans n#tre e/e,'&e0 &a se%ti#n %riti-$e est &e %#de sit$ entre &a &e%t$re d$ %#,'te$r et &'%rit$re de sa n#$ve&&e va&e$r 4
' lecture compteur
Dim valeur As Integer = cptrThreads
' attente
Thread.Sleep(1000)
' incrmentation compteur
cptrThreads = valeur + 1
P#$r e/%$ter %e %#de0 $n thread d#it *tre ass$r d'*tre t#$t se$&. I& 'e$t *tre interr#,'$ ,ais 'endant %ette interr$'ti#n0 $n a$tre
thread ne d#it 'as '#$v#ir e/%$ter %e ,*,e %#de. La '&ate-+#r,e .NET #++re '&$sie$rs #$ti&s '#$r ass$rer &'entre $nitaire dans &es
se%ti#ns %riti-$es de %#de. N#$s $ti&iser#ns &a %&asse <ute& 4
N#$s n'$ti&iser#ns i%i -$e &es %#nstr$%te$rs et ,th#des s$ivants 4
public Mutex()
%re $n #(Bet de sAn%hr#nisati#n M
public bool WaitOne()
Le thread TF -$i e/%$te &'#'rati#n :.6ait5ne)+ de,ande &a 'r#'rit de &'#(Bet de
sAn%hr#nisati#n M. Si &e M$te/ M n'est dten$ 'ar a$%$n thread <&e %as a$ d'art=0 i& est Dd#nnD a$
thread TF -$i &'a de,and. Si $n 'e$ '&$s tard0 $n thread T +ait &a ,*,e #'rati#n0 i& sera (&#-$.
En e++et0 $n M$te/ ne 'e$t a''artenir -$'. $n thread. I& sera d(&#-$ &#rs-$e &e thread TF &i(:rera
&e ,$te/ M -$'i& dtient. P&$sie$rs threads 'e$vent ainsi *tre (&#-$s en attente d$ M$te/ M.
public void
ReleaseMutex()
Le thread TF -$i e++e%t$e &'#'rati#n :.Release:utex)+ a(and#nne &a 'r#'rit d$ M$te/ M.L#rs-$e
&e thread TF 'erdra &e 'r#%esse$r0 &e sAst:,e '#$rra &e d#nner . &'$n des threads en attente d$
M$te/ M. Un se$& &'#(tiendra . s#n t#$r0 &es a$tres en attente de M restant (&#-$s
Un M$te/ M g:re &'a%%:s . $ne ress#$r%e 'artage R. Un thread de,ande &a ress#$r%e R 'ar :.6ait5ne)+ et &a rend 'ar
:.Release:utex)+. Une se%ti#n %riti-$e de %#de -$i ne d#it *tre e/%$te -$e 'ar $n se$& thread . &a +#is est $ne ress#$r%e 'artage.
La sAn%hr#nisati#n d'e/%$ti#n de &a se%ti#n %riti-$e 'e$t se +aire ainsi 4
M.WaitOne()
' le thread est seul entrer ici
' section critique
....
M.ReleaseMutex()
#> M est $n #(Bet :utex. I& +a$t (ien s?r ne Ba,ais #$(&ier de &i(rer $n :utex deven$ in$ti&e '#$r -$'$n a$tre thread '$isse entrer
dans &a se%ti#n %riti-$e0 sin#n &es threads en attente d'$n M$te/ Ba,ais &i(r n'a$r#nt Ba,ais a%%:s a$ 'r#%esse$r. Par ai&&e$rs0 i& +a$t
viter &a sit$ati#n d'inter(&#%age <deadlocO= dans &a-$e&&e de$/ threads s'attendent ,$t$e&&e,ent. 5#nsidr#ns &es a%ti#ns s$ivantes
-$i se s$ivent dans &e te,'s 4
$n thread TF #(tient &a 'r#'rit d'$n M$te/ MF '#$r av#ir a%%:s . $ne ress#$r%e 'artage RF
$n thread T #(tient &a 'r#'rit d'$n M$te/ M '#$r av#ir a%%:s . $ne ress#$r%e 'artage R
&e thread TF de,ande &e M$te/ M. I& est (&#-$.
&e thread T de,ande &e M$te/ MF. I& est (&#-$.
I%i0 &es threads TF et T s'attendent ,$t$e&&e,ent. 5e %as a''araCt &#rs-$e des threads #nt (es#in de de$/ ress#$r%es 'artages0 &a
ress#$r%e RF %#ntr[&e 'ar &e M$te/ MF et &a ress#$r%e R %#ntr[&e 'ar &e M$te/ M. Une s#&$ti#n '#ssi(&e est de de,ander &es
de$/ ress#$r%es en ,*,e te,'s . &'aide d'$n M$te/ $ni-$e M. Mais %e n'est 'as t#$B#$rs '#ssi(&e si 'ar e/e,'&e %e&a entraCne $ne
Les threads d'e/%$ti#n FEF
,#(i&isati#n &#ng$e d'$ne ress#$r%e %#?te$se. Une a$tre s#&$ti#n est -$'$n thread aAant MF et ne '#$vant #(tenir M0 re&h%he a&#rs
MF '#$r viter &'inter(&#%age. Si n#$s ,ett#ns en 'rati-$e %e -$e n#$s ven#ns de v#ir s$r &'e/e,'&e 'r%dent0 n#tre a''&i%ati#n
devient &a s$ivante 4
' options
Option Explicit On
Option Strict On
' utilisation de threads
Imports System
Imports System.Threading
Public Class thread4
' variables de classe
Private Shared cptrThreads As Integer = 0 ' compteur de threads
Private Shared autorisation As Mutex
Public Overloads Shared Sub Main(ByVal args() As [String])
' mode d'emploi
Const syntaxe As String = "pg nbThreads"
Const nbMaxThreads As Integer = 100
' vrification nbre d'arguments
If args.Length <> 1 Then
' erreur
Console.Error.WriteLine(syntaxe)
' arr<t
Environment.Exit(1)
End If
' vrification $ualit de l'argument
Dim nbThreads As Integer = 0
Try
nbThreads = Integer.Parse(args(0))
If nbThreads < 1 Or nbThreads > nbMaxThreads Then
Throw New Exception
End If
Catch
End Try
' initialisation de l'autorisation d'accs une section criti$ue
autorisation = New Mutex
' cration et gnration des threads
Dim threads(nbThreads) As Thread
Dim i As Integer
For i = 0 To nbThreads - 1
' cration
threads(i) = New Thread(New ThreadStart(AddressOf incrmente))
' nommage
threads(i).Name = "tache_" & i
' lancement
threads(i).Start()
Next i
' attente de la fin des threads
For i = 0 To nbThreads - 1
threads(i).Join()
Next i
' affichage compteur
Console.Out.WriteLine(("Nombre de threads gnrs : " & cptrThreads))
End Sub
Public Shared Sub incrmente()
' augmente le compteur de threads
' on demande l'autorisation d'entrer dans la secton criti$ue
autorisation.WaitOne()
' lecture compteur
Dim valeur As Integer = cptrThreads
' suivi
Console.Out.WriteLine(("A " & DateTime.Now.ToString("hh:mm:ss") & ", le thread " &
Thread.CurrentThread.Name & " a lu la valeur du compteur : " & cptrThreads))
' attente
Thread.Sleep(1000)
' incrmentation compteur
cptrThreads = valeur + 1
' suivi
Console.Out.WriteLine(("A " & DateTime.Now.ToString("hh:mm:ss") & ", le thread " &
Thread.CurrentThread.Name & " a crit la valeur du compteur : " & cptrThreads))
' on rend l'autorisation d'accs
autorisation.ReleaseMutex()
End Sub
Les threads d'e/%$ti#n FE
End Class
Les rs$&tats #(ten$s s#nt %#n+#r,es . %e -$i tait attend$ 4
dos>thread4 5
A 05:51:10, le thread tache_0 a lu la valeur du compteur : 0
A 05:51:11, le thread tache_0 a crit la valeur du compteur : 1
A 05:51:11, le thread tache_1 a lu la valeur du compteur : 1
A 05:51:12, le thread tache_1 a crit la valeur du compteur : 2
A 05:51:12, le thread tache_2 a lu la valeur du compteur : 2
A 05:51:13, le thread tache_2 a crit la valeur du compteur : 3
A 05:51:13, le thread tache_3 a lu la valeur du compteur : 3
A 05:51:14, le thread tache_3 a crit la valeur du compteur : 4
A 05:51:14, le thread tache_4 a lu la valeur du compteur : 4
A 05:51:15, le thread tache_4 a crit la valeur du compteur : 5
Nombre de threads gnrs : 5
O.K SAn%hr#nisati#n 'ar vne,ents
5#nsidr#ns &a sit$ati#n s$ivante0 a''e&e 'ar+#is sit$ati#n de producteursIconso++ateurs.
F. ;n a $n ta(&ea$ dans &e-$e& des 'r#%ess$s viennent d'#ser des d#nnes <&es 'r#d$%te$rs= et d'a$tres viennent &es &ire <&es
%#ns#,,ate$rs=.
. Les 'r#d$%te$rs s#nt ga$/ entre-e$/ ,ais e/%&$si+s 4 $n se$& 'r#d$%te$r . &a +#is 'e$t d'#ser ses d#nnes dans &e ta(&ea$.
H. Les %#ns#,,ate$rs s#nt ga$/ entre-e$/ ,ais e/%&$si+s 4 $n se$& &e%te$r . &a +#is 'e$t &ire &es d#nnes d'#ses dans &e ta(&ea$.
". Un %#ns#,,ate$r ne 'e$t &ire &es d#nnes d$ ta(&ea$ -$e &#rs-$'$n 'r#d$%te$r en a d'#s dedans et $n 'r#d$%te$r ne 'e$t
d'#ser de n#$ve&&es d#nnes dans &e ta(&ea$ -$e &#rs-$e %e&&es -$i A s#nt #nt t %#ns#,,es.
;n 'e$t dans %et e/'#s disting$er de$/ ress#$r%es 'artages 4
F. &e ta(&ea$ en %rit$re
. &e ta(&ea$ en &e%t$re
L'a%%:s . %es de$/ ress#$r%es 'artages 'e$t *tre %#ntr[&e 'ar des M$te/ %#,,e v$ 'r%de,,ent0 $n '#$r %ha-$e ress#$r%e.
Une +#is -$'$n %#ns#,,ate$r a #(ten$ &e ta(&ea$ en &e%t$re0 i& d#it vri+ier -$'i& A a (ien des d#nnes dedans. ;n $ti&isera $n
vne,ent '#$r &'en avertir. De ,*,e $n 'r#d$%te$r aAant #(ten$ &e ta(&ea$ en %rit$re devra attendre -$'$n %#ns#,,ate$r &'ait
vid. ;n $ti&isera &. en%#re $n vne,ent.
Les vne,ents $ti&iss +er#nt 'artie de &a %&asse HutoReset7!ent 4
5e tA'e d'vne,ent est ana&#g$e . $n (##&en ,ais vite des attentes a%tives #$ se,i-a%tives. Ainsi si &e dr#it d'%rit$re est
%#ntr[& 'ar $n (##&en peut7crire0 $n 'r#d$%te$r avant d'%rire e/%$tera $n %#de d$ genre 4
while(peutEcrire==false) ' attente active
#$
while(peutEcrire==false) ' attente semi-active
Thread.Sleep(100) ' attente de 100ms
end while
Les threads d'e/%$ti#n FEH
Dans &a 're,i:re ,th#de0 &e thread ,#(i&ise in$ti&e,ent &e 'r#%esse$r. Dans &a se%#nde0 i& vri+ie &'tat d$ (##&en peut7crire t#$tes
&es F!! ,s. La %&asse HutoReset7!ent 'er,et en%#re d'a,&i#rer &es %h#ses 4 &e thread va de,ander . *tre rvei&& &#rs-$e &'vne,ent
-$'i& attend se sera 'r#d$it 4
AutoEvent peutEcrire=new AutoResetEvent(false) ' peutEcrire=false;
....
peutEcrire.WaitOne() ' le thread attend que l'vt peutEcrire passe vrai
L'#'rati#n
AutoEvent peutEcrire=new AutoResetEvent(false) ' peutEcrire=false;
initia&ise &e (##&en peut7crire . #alse. L'#'rati#n
peutEcrire.WaitOne() ' le thread attend que l'vt peutEcrire passe vrai
e/%$te 'ar $n thread +ait -$e %e&$i-%i 'asse si &e (##&en peut7crire est vrai #$ sin#n est (&#-$ B$s-$'. %e -$'i& devienne vrai. Un
a$tre thread &e 'assera . vrai 'ar &'#'rati#n peut7crire.Set)+ #$ . +a$/ 'ar &'#'rati#n peut7crire.Reset)+.
Le 'r#gra,,e de 'r#d$%te$rs-%#ns#,,ate$rs est &e s$ivant 4
' utilisation de threads lecteurs et crivains
' illustre l'utilisation simultane de ressources partages et de s(nchronisation
' options
Option Explicit On
Option Strict On
' utilisation de threads
Imports System
Imports System.Threading
Public Class lececr
' variables de classe
Private Shared data(5) As Integer ' ressource partage entre threads lecteur et threads crivain
Private Shared lecteur As Mutex ' variable de s(nchronisation pour lire le tableau
Private Shared crivain As Mutex ' variable de s(nchronisation pour crire dans le tableau
Private Shared objRandom As New Random(DateTime.Now.Second) ' un gnrateur de nombres alatoires
Private Shared peutLire As AutoResetEvent ' signale $u'on peut lire le contenu de data
Private Shared peutEcrire As AutoResetEvent
Public Shared Sub Main(ByVal args() As [String])
' le nbre de threads gnrer
Const nbThreads As Integer = 3
' initialisation des drapeau
peutLire = New AutoResetEvent(False) ' on ne peut pas encore lire
peutEcrire = New AutoResetEvent(True) ' on peut dj crire
' initialisation des variables de s(nchronisation
lecteur = New Mutex ' s(nchronise les lecteurs
crivain = New Mutex ' s(nchronise les crivains
' cration des threads lecteurs
Dim lecteurs(nbThreads) As Thread
Dim i As Integer
For i = 0 To nbThreads - 1
' cration
lecteurs(i) = New Thread(New ThreadStart(AddressOf lire))
lecteurs(i).Name = "lecteur_" & i
' lancement
lecteurs(i).Start()
Next i
' cration des threads crivains
Dim crivains(nbThreads) As Thread
For i = 0 To nbThreads - 1
' cration
crivains(i) = New Thread(New ThreadStart(AddressOf crire))
crivains(i).Name = "crivain_" & i
' lancement
crivains(i).Start()
Next i
'fin de main
Console.Out.WriteLine("fin de Main...")
Les threads d'e/%$ti#n FE"
End Sub
' lire le contenu du tableau
Public Shared Sub lire()
' section criti$ue
lecteur.WaitOne() ' un seul lecteur peut passer
peutLire.WaitOne() ' on doit pouvoir lire
' lecture tableau
Dim i As Integer
For i = 0 To data.Length - 1
'attente 1 s
Thread.Sleep(1000)
' affichage
Console.Out.WriteLine((DateTime.Now.ToString("hh:mm:ss") & " : Le lecteur " &
Thread.CurrentThread.Name & " a lu le nombre " & data(i)))
Next i
' on ne peut plus lire
peutLire.Reset()
' on peut crire
peutEcrire.Set()
' fin de section criti$ue
lecteur.ReleaseMutex()
End Sub
' crire dans le tableau
Public Shared Sub crire()
' section criti$ue
' un seul crivain peut passer
crivain.WaitOne()
' on doit attendre l'autorisation d'criture
peutEcrire.WaitOne()
' criture tableau
Dim i As Integer
For i = 0 To data.Length - 1
'attente 1 s
Thread.Sleep(1000)
' affichage
data(i) = objRandom.Next(0, 1000)
Console.Out.WriteLine((DateTime.Now.ToString("hh:mm:ss") & " : L'crivain " &
Thread.CurrentThread.Name & " a crit le nombre " & data(i)))
Next i
' on ne peut plus crire
peutEcrire.Reset()
' on peut lire
peutLire.Set()
'fin de section criti$ue
crivain.ReleaseMutex()
End Sub
End Class
L'e/%$ti#n d#nne &es rs$&tats s$ivants 4
dos>lececr
fin de Main...
05:56:56 : L'crivain crivain_0 a crit le nombre 459
05:56:57 : L'crivain crivain_0 a crit le nombre 955
05:56:58 : L'crivain crivain_0 a crit le nombre 212
05:56:59 : L'crivain crivain_0 a crit le nombre 297
05:57:00 : L'crivain crivain_0 a crit le nombre 37
05:57:01 : L'crivain crivain_0 a crit le nombre 623
05:57:02 : Le lecteur lecteur_0 a lu le nombre 459
05:57:03 : Le lecteur lecteur_0 a lu le nombre 955
05:57:04 : Le lecteur lecteur_0 a lu le nombre 212
05:57:05 : Le lecteur lecteur_0 a lu le nombre 297
05:57:06 : Le lecteur lecteur_0 a lu le nombre 37
05:57:07 : Le lecteur lecteur_0 a lu le nombre 623
05:57:08 : L'crivain crivain_1 a crit le nombre 549
05:57:09 : L'crivain crivain_1 a crit le nombre 34
05:57:10 : L'crivain crivain_1 a crit le nombre 781
05:57:11 : L'crivain crivain_1 a crit le nombre 555
05:57:12 : L'crivain crivain_1 a crit le nombre 812
05:57:13 : L'crivain crivain_1 a crit le nombre 406
05:57:14 : Le lecteur lecteur_1 a lu le nombre 549
05:57:15 : Le lecteur lecteur_1 a lu le nombre 34
05:57:16 : Le lecteur lecteur_1 a lu le nombre 781
05:57:17 : Le lecteur lecteur_1 a lu le nombre 555
05:57:18 : Le lecteur lecteur_1 a lu le nombre 812
Les threads d'e/%$ti#n FEI
05:57:19 : Le lecteur lecteur_1 a lu le nombre 406
05:57:20 : L'crivain crivain_2 a crit le nombre 442
05:57:21 : L'crivain crivain_2 a crit le nombre 83
^C
;n 'e$t re,ar-$er &es '#ints s$ivants 4
#n a (ien F se$& &e%te$r . &a +#is (ien -$e %e&$i-%i 'erde &e 'r#%esse$r dans &a se%ti#n %riti-$e lire
#n a (ien F se$& %rivain . &a +#is (ien -$e %e&$i-%i 'erde &e 'r#%esse$r dans &a se%ti#n %riti-$e crire
$n &e%te$r ne &it -$e &#rs-$'i& A a -$e&-$e %h#se . &ire dans &e ta(&ea$
$n %rivain n'%rit -$e &#rs-$e &e ta(&ea$ a t enti:re,ent &$
Les threads d'e/%$ti#n FEK
E. Pr#gra,,ati#n T5P-IP
E.F Gnra&its
E.F.F Les 'r#t#%#&es de &'Internet
N#$s d#nn#ns i%i $ne intr#d$%ti#n a$/ 'r#t#%#&es de %#,,$ni%ati#n de &'Internet0 a''e&s a$ssi s$ite de 'r#t#%#&es T=PDIP
<%rans#er (ontrol -rotocol / Internet -rotocol=0 d$ n#, des de$/ 'rin%i'a$/ 'r#t#%#&es. I& est (#n -$e &e &e%te$r ait $ne %#,'rhensi#n
g&#(a&e d$ +#n%ti#nne,ent des rsea$/ et n#ta,,ent des 'r#t#%#&es T5PNIP avant d'a(#rder &a %#nstr$%ti#n d'a''&i%ati#ns
distri($es.
Le te/te -$i s$it est $ne trad$%ti#n 'artie&&e d'$n te/te -$e &'#n tr#$ve dans &e d#%$,ent &.an 6orOplace #or Dos V Hdministrator;s
Euide& de N;VELL0 d#%$,ent d$ d($t des annes L!.
-----------------------------------
Le %#n%e't gnra& de %rer $n rsea$ d'#rdinate$rs htr#g:nes vient de re%her%hes e++e%t$es 'ar &e /:@P: </e+ense :dvan%ed
@esear%h Pr#Be%ts :gen%A= a$/ Etats-Unis. Le DARPA a dve&#'' &a s$ite de 'r#t#%#&es %#nn$e s#$s &e n#, de T5PNIP -$i
'er,et . des ,a%hines htr#g:nes de %#,,$ni-$er entre e&&es. 5es 'r#t#%#&es #nt t tests s$r $n rsea$ a''e& :@P:net0
rsea$ -$i devint $&trie$re,ent &e rsea$ INTE@NET. Les 'r#t#%#&es T5PNIP d+inissent des +#r,ats et des r:g&es de
trans,issi#n et de r%e'ti#n ind'endants de &'#rganisati#n des rsea$/ et des ,atrie&s $ti&iss.
Le rsea$ %#n@$ 'ar &e DARPA et gr 'ar &es 'r#t#%#&es T5PNIP est $n rsea$ . co++utation de paquets. Un te& rsea$
trans,et &'in+#r,ati#n s$r &e rsea$0 en 'etits ,#r%ea$/ a''e&s paquets. Ainsi0 si $n #rdinate$r trans,et $n gr#s +i%hier0 %e
dernier sera d%#$' en 'etits ,#r%ea$/ -$i ser#nt env#As s$r &e rsea$ '#$r *tre re%#,'#ss . destinati#n. T5PNIP d+init &e
+#r,at de %es 'a-$ets0 . sav#ir 4
. #rigine d$ 'a-$et
. destinati#n
. &#ng$e$r
. tA'e
E.F. Le ,#d:&e ;SI
Les 'r#t#%#&es T5PNIP s$ivent . 'e$ 'r:s &e ,#d:&e de rsea$ #$vert a''e& 8.I <8'en .Aste,s Inter%#nne%ti#n Re+eren%e
M#de&= d+ini 'ar &'I.8 <Internati#na& .tandards 8rganisati#n=. 5e ,#d:&e d%rit $n rsea$ ida& #> &a %#,,$ni%ati#n entre
,a%hines 'e$t *tre re'rsente 'ar $n ,#d:&e . se't %#$%hes 4
|-------------------------------------|
7 | Application |
|-------------------------------------|
6 | Prsentation |
|-------------------------------------|
5 | Session |
|-------------------------------------|
4 | Transport |
|-------------------------------------|
3 | Rseau |
|-------------------------------------|
2 | Liaison |
|-------------------------------------|
1 | Physique |
|-------------------------------------|
5ha-$e %#$%he re@#it des servi%es de &a %#$%he in+rie$re et #++re &es siens . &a %#$%he s$'rie$re. S$''#s#ns -$e de$/ a''&i%ati#ns
sit$es s$r des ,a%hines A et B di++rentes ve$&ent %#,,$ni-$er 4 e&&es &e +#nt a$ nivea$ de &a %#$%he Hpplication. E&&es n'#nt 'as
(es#in de %#nnaCtre t#$s &es dtai&s d$ +#n%ti#nne,ent d$ rsea$ 4 %ha-$e a''&i%ati#n re,et &'in+#r,ati#n -$'e&&e s#$haite
trans,ettre . &a %#$%he d$ dess#$s 4 &a %#$%he -rsentation. L'a''&i%ati#n n'a d#n% . %#nnaCtre -$e &es r:g&es d'inter+a@age ave% &a
%#$%he -rsentation.
Une +#is &'in+#r,ati#n dans &a %#$%he -rsentation0 e&&e est 'asse se&#n d'a$tres r:g&es . &a %#$%he Session et ainsi de s$ite0 B$s-$'. %e
-$e &'in+#r,ati#n arrive s$r &e s$''#rt 'hAsi-$e et s#it trans,ise 'hAsi-$e,ent . &a ,a%hine destinati#n. L.0 e&&e s$(ira &e
traite,ent inverse de %e&$i -$'e&&e a s$(i s$r &a ,a%hine e/'dite$r.
Servi%es 1EB FEO
A %ha-$e %#$%he0 &e 'r#%ess$s e/'dite$r %harg d'env#Aer &'in+#r,ati#n0 &'env#ie . $n 'r#%ess$s r%e'te$r s$r &'a$tre ,a%hine
a'artenant . &a ,*,e %#$%he -$e &$i. I& &e +ait se&#n %ertaines r:g&es -$e &'#n a''e&&e &e protocole de &a %#$%he. ;n a d#n% &e
s%h,a de %#,,$ni%ati#n +ina& s$ivant 4
Machine A Machine B
+-------------------------------------+ +----------------------------+
7 Application v ^ Application
+------------------------------------ +---------------------------
6 Prsentation v ^ Prsentation
+------------------------------------ +---------------------------
5 Session v ^ Session
+------------------------------------ +---------------------------
4 Transport v ^ Transport
+------------------------------------ +---------------------------
3 Rseau v ^ Rseau
+------------------------------------ +---------------------------
2 Liaison v ^ Liaison
+------------------------------------ +---------------------------
1 Physique v ^ Physique
+------------------------------------+ +---------------------------+
^
+-->------->------>-----+
Le r[&e des di++rentes %#$%hes est &e s$ivant 4
Physique
Ass$re &a trans,issi#n de (its s$r $n s$''#rt 'hAsi-$e. ;n tr#$ve dans %ette %#$%he des -$i'e,ents
ter,ina$/ de traite,ent des d#nnes <E.T.T.D.= te&s -$e ter,ina& #$ #rdinate$r0 ainsi -$e des -$i'e,ents
de ter,inais#n de %ir%$its de d#nnes <E.T.5.D.= te&s -$e ,#d$&ate$rNd,#d$&ate$r0 ,$&ti'&e/e$r0
%#n%entrate$r. Les '#ints d'intr*t . %e nivea$ s#nt 4
. &e %h#i/ d$ %#dage de &'in+#r,ati#n <ana&#gi-$e #$ n$,ri-$e=
. &e %h#i/ d$ ,#de de trans,issi#n <sAn%hr#ne #$ asAn%hr#ne=.
Liaison de
donnes
Mas-$e &es 'arti%$&arits 'hAsi-$es de &a %#$%he PhAsi-$e. Dte%te et %#rrige &es erre$rs de trans,issi#n.
Rseau
G:re &e %he,in -$e d#ivent s$ivre &es in+#r,ati#ns env#Aes s$r &e rsea$. ;n a''e&&e %e&a &e routage 4
dter,iner &a r#$te . s$ivre 'ar $ne in+#r,ati#n '#$r -$'e&&e arrive . s#n destinataire.
Transport
Per,et &a %#,,$ni%ati#n entre de$/ a''&i%ati#ns a&#rs -$e &es %#$%hes 'r%dentes ne 'er,ettaient -$e &a
%#,,$ni%ati#n entre ,a%hines. Un servi%e +#$rni 'ar %ette %#$%he 'e$t *tre &e ,$&ti'&e/age 4 &a %#$%he
trans'#rt '#$rra $ti&iser $ne ,*,e %#nne/i#n rsea$ <de ,a%hine . ,a%hine= '#$r trans,ettre des
in+#r,ati#ns a''artenant . '&$sie$rs a''&i%ati#ns.
Session
;n va tr#$ver dans %ette %#$%he des servi%es 'er,ettant . $ne a''&i%ati#n d'#$vrir et de ,aintenir $ne
sessi#n de travai& s$r $ne ,a%hine distante.
Prsentation
E&&e vise . $ni+#r,iser &a re'rsentati#n des d#nnes s$r &es di++rentes ,a%hines. Ainsi des d#nnes
'r#venant d'$ne ,a%hine A0 v#nt *tre Dha(i&&esD 'ar &a %#$%he -rsentation de &a ,a%hine A0 se&#n $n +#r,at
standard avant d'*tre env#Aes s$r &e rsea$. Parven$es . &a %#$%he -rsentation de &a ,a%hine destinatri%e B
-$i &es re%#nnaCtra grh%e . &e$r +#r,at standard0 e&&es ser#nt ha(i&&es d'$ne a$tre +a@#n a+in -$e &'a''&i%ati#n
de &a ,a%hine B &es re%#nnaisse.
Application
A %e nivea$0 #n tr#$ve &es a''&i%ati#ns gnra&e,ent 'r#%hes de &'$ti&isate$r te&&es -$e &a ,essagerie
&e%tr#ni-$e #$ &e trans+ert de +i%hiers.
E.F.H Le ,#d:&e T5PNIP
Le ,#d:&e ;SI est $n ,#d:&e ida& en%#re Ba,ais ra&is. La s$ite de 'r#t#%#&es T5PNIP s'en a''r#%he s#$s &a +#r,e s$ivante 4
Servi%es 1EB FEE
+-----------------------+ +-------------------------------------------------------+
7 Application DNS
+----------------------- Telnet FTP TFTP SMTP +------------------
6 Prsentation Autres
+----------------------- +-------------------------+-----------------------------
5 Session
+----------------------- TCP UDP
4 Transport
+----------------------- +-------------------------------------------------------
3 Rseau IP ICMP ARP RARP
+----------------------- +-------------------------------------------------------
2 Liaison MLID1 MLID2 MLID3 MLID4
+----------------------- +-------------------------------------------------------
1 Physique Ethernet Token-ring Autres
+-----------------------+ +-------------------------------------------------------+
=ouc-e P-ysique
En rsea$ &#%a&0 #n tr#$ve gnra&e,ent $ne te%hn#&#gie Et-ernet #$ ToSenI@ing. N#$s ne 'rsent#ns i%i -$e &a te%hn#&#gie
Ethernet.
Et-ernet
5'est &e n#, d#nn . $ne te%hn#&#gie de rsea$/ &#%a$/ . %#,,$tati#n de 'a-$ets invente . PAR5 3er#/ a$ d($t des annes
FLO! et n#r,a&ise 'ar 3er#/0 Inte& et Digita& E-$i',ent en FLOE. Le rsea$ est 'hAsi-$e,ent %#nstit$ d'$n %h(&e %#a/ia&
d'envir#n F0O %, de dia,:tre et d'$ne &#ng$e$r de I!! , a$ '&$s. I& 'e$t *tre tend$ a$ ,#Aen de rpteurs0 de$/ ,a%hines ne
'#$vant *tre s'ares 'ar '&$s de de$/ r'te$rs. Le %h(&e est 'assi+ 4 t#$s &es &,ents a%ti+s s#nt s$r &es ,a%hines ra%%#rdes a$
%h(&e. 5ha-$e ,a%hine est re&ie a$ %h(&e 'ar $ne %arte d'a%%:s a$ rsea$ %#,'renant 4
$n trans,ette$r <transcei!er= -$i dte%te &a 'rsen%e de signa$/ s$r &e %h(&e et %#nvertit &es signa$/ ana&#gi-$es en signa$/
n$,ri-$e et inverse,ent.
$n %#$'&e$r -$i re@#it &es signa$/ n$,ri-$es d$ trans,ette$r et &es trans,et . &'#rdinate$r '#$r traite,ent #$
inverse,ent.
Les %ara%tristi-$es 'rin%i'a&es de &a te%hn#&#gie Ethernet s#nt &es s$ivantes 4
5a'a%it de F! Mga(itsNse%#nde.
T#'#&#gie en ($s 4 t#$tes &es ,a%hines s#nt ra%%#rdes a$ ,*,e %h(&e
----------------------------------------------------------

+--------+ +--------+ +-----------+


+--------+ +--------+ +-----------+
Machine A B C
Rsea$ di++$sant - Une ,a%hine -$i ,et trans+:re des in+#r,ati#ns s$r &e %h(&e ave% &'adresse de &a ,a%hine destinatri%e.
T#$tes &es ,a%hines ra%%#rdes re@#ivent a&#rs %es in+#r,ati#ns et se$&e %e&&e . -$i e&&es s#nt destines &es %#nserve.
La ,th#de d'a%%:s est &a s$ivante 4 &e trans,ette$r dsirant ,ettre %#$te &e %h(&e - i& dte%te a&#rs &a 'rsen%e #$ n#n
d'$ne #nde '#rte$se0 'rsen%e -$i signi+ierait -$'$ne trans,issi#n est en %#$rs. 5'est &a te%hni-$e =.<: <(arrier Sense
:ultiple Hccess=. En &'a(sen%e de '#rte$se0 $n trans,ette$r 'e$t d%ider de trans,ettre . s#n t#$r. I&s 'e$vent *tre
'&$sie$rs . 'rendre %ette d%isi#n. Les signa$/ ,is se ,&angent 4 #n dit -$'i& A a collision. Le trans,ette$r dte%te %ette
sit$ati#n 4 en ,*,e te,'s -$'i& ,et s$r &e %h(&e0 i& %#$te %e -$i 'asse re&&e,ent s$r %e&$i-%i. S'i& dte%te -$e
&'in+#r,ati#n transitant s$r &e %h(&e n'est 'as %e&&e -$'i& a ,ise0 i& en dd$it -$'i& A a %#&&isi#n et i& s'arr*tera d',ettre. Les
a$tres trans,ette$rs -$i ,ettaient +er#nt de ,*,e. 5ha%$n re'rendra s#n ,issi#n a'r:s $n te,'s a&at#ire d'endant
de %ha-$e trans,ette$r. 5ette te%hni-$e est a''e&e =/ <(ollision Detect=. La ,th#de d'a%%:s est ainsi a''e&e
=.<:D=/.
$n adressage s$r "E (its. 5ha-$e ,a%hine a $ne adresse0 a''e&e i%i adresse 'hAsi-$e0 -$i est ins%rite s$r &a %arte -$i &a
re&ie a$ %h(&e. ;n a''e&&e %et adresse0 &'adresse 7thernet de &a ,a%hine.
=ouc-e @seau
N#$s tr#$v#ns a$ nivea$ de %ette %#$%he0 &es 'r#t#%#&es IP0 I5MP0 ARP et RARP.
IP (Internet Protocol)
D&ivre des 'a-$ets entre de$/ n#e$ds d$ rsea$
Servi%es 1EB FEL
ICMP
(Internet Control Message Protocol)
I5MP ra&ise &a %#,,$ni%ati#n entre &e 'r#gra,,e d$ 'r#t#%#&e IP d'$ne
,a%hine et %e&$i d'$ne a$tre ,a%hine. 5'est d#n% $n 'r#t#%#&e d'%hange de
,essages . &'intrie$r ,*,e d$ 'r#t#%#&e IP.
ARP
(Address Resolution Protocol)
+ait &a %#rres'#ndan%e adresse Internet ,a%hine--` adresse 'hAsi-$e ,a%hine
RARP
(Reverse Address Resolution Protocol)
+ait &a %#rres'#ndan%e adresse 'hAsi-$e ,a%hine--` adresse Internet ,a%hine
=ouc-es TransportD.ession
Dans %ette %#$%he0 #n tr#$ve &es 'r#t#%#&es s$ivants 4
TCP (Transmission Control
Protocol)
Ass$re $ne re,ise +ia(&e d'in+#r,ati#ns entre de$/ %&ients
UDP (User Datagram Protocol)
Ass$re $ne re,ise n#n +ia(&e d'in+#r,ati#ns entre de$/ %&ients
=ouc-es :pplicationDPrsentationD.ession
;n tr#$ve i%i divers 'r#t#%#&es 4
TELNET
E,$&ate$r de ter,ina& 'er,ettant . $ne ,a%hine A de se %#nne%ter . $ne ,a%hine B en tant
-$e ter,ina&
FTP (File Transfer Protocol)
'er,et des trans+erts de +i%hiers
TFTP (Trivial File Transfer
Protocol)
'er,et des trans+erts de +i%hiers
SMTP (Simple Mail Transfer
protocol)
'er,et &'%hange de ,essages entre $ti&isate$rs d$ rsea$
DNS (Domain Name System)
trans+#r,e $n n#, de ,a%hine en adresse Internet de &a ,a%hine
XDR (eXternal Data
Representation)
%r 'ar s$n Mi%r#SAste,s0 i& s'%i+ie $ne re'rsentati#n standard des d#nnes0
ind'endante des ,a%hines
RPC(Remote Procedures Call)
d+ini ga&e,ent 'ar S$n0 %'est $n 'r#t#%#&e de %#,,$ni%ati#n entre a''&i%ati#ns distantes0
ind'endant de &a %#$%he trans'#rt. 5e 'r#t#%#&e est i,'#rtant 4 i& d%harge &e
'r#gra,,e$r de &a %#nnaissan%e des dtai&s de &a %#$%he trans'#rt et rend &es a''&i%ati#ns
'#rta(&es. 5e 'r#t#%#&e s'a''$ie s$r s$r &e 'r#t#%#&e 3DR
NFS (Network File System)
t#$B#$rs d+ini 'ar S$n0 %e 'r#t#%#&e 'er,et . $ne ,a%hine0 de Dv#irD &e sAst:,e de +i%hiers
d'$ne a$tre ,a%hine. I& s'a''$ie s$r &e 'r#t#%#&e RP5 'r%dent
E.F." J#n%ti#nne,ent des 'r#t#%#&es de &'Internet
Les a''&i%ati#ns dve&#''es dans &'envir#nne,ent T5PNIP $ti&isent gnra&e,ent '&$sie$rs des 'r#t#%#&es de %et envir#nne,ent.
Un 'r#gra,,e d'a''&i%ati#n %#,,$ni-$e ave% &a %#$%he &a '&$s &eve des 'r#t#%#&es. 5e&&e-%i 'asse &'in+#r,ati#n . &a %#$%he d$
dess#$s et ainsi de s$ite B$s-$'. arriver s$r &e s$''#rt 'hAsi-$e. L.0 &'in+#r,ati#n est 'hAsi-$e,ent trans+re . &a ,a%hine
destinatri%e #> e&&e retraversera &es ,*,es %#$%hes0 en sens inverse %ette +#is-%i0 B$s-$'. arriver . &'a''&i%ati#n destinatri%e des
in+#r,ati#ns env#Aes. Le s%h,a s$ivant ,#ntre &e 'ar%#$rs de &'in+#r,ati#n 4
Servi%es 1EB FL!
+----------------+ +---------------------------+
Application Application
+----------------+ +---------------------------+
<----------- messages ou streams ---------->
+----------------+ +---------------------------+
Transport Transport
(Udp/Tcp) (Udp/tcp)
+----------------+ +---------------------------+
<----------- datagrammes (UDP) ----------->
+----------------+ ou +---------------------------+
Rseau (IP) segments (TCP) Rseau (IP)
+----------------+ +---------------------------+
<----------- datagrammes IP -------------->
+----------------+ +----------------------------+
Interface rseau Interface rseau
+---------------+ +----------------------------+
<---------- trames rseau ------------->
+----------------------------------------------+
rseau physique
Pren#ns $n e/e,'&e 4 &'a''&i%ati#n JTP0 d+inie a$ nivea$ de &a %#$%he Hpplication et -$i 'er,et des trans+erts de +i%hiers entre
,a%hines.
. L'a''&i%ati#n d&ivre $ne s$ite d'#%tets . trans,ettre . &a %#$%he transport.
. La %#$%he transport d%#$'e %ette s$ite d'#%tets en segments T5P0 et aB#$te a$ d($t de %ha-$e seg,ent0 &e n$,r# de %e&$i-
%i. Les seg,ents s#nt 'asss . &a %#$%he Rsea$ g#$verne 'ar &e 'r#t#%#&e IP.
. La %#$%he IP %re $n 'a-$et en%a's$&ant &e seg,ent T5P re@$. En t*te de %e 'a-$et0 e&&e '&a%e &es adresses Internet des
,a%hines s#$r%e et destinati#n. E&&e dter,ine ga&e,ent &'adresse 'hAsi-$e de &a ,a%hine destinatri%e. Le t#$t est 'ass .
&a %#$%he .iaison de donnes ' .iaison physi9ue0 %'est . dire . &a %arte rsea$ -$i %#$'&e &a ,a%hine a$ rsea$ 'hAsi-$e.
. L.0 &e 'a-$et IP est en%a's$& . s#n t#$r dans $ne tra+e 'hAsi-$e et env#A . s#n destinataire s$r &e %h(&e.
. S$r &a ,a%hine destinatri%e0 &a %#$%he .iaison de donnes ' .iaison physi9ue +ait &'inverse 4 e&&e dsen%a's$&e &e 'a-$et IP de &a
tra,e 'hAsi-$e et &e 'asse . &a %#$%he IP.
. La %#$%he I- vri+ie -$e &e 'a-$et est %#rre%t 4 e&&e %a&%$&e $ne s#,,e0 +#n%ti#n des (its re@$s <checOsum=0 s#,,e -$'e&&e
d#it retr#$ver dans &'en-t*te d$ 'a-$et. Si %e n'est 'as &e %as0 %e&$i-%i est reBet.
. Si &e 'a-$et est d%&ar %#rre%t0 &a %#$%he IP dsen%a's$&e &e seg,ent T5P -$i s'A tr#$ve et &e 'asse a$-dess$s . &a %#$%he
transport.
. La %#$%he transport0 %#$%he %(- dans n#tre e/e,'&e0 e/a,ine &e n$,r# d$ seg,ent a+in de restit$er &e (#n #rdre des
seg,ents.
. E&&e %a&%$&e ga&e,ent $ne s#,,e de vri+i%ati#n '#$r &e seg,ent T5P. S'i& est tr#$v %#rre%t0 &a %#$%he T5P env#ie $n
a%%$s de r%e'ti#n . &a ,a%hine s#$r%e0 sin#n &e seg,ent T5P est re+$s.
. I& ne reste '&$s . &a %#$%he T5P -$'. trans,ettre &a 'artie d#nnes d$ seg,ent . &'a''&i%ati#n destinatri%e de %e&&es-%i dans &a
%#$%he d$ dess$s.
E.F.I L'adressage dans &'Internet
Un noeud d'$n rsea$ 'e$t *tre $n #rdinate$r0 $ne i,'ri,ante inte&&igente0 $n serve$r de +i%hiers0 n'i,'#rte -$#i en +ait '#$vant
%#,,$ni-$er . &'aide des 'r#t#%#&es T5PNIP. 5ha-$e n#e$d a $ne adresse p-ysique aAant $n +#r,at d'endant d$ tA'e d$
rsea$. S$r $n rsea$ Ethernet0 &'adresse 'hAsi-$e est %#de s$r K #%tets. Une adresse d'$n rsea$ 3I est $n n#,(re . F" %hi++res.
L'adresse Internet d'$n n#e$d est $ne adresse logique 4 e&&e est ind'endante d$ ,atrie& et d$ rsea$ $ti&is. 5'est $ne adresse s$r
" #%tets identi+iant . &a +#is $n rsea$ &#%a& et $n n#e$d de %e rsea$. L'adresse Internet est ha(it$e&&e,ent re'rsente s#$s &a
+#r,e de " n#,(res0 va&e$rs des " #%tets0 s'ars 'ar $n '#int. Ainsi &'adresse de &a ,a%hine Laga++e de &a +a%$&t des S%ien%es
d'Angers est n#te FLH."L.F"".F et %e&&e de &a ,a%hine LinA FLH."L.F"".L. ;n en dd$ira -$e &'adresse Internet d$ rsea$ &#%a& est
FLH."L.F"".!. ;n '#$rra av#ir B$s-$'. I" n#e$ds s$r %e rsea$.
Par%e -$e &es adresses Internet #$ adresses IP s#nt ind'endantes d$ rsea$0 $ne ,a%hine d'$n rsea$ A 'e$t %#,,$ni-$er ave%
$ne ,a%hine d'$n rsea$ B sans se 'r#%%$'er d$ tA'e de rsea$ s$r &e-$e& e&&e se tr#$ve 4 i& s$++it -$'e&&e %#nnaisse s#n adresse IP.
Le 'r#t#%#&e IP de %ha-$e rsea$ se %harge de +aire &a %#nversi#n adresse IP _--` adresse 'hAsi-$e0 dans &es de$/ sens.
Les adresses IP d#ivent *tre t#$tes di++rentes. En Jran%e0 %'est &'INRIA -$i s'#%%$'e d'a++e%ter &es adresses IP. En +ait0 %et
#rganis,e d&ivre $ne adresse '#$r v#tre rsea$ &#%a&0 'ar e/e,'&e FLH."L.F"".! '#$r &e rsea$ de &a +a%$&t des s%ien%es d'Angers.
L'ad,inistrate$r de %e rsea$ 'e$t ens$ite a++e%ter &es adresses IP FLH."L.F"".F . FLH."L.F"".I" %#,,e i& &'entend. 5ette adresse
est gnra&e,ent ins%rite dans $n +i%hier 'arti%$&ier de %ha-$e ,a%hine re&ie a$ rsea$.
Servi%es 1EB FLF
>.1.8.1 .es classes d;adresses I-
Une adresse IP est $ne s$ite de " #%tets n#te s#$vent IF.I.IH.I"0 -$i %#ntient en +ait de$/ adresses 4
. &'adresse d$ rsea$
. &'adresse d'$n n#e$d de %e rsea$
Se&#n &a tai&&e de %es de$/ %ha,'s0 &es adresses IP s#nt divises en H %&asses 4 %&asses A0 B et 5.
=lasse :
L'adresse IP 4 IF.I.IH.I" a &a +#r,e RF.NF.N.NH #>
RF est &'adresse d$ rsea$
NF.N.NH est &'adresse d'$ne ,a%hine dans %e rsea$
P&$s e/a%te,ent0 &a +#r,e d'$ne adresse IP de %&asse A est &a s$ivante 4
1 octet 3 octets
+-------------------------------------------------------------------------------+
0 adr. rseau adresse noeud
+-------------------------------------------------------------------------------+
L'adresse rsea$ est s$r O (its et &'adresse d$ n#e$d s$r " (its. ;n 'e$t d#n% av#ir FO rsea$/ de %&asse A0 %ha%$n %#,'#rtant
B$s-$'.
"
n#e$ds.
=lasse B
I%i0 &'adresse IP 4 IF.I.IH.I" a &a +#r,e RF.R.NF.N #>
RF.R est &'adresse d$ rsea$
NF.N est &'adresse d'$ne ,a%hine dans %e rsea$
P&$s e/a%te,ent0 &a +#r,e d'$ne adresse IP de %&asse B est &a s$ivante 4
2 octets 2 octets
+-------------------------------------------------------------------------------+
10 adresse rseau adresse noeud
+-------------------------------------------------------------------------------+
L'adresse d$ rsea$ est s$r #%tets <F" (its e/a%te,ent= ainsi -$e %e&&e d$ n#e$d. ;n 'e$t d#n% av#ir
F"
rsea$/ de %&asse B
%ha%$n %#,'#rtant B$s-$'.
FK
n#e$ds.
=lasse =
Dans %ette %&asse0 &'adresse IP 4 IF.I.IH.I" a &a +#r,e RF.R.RH.NF #>
RF.R.RH est &'adresse d$ rsea$
NF est &'adresse d'$ne ,a%hine dans %e rsea$
P&$s e/a%te,ent0 &a +#r,e d'$ne adresse IP de %&asse 5 est &a s$ivante 4
3 octets 1 octet
+-------------------------------------------------------------------------------+
110 adresse rseau adr. noeud
+-------------------------------------------------------------------------------+
L'adresse rsea$ est s$r H #%tets <,#ins H (its= et &'adresse d$ n#e$d s$r F #%tet. ;n 'e$t d#n% av#ir
F
rsea$/ de %&asse 5
%#,'#rtant B$s-$'. IK n#e$ds.
L'adresse de &a ,a%hine .aga##e de &a +a%$&t des s%ien%es d'Angers tant FLH."L.F"".F0 #n v#it -$e &'#%tet de '#ids +#rt va$t FLH0
%'est . dire en (inaire FF!!!!!F. ;n en dd$it -$e &e rsea$ est de %&asse 5.
:dresses rserves
Servi%es 1EB FL
. 5ertaines adresses IP s#nt des adresses de rsea$/ '&$t[t -$e des adresses de n#e$ds dans &e rsea$. 5e s#nt %e&&es0 #>
&'adresse d$ n#e$d est ,ise . !. Ainsi0 &'adresse FLH."L.F"".! est &'adresse IP d$ rsea$ de &a Ja%$&t des S%ien%es d'Angers.
En %#ns-$en%e0 a$%$n n#e$d d'$n rsea$ ne 'e$t av#ir &'adresse Qr#.
. L#rs-$e dans $ne adresse IP0 &'adresse d$ n#e$d ne %#,'#rte -$e des F0 #n a a&#rs $ne adresse de di++$si#n 4 %ette adresse
dsigne tous les noeuds du rseau.
. Dans $n rsea$ de %&asse 50 'er,ettant th#ri-$e,ent
E
VIK n#e$ds0 si #n en&:ve &es de$/ adresses interdites0 #n n'a
'&$s -$e I" adresses a$t#rises.
>.1.8.2 .es protocoles de con!ersion Hdresse Internet CVV\ Hdresse physi9ue
N#$s av#ns v$ -$e &#rs d'$ne ,issi#n d'in+#r,ati#ns d'$ne ,a%hine vers $ne a$tre0 %e&&es-%i . &a traverse de &a %#$%he IP taient
en%a's$&es dans des 'a-$ets. 5e$/-%i #nt &a +#r,e s$ivante 4
. <---- En-tte paquet IP ---------------------------> . <---Donnes paquet IP ------------>.
+---------------------------------------------------------------------------------------------+
Info Adresse Internet Adresse Internet
Source Destination
+---------------------------------------------------------------------------------------------+
Le 'a-$et IP %#ntient d#n% &es adresses Internet des ,a%hines s#$r%e et destinati#n. L#rs-$e %e 'a-$et va *tre trans,is . &a %#$%he
%harge de &'env#Aer s$r &e rsea$ 'hAsi-$e0 d'a$tres in+#r,ati#ns &$i s#nt aB#$tes '#$r +#r,er &a tra,e 'hAsi-$e -$i sera
+ina&e,ent env#Ae s$r &e rsea$. Par e/e,'&e0 &e +#r,at d'$ne tra,e s$r $n rsea$ Ethernet est &e s$ivant 4
. <---- En-tte trame Ethernet -----------------------> . <-Donnes trame Ethernet->.
+----------------------------------------------------------------------------------------------------+
Info Adresse Physique Adresse Physique longueur Paquet IP Ethernet
Source Destination paquet CRC
+----------------------------------------------------------------------------------------------------+
8 oct 6 6 2 46 1500 4
Dans &a tra,e +ina&e0 i& A a &'adresse 'hAsi-$e des ,a%hines s#$r%e et destinati#n. 5#,,ent s#nt-e&&es #(ten$es X
La ,a%hine e/'ditri%e %#nnaissant &'adresse IP de &a ,a%hine ave% -$i e&&e ve$t %#,,$ni-$er #(tient &'adresse 'hAsi-$e de %e&&e-%i
en $ti&isant $n 'r#t#%#&e 'arti%$&ier a''e& :@P <Hddress Resolution -rotocol=.
. E&&e env#ie $n 'a-$et d'$n tA'e s'%ia& a''e& 'a-$et ARP %#ntenant &'adresse IP de &a ,a%hine d#nt #n %her%he &'adresse
'hAsi-$e. E&&e a 'ris s#in ga&e,ent d'A '&a%er sa 'r#'re adresse IP ainsi -$e s#n adresse 'hAsi-$e.
. 5e 'a-$et est env#A . t#$s &es n#e$ds d$ rsea$.
. 5e$/-%i re%#nnaissent &a nat$re s'%ia&e d$ 'a-$et. Le n#e$d -$i re%#nnaCt s#n adresse IP dans &e 'a-$et0 r'#nd en
env#Aant . &'e/'dite$r d$ 'a-$et s#n adresse 'hAsi-$e. 5#,,ent &e 'e$t-i& X I& a tr#$v dans &e 'a-$et &es adresses IP et
'hAsi-$e de &'e/'dite$r.
. L'e/'dite$r re@#it d#n% &'adresse 'hAsi-$e -$'i& %her%hait. I& &a st#%Re en ,,#ire a+in de '#$v#ir &'$ti&iser $&trie$re,ent
si d'a$tres 'a-$ets s#nt . env#Aer a$ ,*,e destinataire.
L'adresse IP d'$ne ,a%hine est n#r,a&e,ent ins%rite dans &'$n de ses +i%hiers -$'e&&e 'e$t d#n% %#ns$&ter '#$r &a %#nnaCtre. 5ette
adresse 'e$t *tre %hange 4 i& s$++it d'diter &e +i%hier. L'adresse 'hAsi-$e e&&e0 est ins%rite dans $ne ,,#ire de &a %arte rsea$ et ne
'e$t *tre %hange.
L#rs-$'$n ad,inistrate$r dsire d'#rganiser s#n rsea$ di++re,,ent0 i& 'e$t *tre a,en . %hanger &es adresses IP de t#$s &es
n#e$ds et d#n% . diter &es di++rents +i%hiers de %#n+ig$rati#n des di++rents n#e$ds. 5e&a 'e$t *tre +astidie$/ et $ne #%%asi#n
d'erre$rs s'i& A a (ea$%#$' de ,a%hines. Une ,th#de %#nsiste . ne 'as a++e%ter d'adresse IP a$/ ,a%hines 4 #n ins%rit a&#rs $n
%#de s'%ia& dans &e +i%hier dans &e-$e& &a ,a%hine devrait tr#$ver s#n adresse IP. D%#$vrant -$'e&&e n'a 'as d'adresse IP0 &a
,a%hine &a de,ande se&#n $n 'r#t#%#&e a''e& @:@P )Re!erse Hddress Resolution -rotocol+. E&&e env#ie a&#rs s$r $n rsea$ $n 'a-$et
s'%ia& a''e& 'a-$et RARP0 ana&#g$e a$ 'a-$et ARP 'r%dent0 dans &e-$e& e&&e ,et s#n adresse 'hAsi-$e. 5e 'a-$et est env#A .
t#$s &es n#e$ds -$i re%#nnaissent a&#rs $n 'a-$et RARP. L'$n d'entre-e$/0 a''e& serveur @:@P0 '#ss:de $n +i%hier d#nnant &a
%#rres'#ndan%e adresse 'hAsi-$e _--` adresse IP de t#$s &es n#e$ds. I& r'#nd a&#rs . &'e/'dite$r d$ 'a-$et RARP0 en &$i
renv#Aant s#n adresse IP. Un ad,inistrate$r dsirant re%#n+ig$rer s#n rsea$0 n'a d#n% -$'. diter &e +i%hier de %#rres'#ndan%es d$
serve$r RARP. 5e&$i-%i d#it n#r,a&e,ent av#ir $ne adresse IP +i/e -$'i& d#it '#$v#ir %#nnaCtre sans av#ir . $ti&iser &$i-,*,e &e
'r#t#%#&e RARP.
E.F.K La %#$%he rsea$ dite %#$%he IP de &'internet
Le 'r#t#%#&e IP )Internet -rotocol+ d+init &a +#r,e -$e &es 'a-$ets d#ivent 'rendre et &a +a@#n d#nt i&s d#ivent *tre grs &#rs de &e$r
,issi#n #$ de &e$r r%e'ti#n. 5e tA'e de 'a-$et 'arti%$&ier est a''e& $n datagra++e IP. N#$s &'av#ns dB. 'rsent 4
Servi%es 1EB FLH
. <---- En-tte paquet IP ---------------------------> . <---Donnes paquet IP ------------>.
+---------------------------------------------------------------------------------------------+
Info Adresse Internet Adresse Internet
Source Destination
+---------------------------------------------------------------------------------------------+
L'i,'#rtant est -$'#$tre &es d#nnes . trans,ettre0 &e datagra,,e IP %#ntient &es adresses Internet des ,a%hines s#$r%e et
destinati#n. Ainsi &a ,a%hine destinatri%e sait -$i &$i env#ie $n ,essage.
A &a di++ren%e d'$ne tra,e de rsea$ -$i a $ne &#ng$e$r dter,ine 'ar &es %ara%tristi-$es 'hAsi-$es d$ rsea$ s$r &e-$e& e&&e
transite0 &a &#ng$e$r d$ datagra,,e IP est e&&e +i/e 'ar &e &#gi%ie& et sera d#n% &a ,*,e s$r di++rents rsea$/ 'hAsi-$es. N#$s
av#ns v$ -$'en des%endant de &a %#$%he rsea$ dans &a %#$%he 'hAsi-$e &e datagra,,e IP tait en%a's$& dans $ne tra,e 'hAsi-$e.
N#$s av#ns d#nn &'e/e,'&e de &a tra,e 'hAsi-$e d'$n rsea$ Ethernet 4
. <---- En-tte trame Ethernet -------------------------------->. <---Donnes trame Ethernet------>.
+----------------------------------------------------------------------------------------------------+
Info Adresse Physique Adresse Physique Type du Paquet IP Ethernet
Source Destination paquet CRC
+----------------------------------------------------------------------------------------------------+
Les tra,es 'hAsi-$es %ir%$&ent de n#e$d en n#e$d vers &e$r destinati#n -$i 'e$t ne 'as *tre s$r &e ,*,e rsea$ 'hAsi-$e -$e &a
,a%hine e/'ditri%e. Le 'a-$et IP 'e$t d#n% *tre en%a's$& s$%%essive,ent dans des tra,es 'hAsi-$es di++rentes a$ nivea$ des
n#e$ds -$i +#nt &a B#n%ti#n entre de$/ rsea$/ de tA'e di++rent. I& se 'e$t a$ssi -$e &e 'a-$et IP s#it tr#' grand '#$r *tre
en%a's$& dans $ne tra,e 'hAsi-$e. Le &#gi%ie& IP d$ n#e$d #> se '#se %e 'r#(&:,e0 d%#,'#se a&#rs &e 'a-$et IP en #ragments
se&#n des r:g&es 'r%ises0 %ha%$n d'e$/ tant ens$ite env#A s$r &e rsea$ 'hAsi-$e. I&s ne ser#nt rasse,(&s -$'. &e$r $&ti,e
destinati#n.
>.1./.1 .e routage
Le r#$tage est &a ,th#de d'a%he,ine,ent des 'a-$ets IP . &e$r destinati#n. I& A a de$/ ,th#des 4 &e r#$tage dire%t et &e r#$tage
indire%t.
@outage direct
Le r#$tage dire%t dsigne &'a%he,ine,ent d'$n 'a-$et IP dire%te,ent de &'e/'dite$r a$ destinataire . &'intrie$r d$ ,*,e rsea$ 4
. La ,a%hine e/'ditri%e d'$n datagra,,e IP a &'adresse IP d$ destinataire.
. E&&e #(tient &'adresse 'hAsi-$e de %e dernier 'ar &e 'r#t#%#&e ARP #$ dans ses ta(&es0 si %ette adresse a dB. t #(ten$e.
. E&&e env#ie &e 'a-$et s$r &e rsea$ . %ette adresse 'hAsi-$e.
@outage indirect
Le r#$tage indire%t dsigne &'a%he,ine,ent d'$n 'a-$et IP . $ne destinati#n se tr#$vant s$r $n a$tre rsea$ -$e %e&$i a$-$e&
a''artient &'e/'dite$r. Dans %e %as0 &es 'arties adresse rsea$ des adresses IP des ,a%hines s#$r%e et destinati#n s#nt di++rentes.
La ,a%hine s#$r%e re%#nnaCt %e '#int. E&&e env#ie a&#rs &e 'a-$et . $n n#e$d s'%ia& a''e& routeur <router=0 n#e$d -$i %#nne%te $n
rsea$ &#%a& a$/ a$tres rsea$/ et d#nt e&&e tr#$ve &'adresse IP dans ses ta(&es0 adresse #(ten$e initia&e,ent s#it dans $n +i%hier s#it
dans $ne ,,#ire 'er,anente #$ en%#re via des in+#r,ati#ns %ir%$&ant s$r &e rsea$.
Un routeur est atta%h . de$/ rsea$/ et '#ss:de $ne adresse IP . &'intrie$r de %es de$/ rsea$/.
+------------+
rseau 2 routeur rseau 1
----------------|193.49.144.6|------------
193.49.145.0 193.49.145.3 193.49.144.0
+------------+
Dans n#tre e/e,'&e %i-dess$s 4
. Le rsea$ nY F a &'adresse Internet FLH."L.F"".! et &e rsea$ nY &'adresse FLH."L.F"I.!.
. A &'intrie$r d$ rsea$ nY F0 &e r#$te$r a &'adresse FLH."L.F"".K et &'adresse FLH."L.F"I.H . &'intrie$r d$ rsea$ nY .
Le r#$te$r a '#$r r[&e de ,ettre &e 'a-$et IP -$'i& re@#it et -$i est %#nten$ dans $ne tra,e 'hAsi-$e tA'i-$e d$ rsea$ nY F0 dans
$ne tra,e 'hAsi-$e '#$vant %ir%$&er s$r &e rsea$ nY . Si &'adresse IP d$ destinataire d$ 'a-$et est dans &e rsea$ nY 0 &e r#$te$r
&$i enverra &e 'a-$et dire%te,ent sin#n i& &'enverra . $n a$tre r#$te$r0 %#nne%tant &e rsea$ nY . $n rsea$ nY H et ainsi de s$ite.
>.1./.2 :essages d;erreur et de contrle
T#$B#$rs dans &a %#$%he rsea$0 a$ ,*,e nivea$ d#n% -$e &e 'r#t#%#&e IP0 e/iste &e 'r#t#%#&e I=<P <Internet (ontrol :essage
-rotocol=. I& sert . env#Aer des ,essages s$r &e +#n%ti#nne,ent interne d$ rsea$ 4 n#e$ds en 'anne0 e,(#$tei&&age . $n r#$te$r0 et%
... Les ,essages I5MP s#nt en%a's$&s dans des 'a-$ets IP et env#As s$r &e rsea$. Les %#$%hes IP des di++rents n#e$ds 'rennent
&es a%ti#ns a''r#'ries se&#n &es ,essages I5MP -$'e&&es re@#ivent. Ainsi0 $ne a''&i%ati#n e&&e-,*,e0 ne v#it Ba,ais %es 'r#(&:,es
'r#'res a$ rsea$. Un n#e$d $ti&isera &es in+#r,ati#ns I5MP '#$r ,ettre . B#$r ses ta(&es de r#$tage.
Servi%es 1EB FL"
E.F.O La %#$%he trans'#rt 4 &es 'r#t#%#&es UDP et T5P
>.1.<.1 .e protocole UD- : User Datagram -rotocol
Le 'r#t#%#&e UDP 'er,et $n %hange n#n +ia(&e de d#nnes entre de$/ '#ints0 %'est . dire -$e &e (#n a%he,ine,ent d'$n 'a-$et .
sa destinati#n n'est 'as garanti. L'a''&i%ati#n0 si e&&e &e s#$haite 'e$t grer %e&a e&&e-,*,e0 en attendant 'ar e/e,'&e a'r:s &'env#i
d'$n ,essage0 $n a%%$s de r%e'ti#n0 avant d'env#Aer &e s$ivant.
P#$r &'instant0 a$ nivea$ rsea$0 n#$s av#ns 'ar& d'adresses IP de ,a%hines. ;r s$r $ne ,a%hine0 'e$vent %#e/ister en ,*,e
te,'s di++rents 'r#%ess$s -$i t#$s 'e$vent %#,,$ni-$er. I& +a$t d#n% indi-$er0 &#rs de &'env#i d'$n ,essage0 n#n se$&e,ent
&'adresse IP de &a ,a%hine destinatri%e0 ,ais ga&e,ent &e Dn#,D d$ 'r#%ess$s destinataire. 5e n#, est en +ait $n n$,r#0 a''e&
nu+ro de port. 5ertains n$,r#s s#nt rservs . des a''&i%ati#ns standard 4 '#rt KL '#$r &'a''&i%ati#n tftp )tri!ial #ile trans#er
protocol+ 'ar e/e,'&e. Les 'a-$ets grs 'ar &e 'r#t#%#&e UDP s#nt a''e&s ga&e,ent des datagra++es. I&s #nt &a +#r,e s$ivante 4
. <---- En-tte datagramme UDP ----------->. <---Donnes datagramme UDP-------->.
+--------------------------------------------------------------------------------+
Port source Port destination

+--------------------------------------------------------------------------------+
5es datagra,,es ser#nt en%a's$&s dans des 'a-$ets IP0 '$is dans des tra,es 'hAsi-$es.
>.1.<.2 .e protocole %(- : %rans#er (ontrol -rotocol
P#$r des %#,,$ni%ati#ns s?res0 &e 'r#t#%#&e UDP est ins$++isant 4 &e dve&#''e$r d'a''&i%ati#ns d#it &a(#rer &$i-,*,e $n
'r#t#%#&e &$i 'er,ettant de dte%ter &e (#n a%he,ine,ent des 'a-$ets.
Le 'r#t#%#&e T=P )%rans#er (ontrol -rotocol+ vite %es 'r#(&:,es. Ses %ara%tristi-$es s#nt &es s$ivantes 4
. Le 'r#%ess$s -$i s#$haite ,ettre ta(&it t#$t d'a(#rd $ne conne&ion ave% &e 'r#%ess$s destinataire des in+#r,ati#ns -$'i&
va ,ettre. 5ette %#nne/i#n se +ait entre $n '#rt de &a ,a%hine ,ettri%e et $n '#rt de &a ,a%hine r%e'tri%e. I& A a entre
&es de$/ '#rts $n %he,in virt$e& -$i est ainsi %r et -$i sera rserv a$/ de$/ se$&s 'r#%ess$s aAant ra&is &a %#nne/i#n.
T#$s &es 'a-$ets ,is 'ar &e 'r#%ess$s s#$r%e s$ivent %e %he,in virt$e& et arrivent dans &'#rdre #> i&s #nt t ,is %e -$i
n'tait 'as garanti dans &e 'r#t#%#&e UDP '$is-$e &es 'a-$ets '#$vaient s$ivre des %he,ins di++rents.
. L'in+#r,ati#n ,ise a $n as'e%t %#ntin$. Le 'r#%ess$s ,ette$r env#ie des in+#r,ati#ns . s#n rhAth,e. 5e&&es-%i ne s#nt
'as n%essaire,ent env#Aes t#$t de s$ite 4 &e 'r#t#%#&e T5P attend d'en av#ir asseQ '#$r &es env#Aer. E&&es s#nt st#%Res
dans $ne str$%t$re a''e&e segment %(-. 5e seg,ent $ne +#is re,'&i sera trans,is . &a %#$%he IP #> i& sera en%a's$& dans
$n 'a-$et IP.
. 5ha-$e seg,ent env#A 'ar &e 'r#t#%#&e T5P est n$,r#t. Le 'r#t#%#&e T5P destinataire vri+ie -$'i& re@#it (ien &es
seg,ents en s-$en%e. P#$r %ha-$e seg,ent %#rre%te,ent re@$0 i& env#ie $n a%%$s de r%e'ti#n . &'e/'dite$r.
. L#rs-$e %e dernier &e re@#it0 i& &'indi-$e a$ 'r#%ess$s ,ette$r. 5e&$i-%i 'e$t d#n% sav#ir -$'$n seg,ent est arriv . (#n
'#rt0 %e -$i n'tait 'as '#ssi(&e ave% &e 'r#t#%#&e UDP.
. Si a$ (#$t d'$n %ertain te,'s0 &e 'r#t#%#&e T5P aAant ,is $n seg,ent ne re@#it 'as d'a%%$s de r%e'ti#n0 i& retrans,et &e
seg,ent en -$esti#n0 garantissant ainsi &a -$a&it d$ servi%e d'a%he,ine,ent de &'in+#r,ati#n.
. Le %ir%$it virt$e& ta(&i entre &es de$/ 'r#%ess$s -$i %#,,$ni-$ent est #ullVduplex 4 %e&a signi+ie -$e &'in+#r,ati#n 'e$t
transiter dans &es de$/ sens. Ainsi &e 'r#%ess$s destinati#n 'e$t env#Aer des a%%$ss de r%e'ti#n a&#rs ,*,e -$e &e
'r#%ess$s s#$r%e %#ntin$e d'env#Aer des in+#r,ati#ns. 5e&a 'er,et 'ar e/e,'&e a$ 'r#t#%#&e T5P s#$r%e d'env#Aer
'&$sie$rs seg,ents sans attendre d'a%%$s de r%e'ti#n. S'i& ra&ise a$ (#$t d'$n %ertain te,'s -$'i& n'a 'as re@$ &'a%%$s de
r%e'ti#n d'$n %ertain seg,ent nY n0 i& re'rendra &',issi#n des seg,ents . %e '#int.
E.F.E La %#$%he A''&i%ati#ns
A$-dess$s des 'r#t#%#&es UDP et T5P0 e/istent divers 'r#t#%#&es standard 4
TE5NET
5e 'r#t#%#&e 'er,et . $n $ti&isate$r d'$ne ,a%hine A d$ rsea$ de se %#nne%ter s$r $ne ,a%hine B <a''e&e s#$vent ,a%hine
h[te=. TELNET ,$&e s$r &a ,a%hine A $n ter,ina& dit $niverse&. L'$ti&isate$r se %#,'#rte d#n% %#,,e s'i& dis'#sait d'$n
ter,ina& %#nne%t . &a ,a%hine B. Te&net s'a''$ie s$r &e 'r#t#%#&e T5P.
FTP W 0File Transfer protocol1
5e 'r#t#%#&e 'er,et &'%hange de +i%hiers entre de$/ ,a%hines distantes ainsi -$e des ,ani'$&ati#ns de +i%hiers te&s -$e des
%rati#ns de r'ert#ire 'ar e/e,'&e. I& s'a''$ie s$r &e 'r#t#%#&e T5P.
TFTPW 0Trivial File Transfer =ontrol1
5e 'r#t#%#&e est $ne variante de JTP. I& s'a''$ie s$r &e 'r#t#%#&e UDP et est ,#ins s#'histi-$ -$e JTP.
/N. W 0/o+ain Na+e .yste+1
Servi%es 1EB FLI
L#rs-$'$n $ti&isate$r dsire %hanger des +i%hiers ave% $ne ,a%hine distante0 'ar JTP 'ar e/e,'&e0 i& d#it %#nnaCtre &'adresse
Internet de %ette ,a%hine. Par e/e,'&e0 '#$r +aire d$ JTP s$r &a ,a%hine Laga++e de &'$niversit d'Angers0 i& +a$drait &an%er
JTP %#,,e s$it 4 JTP FLH."L.F"".F
5e&a #(&ige . av#ir $n ann$aire +aisant &a %#rres'#ndan%e ,a%hine _--` adresse IP. Pr#(a(&e,ent -$e dans %et ann$aire &es
,a%hines seraient dsignes 'ar des n#,s sA,(#&i-$es te&s -$e 4
,a%hine DP3NH! de &'$niversit d'Angers
,a%hine S$n de &'ISERPA d'Angers
;n v#it (ien -$'i& serait '&$s agra(&e de dsigner $ne ,a%hine 'ar $n n#, '&$t[t -$e 'ar s#n adresse IP. Se '#se a&#rs &e
'r#(&:,e de &'$ni%it d$ n#, 4 i& A a des ,i&&i#ns de ,a%hines inter%#nne%tes. ;n '#$rrait i,aginer -$'$n #rganis,e
%entra&is attri($e &es n#,s. 5e serait sans d#$te asseQ &#$rd. Le %#ntr[&e des n#,s a t en +ait distri($ dans des do+aines.
5ha-$e d#,aine est gr 'ar $n #rganis,e gnra&e,ent tr:s &ger -$i a t#$te &i(ert -$ant a$ %h#i/ des n#,s de ,a%hines.
Ainsi &es ,a%hines en Jran%e a''artiennent a$ d#,aine fr0 d#,aine gr 'ar &'Inria de Paris. P#$r %#ntin$er . si,'&i+ier &es
%h#ses0 #n distri($e en%#re &e %#ntr[&e 4 des d#,aines s#nt %rs . &'intrie$r d$ d#,aine fr. Ainsi &'$niversit d'Angers
a''artient a$ d#,aine univI:ngers. Le servi%e grant %e d#,aine a t#$te &i(ert '#$r n#,,er &es ,a%hines d$ rsea$ de
&'Universit d'Angers. P#$r &'instant %e d#,aine n'a 'as t s$(divis. Mais dans $ne grande $niversit %#,'#rtant (ea$%#$'
de ,a%hines en rsea$0 i& '#$rrait &'*tre.
La ,a%hine DP3NH! de &'$niversit d'Angers a t n#,,e .aga##e a&#rs -$'$n P5 "EKD3I! a t n#,, liny. 5#,,ent
r+ren%er %es ,a%hines de &'e/trie$r X En 'r%isant &a hirar%hie des d#,aines a$/-$e&&es e&&es a''artiennent. Ainsi &e n#,
%#,'&et de &a ,a%hine Laga++e sera 4
5agaffe.univI:ngers.fr
A &'intrie$r des d#,aines0 #n 'e$t $ti&iser des n#,s re&ati+s. Ainsi . &'intrie$r d$ d#,aine fr et en deh#rs d$ d#,aine univI
:ngers0 &a ,a%hine Laga++e '#$rra *tre r+ren%e 'ar
5agaffe.univI:ngers
En+in0 . &'intrie$r d$ d#,aine uni!VHngers0 e&&e '#$rra *tre r+ren%e si,'&e,ent 'ar
5agaffe
Une a''&i%ati#n 'e$t d#n% r+ren%er $ne ,a%hine 'ar s#n n#,. A$ (#$t d$ %#,'te0 i& +a$t -$and ,*,e #(tenir &'adresse
Internet de %ette ,a%hine. 5#,,ent %e&a est-i& ra&is X S$'#s#ns -$e d'$ne ,a%hine A0 #n ve$i&&e %#,,$ni-$er ave% $ne
,a%hine B.
. si &a ,a%hine B a''artient a$ ,*,e d#,aine -$e &a ,a%hine A0 #n tr#$vera 'r#(a(&e,ent s#n adresse IP dans $n +i%hier de &a
,a%hine A.
. sin#n0 &a ,a%hine A tr#$vera dans $n a$tre +i%hier #$ &e ,*,e -$e 'r%de,,ent0 $ne &iste de -$e&-$es serveurs de no+s
ave% &e$rs adresses IP. Un ser!eur de noms est %harg de +aire &a %#rres'#ndan%e entre $n n#, de ,a%hine et s#n adresse IP. La
,a%hine A va env#Aer $ne re-$*te s'%ia&e a$ 're,ier serve$r de n#, de sa &iste0 a''e& re-$*te DNS in%&$ant d#n% &e n#,
de &a ,a%hine re%her%he. Si &e serve$r interr#g a %e n#, dans ses ta(&ettes0 i& enverra . &a ,a%hine A0 &'adresse IP
%#rres'#ndante. Sin#n0 &e serve$r tr#$vera &$i a$ssi dans ses +i%hiers0 $ne &iste de serve$rs de n#,s -$'i& 'e$t interr#ger. I& &e
+era a&#rs. Ainsi $n %ertain n#,(re de serve$rs de n#,s v#nt *tre interr#gs0 'as de +a@#n anar%hi-$e ,ais d'$ne +a@#n .
,ini,iser &es re-$*tes. Si &a ,a%hine est +ina&e,ent tr#$ve0 &a r'#nse redes%endra B$s-$'. &a ,a%hine A.
X/@ W 0eXternal /ata @epresentation1
5r 'ar s$n Mi%r#SAste,s0 %e 'r#t#%#&e s'%i+ie $ne re'rsentati#n standard des d#nnes0 ind'endante des ,a%hines.
@P= W 0@e+ote Procedure =all1
D+ini ga&e,ent 'ar s$n0 %'est $n 'r#t#%#&e de %#,,$ni%ati#n entre a''&i%ati#ns distantes0 ind'endant de &a %#$%he
trans'#rt. 5e 'r#t#%#&e est i,'#rtant 4 i& d%harge &e 'r#gra,,e$r de &a %#nnaissan%e des dtai&s de &a %#$%he trans'#rt et
rend &es a''&i%ati#ns '#rta(&es. 5e 'r#t#%#&e s'a''$ie s$r s$r &e 'r#t#%#&e 3DR
NF. W Net2orS File .yste+
T#$B#$rs d+ini 'ar S$n0 %e 'r#t#%#&e 'er,et . $ne ,a%hine0 de Dv#irD &e sAst:,e de +i%hiers d'$ne a$tre ,a%hine. I& s'a''$ie
s$r &e 'r#t#%#&e RP5 'r%dent.
E.F.L 5#n%&$si#n
N#$s av#ns 'rsent dans %ette intr#d$%ti#n -$e&-$es grandes &ignes des 'r#t#%#&es Internet. P#$r a''r#+#ndir %e d#,aine0 #n
'#$rra &ire &'e/%e&&ent &ivre de D#$g&as 5#,er 4
Titre T5PNIP 4 Ar%hite%t$re0 Pr#t#%#&es0 A''&i%ati#ns.
A$te$r D#$g&as 5;MER
Servi%es 1EB FLK
Edite$r InterEditi#ns
E. Gesti#n des adresses rsea$
Une ,a%hine s$r &e rsea$ Internet est d+inie de +a@#n $ni-$e 'ar $ne adresse IP <Internet Pr#t#%#&= de &a +#r,e IF.I.IH.I" #> I
n
est $n n#,(re entre F et I". E&&e 'e$t *tre ga&e,ent d+inie 'ar $n n#, ga&e,ent $ni-$e. 5e n#, n'est 'as #(&igat#ire0 &es
a''&i%ati#ns $ti&isant t#$B#$rs a$ +ina& &es adresses IP des ,a%hines. &&s s#nt &. '#$r +a%i&iter &a vie des $ti&isate$rs. Ainsi i& est '&$s
+a%i&e0 ave% $n navigate$r0 de de,ander &'URL http://III.i"m.com -$e &'URL http://12?.02.1<.?? (ien -$e &es de$/ ,th#des s#ient
'#ssi(&es. L'ass#%iati#n adresse IP _--` n#,Ma%hine est ass$re 'ar $n servi%e distri($ de &'internet a''e& DNS <D#,ain Na,e
SAste,=. La '&ate-+#r,e .NET #++re &a %&asse /ns '#$r grer &es adresses internet 4
La '&$'art des ,th#des de &a %&asse s#nt stati-$es. Regard#ns %e&&es -$i n#$s intressent 4
Overloads Public Shared Function
GetHostByAddress(ByVal address As
String) As IPHostEntry
rend $ne adresse I-Nost7ntry . 'artir d'$ne adresse IP s#$s &a +#r,e DIF.I.IH.I"D. Lan%e $ne
e/%e'ti#n si &a ,a%hine address ne 'e$t *tre tr#$ve.
Public Shared Function
GetHostByName(ByVal hostName As
String) As IPHostEntry
rend $ne adresse I-Nost7ntry . 'artir d'$n n#, de ,a%hine. Lan%e $ne e/%e'ti#n si &a
,a%hine name ne 'e$t *tre tr#$ve.
Public Shared Function
GetHostName() As String
rend &e n#, de &a ,a%hine s$r &a-$e&&e s'e/%$te &e 'r#gra,,e -$i B#$e %ette instr$%ti#n
Les adresses rsea$ de tA'e I-Nost7ntry #nt &a +#r,e s$ivante 4
Les 'r#'rits -$i n#$s intressent 4
Servi%es 1EB FLO
Public Property AddressList As
IPAddress ()
&iste des adresses IP d'$ne ,a%hine. Si $ne adresse IP dsigne $ne et $ne se$&e ,a%hine
'hAsi-$e0 $ne ,a%hine 'hAsi-$e 'e$t e&&e av#ir '&$sie$rs adresses IP. 5e sera &e %as si e&&e
a '&$sie$rs %artes rsea$ -$i &a %#nne%tent . des rsea$/ di++rents.
Public Property Aliases As
String ()
&iste des a&ias d'$ne ,a%hine0 '#$vant *tre dsigne 'ar $n n#, 'rin%i'a& et des a&ias
Public Property HostName As
String
&e n#, de &a ,a%hine si e&&e en a $n
De &a %&asse I-Hddress n#$s retiendr#ns &e %#nstr$%te$r0 &es 'r#'rits et ,th#des s$ivantes 4
Un #(Bet TIPAddressU 'e$t *tre trans+#r, en %haCne I1.I2.I3.I0 ave% &a ,th#de %oString)+. Inverse,ent0 #n 'e$t #(tenir $n #(Bet
I-Hddress . 'artir d'$ne %haCne I1.I2.I3.I0 ave% &a ,th#de stati-$e I-Hddress.-arse)&I1.I2.I3.I0&+. 5#nsidr#ns &e 'r#gra,,e s$ivant
-$i a++i%he &e n#, de &a ,a%hine s$r &a-$e&&e i& s'e/%$te '$is de +a@#n intera%tive d#nne &es %#rres'#ndan%es adresse IP _--` n#,
Ma%hine 4
dos>address1
Machine Locale=tahe
Machine recherche (fin pour arrter) : istia.univ-angers.fr
Machine : istia.univ-angers.fr
Adresses IP : 193.49.146.171
Machine recherche (fin pour arrter) : 193.49.146.171
Machine : istia.istia.univ-angers.fr
Adresses IP : 193.49.146.171
Alias : 171.146.49.193.in-addr.arpa
Machine recherche (fin pour arrter) : www.ibm.com
Machine : www.ibm.com
Adresses IP : 129.42.17.99,129.42.18.99,129.42.19.99,129.42.16.99
Machine recherche (fin pour arrter) : 129.42.17.99
Machine : www.ibm.com
Adresses IP : 129.42.17.99
Machine recherche (fin pour arrter) : x.y.z
Impossible de trouver la machine [x.y.z]
Machine recherche (fin pour arrter) : localhost
Machine : tahe
Adresses IP : 127.0.0.1
Machine recherche (fin pour arrter) : 127.0.0.1
Machine : tahe
Adresses IP : 127.0.0.1
Machine recherche (fin pour arrter) : tahe
Machine : tahe
Adresses IP : 127.0.0.1
Machine recherche (fin pour arrter) : fin
Le 'r#gra,,e est &e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Servi%es 1EB FLE
Imports System
Imports System.Net
Imports System.Text.RegularExpressions
' module de test
Public Module adresses
Sub Main()
' affiche le nom de la machine locale
' puis donne interactivement des infos sur les machines rseau
' identifies par un nom ou une adresse #,
' machine locale
Dim localHost As String = Dns.GetHostName()
Console.Out.WriteLine(("Machine Locale=" + localHost))
' $uestion-rponses interactives
Dim machine As String
Dim adresseMachine As IPHostEntry
While True
' saisie du nom de la machine recherche
Console.Out.Write("Machine recherche (fin pour arrter) : ")
machine = Console.In.ReadLine().Trim().ToLower()
' fini >
If machine = "fin" Then
Exit While
End If
' adresse #1?#2?#=?#S ou nom de machine >
Dim isIPV4 As Boolean = Regex.IsMatch(machine, "^\s*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s*$")
' gestion eception
Try
If isIPV4 Then
adresseMachine = Dns.GetHostByAddress(machine)
Else
adresseMachine = Dns.GetHostByName(machine)
End If
' le nom
Console.Out.WriteLine(("Machine : " + adresseMachine.HostName))
' les adresses #,
Console.Out.Write(("Adresses IP : " + adresseMachine.AddressList(0).ToString))
Dim i As Integer
For i = 1 To adresseMachine.AddressList.Length - 1
Console.Out.Write(("," + adresseMachine.AddressList(i).ToString))
Next i
Console.Out.WriteLine()
' les alias
If adresseMachine.Aliases.Length <> 0 Then
Console.Out.Write(("Alias : " + adresseMachine.Aliases(0)))
For i = 1 To adresseMachine.Aliases.Length - 1
Console.Out.Write(("," + adresseMachine.Aliases(i)))
Next i
Console.Out.WriteLine()
End If
Catch
' la machine n'eiste pas
Console.Out.WriteLine("Impossible de trouver la machine [" + machine + "]")
End Try
End While
End Sub
End Module
E.H Pr#gra,,ati#n T5P-IP
E.H.F Gnra&its
5#nsidr#ns &a %#,,$ni%ati#n entre de$/ ,a%hines distantes A et B 4
Servi%es 1EB FLL
Ma%hine A )ac9"$e *
P#rt PA P#rt PB
Rsea$
L#rs-$e $ne a''&i%ati#n HppH d'$ne ,a%hine A ve$t %#,,$ni-$er ave% $ne a''&i%ati#n HppP d'$ne ,a%hine B de &'Internet0 e&&e
d#it %#nnaCtre '&$sie$rs %h#ses 4
&'adresse IP #$ &e n#, de &a ,a%hine B
&e n$,r# d$ '#rt ave% &e-$e& travai&&e &'a''&i%ati#n HppP. En e++et &a ,a%hine B 'e$t s$''#rter de n#,(re$ses a''&i%ati#ns
-$i travai&&ent s$r &'Internet. L#rs-$'e&&e re@#it des in+#r,ati#ns 'r#venant d$ rsea$0 e&&e d#it sav#ir . -$e&&e a''&i%ati#n s#nt
destines %es in+#r,ati#ns. Les a''&i%ati#ns de &a ,a%hine B #nt a%%:s a$ rsea$ via des g$i%hets a''e&s ga&e,ent des '#rts
de %#,,$ni%ati#n. 5ette in+#r,ati#n est %#nten$e dans &e 'a-$et re@$ 'ar &a ,a%hine B a+in -$'i& s#it d&ivr . &a (#nne
a''&i%ati#n.
&es 'r#t#%#&es de %#,,$ni%ati#n %#,'ris 'ar &a ,a%hine B. Dans n#tre t$de0 n#$s $ti&iser#ns $ni-$e,ent &es 'r#t#%#&es
T5P-IP.
&e 'r#t#%#&e de dia&#g$e a%%e't 'ar &'a''&i%ati#n HppP. En e++et0 &es ,a%hines A et B v#nt se D'ar&erD. 5e -$'e&&es v#nt dire va
*tre en%a's$& dans &es 'r#t#%#&es T5P-IP. Nan,#ins0 &#rs-$'a$ (#$t de &a %haCne0 &'a''&i%ati#n HppP va re%ev#ir
&'in+#r,ati#n env#Ae 'ar &'a''&i%at#n HppH0 i& +a$t -$'e&&e s#it %a'a(&e de &'inter'rter. 5e%i est ana&#g$e . &a sit$ati#n #> de$/
'ers#nnes A et B %#,,$ni-$ent 'ar t&'h#ne 4 &e$r dia&#g$e est trans'#rt 'ar &e t&'h#ne. La 'ar#&e va *tre %#de s#$s
+#r,e de signa$/ 'ar &e t&'h#ne A0 trans'#rte 'ar des &ignes t&'h#ni-$es0 arriver a$ t&'h#ne B '#$r A *tre d%#de. La
'ers#nne B entend a&#rs des 'ar#&es. 5'est &. -$'intervient &a n#ti#n de 'r#t#%#&e de dia&#g$e 4 si A 'ar&e +ran@ais et -$e B ne
%#,'rend 'as %ette &ang$e0 A et B ne '#$rr#nt dia&#g$er $ti&e,ent.
A$ssi &es de$/ a''&i%ati#ns %#,,$ni%antes d#ivent -e&&es *tre d'a%%#rd s$r &e tA'e de dia&#g$e -$'e&&es v#nt ad#'ter. Par
e/e,'&e0 &e dia&#g$e ave% $n servi%e #tp n'est 'as &e ,*,e -$'ave% $n servi%e pop 4 %es de$/ servi%es n'a%%e'tent 'as &es ,*,es
%#,,andes. E&&es #nt $n 'r#t#%#&e de dia&#g$e di++rent.
E.H. Les %ara%tristi-$es d$ 'r#t#%#&e T5P
N#$s n't$dier#ns i%i -$e des %#,,$ni%ati#ns rsea$ $ti&isant &e 'r#t#%#&e de trans'#rt T5P. Ra''e&#ns i%i0 &es %ara%tristi-$es de
%e&$i-%i 4
Le 'r#%ess$s -$i s#$haite ,ettre ta(&it t#$t d'a(#rd $ne conne&ion ave% &e 'r#%ess$s destinataire des in+#r,ati#ns -$'i&
va ,ettre. 5ette %#nne/i#n se +ait entre $n '#rt de &a ,a%hine ,ettri%e et $n '#rt de &a ,a%hine r%e'tri%e. I& A a entre
&es de$/ '#rts $n %he,in virt$e& -$i est ainsi %r et -$i sera rserv a$/ de$/ se$&s 'r#%ess$s aAant ra&is &a %#nne/i#n.
T#$s &es 'a-$ets ,is 'ar &e 'r#%ess$s s#$r%e s$ivent %e %he,in virt$e& et arrivent dans &'#rdre #> i&s #nt t ,is
L'in+#r,ati#n ,ise a $n as'e%t %#ntin$. Le 'r#%ess$s ,ette$r env#ie des in+#r,ati#ns . s#n rAth,e. 5e&&es-%i ne s#nt
'as n%essaire,ent env#Aes t#$t de s$ite 4 &e 'r#t#%#&e T5P attend d'en av#ir asseQ '#$r &es env#Aer. E&&es s#nt st#%Res
dans $ne str$%t$re a''e&e segment %(-. 5e seg,ent $ne +#is re,'&i sera trans,is . &a %#$%he IP #> i& sera en%a's$& dans
$n 'a-$et IP.
5ha-$e seg,ent env#A 'ar &e 'r#t#%#&e T5P est n$,r#t. Le 'r#t#%#&e T5P destinataire vri+ie -$'i& re@#it (ien &es
seg,ents en s-$en%e. P#$r %ha-$e seg,ent %#rre%te,ent re@$0 i& env#ie $n a%%$s de r%e'ti#n . &'e/'dite$r.
L#rs-$e %e dernier &e re@#it0 i& &'indi-$e a$ 'r#%ess$s ,ette$r. 5e&$i-%i 'e$t d#n% sav#ir -$'$n seg,ent est arriv . (#n
'#rt.
Si a$ (#$t d'$n %ertain te,'s0 &e 'r#t#%#&e T5P aAant ,is $n seg,ent ne re@#it 'as d'a%%$s de r%e'ti#n0 i& retrans,et &e
seg,ent en -$esti#n0 garantissant ainsi &a -$a&it d$ servi%e d'a%he,ine,ent de &'in+#r,ati#n.
Le %ir%$it virt$e& ta(&i entre &es de$/ 'r#%ess$s -$i %#,,$ni-$ent est #ullVduplex 4 %e&a signi+ie -$e &'in+#r,ati#n 'e$t
transiter dans &es de$/ sens. Ainsi &e 'r#%ess$s destinati#n 'e$t env#Aer des a%%$ss de r%e'ti#n a&#rs ,*,e -$e &e
'r#%ess$s s#$r%e %#ntin$e d'env#Aer des in+#r,ati#ns. 5e&a 'er,et 'ar e/e,'&e a$ 'r#t#%#&e T5P s#$r%e d'env#Aer
'&$sie$rs seg,ents sans attendre d'a%%$s de r%e'ti#n. S'i& ra&ise a$ (#$t d'$n %ertain te,'s -$'i& n'a 'as re@$ &'a%%$s de
r%e'ti#n d'$n %ertain seg,ent nY n0 i& re'rendra &',issi#n des seg,ents . %e '#int.
E.H.H La re&ati#n %&ient-serve$r
S#$vent0 &a %#,,$ni%ati#n s$r Internet est dissA,tri-$e 4 &a ,a%hine A initie $ne %#nne/i#n '#$r de,ander $n servi%e . &a
,a%hine B 4 i& 'r%ise -$'i& ve$t #$vrir $ne %#nne/i#n ave% &e servi%e SBF de &a ,a%hine B. 5e&&e-%i a%%e'te #$ re+$se. Si e&&e a%%e'te0
&a ,a%hine A 'e$t env#Aer ses de,andes a$ servi%e SBF. 5e&&es-%i d#ivent se %#n+#r,er a$ 'r#t#%#&e de dia&#g$e %#,'ris 'ar &e
servi%e SBF. Un dia&#g$e de,ande-r'#nse s'insta$re ainsi entre &a ,a%hine A -$'#n a''e&&e ,a%hine cliente et &a ,a%hine B -$'#n
a''e&&e ,a%hine serveur. L'$n des de$/ 'artenaires +er,era &a %#nne/i#n.
E.H." Ar%hite%t$re d'$n %&ient
L'ar%hite%t$re d'$n 'r#gra,,e rsea$ de,andant &es servi%es d'$ne a''&i%ati#n serve$r sera &a s$ivante 4
ouvrir la connexion avec le service SB1 de la machine B
si russite alors
tant que ce n'est pas fini
prparer une demande
l'mettre vers la machine B
Servi%es 1EB !!
attendre et rcuprer la rponse
la traiter
fin tant que
finsi
E.H.I Ar%hite%t$re d'$n serve$r
L'ar%hite%t$re d'$n 'r#gra,,e #++rant des servi%es sera &a s$ivante 4
ouvrir le service sur la machine locale
tant que le service est ouvert
se mettre l'coute des demandes de connexion sur un port dit port d'coute
lorsqu'il y a une demande, la faire traiter par une autre tche sur un autre port dit port de service
fin tant que
Le 'r#gra,,e serve$r traite di++re,,ent &a de,ande de %#nne/i#n initia&e d'$n %&ient de ses de,andes $&trie$res visant . #(tenir
$n servi%e. Le 'r#gra,,e n'ass$re 'as &e servi%e &$i-,*,e. S'i& &e +aisait0 'endant &a d$re d$ servi%e i& ne serait '&$s . &'%#$te des
de,andes de %#nne/i#n et des %&ients ne seraient a&#rs 'as servis. I& 'r#%:de d#n% a$tre,ent 4 d:s -$'$ne de,ande de %#nne/i#n
est re@$e s$r &e '#rt d'%#$te '$is a%%e'te0 &e serve$r %re $ne th%he %harge de rendre &e servi%e de,and 'ar &e %&ient. 5e servi%e
est rend$ s$r $n a$tre '#rt de &a ,a%hine serve$r a''e& port de service. ;n 'e$t ainsi servir '&$sie$rs %&ients en ,*,e te,'s.
Une th%he de servi%e a$ra &a str$%t$re s$ivante 4
tant que le service n'a pas t rendu totalement
attendre une demande sur le port de service
lorsqu'il y en a une, laborer la rponse
transmettre la rponse via le port de service
fin tant que
librer le port de service
E.H.K La %&asse T%'5&ient
La %&asse Tcp=lient est &a %&asse -$i %#nvient '#$r re'rsenter &e %&ient d'$n servi%e T5P. E&&e est d+inie %#,,e s$it 4
Les %#nstr$%te$rs0 ,th#des et 'r#'rits -$i n#$s intressent s#nt &es s$ivants 4
Public Sub New(ByVal hostname
As String,ByVal port As
Integer)
%re $ne &iais#n t%' ave% &e serve$r #'rant s$r &e '#rt indi-$ <port= de &a ,a%hine indi-$e
<hostname=. Par e/e,'&e neI %cp(lient)&istia.uni!Vangers.#r&*>3+ '#$r se %#nne%ter a$ '#rt E! de &a
,a%hine istia.uni!Vangers.#r
Public Sub Close()
+er,e &a %#nne/i#n a$ serve$r T%'
Public Function GetStream() As
NetworkStream
#(tient $n +&$/ Net2orS.trea+ de &e%t$re et d'%rit$re vers &e serve$r. 5'est %e +&$/ -$i
'er,et &es %hanges %&ient-serve$r.
E.H.O La %&asse Net2#rRStrea,
La %&asse Net2orS.trea+ re'rsente &e +&$/ rsea$ entre &e %&ient et &e serve$r. La %&asse est d+inie %#,,e s$it 4
La %&asse @etIorOStream est drive de &a %&asse Stream. Bea$%#$' d'a''&i%ati#ns %&ient-serve$r %hangent des &ignes de te/te
ter,ines 'ar &es %ara%t:res de +in de &igne D^r^nD. A$ssi i& est intressant d'$ti&iser des #(Bets StreamReader et Stream6riter '#$r &ire
et %rire %es &ignes dans &e +&$/ rsea$. L#rs-$e de$/ ,a%hines %#,,$ni-$ent0 i& A a . %ha-$e (#$t de &a &iais#n $n #(Bet %cp(lient.
Servi%es 1EB !F
La ,th#de EetStream de %et #(Bet 'er,et d'av#ir a%%:s a$ +&$/ rsea$ <@etIorOStream= -$i &ie &es de$/ ,a%hines. Ainsi si $ne
,a%hine MF a ta(&i $ne &iais#n ave% $ne ,a%hine M . &'aide d'$n #(Bet T%'5&ient client1 -$'e&&es %hangent des &ignes de te/te0 e&&e
'#$rra %rer ses +&$/ de &e%t$re et %rit$re de &a +a@#n s$ivante 4
Dim in1 as StreamReader=new StreamReader(client1.GetStream())
Dim out1 as StreamWriter=new StreamWriter(client1.GetStream())
out1.AutoFlush=true
L'instr$%ti#n
out1.AutoFlush=true
signi+ie -$e &e +&$/ d'%rit$re de client1 ne transitera 'as 'ar $n ($++er inter,diaire ,ais ira dire%te,ent s$r &e rsea$. 5e '#int est
i,'#rtant. En gnra& &#rs-$e client1 env#ie $ne &igne de te/te . s#n 'artenaire i& en attend $ne r'#nse. 5e&&e-%i ne viendra Ba,ais si
&a &igne a t en ra&it ($++erise s$r &a ,a%hine MF et Ba,ais env#Ae. P#$r env#Aer $ne &igne de te/te . &a ,a%hine M0 #n %rira 4
client1.WriteLine("un texte")
P#$r &ire &a r'#nse de M0 #n %rira 4
Dim rponse as String=client1.ReadLine()
E.H.E Ar%hite%t$re de (ase d'$n %&ient internet
N#$s av#ns ,aintenant &es &,ents '#$r %rire &'ar%hite%t$re de (ase d'$n %&ient internet 4
Dim client As TcpClient = Nothing ' le client
Dim [IN] As StreamReader = Nothing ' le flu de lecture du client
Dim OUT As StreamWriter = Nothing ' le flu d'criture du client
Dim demande As String = Nothing ' demande du client
Dim rponse As String = Nothing ' rponse du serveur
Try
' on se connecte au service officiant sur le port , de la machine ;
client = New TcpClient(nomServeur, port)
' on cre les flu d'entre-sortie du client 3%,
[IN] = New StreamReader(client.GetStream())
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
' boucle demande - rponse
While True
' on prpare la demande
demande = ...
' on l'envoie au serveur
OUT.WriteLine(demande)
' on lit la rponse du serveur
rponse = [IN].ReadLine()
' on traite la rponse
...
End While
' c'est fini
client.Close()
Catch ex As Exception
' on gre l'eception
...
End Try
E.H.L La %&asse T%'Listener
La %&asse Tcp5istener est &a %&asse -$i %#nvient '#$r re'rsenter $n servi%e T5P. E&&e est d+inie %#,,e s$it 4
Les %#nstr$%te$rs0 ,th#des et 'r#'rits -$i n#$s intressent s#nt &es s$ivants 4
Public Sub New(ByVal localaddr As
IPAddress,ByVal port As Integer)
%re $n servi%e T5P -$i va attendre <listen= &es de,andes des %&ients s$r $n '#rt 'ass
en 'ara,:tre <port= a''e& '#rt d'%#$te de &a ,a%hine &#%a&e d'adresse IP &#%a&adr.
Servi%es 1EB !
Public Function AcceptTcpClient()
As TcpClient
a%%e'te &a de,ande d'$n %&ient. Rend %#,,e rs$&tat $n #(Bet %cp(lient ass#%i . $n
a$tre '#rt0 a''e& '#rt de servi%e.
Public Sub Start()
&an%e &'%#$te des de,andes %&ients
Public Sub Stop()
arr*te d'%#$ter &es de,andes %&ients
E.H.F! Ar%hite%t$re de (ase d'$n serve$r Internet
De %e -$i a t v$ 'r%de,,ent0 #n 'e$t dd$ire &a str$%t$re de (ase d'$n serve$r 4
' on cre le servive d'coute
Dim ecoute As TcpListener = Nothing
Dim port As Integer = ...
Try
' on cre le service
ecoute = New TcpListener(IPAddress.Parse("127.0.0.1"), port)
' on le lance
ecoute.Start()
' boucle de service
Dim liaisonClient As TcpClient = Nothing
While not fini
' attente d'un client
liaisonClient = ecoute.AcceptTcpClient()
' le service est assur par une autre t:che
Dim tache As Thread = New Thread(New ThreadStart(AddressOf [mthode]))
tache.Start()
End While
Catch ex As Exception
' on signale l'erreur
????
End Try
' fin du service
ecoute.Stop()
La %&asse Ser!ice est $n thread -$i '#$rrait av#ir &'a&&$re s$ivante 4
Public Class Service
Private liaisonClient As TcpClient ' liaison avec le client
Private [IN] As StreamReader ' flu d'entre
Private OUT As StreamWriter ' flu de sortie
' constructeur
Public Sub New(ByVal liaisonClient As TcpClient, ...)
Me.liaisonClient = liaisonClient
...
End Sub
' mthode run
Public Sub Run()
' rend le service au client
Try
' flu d'entre
[IN] = New StreamReader(liaisonClient.GetStream())
' flu de sortie
OUT = New StreamWriter(liaisonClient.GetStream())
OUT.AutoFlush = True
' boucle lecture demandeTcriture rponse
Dim demande As String = Nothing
Dim reponse As String = Nothing
demande = [IN].ReadLine
While Not (demande Is Nothing)
' on traite la demande
...
' on envoie la rponse
reponse = "[" + demande + "]"
OUT.WriteLine(reponse)
' demande suivante
demande = [IN].ReadLine
End While
' fin liaison
liaisonClient.Close()
Catch e As Exception
...
End Try
' fin du service
End Sub
Servi%es 1EB !H
E." E/e,'&es
E.".F Serve$r d'%h#
N#$s n#$s 'r#'#s#ns d'%rire $n serve$r d'%h# -$i sera &an% de'$is $ne +en*tre D;S 'ar &a %#,,ande 4
serveurEc-o port
Le serve$r #++i%ie s$r &e '#rt 'ass en 'ara,:tre. I& se %#ntente de renv#Aer a$ %&ient &a de,ande -$e %e&$i-%i &$i a env#Ae. Le
'r#gra,,e est &e s$ivant 4
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System.Net.Sockets
Imports System.Net
Imports System
Imports System.IO
Imports System.Threading
Imports Microsoft.VisualBasic
' appel C serveur"cho port
' serveur d'cho
' renvoie au client la ligne $ue celui-ci lui a envo(e
Public Class serveurEcho
Private Shared syntaxe As String = "Syntaxe : serveurEcho port"
' programme principal
Public Shared Sub Main(ByVal args() As String)
' (-a-t-il un argument
If args.Length <> 1 Then
erreur(syntaxe, 1)
End If
' cet argument doit <tre entier >L
Dim port As Integer = 0
Dim erreurPort As Boolean = False
Dim E As Exception = Nothing
Try
port = Integer.Parse(args(0))
Catch ex As Exception
E = ex
erreurPort = True
End Try
erreurPort = erreurPort Or port <= 0
If erreurPort Then
erreur(syntaxe + ControlChars.Lf + "Port incorrect (" + E.ToString + ")", 2)
End If
' on cre le servive d'coute
Dim ecoute As TcpListener = Nothing
Dim nbClients As Integer = 0 ' nbre de clients traits
Try
' on cre le service
ecoute = New TcpListener(IPAddress.Parse("127.0.0.1"), port)
' on le lance
ecoute.Start()
' suivi
Console.Out.WriteLine(("Serveur d'cho lanc sur le port " & port))
Console.Out.WriteLine(ecoute.LocalEndpoint)
' boucle de service
Dim liaisonClient As TcpClient = Nothing
While True
' boucle infinie - sera arr<te par %trl-%
' attente d'un client
liaisonClient = ecoute.AcceptTcpClient()
' le service est assur par une autre t:che
nbClients += 1
Dim tache As Thread = New Thread(New ThreadStart(AddressOf New traiteClientEcho(liaisonClient,
nbClients).Run))
tache.Start()
End While
' on retourne l'coute des demandes
Servi%es 1EB !"
Catch ex As Exception
' on signale l'erreur
erreur("L'erreur suivante s'est produite : " + ex.Message, 3)
End Try
' fin du service
ecoute.Stop()
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
' -------------------------------------------------------
' assure le service un client du serveur d'cho
Public Class traiteClientEcho
Private liaisonClient As TcpClient ' liaison avec le client
Private numClient As Integer ' n de client
Private [IN] As StreamReader ' flu d'entre
Private OUT As StreamWriter ' flu de sortie
' constructeur
Public Sub New(ByVal liaisonClient As TcpClient, ByVal numClient As Integer)
Me.liaisonClient = liaisonClient
Me.numClient = numClient
End Sub
' mthode run
Public Sub Run()
' rend le service au client
Console.Out.WriteLine(("Dbut de service au client " & numClient))
Try
' flu d'entre
[IN] = New StreamReader(liaisonClient.GetStream())
' flu de sortie
OUT = New StreamWriter(liaisonClient.GetStream())
OUT.AutoFlush = True
' boucle lecture demandeTcriture rponse
Dim demande As String = Nothing
Dim reponse As String = Nothing
demande = [IN].ReadLine
While Not (demande Is Nothing)
' suivi
Console.Out.WriteLine(("Client " & numClient & " : " & demande))
' le service s'arr<te lors$ue le client envoie une mar$ue de fin de fichier
reponse = "[" + demande + "]"
OUT.WriteLine(reponse)
' le service s'arr<te lors$ue le client envoie DfinD
If demande.Trim().ToLower() = "fin" Then
Exit While
End If
' demande suivante
demande = [IN].ReadLine
End While
' fin liaison
liaisonClient.Close()
Catch e As Exception
erreur("Erreur lors de la fermeture de la liaison client (" + e.ToString + ")", 2)
End Try
' fin du service
Console.Out.WriteLine(("Fin de service au client " & numClient))
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
La str$%t$re d$ serve$r est %#n+#r,e . &'ar%hite%t$re gnra&e des serve$rs t%'.
Servi%es 1EB !I
E.". Un %&ient '#$r &e serve$r d'%h#
N#$s %riv#ns ,aintenant $n %&ient '#$r &e serve$r 'r%dent. I& sera a''e& de &a +a@#n s$ivante 4
clientEc-o no+.erveur port
I& se %#nne%te . &a ,a%hine nomSer!eur s$r &e '#rt port '$is env#ie a$ serve$r des &ignes de te/te -$e %e&$i-%i &$i renv#ie en %h#.
' options
Option Explicit On
Option Strict On
' espaces de noms
Imports System.Net.Sockets
Imports System.Net
Imports System
Imports System.IO
Imports System.Threading
Imports Microsoft.VisualBasic
Public Class clientEcho
' se connecte un serveur d'cho
' toute ligne tape au clavier est alors rePue en cho
Public Shared Sub Main(ByVal args() As String)
' s(ntae
Const syntaxe As String = "pg machine port"
' nombre d'arguments
If args.Length <> 2 Then
erreur(syntaxe, 1)
End If
' on note le nom du serveur
Dim nomServeur As String = args(0)
' le port doit <tre entier >L
Dim port As Integer = 0
Dim erreurPort As Boolean = False
Dim E As Exception = Nothing
Try
port = Integer.Parse(args(1))
Catch ex As Exception
E = ex
erreurPort = True
End Try
erreurPort = erreurPort Or port <= 0
If erreurPort Then
erreur(syntaxe + ControlChars.Lf + "Port incorrect (" + E.ToString + ")", 2)
End If
' on peut travailler
Dim client As TcpClient = Nothing ' le client
Dim [IN] As StreamReader = Nothing ' le flu de lecture du client
Dim OUT As StreamWriter = Nothing ' le flu d'criture du client
Dim demande As String = Nothing ' demande du client
Dim rponse As String = Nothing ' rponse du serveur
Try
' on se connecte au service officiant sur le port , de la machine ;
client = New TcpClient(nomServeur, port)
' on cre les flu d'entre-sortie du client 3%,
[IN] = New StreamReader(client.GetStream())
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
' boucle demande - rponse
While True
' la demande vient du clavier
Console.Out.Write("demande (fin pour arrter) : ")
demande = Console.In.ReadLine()
' on l'envoie au serveur
OUT.WriteLine(demande)
' on lit la rponse du serveur
rponse = [IN].ReadLine()
' on traite la rponse
Console.Out.WriteLine(("Rponse : " + rponse))
' fini >
If demande.Trim().ToLower() = "fin" Then
Servi%es 1EB !K
Exit While
End If
End While
' c'est fini
client.Close()
Catch ex As Exception
' on gre l'eception
erreur(ex.Message, 3)
End Try
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
La str$%t$re de %e %&ient est %#n+#r,e . &'ar%hite%t$re gnra&e des %&ients tcp.V#i%i &es rs$&tats #(ten$s dans &a %#n+ig$rati#n
s$ivante 4
&e serve$r est &an% s$r &e '#rt F!! dans $ne +en*tre D#s
s$r &a ,*,e ,a%hine de$/ %&ients s#nt &an%s dans de$/ a$tres +en*tres D#s
Dans &a +en*tre d$ %&ient F #n a &es rs$&tats s$ivants 4
dos>clientEcho localhost 100
demande (fin pour arrter) : ligne1
Rponse : [ligne1]
demande (fin pour arrter) : ligne1B
Rponse : [ligne1B]
demande (fin pour arrter) : ligne1C
Rponse : [ligne1C]
demande (fin pour arrter) : fin
Rponse : [fin]
Dans %e&&e d$ %&ient 4
dos>clientEcho localhost 100
demande (fin pour arrter) : ligne2A
Rponse : [ligne2A]
demande (fin pour arrter) : ligne2B
Rponse : [ligne2B]
demande (fin pour arrter) : fin
Rponse : [fin]
Dans %e&&e d$ serve$r 4
dos>serveurEcho 100
Serveur d'cho lanc sur le port 100
0.0.0.0:100
Dbut de service au client 1
Client 1 : ligne1
Dbut de service au client 2
Client 2 : ligne2A
Client 2 : ligne2B
Client 1 : ligne1B
Client 1 : ligne1C
Client 2 : fin
Fin de service au client 2
Client 1 : fin
Fin de service au client 1
^C
;n re,ar-$era -$e &e serve$r a (ien t %a'a(&e de servir de$/ %&ients si,$&tan,ent.
E.".H Un %&ient T5P gnri-$e
Bea$%#$' de servi%es %rs . &'#rigine de &'Internet +#n%ti#nnent se&#n &e ,#d:&e d$ serve$r d'%h# t$di 'r%de,,ent 4 &es
%hanges %&ient-serve$r se +#nt 'as %hanges de &ignes de te/te. N#$s a&&#ns %rire $n %&ient t%' gnri-$e -$i sera &an% de &a +a@#n
s$ivante 4 cltgen serveur port
5e %&ient T5P se %#nne%tera s$r &e '#rt port d$ serve$r ser!eur. 5e%i +ait0 i& %rera de$/ threads 4
F. $n thread %harg de &ire des %#,,andes ta'es a$ %&avier et de &es env#Aer a$ serve$r
Servi%es 1EB !O
. $n thread %harg de &ire &es r'#nses d$ serve$r et de &es a++i%her . &'%ran
P#$r-$#i de$/ threads a&#rs -$e dans &'a''&i%ati#n 'r%dente %e (es#in ne s'tait 'as +ait ressentir X Dans %ette derni:re0 &e
'r#t#%#&e d$ dia&#g$e tait %#nn$ 4 &e %&ient env#Aait $ne se$&e &igne et &e serve$r r'#ndait 'ar $ne se$&e &igne. 5ha-$e servi%e a
s#n 'r#t#%#&e 'arti%$&ier et #n tr#$ve ga&e,ent &es sit$ati#ns s$ivantes 4
&e %&ient d#it env#Aer '&$sie$rs &ignes de te/te avant d'av#ir $ne r'#nse
&a r'#nse d'$n serve$r 'e$t %#,'#rter '&$sie$rs &ignes de te/te
A$ssi &a (#$%&e env#i d'$ne $ni-$e &igne a$ seve$r - r%e'ti#n d'$ne $ni-$e &igne env#Ae 'ar &e serve$r ne %#nvient-e&&e 'as
t#$B#$rs. ;n va d#n% %rer de$/ (#$%&es diss#%ies 4
$ne (#$%&e de &e%t$re des %#,,andes ta'es a$ %&avier '#$r *tre env#Aes a$ serve$r. L'$ti&isate$r signa&era &a +in des
%#,,andes ave% &e ,#t %& #in.
$ne (#$%&e de r%e'ti#n et d'a++i%hage des r'#nses d$ serve$r. 5e&&e-%i sera $ne (#$%&e in+inie -$i ne sera interr#,'$e
-$e 'ar &a +er,et$re d$ +&$/ rsea$ 'ar &e serve$r #$ 'ar &'$ti&isate$r a$ %&avier -$i ta'era &a %#,,ande #in.
P#$r av#ir %es de$/ (#$%&es diss#%ies0 i& n#$s +a$t de$/ threads ind'endants. M#ntr#ns $n e/e,'&e d'e/%%$ti#n #> n#tre %&ient
t%' gnri-$e se %#nne%te . $n servi%e SMTP <SendMai& Trans+er Pr#t#%#&=. 5e servi%e est res'#nsa(&e de &'a%he,ine,ent d$
%#$rrier &e%tr#ni-$e a$/ destinataires. I& +#n%ti#nne s$r &e '#rt I et a $n 'r#t#%#&e de dia&#g$e de tA'e %hanges de &ignes de
te/te.
dos>cltgen istia.univ-angers.fr 25
Commandes :
<-- 220 istia.univ-angers.fr ESMTP Sendmail 8.11.6/8.9.3; Mon, 13 May 2002 08:37:26 +0200
help
<-- 502 5.3.0 Sendmail 8.11.6 -- HELP not implemented
mail from: machin@univ-angers.fr
<-- 250 2.1.0 machin@univ-angers.fr... Sender ok
rcpt to: serge.tahe@istia.univ-angers.fr
<-- 250 2.1.5 serge.tahe@istia.univ-angers.fr... Recipient ok
data
<-- 354 Enter mail, end with "." on a line by itself
Subject: test
ligne1
ligne2
ligne3
.
<-- 250 2.0.0 g4D6bks25951 Message accepted for delivery
quit
<-- 221 2.0.0 istia.univ-angers.fr closing connection
[fin du thread de lecture des rponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]
5#,,ent#ns %es %hanges %&ient-serve$r 4
&e servi%e SMTP env#ie $n ,essage de (ienven$e &#rs-$'$n %&ient se %#nne%te . &$i 4
<-- 220 istia.univ-angers.fr ESMTP Sendmail 8.11.6/8.9.3; Mon, 13 May 2002 08:37:26 +0200
%ertains servi%es #nt $ne %#,,ande help d#nnant des indi%ati#ns s$r &es %#,,andes $ti&isa(&es ave% &e servi%e. I%i %e n'est
'as &e %as. Les %#,,andes SMTP $ti&ises dans &'e/e,'&e s#nt &es s$ivantes 4
o +ail fro+W expditeur0 '#$r indi-$er &'adresse &e%tr#ni-$e de &'e/'dite$r d$ ,essage
o rcpt toW destinataire0 '#$r indi-$er &'adresse &e%tr#ni-$e d$ destinataire d$ ,essage. S'i& A a '&$sie$rs destinataires0
#n r-,et a$tant de +#is -$e n%essaire &a %#,,ande rcpt toW '#$r %ha%$n des destinataires.
o data -$i signa&e a$ serve$r SMTP -$'#n va env#Aer &e ,essage. 5#,,e indi-$ dans &a r'#nse d$ serve$r0
%e&$i-%i est $ne s$ite de &ignes ter,ine 'ar $ne &igne %#ntenant &e se$& %ara%t:re '#int. Un ,essage 'e$t av#ir
des ent*tes s'ars d$ %#r's d$ ,essage 'ar $ne &igne vide. Dans n#tre e/e,'&e0 n#$s av#ns ,is $n s$Bet ave% &e
,#t %& .ubCectW
$ne +#is &e ,essage env#A0 #n 'e$t indi-$er a$ serve$r -$'#n a ter,in ave% &a %#,,ande quit. Le serve$r +er,e a&#rs &a
%#nne/i#n rsea$.Le thread de &e%t$re 'e$t dte%ter %et vne,ent et s'arr*ter.
&'$ti&isate$r ta'e a&#rs fin a$ %&avier '#$r arr*ter ga&e,ent &e thread de &e%t$re des %#,,andes ta'es a$ %&avier.
Si #n vri+ie &e %#$rrier re@$0 n#$s av#ns &a %h#se s$ivante <;$t&##R= 4
Servi%es 1EB !E
;n re,ar-$era -$e &e servi%e SMTP ne 'e$t dte%ter si $n e/'dite$r est va&ide #$ n#n. A$ssi ne 'e$t-#n Ba,ais +aire %#n+ian%e a$
%ha,' #rom d'$n ,essage. I%i &'e/'dite$r machin]uni!Vangers.#r n'e/istait 'as. 5e %&ient t%' gnri-$e 'e$t n#$s 'er,ettre de
d%#$vrir &e 'r#t#%#&e de dia&#g$e de servi%es internet et . 'artir de &. %#nstr$ire des %&asses s'%ia&ises '#$r des %&ients de %es
servi%es. D%#$vr#ns &e 'r#t#%#&e de dia&#g$e d$ servi%e P;P <P#st ;++i%e Pr#t#%#&= -$i 'er,et de retr#$ver ses ,&s st#%Rs s$r
$n serve$r. I& travai&&e s$r &e '#rt FF!.
dos>cltgen istia.univ-angers.fr 110
Commandes :
<-- +OK Qpopper (version 4.0.3) at istia.univ-angers.fr starting.
help
<-- -ERR Unknown command: "help".
user st
<-- +OK Password required for st.
pass monpassword
<-- +OK st has 157 visible messages (0 hidden) in 11755927 octets.
list
<-- +OK 157 visible messages (11755927 octets)
<-- 1 892847
<-- 2 171661
...
<-- 156 2843
<-- 157 2796
<-- .
retr 157
<-- +OK 2796 octets
<-- Received: from lagaffe.univ-angers.fr (lagaffe.univ-angers.fr [193.49.144.1])
<-- by istia.univ-angers.fr (8.11.6/8.9.3) with ESMTP id g4D6wZs26600;
<-- Mon, 13 May 2002 08:58:35 +0200
<-- Received: from jaume ([193.49.146.242])
<-- by lagaffe.univ-angers.fr (8.11.1/8.11.2/GeO20000215) with SMTP id g4D6wSd37691;
<-- Mon, 13 May 2002 08:58:28 +0200 (CEST)
...
<-- ------------------------------------------------------------------------
<-- NOC-RENATER2 Tl. : 0800 77 47 95
<-- Fax : (+33) 01 40 78 64 00 , Email : noc-r2@cssi.renater.fr
<-- ------------------------------------------------------------------------
<--
<-- .
quit
<-- +OK Pop server at istia.univ-angers.fr signing off.
[fin du thread de lecture des rponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]
Les 'rin%i'a&es %#,,andes s#nt &es s$ivantes 4
user login0 #> #n d#nne s#n &#gin s$r &a ,a%hine -$i dtient n#s ,&s
pass passIord0 #> #n d#nne &e ,#t de 'asse ass#%i a$ &#gin 'r%dent
list0 '#$r av#ir &a &iste des ,essages s#$s &a +#r,e n$,r#0 tai&&e en #%tets
retr i0 '#$r &ire &e ,essage nY i
quit0 '#$r arr*ter &e dia&#g$e.
D%#$vr#ns ,aintenant &e 'r#t#%#&e de dia&#g$e entre $n %&ient et $n serve$r 1e( -$i &$i travai&&e ha(it$e&&e,ent s$r &e '#rt E! 4
dos>cltgen istia.univ-angers.fr 80
Commandes :
GET /index.html HTTP/1.0
<-- HTTP/1.1 200 OK
<-- Date: Mon, 13 May 2002 07:30:58 GMT
<-- Server: Apache/1.3.12 (Unix) (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21
<-- Last-Modified: Wed, 06 Feb 2002 09:00:58 GMT
<-- ETag: "23432-2bf3-3c60f0ca"
<-- Accept-Ranges: bytes
<-- Content-Length: 11251
Servi%es 1EB !L
<-- Connection: close
<-- Content-Type: text/html
<--
<-- <html>
<--
<-- <head>
<-- <meta http-equiv="Content-Type"
<-- content="text/html; charset=iso-8859-1">
<-- <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<-- <title>Bienvenue a l'ISTIA - Universite d'Angers</title>
<-- </head>
....
<-- face="Verdana"> - Dernire mise jour le <b>10 janvier 2002</b></font></p>
<-- </body>
<-- </html>
<--
[fin du thread de lecture des rponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]
Un %&ient 1e( env#ie ses %#,,andes a$ serve$r se&#n &e s%h,a s$ivant 4
commande1
commande2
...
commanden
2ligne !ide
5e n'est -$'a'r:s av#ir re@$ &a &igne vide -$e &e serve$r 1e( r'#nd. Dans &'e/e,'&e n#$s n'av#ns $ti&is -$'$ne %#,,ande 4
GET /index.html HTTP/1.0
-$i de,ande a$ serve$r &'URL Dinde&.-t+l et indi-$e -$'i& travai&&e ave% &e 'r#t#%#&e eTTP versi#n F.!. La versi#n &a '&$s r%ente
de %e 'r#t#%#&e est F.F. L'e/e,'&e ,#ntre -$e &e serve$r a r'#nd$ en renv#Aant &e %#nten$ d$ +i%hier index.html '$is -$'i& a +er,
&a %#nne/i#n '$is-$'#n v#it &e thread de &e%t$re des r'#nses se ter,iner. Avant d'env#Aer &e %#nten$ d$ +i%hier index.html0 &e
serve$r 2e( a env#A $ne srie d'ent*tes ter,ine 'ar $ne &igne vide 4
<-- HTTP/1.1 200 OK
<-- Date: Mon, 13 May 2002 07:30:58 GMT
<-- Server: Apache/1.3.12 (Unix) (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21
<-- Last-Modified: Wed, 06 Feb 2002 09:00:58 GMT
<-- ETag: "23432-2bf3-3c60f0ca"
<-- Accept-Ranges: bytes
<-- Content-Length: 11251
<-- Connection: close
<-- Content-Type: text/html
<--
<-- <html>
La &igne Chtml\ est &a 're,i:re &igne d$ +i%hier /index.html. 5e -$i 'r%:de s'a''e&&e des ent*tes eTTP <eA'erTe/t Trans+er
Pr#t#%#&=. N#$s n'a&&#ns 'as dtai&&er i%i %es ent*tes ,ais #n se ra''e&&era -$e n#tre %&ient gnri-$e A d#nne a%%:s0 %e -$i 'e$t *tre
$ti&e '#$r &es %#,'rendre. La 're,i:re &igne 'ar e/e,'&e 4
<-- HTTP/1.1 200 OK
indi-$e -$e &e serve$r 1e( %#nta%t %#,'rend &e 'r#t#%#&e eTTPNF.F et -$'i& a (ien tr#$v &e +i%hier de,and <!! ;d=0 !!
tant $n %#de de r'#nse eTTP. Les &ignes
200 Content0'engt*) 112-1
200 Connection) close
200 Content0ype) text+*tml
disent a$ %&ient -$'i& va re%ev#ir FFIF #%tets re'rsentant d$ te/te eTML <eA'erTe/t MarR$' Lang$age= et -$'. &a +in de &'env#i0
&a %#nne/i#n sera +er,e. ;n a d#n% &. $n %&ient t%' tr:s 'rati-$e. En +ait0 %e %&ient e/iste dB. s$r &es ,a%hines #> i& s'a''e&&e telnet
,ais i& tait intressant de &'%rire n#$s-,*,es. Le 'r#gra,,e d$ %&ient t%' gnri-$e est &e s$ivant 4
' espaces de noms
Imports System
Imports System.Net.Sockets
Imports System.IO
Imports System.Threading
Imports Microsoft.VisualBasic
' la classe
Public Class clientTcpGnrique
Servi%es 1EB F!


' rePoit en paramtre les caractristi$ues d'un service sous la forme
' serveur port
' se connecte au service
' cre un thread pour lire des commandes tapes au clavier
' celles-ci seront envo(es au serveur
' cre un thread pour lire les rponses du serveur
' celles-ci seront affiches l'cran
' le tout se termine avec la commande fin tape au clavier
Public Shared Sub Main(ByVal args() As String)
' s(ntae
Const syntaxe As String = "pg serveur port"
' nombre d'arguments
If args.Length <> 2 Then
erreur(syntaxe, 1)
End If
' on note le nom du serveur
Dim serveur As String = args(0)
' le port doit <tre entier >L
Dim port As Integer = 0
Dim erreurPort As Boolean = False
Dim E As Exception = Nothing
Try
port = Integer.Parse(args(1))
Catch ex As Exception
E = ex
erreurPort = True
End Try
erreurPort = erreurPort Or port <= 0
If erreurPort Then
erreur(syntaxe + ControlChars.Lf + "Port incorrect (" + E.ToString + ")", 2)
End If
Dim client As TcpClient = Nothing
' il peut ( avoir des problmes
Try
' on se connecte au service
client = New TcpClient(serveur, port)
Catch ex As Exception
' erreur
Console.Error.WriteLine(("Impossible de se connecter au service (" & serveur & "," & port & "),
erreur : " & ex.Message))
' fin
Return
End Try
' on cre les threads de lectureTcriture
Dim thReceive As New Thread(New ThreadStart(AddressOf New clientReceive(client).Run))
Dim thSend As New Thread(New ThreadStart(AddressOf New clientSend(client).Run))
' on lance l'ecution des deu threads
thSend.Start()
thReceive.Start()
' fin du thread principal
Return
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
Public Class clientSend
' classe charge de lire des commandes tapes au clavier
' et de les envo(er un serveur via un client tcp pass au constructeur
Private client As TcpClient ' le client tcp
' constructeur
Public Sub New(ByVal client As TcpClient)
' on note le client tcp
Me.client = client
End Sub
' mthode Aun du thread
Servi%es 1EB FF
Public Sub Run()
' donnes locales
Dim OUT As StreamWriter = Nothing ' flu d'criture rseau
Dim commande As String = Nothing ' commande lue au clavier
' gestion des erreurs
Try
' cration du flu d'criture rseau
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
' boucle saisie-envoi des commandes
Console.Out.WriteLine("Commandes : ")
While True
' lecture commande tape au clavier
commande = Console.In.ReadLine().Trim()
' fini >
If commande.ToLower() = "fin" Then
Exit While
End If
' envoi commande au serveur
OUT.WriteLine(commande)
End While
Catch ex As Exception
' erreur
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
End Try
' fin - on ferme les flu
Try
OUT.Close()
client.Close()
Catch
End Try
' on signale la fin du thread
Console.Out.WriteLine("[fin du thread d'envoi des commandes au serveur]")
End Sub
End Class
Public Class clientReceive
' classe charge de lire les lignes de tete destines un
' client tcp pass au constructeur
Private client As TcpClient ' le client tcp
' constructeur
Public Sub New(ByVal client As TcpClient)
' on note le client tcp
Me.client = client
End Sub
'constructeur
' mthode Aun du thread
Public Sub Run()
' donnes locales
Dim [IN] As StreamReader = Nothing ' flu lecture rseau
Dim rponse As String = Nothing ' rponse serveur
' gestion des erreurs
Try
' cration du flu lecture rseau
[IN] = New StreamReader(client.GetStream())
' boucle lecture lignes de tete du flu #4
While True
' lecture flu rseau
rponse = [IN].ReadLine()
' flu ferm >
If rponse Is Nothing Then
Exit While
End If
' affichage
Console.Out.WriteLine(("<-- " + rponse))
End While
Catch ex As Exception
' erreur
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
End Try
' fin - on ferme les flu
Try
[IN].Close()
client.Close()
Catch
End Try
Servi%es 1EB F
' on signale la fin du thread
Console.Out.WriteLine("[fin du thread de lecture des rponses du serveur]")
End Sub
End Class
E."." Un serve$r T%' gnri-$e
Maintenant n#$s n#$s intress#ns . $n serve$r
-$i a++i%he . &'%ran &es %#,,andes env#Aes 'ar ses %&ients
&e$r env#ie %#,,e r'#nse &es &ignes de te/te ta'es a$ %&avier 'ar $n $ti&isate$r. 5'est d#n% %e dernier -$i +ait #++i%e de
serve$r.
Le 'r#gra,,e est &an% 'ar 4 srvgen portEcoute0 #> port7coute est &e '#rt s$r &e-$e& &es %&ients d#ivent se %#nne%ter. Le servi%e a$
%&ient sera ass$r 'ar de$/ threads 4
$n thread se %#nsa%rant e/%&$sive,ent . &a &e%t$re des &ignes de te/te env#Aes 'ar &e %&ient
$n thread se %#nsa%rant e/%&$sive,ent . &a &e%t$re des r'#nses ta'es a$ %&avier 'ar &'$ti&isate$r. 5e&$i-%i signa&era 'ar &a
%#,,ande fin -$'i& %&[t &a %#nne/i#n ave% &e %&ient.
Le serve$r %re de$/ threads 'ar %&ient. S'i& A a n %&ients0 i& A a$ra n threads a%ti+s en ,*,e te,'s. Le serve$r &$i ne s'arr*te Ba,ais
sa$+ 'ar $n 5tr&-5 ta' a$ %&avier 'ar &'$ti&isate$r. V#A#ns -$e&-$es e/e,'&es.
Le serve$r est &an% s$r &e '#rt F!! et #n $ti&ise &e %&ient gnri-$e '#$r &$i 'ar&er. La +en*tre d$ %&ient est &a s$ivante 4
dos>cltgen localhost 100
Commandes :
commande 1 du client 1
<-- rponse 1 au client 1
commande 2 du client 1
<-- rponse 2 au client 1
fin
L'erreur suivante s'est produite : Impossible de lire les donnes de la connexion de transport.
[fin du thread de lecture des rponses du serveur]
[fin du thread d'envoi des commandes au serveur]
Les &ignes %#,,en@ant 'ar _-- s#nt %e&&es env#Aes d$ serve$r a$ %&ient0 &es a$tres %e&&es d$ %&ient vers &e serve$r. La +en*tre d$
serve$r est &a s$ivante 4
dos>srvgen 100
Serveur gnrique lanc sur le port 100
Thread de lecture des rponses du serveur au client 1 lanc
1 : Thread de lecture des demandes du client 1 lanc
<-- commande 1 du client 1
rponse 1 au client 1
1 : <-- commande 2 du client 1
rponse 2 au client 1
1 : [fin du Thread de lecture des demandes du client 1]
fin
[fin du Thread de lecture des rponses du serveur au client 1]
Les &ignes %#,,en@ant 'ar _-- s#nt %e&&es env#Aes d$ %&ient a$ serve$r. Les &ignes @ : s#nt &es &ignes env#Aes d$ serve$r a$ %&ient
nY N. Le serve$r %i-dess$s est en%#re a%ti+ a&#rs -$e &e %&ient F est ter,in. ;n &an%e $n se%#nd %&ient '#$r &e ,*,e serve$r 4
dos>cltgen localhost 100
Commandes :
commande 3 du client 2
<-- rponse 3 au client 2
fin
L'erreur suivante s'est produite : Impossible de lire les donnes de la connexion de transport.
[fin du thread de lecture des rponses du serveur]
[fin du thread d'envoi des commandes au serveur]
La +en*tre d$ serve$r est a&#rs %e&&e-%i 4
dos>srvgen 100
Serveur gnrique lanc sur le port 100
Thread de lecture des rponses du serveur au client 1 lanc
1 : Thread de lecture des demandes du client 1 lanc
<-- commande 1 du client 1
rponse 1 au client 1
1 : <-- commande 2 du client 1
rponse 2 au client 1
1 : [fin du Thread de lecture des demandes du client 1]
fin
[fin du Thread de lecture des rponses du serveur au client 1]
Servi%es 1EB FH
Thread de lecture des rponses du serveur au client 2 lanc
2 : Thread de lecture des demandes du client 2 lanc
<-- commande 3 du client 2
rponse 3 au client 2
2 : [fin du Thread de lecture des demandes du client 2]
fin
[fin du Thread de lecture des rponses du serveur au client 2]
^C
Si,$&#ns ,aintenant $n serve$r 2e( en &an@ant n#tre serve$r gnri-$e s$r &e '#rt EE 4
dos>srvgen 88
Serveur gnrique lanc sur le port 88
Pren#ns ,aintenant $n navigate$r et de,and#ns &'URL http://localhost:>>/exemple.html. Le navigate$r va a&#rs se %#nne%ter s$r &e
'#rt >> de &a ,a%hine localhost '$is de,ander &a 'age /exemple.html 4
Regard#ns ,aintenant &a +en*tre de n#tre serve$r 4
dos>srvgen 88
Serveur gnrique lanc sur le port 88
Thread de lecture des rponses du serveur au client 2 lanc
2 : Thread de lecture des demandes du client 2 lanc
<-- GET /exemple.html HTTP/1.1
<-- Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*
<-- Accept-Language: fr
<-- Accept-Encoding: gzip, deflate
<-- User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705; .NET CLR 1.0.2
914)
<-- Host: localhost:88
<-- Connection: Keep-Alive
<--
;n d%#$vre ainsi &es ent*tes eTTP env#As 'ar &e navigate$r. 5e&a n#$s 'er,et de d%#$vrir 'e$ . 'e$ &e 'r#t#%#&e eTTP. L#rs
d'$n 'r%dent e/e,'&e0 n#$s avi#ns %r $n %&ient 1e( -$i n'env#Aait -$e &a se$&e %#,,ande GET. 5e&a avait t s$++isant. ;n
v#it i%i -$e &e navigate$r env#ie d'a$tres in+#r,ati#ns a$ serve$r. E&&es #nt '#$r ($t d'indi-$er a$ serve$r -$e& tA'e de %&ient i& a en
+a%e de &$i. ;n v#it a$ssi -$e &es ent*tes eTTP se ter,inent 'ar $ne &igne vide. E&a(#r#ns $ne r'#nse . n#tre %&ient. L'$ti&isate$r
a$ %&avier est i%i &e vrita(&e serve$r et i& 'e$t &a(#rer $ne r'#nse . &a ,ain. Ra''e&#ns-n#$s &a r'#nse +aite 'ar $n serve$r 1e(
dans $n 'r%dent e/e,'&e 4
<-- HTTP/1.1 200 OK
<-- Date: Mon, 13 May 2002 07:30:58 GMT
<-- Server: Apache/1.3.12 (Unix) (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21
<-- Last-Modified: Wed, 06 Feb 2002 09:00:58 GMT
<-- ETag: "23432-2bf3-3c60f0ca"
<-- Accept-Ranges: bytes
<-- Content-Length: 11251
<-- Connection: close
<-- Content-Type: text/html
<--
<-- <html>
EssaA#ns de d#nner $ne r'#nse ana&#g$e 4
...
<-- Host: localhost:88
<-- Connection: Keep-Alive
<--
2 : HTTP/1.1 200 OK
2 : Server: serveur tcp generique
2 : Connection: close
2 : Content-Type: text/html
2 :
2 : <html>
2 : <head><title>Serveur generique</title></head>
2 : <body>
2 : <center>
Servi%es 1EB F"
2 : <h2>Reponse du serveur generique</h2>
2 : </center>
2 : </body>
2 : </html>
2 : fin
L'erreur suivante s'est produite : Impossible de lire les donnes de la connexion de transport.
[fin du Thread de lecture des demandes du client 2]
[fin du Thread de lecture des rponses du serveur au client 2]
Les &ignes %#,,en@ant 'ar 2 : s#nt env#Aes d$ serve$r a$ %&ient nY . La %#,,ande #in %&[t &a %#nne/i#n d$ serve$r a$ %&ient.
N#$s n#$s s#,,es &i,its dans n#tre r'#nse a$/ ent*tes eTTP s$ivants 4
HTTP/1.1 200 OK
2 : Server: serveur tcp generique
2 : Connection: close
2 : Content-Type: text/html
2 :
N#$s ne d#nn#ns 'as &a tai&&e d$ +i%hier -$e n#$s a&&#ns env#Aer <(ontentV.ength= ,ais n#$s %#ntent#ns de dire -$e n#$s a&&#ns
+er,er &a %#nne/i#n <(onnection: close= a'r:s env#i de %e&$i-%i. 5e&a est s$++isant '#$r &e navigate$r. En v#Aant &a %#nne/i#n +er,e0 i&
sa$ra -$e &a r'#nse d$ serve$r est ter,ine et a++i%hera &a 'age eTML -$i &$i a t env#Ae. 5ette derni:re est &a s$ivante 4
2 : <html>
2 : <head><title>Serveur generique</title></head>
2 : <body>
2 : <center>
2 : <h2>Reponse du serveur generique</h2>
2 : </center>
2 : </body>
2 : </html>
L'$ti&isate$r +er,e ens$ite &a %#nne/i#n a$ %&ient en ta'ant &a %#,,ande #in. Le navigate$r sait a&#rs -$e &a r'#nse d$ serve$r est
ter,ine et 'e$t a&#rs &'a++i%her 4
Si %i-dess$s0 #n +ait H##ichage/Source '#$r v#ir %e -$'a re@$ &e navigate$r0 #n #(tient 4
%'est . dire e/a%te,ent %e -$'#n a env#A de'$is &e serve$r gnri-$e. Le %#de d$ serve$r T5P gnri-$e est &e s$ivant 4
' espaces de noms
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Imports System.Threading
Imports Microsoft.VisualBasic
Public Class serveurTcpGnrique
' programme principal
Public Shared Sub Main(ByVal args() As String)
Servi%es 1EB FI
' rePoit le port d'coute des demandes des clients
' cre un thread pour lire les demandes du client
' celles-ci seront affiches l'cran
' cre un thread pour lire des commandes tapes au clavier
' celles-ci seront envo(es comme rponse au client
' le tout se termine avec la commande fin tape au clavier
Const syntaxe As String = "Syntaxe : pg port"
' (-a-t-il un argument
If args.Length <> 1 Then
erreur(syntaxe, 1)
End If
' cet argument doit <tre entier >L
Dim port As Integer = 0
Dim erreurPort As Boolean = False
Dim E As Exception = Nothing
Try
port = Integer.Parse(args(0))
Catch ex As Exception
E = ex
erreurPort = True
End Try
erreurPort = erreurPort Or port <= 0
If erreurPort Then
erreur(syntaxe + ControlChars.Lf + "Port incorrect (" + E.ToString + ")", 2)
End If
' on cre le servive d'coute
Dim ecoute As TcpListener = Nothing
Dim nbClients As Integer = 0 ' nbre de clients traits
Try
' on cre le service
ecoute = New TcpListener(IPAddress.Parse("127.0.0.1"), port)
' on le lance
ecoute.Start()
' suivi
Console.Out.WriteLine(("Serveur gnrique lanc sur le port " & port))
' boucle de service au clients
Dim client As TcpClient = Nothing
While True ' boucle infinie - sera arr<te par %trl-%
' attente d'un client
client = ecoute.AcceptTcpClient()
' le service est assur des threads spars
nbClients += 1
' thread de lecture des demandes clients
Dim thReceive As New Thread(New ThreadStart(AddressOf New serveurReceive(client, nbClients).Run))
' thread de lecture des rponses tapes au clavier par l'utilisateur
Dim thSend As New Thread(New ThreadStart(AddressOf New serveurSend(client, nbClients).Run))
' on lance l'ecution des deu threads
thSend.Start()
thReceive.Start()
End While
' on retourne l'coute des demandes
Catch ex As Exception
' on signale l'erreur
erreur("L'erreur suivante s'est produite : " + ex.Message, 3)
End Try
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
Public Class serveurSend
' classe charge de lire des rponses tapes au clavier
' et de les envo(er un client via un client tcp pass au constructeur
Private client As TcpClient ' le client tcp
Private numClient As Integer ' n de client
' constructeur
Public Sub New(ByVal client As TcpClient, ByVal numClient As Integer)
Servi%es 1EB FK
' on note le client tcp
Me.client = client
' et son n
Me.numClient = numClient
End Sub
' mthode Aun du thread
Public Sub Run()
' donnes locales
Dim OUT As StreamWriter = Nothing ' flu d'criture rseau
Dim rponse As String = Nothing ' rponse lue au clavier
' suivi
Console.Out.WriteLine(("Thread de lecture des rponses du serveur au client " & numClient & "
lanc"))
' gestion des erreurs
Try
' cration du flu d'criture rseau
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
' boucle saisie-envoi des commandes
While True
' identification client
Console.Out.Write((numClient & " : "))
' lecture rponse tape au clavier
rponse = Console.In.ReadLine().Trim()
' fini >
If rponse.ToLower() = "fin" Then
Exit While
End If
' envoi rponse au serveur
OUT.WriteLine(rponse)
End While
' rponse suivante
Catch ex As Exception
' erreur
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
End Try
' fin - on ferme les flu
Try
OUT.Close()
client.Close()
Catch
End Try
' on signale la fin du thread
Console.Out.WriteLine(("[fin du Thread de lecture des rponses du serveur au client " & numClient &
"]"))
End Sub
End Class
Public Class serveurReceive
' classe charge de lire les lignes de tete envo(es au serveur
' via un client tcp pass au constructeur
Private client As TcpClient ' le client tcp
Private numClient As Integer ' n de client
' constructeur
Public Sub New(ByVal client As TcpClient, ByVal numClient As Integer)
' on note le client tcp
Me.client = client
' et son n
Me.numClient = numClient
End Sub
' mthode Aun du thread
Public Sub Run()
' donnes locales
Dim [IN] As StreamReader = Nothing ' flu lecture rseau
Dim rponse As String = Nothing ' rponse serveur
' suivi
Console.Out.WriteLine(("Thread de lecture des demandes du client " & numClient & " lanc"))
' gestion des erreurs
Try
' cration du flu lecture rseau
[IN] = New StreamReader(client.GetStream())
' boucle lecture lignes de tete du flu #4
While True
' lecture flu rseau
rponse = [IN].ReadLine()
' flu ferm >
If rponse Is Nothing Then
Servi%es 1EB FO
Exit While
End If
' affichage
Console.Out.WriteLine(("<-- " + rponse))
End While
Catch ex As Exception
' erreur
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
End Try
' fin - on ferme les flu
Try
[IN].Close()
client.Close()
Catch
End Try
' on signale la fin du thread
Console.Out.WriteLine(("[fin du Thread de lecture des demandes du client " & numClient & "]"))
End Sub
End Class
E.".I Un %&ient 1e(
N#$s av#ns v$ dans &'e/e,'&e 'r%dent0 %ertains des ent*tes eTTP -$'env#Aait $n navigate$r 4
<-- GET /exemple.html HTTP/1.1
<-- Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*
<-- Accept-Language: fr
<-- Accept-Encoding: gzip, deflate
<-- User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705; .NET CLR 1.0.2
914)
<-- Host: localhost:88
<-- Connection: Keep-Alive
<--
N#$s a&&#ns %rire $n %&ient 1e( a$-$e& #n 'asserait en 'ara,:tre $ne URL et -$i a++i%herait . &'%ran &e te/te env#A 'ar &e
serve$r. N#$s s$''#ser#ns -$e %e&$i-%i s$''#rte &e 'r#t#%#&e eTTP F.F. Des ent*tes 'r%dents0 n#$s n'$ti&iser#ns -$e &es s$ivants
4
<-- GET /exemple.html HTTP/1.1
<-- Host: localhost:88
<-- Connection: close
&e 're,ier ent*te indi-$e -$e&&e 'age n#$s dsir#ns
&e se%#nd -$e& serve$r n#$s interr#ge#ns
&e tr#isi:,e -$e n#$s s#$hait#ns -$e &e serve$r +er,e &a %#nne/i#n a'r:s n#$s av#ir r'#nd$.
Si %i-dess$s0 n#$s re,'&a@#ns GET 'ar eEAD0 &e serve$r ne n#$s enverra -$e &es ent*tes eTTP et 'as &a 'age eTML.
N#tre %&ient 2e( sera a''e& de &a +a@#n s$ivante 4 client2eb U@5 c+d0 #> U@5 est &'URL dsire et c+d &'$n des de$/ ,#ts
%&s GET #$ eEAD '#$r indi-$er si #n s#$haite se$&e,ent &es ent*tes <eEAD= #$ ga&e,ent &e %#nten$ de &a 'age <GET=.
Regard#ns $n 're,ier e/e,'&e. N#$s &an@#ns &e serve$r IIS '$is &e %&ient 2e( s$r &a ,*,e ,a%hine 4
dos>clientweb http://localhost HEAD
HTTP/1.1 302 Object moved
Server: Microsoft-IIS/5.0
Date: Mon, 13 May 2002 09:23:37 GMT
Connection: close
Location: /IISSamples/Default/welcome.htm
Content-Length: 189
Content-Type: text/html
Set-Cookie: ASPSESSIONIDGQQQGUUY=HMFNCCMDECBJJBPPBHAOAJNP; path=/
Cache-control: private
La r'#nse
HTTP/1.1 302 Object moved
signi+ie -$e &a 'age de,ande a %hang de '&a%e <d#n% d'URL=. La n#$ve&&e URL est d#nne 'ar &'ent*te 5ocationW
Location: /IISSamples/Default/welcome.htm
Si n#$s $ti&is#ns GET a$ &ie$ de eEAD dans &'a''e& a$ %&ient 1e( 4
Servi%es 1EB FE
dos>clientweb http://localhost GET
HTTP/1.1 302 Object moved
Server: Microsoft-IIS/5.0
Date: Mon, 13 May 2002 09:33:36 GMT
Connection: close
Location: /IISSamples/Default/welcome.htm
Content-Length: 189
Content-Type: text/html
Set-Cookie: ASPSESSIONIDGQQQGUUY=IMFNCCMDAKPNNGMGMFIHENFE; path=/
Cache-control: private
<head><title>L'objet a chang d'emplacement</title></head>
<body><h1>L'objet a chang d'emplacement</h1>Cet objet peut tre trouv <a HREF="/IISSamples/Default/we
lcome.htm">ici</a>.</body>
N#$s #(ten#ns &e ,*,e rs$&tat -$'ave% eEAD ave% de '&$s &e %#r's de &a 'age eTML. Le 'r#gra,,e est &e s$ivant 4
' espaces de noms
Imports System
Imports System.Net.Sockets
Imports System.IO
Public Class clientWeb1
' demande une 6A*
' affiche le contenu de celle-ci l'cran
Public Shared Sub Main(ByVal args() As String)
' s(ntae
Const syntaxe As String = "pg URI GET/HEAD"
' nombre d'arguments
If args.Length <> 2 Then
erreur(syntaxe, 1)
End If
' on note l'6A# demande
Dim URIstring As String = args(0)
Dim commande As String = args(1).ToUpper()
' vrification validit de l'6A#
Dim uri As Uri = Nothing
Try
uri = New Uri(URIstring)
Catch ex As Exception
' 6A# incorrecte
erreur("L'erreur suivante s'est produite : " + ex.Message, 2)
End Try
' vrification de la commande
If commande <> "GET" And commande <> "HEAD" Then
' commande incorrecte
erreur("Le second paramtre doit tre GET ou HEAD", 3)
End If
' on peut travailler
Dim client As TcpClient = Nothing ' le client
Dim [IN] As StreamReader = Nothing ' le flu de lecture du client
Dim OUT As StreamWriter = Nothing ' le flu d'criture du client
Dim rponse As String = Nothing ' rponse du serveur
Try
' on se connecte au serveur
client = New TcpClient(uri.Host, uri.Port)
' on cre les flu d'entre-sortie du client 3%,
[IN] = New StreamReader(client.GetStream())
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
' on demande l'6A* - envoi des ent<tes U33,
OUT.WriteLine((commande + " " + uri.PathAndQuery + " HTTP/1.1"))
OUT.WriteLine(("Host: " + uri.Host + ":" & uri.Port))
OUT.WriteLine("Connection: close")
OUT.WriteLine()
' on lit la rponse
rponse = [IN].ReadLine()
While Not (rponse Is Nothing)
' on traite la rponse
Console.Out.WriteLine(rponse)
' on lit la rponse
rponse = [IN].ReadLine()
Servi%es 1EB FL
End While
' c'est fini
client.Close()
Catch e As Exception
' on gre l'eception
erreur(e.Message, 4)
End Try
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
La se$&e n#$vea$t dans %e 'r#gra,,e est &'$ti&isati#n de &a %&asse Uri. Le 'r#gra,,e re@#it $ne URL <Uni#orm Resource .ocator= #$
URI <Uni#orm Resource Identi#ier= de &a +#r,e http://ser!eur:port/chemin-ageN%:.^param1D!al1Wparam2D!al2W.... La %&asse Uri n#$s
'er,et de d%#,'#ser &a %haCne de &'URL en ses di++rents &,ents. Un #(Bet Uri est %#nstr$it . 'artir de &a %haCne URIstring
re@$e en 'ara,:tre 4
' vrification validit de l'6A#
Dim uri As Uri = Nothing
Try
uri = New Uri(URIstring)
Catch ex As Exception
' 6A# incorrecte
erreur("L'erreur suivante s'est produite : " + ex.Message, 2)
End Try
Si &a %haCne URI re@$e en 'ara,:tre n'est 'as $ne URI va&ide <a(sen%e d$ 'r#t#%#&e0 d$ serve$r0 ...=0 $ne e/%e'ti#n est &an%e. 5e&a
n#$s 'er,et de vri+ier &a va&idit d$ 'ara,:tre re@$. Une +#is &'#(Bet Uri %#nstr$it0 #n a a%%:s a$/ di++rents &,ents de %ette Uri.
Ainsi si &'#(Bet uri d$ %#de 'r%dent a t %#nstr$it . 'artir de &a %haCne
http://ser!eur:port/chemin-ageN%:.^param1D!al1Wparam2D!al2W... #n a$ra 4
uri.LostVser!eur0 uri.PortVport0 uri.Pat-Vchemin-ageN%:.0 uri.HueryVparam1D!al1Wparam2D!al2W...0 uri.pat-:ndHueryV
chemin-ageN%:.^param1D!al1Wparam2D!al2W...0 uri..c-e+eDhttp.
E.".K 5&ient 1e( grant &es redire%ti#ns
Le %&ient 1e( 'r%dent ne g:re 'as $ne vent$e&&e redire%ti#n de &'URL -$'i& a de,ande. Le %&ient s$ivant &a g:re.
F. i& &it &a 're,i:re &igne des ent*tes eTTP env#As 'ar &e serve$r '#$r vri+ier si #n A tr#$ve &a %haCne 332 5",ect mo!ed -$i
signa&e $ne redire%ti#n
. i& &it &es ent*tes s$ivants. S'i& A a redire%ti#n0 i& re%her%he &a &igne .ocation: url -$i d#nne &a n#$ve&&e URL de &a 'age
de,ande et n#te %ette URL.
H. i& a++i%he &e reste de &a r'#nse d$ serve$r. S'i& A a redire%ti#n0 &es ta'es F . H s#nt r'tes ave% &a n#$ve&&e URL. Le
'r#gra,,e n'a%%e'te 'as '&$s d'$ne redire%ti#n. 5ette &i,ite +ait &'#(Bet d'$ne %#nstante -$i 'e$t *tre ,#di+ie.
V#i%i $n e/e,'&e 4
dos>clientweb2 http://localhost GET
HTTP/1.1 302 Object moved
Server: Microsoft-IIS/5.0
Date: Mon, 13 May 2002 11:38:55 GMT
Connection: close
Location: /IISSamples/Default/welcome.htm
Content-Length: 189
Content-Type: text/html
Set-Cookie: ASPSESSIONIDGQQQGUUY=PDGNCCMDNCAOFDMPHCJNPBAI; path=/
Cache-control: private
<head><title>L'objet a chang d'emplacement</title></head>
<body><h1>L'objet a chang d'emplacement</h1>Cet objet peut tre trouv <a HREF="/IISSamples/Default/we
lcome.htm">ici</a>.</body>
<--Redirection vers l'URL http://localhost:80/IISSamples/Default/welcome.htm-->
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Connection: close
Date: Mon, 13 May 2002 11:38:55 GMT
Servi%es 1EB !
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Mon, 16 Feb 1998 21:16:22 GMT
ETag: "0174e21203bbd1:978"
Content-Length: 4781
<html>
<head>
<title>Bienvenue dans le Serveur Web personnel</title>
</head>
....
</body>
</html>
Le 'r#gra,,e est &e s$ivant 4
' espaces de noms
Imports System
Imports System.Net.Sockets
Imports System.IO
Imports System.Text.RegularExpressions
Imports Microsoft.VisualBasic
' classe client @eb
Public Class clientWeb

' demande une 6A* et affiche le contenu de celle-ci l'cran
Public Shared Sub Main(ByVal args() As String)
' s(ntae
Const syntaxe As String = "pg URI GET/HEAD"
' nombre d'arguments
If args.Length <> 2 Then
erreur(syntaxe, 1)
End If
' on note l'6A# demande
Dim URIstring As String = args(0)
Dim commande As String = args(1).ToUpper()
' vrification validit de l'6A#
Dim uri As Uri = Nothing
Try
uri = New Uri(URIstring)
Catch ex As Exception
' 6A# incorrecte
erreur("L'erreur suivante s'est produite : " + ex.Message, 2)
End Try 'catch
' vrification de la commande
If commande <> "GET" And commande <> "HEAD" Then
' commande incorrecte
erreur("Le second paramtre doit tre GET ou HEAD", 3)
End If
' on peut travailler
Dim client As TcpClient = Nothing ' le client
Dim [IN] As StreamReader = Nothing ' le flu de lecture du client
Dim OUT As StreamWriter = Nothing ' le flu d'criture du client
Dim rponse As String = Nothing ' rponse du serveur
Const nbRedirsMax As Integer = 1 ' pas plus d'une redirection accepte
Dim nbRedirs As Integer = 0 ' nombre de redirections en cours
Dim premireLigne As String ' 1re ligne de la rponse
Dim redir As Boolean = False ' indi$ue s'il ( a redirection ou non
Dim locationString As String = "" ' la chane 6A# d'une ventuelle redirection
' epression rgulire pour trouver une 6A* de redirection
Dim location As New Regex("^Location: (.+?)$") '
' gestion des erreurs
Try
' on peut avoir plusieurs 6A* demander s'il ( a des redirections
While nbRedirs <= nbRedirsMax
' on se connecte au serveur
client = New TcpClient(uri.Host, uri.Port)
' on cre les flu d'entre-sortie du client 3%,
[IN] = New StreamReader(client.GetStream())
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
' on envoie les ent<tes U33, pour demander l'6A*
OUT.WriteLine((commande + " " + uri.PathAndQuery + " HTTP/1.1"))
Servi%es 1EB F
OUT.WriteLine(("Host: " + uri.Host + ":" & uri.Port))
OUT.WriteLine("Connection: close")
OUT.WriteLine()
' on lit la premire ligne de la rponse
premireLigne = [IN].ReadLine()
' cho cran
Console.Out.WriteLine(premireLigne)
' redirection >
If Regex.IsMatch(premireLigne, "302 Object moved$") Then
' il ( a une redirection
redir = True
nbRedirs += 1
End If
' ent<tes U33, suivants jus$u' trouver la ligne vide signalant la fin des ent<tes
Dim locationFound As Boolean = False
rponse = [IN].ReadLine()
While rponse <> ""
' on affiche la rponse
Console.Out.WriteLine(rponse)
' s'il ( a redirection' on recherche l'ent<te *ocation
If redir And Not locationFound Then
' on compare la ligne l'epression relationnelle location
Dim rsultat As Match = location.Match(rponse)
If rsultat.Success Then
' si on a trouv on note l'6A* de redirection
locationString = rsultat.Groups(1).Value
' on note $u'on a trouv
locationFound = True
End If
End If
' ligne suivante
rponse = [IN].ReadLine()
End While
' lignes suivantes de la rponse
Console.Out.WriteLine(rponse)
rponse = [IN].ReadLine()
While Not (rponse Is Nothing)
' on affiche la rponse
Console.Out.WriteLine(rponse)
' ligne suivante
rponse = [IN].ReadLine()
End While
' on ferme la conneion
client.Close()
' a-t-on fini >
If Not locationFound Or nbRedirs > nbRedirsMax Then
Exit While
End If
' il ( a une redirection oprer - on construit la nouvelle 6ri
URIstring = uri.Scheme + "://" & uri.Host & ":" & uri.Port & locationString
uri = New Uri(URIstring)
' suivi
Console.Out.WriteLine((ControlChars.Lf + "<--Redirection vers l'URL " + URIstring + "-->" +
ControlChars.Lf))
End While
Catch e As Exception
' on gre l'eception
erreur(e.Message, 4)
End Try
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
Servi%es 1EB
E.".O Serve$r de %a&%$& d'i,'[ts
N#$s re'ren#ns &'e/er%i%e IMP;TS dB. trait s#$s diverses +#r,es. Ra''e&#ns &a derni:re ,#$t$re. Une %&asse i+pJt a t %re.
Ses attri($ts s#nt tr#is ta(&ea$/ de n#,(res 4
Public Class impt
' les donnes ncessaires au calcul de l'impt
' proviennent d'une source extrieure
Private limites(), coeffR(), coeffN() as double
La %&asse a de$/ %#nstr$%te$rs 4
$n %#nstr$%te$r . -$i #n 'asse &es tr#is ta(&ea$/ de d#nnes n%essaires a$ %a&%$& de &'i,'[t
// constructeur 1
Public Sub New(ByVal LIMITES() As Decimal, ByVal COEFFR() As Decimal, ByVal COEFFN() As Decimal)
' initialise les trois tableaux limites, coeffR, coeffN partir
' des paramtres passs au constructeur
$n %#nstr$%te$r . -$i #n 'asse &e n#, DSN d'$ne (ase de d#nnes ;DB5
' constructeur 2
Public Sub New(ByVal DSNimpots As String, ByVal Timpots As String, ByVal colLimites As String, ByVal
colCoeffR As String, ByVal colCoeffN As String)
' initialise les trois tableaux limites, coeffR, coeffN partir
' du contenu de la table Timpots de la base ODBC DSNimpots
' colLimites, colCoeffR, colCoeffN sont les trois colonnes de cette table
' peut lancer une exception
Un 'r#gra,,e de test avait t %rit 4
dos>vbc /r:impots.dll testimpots.vb
dos>test mysql-impots timpots limites coeffr coeffn
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :o 2 200000
impt=22506 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :n 2 200000
impt=33388 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :o 3 200000
impt=16400 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :n 3 300000
impt=50082 F
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :n 3 200000
impt=22506 F
I%i &e 'r#gra,,e de test et &'#(Bet impt taient s$r &a ,*,e ,a%hine. N#$s n#$s 'r#'#s#ns de ,ettre &e 'r#gra,,e de test et
&'#(Bet impt s$r des ,a%hines di++rentes. N#$s a$r#ns $ne a''&i%ati#n %&ient-serve$r #> &'#(Bet impt distant sera &e serve$r. La
n#$ve&&e %&asse s'a''e&&e Ser!eurImpots et est drive de &a %&asse impt 4
Public Class ServeurImpots
Inherits impt
' attributs
Private portEcoute As Integer ' le port d'coute des demandes clients
Private actif As Boolean ' tat du serveur
' constructeur
Public Sub New(ByVal portEcoute As Integer, ByVal DSNimpots As String, ByVal Timpots As String, ByVal
colLimites As String, ByVal colCoeffR As String, ByVal colCoeffN As String)
MyBase.New(DSNimpots, Timpots, colLimites, colCoeffR, colCoeffN)
' on note le port d'coute
Me.portEcoute = portEcoute
' pour l'instant inactif
actif = False
' cre et lance un thread de lecture des commandes tapes au clavier
' le serveur sera gr partir de ces commandes
Dim threadLecture As Thread = New Thread(New ThreadStart(AddressOf admin))
threadLecture.Start()
End Sub
Le se$& 'ara,:tre n#$vea$ dans &e %#nstr$%te$r est &e '#rt d'%#$te des de,andes des %&ients. Les a$tres 'ara,:tres s#nt 'asss
dire%te,ent . &a %&asse de (ase impt. Le serve$r d'i,'[ts est %#ntr[& 'ar des %#,,andes ta'es a$ %&avier. A$ssi %re-t-#n $n
thread '#$r &ire %es %#,,andes. I& A en a$ra de$/ '#ssi(&es 4 start '#$r &an%er &e servi%e0 stop '#$r &'arr*ter d+initive,ent. La
,th#de admin -$i g:re %es %#,,andes est &a s$ivante 4
Public Sub admin()
Servi%es 1EB H
' lit les commandes d'administration du serveur tapes au clavier
' dans une boucle sans fin
Dim commande As String = Nothing
While True
' invite
Console.Out.Write("Serveur d'impts>")
' lecture commande
commande = Console.In.ReadLine().Trim().ToLower()
' ecution commande
If commande = "start" Then
' actif >
If actif Then
'erreur
Console.Out.WriteLine("Le serveur est dj actif")
Else
' on lance le service d'coute
Dim threadEcoute As Thread = New Thread(New ThreadStart(AddressOf ecoute))
threadEcoute.Start()
End If
Else
If commande = "stop" Then
' fin de tous les threads d'ecution
Environment.Exit(0)
Else
' erreur
Console.Out.WriteLine("Commande incorrecte. Utilisez (start,stop)")
End If
End If
End While
End Sub
Si &a %#,,ande ta'e a$ %&avier est start0 $n thread d'%#$te des de,andes %&ients est &an%. Si &a %#,,ande ta'e est stop0 t#$s &es
threads s#nt arr*ts. Le thread d'%#$te e/%$te &a ,th#de ecoute 4
Public Sub ecoute()
' thread d'coute des demandes des clients
' on cre le service d'coute
Dim ecoute As TcpListener = Nothing
Try
' on cre le service
ecoute = New TcpListener(IPAddress.Parse("127.0.0.1"), portEcoute)
' on le lance
ecoute.Start()
' suivi
Console.Out.WriteLine(("Serveur d'cho lanc sur le port " & portEcoute))
' boucle de service
Dim liaisonClient As TcpClient = Nothing
While True ' boucle infinie
' attente d'un client
liaisonClient = ecoute.AcceptTcpClient()
' le service est assur par une autre t:che
Dim threadClient As Thread = New Thread(New ThreadStart(AddressOf New
traiteClientImpots(liaisonClient, Me).Run))
threadClient.Start()
End While
' on retourne l'coute des demandes
Catch ex As Exception
' on signale l'erreur
erreur("L'erreur suivante s'est produite : " + ex.Message, 3)
End Try
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
;n retr#$ve $n serve$r t%' %&assi-$e %#$tant s$r &e '#rt port7coute. Les de,andes des %&ients s#nt traites 'ar &a ,th#de Run d'$n
#(Bet a$-$e& #n 'asse de$/ 'ara,:tres 4
F. &'#(Bet %cp(lient -$i va 'er,ettre d'atteindre &e %&ient
. &'#(Bet impt this -$i va d#nner a%%:s . &a ,th#de this.calculer de %a&%$& de &'i,'[t.
' -------------------------------------------------------
' assure le service un client du serveur d'imp7ts
Public Class traiteClientImpots
Servi%es 1EB "
Private liaisonClient As TcpClient ' liaison avec le client
Private [IN] As StreamReader ' flu d'entre
Private OUT As StreamWriter ' flu de sortie
Private objImpt As impt ' objet #mp7t
' constructeur
Public Sub New(ByVal liaisonClient As TcpClient, ByVal objImpt As impt)
Me.liaisonClient = liaisonClient
Me.objImpt = objImpt
End Sub
La ,th#de Run traite &es de,andes des %&ients. 5e&&es-%i 'e$vent av#ir de$/ +#r,es 4
F. %a&%$& ,ari<#Nn= n(En+ants sa&aireAnn$e&
. +in%a&%$&s
La +#r,e F 'er,et &e %a&%$& d'$n i,'[t0 &a +#r,e %&[t &a &iais#n %&ient-serve$r.
' mthode Aun
Public Sub Run()
' rend le service au client
Try
' flu d'entre
[IN] = New StreamReader(liaisonClient.GetStream())
' flu de sortie
OUT = New StreamWriter(liaisonClient.GetStream())
OUT.AutoFlush = True
' envoi d'un msg de bienvenue au client
OUT.WriteLine("Bienvenue sur le serveur d'impts")
' boucle lecture demandeTcriture rponse
Dim demande As String = Nothing
Dim champs As String() = Nothing ' les lments de la demande
Dim commande As String = Nothing ' la commande du client C calcul ou fincalculs
demande = [IN].ReadLine()
While Not (demande Is Nothing)
' on dcompose la demande en champs
champs = Regex.Split(demande.Trim().ToLower(), "\s+")
' deu demandes acceptes C calcul et fincalculs
commande = champs(0)
Dim erreur As Boolean = False
If commande <> "calcul" And commande <> "fincalculs" Then
' erreur client
OUT.WriteLine("Commande incorrecte. Utilisez (calcul,fincalculs).")
End If
If commande = "calcul" Then
calculerImpt(champs)
End If
If commande = "fincalculs" Then
' msg d'au-revoir au client
OUT.WriteLine("Au revoir...")
' libration des ressources
Try
OUT.Close()
[IN].Close()
liaisonClient.Close()
Catch
End Try
' fin
Return
End If
' nouvelle demande
demande = [IN].ReadLine()
End While
Catch e As Exception
erreur("L'erreur suivante s'est produite (" + e.ToString + ")", 2)
End Try
End Sub
Le %a&%$& de &'i,'[t est e++e%t$ 'ar &a ,th#de calculerImpt -$i re@#it en 'ara,:tre &e ta(&ea$ des %ha,'s de &a de,ande +aite 'ar &e
%&ient. La va&idit de &a de,ande est vri+ie et vent$e&&e,ent &'i,'[t %a&%$& et renv#A a$ %&ient.
' calcul d'imp7ts
Public Sub calculerImpt(ByVal champs() As String)
' traite la demande C calcul mari nb"nfants salaire/nnuel
' dcompose en champs dans le tableau champs
Dim mari As String = Nothing
Dim nbEnfants As Integer = 0
Dim salaireAnnuel As Integer = 0
Servi%es 1EB I
' validit des arguments
Try
' il faut au moins S champs
If champs.Length <> 4 Then
Throw New Exception
End If
' mari
mari = champs(1)
If mari <> "o" And mari <> "n" Then
Throw New Exception
End If
' enfants
nbEnfants = Integer.Parse(champs(2))
' salaire
salaireAnnuel = Integer.Parse(champs(3))
Catch
OUT.WriteLine(" syntaxe : calcul mari(O/N) nbEnfants salaireAnnuel")
' fini
Exit Sub
End Try
' on peut calculer l'imp7t
Dim impot As Long = objImpt.calculer(mari = "o", nbEnfants, salaireAnnuel)
' on envoie la rponse au client
OUT.WriteLine(impot.ToString)
End Sub
' affichage des erreurs
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
5ette %&asse est %#,'i&e 'ar
dos>vbc /r:impots.dll /r:system.dll /t:library srvimpots.vb
#> impots.dll %#ntient &e %#de de &a %&asse impt. Un 'r#gra,,e de test '#$rrait *tre &e s$ivant 4
' espaces de noms
Imports System
Imports System.IO
Imports Microsoft.VisualBasic
Public Class testServeurImpots
Public Shared syntaxe As String = "Syntaxe : pg port dsnImpots Timpots colLimites colCoeffR colCoeffN"
' programme principal
Public Shared Sub Main(ByVal args() As String)
' il fautV arguments
If args.Length <> 6 Then
erreur(syntaxe, 1)
End If
' le port doit <tre entier >L
Dim port As Integer = 0
Dim erreurPort As Boolean = False
Dim E As Exception = Nothing
Try
port = Integer.Parse(args(0))
Catch ex As Exception
E = ex
erreurPort = True
End Try
erreurPort = erreurPort Or port <= 0
If erreurPort Then
erreur(syntaxe + ControlChars.Lf + "Port incorrect (" + E.ToString + ")", 2)
End If
' on cre le serveur d'imp7ts
Try
Dim srvimots As ServeurImpots = New ServeurImpots(port, args(1), args(2), args(3), args(4), args(5))
Catch ex As Exception
'erreur
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
End Try
End Sub
' affichage des erreurs
Servi%es 1EB K
Public Shared Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Class
;n 'asse a$ 'r#gra,,e de test &es d#nnes n%essaires . &a %#nstr$%ti#n d'$n #(Bet Ser!eurImpots et . 'artir de &. i& %re %et #(Bet. 5e
'r#gra,,e de test est %#,'i& 'ar 4
dos>vbc /r:srvimpots.dll /r:impots.dll testimpots.vb
V#i%i $n 're,ier test 4
dos>testimpots 124 odbc-mysql-dbimpots impots limites coeffr coeffn
Serveur d'impts>Serveur d'impts>start
Serveur d'impts>Serveur d'cho lanc sur le port 124
stop
La &igne
dos>testimpots 124 odbc-mysql-dbimpots impots limites coeffr coeffn
%re $n #(Bet Ser!eurImpots -$i n'%#$te 'as en%#re &es de,andes des %&ients. 5'est &a %#,,ande start ta'e a$ %&avier -$i &an%e %ette
%#$te. La %#,,ande stop arr*te &e serve$r. Uti&is#ns ,aintenant $n %&ient. N#$s $ti&iser#ns &e %&ient gnri-$e %r
'r%de,,ent. Le serve$r est &an% 4
dos>testimpots 124 odbc-mysql-dbimpots impots limites coeffr coeffn
Serveur d'impts>Serveur d'impts>start
Serveur d'impts>Serveur d'cho lanc sur le port 124
Le %&ient gnri-$e est &an% dans $ne a$tre +en*tre D#s 4
dos> clttcpgenerique localhost 124Commandes :
<-- Bienvenue sur le serveur d'impts
;n v#it -$e &e %&ient a (ien r%$'r &e ,essage de (ienven$e d$ serve$r. ;n env#ie d'a$tres %#,,andes 4
x
<-- Commande incorrecte. Utilisez (calcul,fincalculs).
calcul
<-- syntaxe : calcul mari(O/N) nbEnfants salaireAnnuel
calcul o 2 200000
<-- 22506
calcul n 2 200000
<-- 33388
fincalculs
<-- Au revoir...
[fin du thread de lecture des rponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]
;n ret#$rne dans &a +en*tre d$ serve$r '#$r &'arr*ter 4
dos>testimpots 124 odbc-mysql-dbimpots impots limites coeffr coeffn
Serveur d'impts>Serveur d'impts>start
Serveur d'impts>Serveur d'cho lanc sur le port 124
stop
Servi%es 1EB O
L. Servi%es 1e(
L.F Intr#d$%ti#n
N#$s av#ns 'rsent dans &e %ha'itre 'r%dent '&$sie$rs a''&i%ati#ns %&ient-serve$r t%'-i'. Dans &a ,es$re #> &es %&ients et &e
serve$r %hangent des &ignes de te/te0 i&s 'e$vent *tre %rits en n'i,'#rte -$e& &angage. Le %&ient d#it si,'&e,ent %#nnaCtre &e
'r#t#%#&e de dia&#g$e attend$ 'ar &e serve$r. Les servi%es 1e( s#nt des a''&i%ati#ns serve$r t%'-i' 'rsentant &es %ara%tristi-$es
s$ivantes 4
E&&es s#nt h(erges 'ar des serve$rs 2e( et &e 'r#t#%#&e d'%hanges %&ient-serve$r est d#n% eTTP <eA'erTe/t Trans'#rt
Pr#t#%#&=0 $n 'r#t#%#&e a$-dess$s de T5P-IP.
Le servi%e 1e( a $n 'r#t#%#&e de dia&#g$e standard -$e&-$e s#it &e servi%e ass$r. Un servi%e 1e( #++re divers servi%es
SF0 S0 ..0 Sn. 5ha%$n d'e$/ attend des 'ara,:tres +#$rnis 'ar &e %&ient et rend . %e&$i-%i $n rs$&tat. P#$r %ha-$e servi%e0 &e
%&ient a (es#in de sav#ir 4
o &e n#, e/a%t d$ servi%e Si
o &a &iste des 'ara,:tres -$'i& +a$t &$i +#$rnir et &e$r tA'e
o &e tA'e de rs$&tat ret#$rn 'ar &e servi%e
Une +#is0 %es &,ents %#nn$s0 &e dia&#g$e %&ient-serve$r s$it &e ,*,e +#r,at -$e&-$e s#it &e servi%e 2e( interr#g. L'%rit$re des
%&ients est ainsi n#r,a&ise.
P#$r des rais#ns de s%$rit vis . vis des atta-$es venant de &'internet0 (ea$%#$' d'#rganisati#ns #nt des rsea$/ 'rivs et
n'#$vrent s$r Internet -$e %ertains '#rts de &e$rs serve$rs 4 essentie&&e,ent &e '#rt E! d$ servi%e 2e(. T#$s &es a$tres '#rts
s#nt verr#$i&&s. A$ssi &es a''&i%ati#ns %&ient-serve$r te&&es -$e 'rsentes dans &e %ha'itre 'r%dent s#nt-e&&es %#nstr$ites
a$ sein d$ rsea$ 'riv <intranet= et ne s#nt en gnra& 'as a%%essi(&es de &'e/trie$r. L#ger $n servi%e a$ sein d'$n serve$r
2e( &e rend a%%essi(&e . t#$te &a %#,,$na$t internet.
Le servi%e 1e( 'e$t *tre ,#d&is %#,,e $n #(Bet distant. Les servi%es #++erts deviennent a&#rs des ,th#des de %et
#(Bet. Un %&ient 'e$t av#ir a%%:s . %et #(Bet distant %#,,e s'i& tait &#%a&. 5e&a %a%he t#$te &a 'artie %#,,$ni%ati#n rsea$
et 'er,et de %#nstr$ire $n %&ient ind'endant de %ette %#$%he. Si %e&&e-%i vient . %hanger0 &e %&ient n'a 'as . *tre ,#di+i.
5'est &. $n n#r,e avantage et 'r#(a(&e,ent &e 'rin%i'a& at#$t des servi%es 1e(.
5#,,e '#$r &es a''&i%ati#ns %&ient-serve$r t%'-i' 'rsentes dans &e %ha'itre 'r%dent0 &e %&ient et &e serve$r 'e$vent
*tre %rits dans $n &angage -$e&%#n-$e. I&s %hangent des &ignes de te/te. 5e&&es-%i %#,'#rtent de$/ 'arties 4
o &es ent*tes n%essaires a$ 'r#t#%#&e eTTP
o &e %#r's d$ ,essage. P#$r $ne r'#nse d$ serve$r a$ %&ient0 %e&$i-%i est a$ +#r,at 3ML <e3tensi(&e MarR$'
Lang$age=. P#$r $ne de,ande d$ %&ient a$ serve$r0 &e %#r's d$ ,essage 'e$t av#ir '&$sie$rs +#r,es d#nt 3ML.
La de,ande 3ML d$ %&ient 'e$t av#ir $n +#r,at 'arti%$&ier a''e& S;AP <Si,'&e ;(Be%t A%%ess Pr#t#%#&=.
Dans %e %as0 &a r'#nse d$ serve$r s$it a$ssi &e +#r,at S;AP.
L. Les navigate$rs et 3ML
Les servi%es 1e( env#ient d$ 3ML . &e$rs %&ients. Les navigate$rs 'e$vent ragir di++re,,ent . &a r%e'ti#n de %e +&$/ 3ML.
Internet E/'&#rer a $ne +e$i&&e de stA&e 'rd+inie -$i 'er,et de &'a++i%her. Nets%a'e 5#,,$ni%at#r n'a 'as &$i %ette +e$i&&e de stA&e
et n'a++i%he 'as &e %#de 3ML re@$. I& +a$t vis$a&iser &e %#de s#$r%e de &a 'age re@$e '#$r av#ir a%%:s a$ 3ML. V#i%i $n e/e,'&e.
'#$r &e %#de 3ML s$ivant 4
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="st.istia.univ-angers.fr">bonjour de nouveau !</string>
Internet E/'&#rer a++i%hera &a 'age s$ivante 4
a&#rs -$e Nets%a'e Navigat#r a++i%hera 4
Servi%es 1EB E
Si #n vis$a&ise &e %#de s#$r%e de &a 'age re@$e 'ar Nets%a'e0 #n #(tient 4
Nets%a'e a (ien re@$ &a ,*,e %h#se -$e Internet E/'&#rer ,ais i& &'a a++i%h di++re,,ent. Dans &a s$ite0 n#$s $ti&iser#ns Internet
E/'&#rer '#$r &es %#'ies d'%ran.
L.H Un 're,ier servi%e 1e(
N#$s a&&#ns d%#$vrir &es servi%es 2e( a$ travers d'$n e/e,'&e si,'&issi,e d%&in en tr#is versi#ns.
L.H.F Versi#n F
P#$r %ette 're,i:re versi#n n#$s a&&#ns $ti&iser VS.NET -$i 'rsente &'avantage de '#$v#ir gnrer $n s-$e&ette de servi%e 2e(
i,,diate,ent #'rati#nne&. Une +#is %#,'rise %ette ar%hite%t$re0 n#$s '#$rr#ns %#,,en%er . v#&er de n#s 'r#'res ai&es. 5e sera
&'#(Bet des versi#ns s$ivantes.
Ave% VS.NET0 %#nstr$is#ns $n n#$vea$ 'r#Bet ave% &'#'ti#n TJi%hierNN#$vea$NPr#BetU 4
;n n#tera &es '#ints s$ivants 4
&e tA'e d$ 'r#Bet est Vis$a& Basi% <%adre de ga$%he=
&e ,#d:&e d$ 'r#Bet est Servi%e 1e( ASP.NET <%adre de dr#ite=
&'e,'&a%e,ent est &i(re. I%i0 &e servi%e 2e( sera h(erg 'ar $n serve$r 1e( IIS &#%a&. S#n URL sera d#n%
htt'4NN&#%a&h#stNT%he,inU #> T%he,inU est . d+inir. I%i0 n#$s %h#isiss#ns &e %he,in htt'4NN&#%a&h#stN'#&Av(netNde,#.
VS.NET va a&#rs %rer $n d#ssier '#$r %e 'r#Bet. ;> X Le serve$r IIS a $ne ra%ine '#$r &'ar(#res%en%e des d#%$,ents
2e( -$'i& d&ivre. A''e&#ns %ette ra%ine _IISr##t`. E&&e %#rres'#nd . &'URL htt'4NN&#%a&h#st. ;n en dd$it -$e &'URL
htt'4NN&#%a&h#stN'#&Av(netNde,# sera ass#%ie a$ d#ssier _IISr##t`N'#&Av(netNde,#. _IISr##t` est n#r,a&e,ent &e
d#ssier ^inet'$(^222r##t s$r &e dis-$e #> a t insta&& IIS. Dans n#tre e/e,'&e %'est &e dis-$e E. Le d#ssier %r 'ar
VS.NET est d#n% &e d#ssier eWNinetpubN222rootNpolyvbnetNde+o 4
Servi%es 1EB L
5#,,e t#$B#$rs0 i& A a $ne s$ra(#ndan%e de d#ssiers %rs. I&s n'#nt 'as t#$B#$rs $n intr*t. N#$s n'e/'&i%iter#ns -$e %e$/ d#nt
n#$s av#ns (es#in . $n ,#,ent d#nn. VS.NET a %r $n 'r#Bet 4
N#$s retr#$v#ns %ertains des +i%hiers 'rsents dans &e d#sier 'hAsi-$e d$ 'r#Bet. Le '&$s intressant '#$r n#$s est &e +i%hier de
s$++i/e as+&. 5'est &e s$++i/e des servi%es 2e(. Un servi%e 2e( est gr 'ar VS.NET %#,,e $ne a''&i%ati#n 2ind#2s0 %.a.d. $ne
a''&i%ati#n -$i a $ne inter+a%e gra'hi-$e et d$ %#de '#$r &a grer. 5'est '#$r-$#i0 n#$s av#ns $ne +en*tre de %#n%e'ti#n 4
Un servi%e 2e( n'a n#r,a&e,ent 'as d'inter+a%e gra'hi-$e. I& re'rsente $n #(Bet -$'#n 'e$t a''e&er . distan%e. I& '#ss:de des
,th#des et &es a''&i%ati#ns a''e&&ent %e&&es-%i. N#$s &e verr#ns d#n% %#,,e $n #(Bet %&assi-$e ave% %ette 'arti%$&arit -$'i& a de
'#$v#ir *tre instan%i . distan%e via &e rsea$. A$ssi0 n'$ti&iser#ns-n#$s 'as &a +en*tre de %#n%e'ti#n 'rsente 'ar VS.NET.
Intress#ns-n#$s '&$t[t a$ %#de d$ servi%e en $ti&isant &'#'ti#n A++i%hageN5#de 4
P&$sie$rs '#ints s#nt . n#ter 4
&e +i%hier s'a''e&&e .ervice!.as+&.vb et n#n .ervice!.as+&. N#$s reviendr#ns s$r &e %#nten$ d$ +i%hier .ervice!.as+&
$n 'e$ '&$s &#in.
Servi%es 1EB H!
#n retr#$ve $ne +en*tre de %#de ana&#g$e . %e&&e -$'#n avait &#rs-$'#n %#nstr$isait des a''&i%ati#ns 2ind#2s ave%
VS.NET
Le %#de gnr 'ar VS.NET est &e s$ivant 4
Imports System.Web.Services
<System.Web.Services.WebService(Namespace := "http://tempuri.org/demo/Service1")> _
Public Class Service1
Inherits System.Web.Services.WebService
#Region " Code gnr par le Concepteur des services Web "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur des services Web.
InitializeComponent()
'Ajoutez votre code d'initialisation aprs l'appel InitializeComponent()
End Sub
'Requis par le Concepteur des services Web
Private components As System.ComponentModel.IContainer
'REMARQUE : la procdure suivante est requise par le Concepteur des services Web
'Elle peut tre modifie en utilisant le Concepteur des services Web.
'Ne la modifiez pas en utilisant l'diteur de code.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
End Sub
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
'CODEGEN : cette procdure est requise par le Concepteur des services Web
'Ne la modifiez pas en utilisant l'diteur de code.
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
#End Region
' EXEMPLE DE SERVICE WEB
' L'exemple de service HelloWorld() retourne la chane Hello World.
' Pour gnrer, ne commentez pas les lignes suivantes, puis enregistrez et gnrez le projet.
' Pour tester ce service Web, assurez-vous que le fichier .asmx est la page de dmarrage
' et appuyez sur F5.
'
'<WebMethod()> Public Function HelloWorld() As String
' HelloWorld = "Hello World"
' End Function
End Class
T#$t d'a(#rd0 re,ar-$#ns -$e n#$s av#ns &. $ne %&asse0 &a %&asse .ervice! -$i drive de &a %&asse 7eb.ervice 4
Public Class Service1
Inherits System.Web.Services.WebService
5e&a n#$s a,:ne . i,'#rter &'es'a%e de n#,s .yste+.7eb..ervices 4
Imports System.Web.Services
La d%&arati#n de &a %&asse est 'r%de d'$n attri($t de %#,'i&ati#n 4
<System.Web.Services.WebService(Namespace := "http://tempuri.org/demo/Service1")> _
Public Class Service1
Inherits System.Web.Services.WebService
L'attri($t SAste,.1e(.Servi%es.1e(Servi%e<= indi-$e -$e &a %&asse -$i s$it est $n servi%e 2e(. 5et attri($t ad,et divers 'ara,:tres
d#nt $n a''e& Na+e.pace. I& sert . '&a%er &e servi%e 2e( dans $n es'a%e de n#,s. En e++et0 #n 'e$t i,aginer -$'i& A ait '&$sie$rs
servi%es 2e( a''e&s +eteo dans &e ,#nde. I& n#$s +a$t $n ,#Aen de &es di++rentier. 5'est &'es'a%e de n#,s -$i &e 'er,et. L'$n
Servi%es 1EB HF
'#$rra s'a''e&er Oespaceno+!P.+eteo et $n a$tre Oespaceno+%P.+eteo. ;n retr#$ve &.0 $n %#n%e't ana&#g$e a$/ es'a%es de
n#,s des %&asses. VS.NET a a$t#,ati-$e,ent gnr d$ %#de -$'i& a ,ise dans $ne rgi#n d$ s#$r%e 4
#Region " Code gnr par le Concepteur des services Web "
Si #n regarde %e %#de0 #n retr#$ve %e&$i -$e &e %#n%e'te$r gnrait &#rs-$'#n %#nstr$isait des a''&i%ati#ns 2ind#2s. 5'est $n %#de
-$e &'#n '#$rra '$re,ent et si,'&e,ent s$''ri,er si #n n'a 'as d'inter+a%e gra'hi-$e0 %e -$i sera n#tre %as '#$r &es servi%es 2e(.
La %&asse se ter,ine 'ar $n e/e,'&e de %e -$e '#$rrait *tre $n servi%e 2e( 4
#End Region
' EXEMPLE DE SERVICE WEB
' L'exemple de service HelloWorld() retourne la chane Hello World.
' Pour gnrer, ne commentez pas les lignes suivantes, puis enregistrez et gnrez le projet.
' Pour tester ce service Web, assurez-vous que le fichier .asmx est la page de dmarrage
' et appuyez sur F5.
'
'<WebMethod()> Public Function HelloWorld() As String
' HelloWorld = "Hello World"
' End Function
J#rt de %e -$i vient d'*tre dit0 n#$s nett#A#ns &e %#de '#$r -$'i& devienne &e s$ivant 4
Imports System.Web.Services
<System.Web.Services.WebService(Namespace:="st.istia.univ-angers.fr")> _
Public Class Bonjour
Inherits System.Web.Services.WebService
<WebMethod()> Public Function Bonjour() As String
Return "bonjour !"
End Function
End Class
N#$s A v#A#ns $n 'e$ '&$s %&air.
$n servi%e 2e( est $ne %&asse drivant de &a %&asse 1e(Servi%e
&a %&asse est -$a&i+ie 'ar &'attri($t _SAste,.1e(.Servi%es.1e(Servi%e<Na,es'a%e4VDst.istia.$niv-angers.+rD=`. ;n '&a%e
d#n% n#tre servi%e dans &'es'a%e de n#,s st.istia.univIangers.fr.
&es ,th#des de &a %&asse s#nt -$a&i+ies 'ar $n attri($t _1e(Meth#d<=` indi-$ant -$'#n a a++aire . $ne ,th#de -$i 'e$t
*tre a''e&e . distan%e via &e rsea$
La %&asse ass$rant n#tre servi%e 2e( s'a''e&&e d#n% BonCour et a $ne se$&e ,th#de s'a''e&ant e&&e-a$ssi BonCour -$i rend $ne
%haCne de %ara%t:res. N#$s s#,,es 'r*ts '#$r $n 're,ier test.
&an@#ns &e serve$r 2e( IIS si %e n'est +ait
$ti&is#ns &'#'ti#n /boguerDE&cuter sans dbogage. VS.NET
VS.NET va a&#rs %#,'i&er &'ense,(&e de &'a''&i%ati#n0 &an%er $n navigate$r <s#$vent Internet E/'&#rer s'i& est 'rsent=0 et a++i%her
&'$r& -ttpWDDlocal-ostDpolyvbnetDde+oD.ervice!.as+& 4
P#$r-$#i &'$r& -ttpWDDlocal-ostDpolyvbnetDde+oD.ervice!.as+& X Par%e -$e %'tait &e se$& +i%hier .as,/ d$ 'r#Bet 4
Servi%es 1EB H
S'i& A avait e$ '&$sie$rs +i%hiers .as,/0 i& n#$s a$rait +a&&$ 'r%iser %e&$i -$i devait *tre e/%$t en 're,ier. 5e&a se +ait en %&i-$ant
dr#it s$r &e +i%hier .as,/ %#n%ern et en 'renant &'#'ti#n TD+inir %#,,e 'age de d,arrageU.
;n '#$rrait *tre intress 'ar sav#ir %e -$e %#ntient &e +i%hier service!.as+&. En e++et0 ave% VS.NET n#$s av#ns travai&& s$r &e
+i%hier service!.as+&.vb et n#n s$r &e +i%hier service!.as+&. 5e +i%hier se tr#$ve dans &e d#ssier d$ 'r#Bet 4
;$vr#ns ave% $n dite$r de te/te <n#te'ad #$ a$tre=. ;n #(tient &e %#nten$ s$ivant 4
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Class="demo.Bonjour" %>
Le +i%hier %#ntient $ne si,'&e dire%tive . &'intenti#n d$ serve$r IIS indi-$ant 4
-$'#n a a++aire . $n servi%e 2e( <,#t %& 1e(Servi%e=
-$e &e &angage de &a %&asse de %e servi%e est Vis$a& Basi% <Lang$ageVDv(D=
-$e &e s#$r%e de %ette %&asse sera tr#$ve dans &e +i%hier Servi%eF.as,/.v( <5#de(ehindVDServi%eF.as,/.v(D=
-$e &a %&asse i,'&,entant &e servi%e s'a''e&&e de,#.B#nB#$r <5&assVDde,#.B#nB#$rD=. ;n re,ar-$era -$e VS.NET a
'&a% &a %&asse BonCour dans &'es'a%e de n#,s de+o -$i est a$ssi &e n#, d$ 'r#Bet.
Servi%es 1EB HH
Reven#ns . &a 'age #(ten$e . &'$r& -ttpWDDlocal-ostDpolyvbnetDde+oD.ervice!.as+& 4
f$i a %rit &e %#de eTML de &a 'age %i-dess$s X Pas n#$s0 n#$s &e sav#ns. 5'est IIS0 -$i 'rsente &es servi%es 2e( d'$ne +a@#n
standard. 5ette 'age n#$s 'r#'#se de$/ &iens. S$iv#ns &e 're,ier TDes%ri'ti#n d$ servi%eU 4
;##'s... %'est d$ 3ML '&$t[t a(s%#ns. Re,ar-$#ns -$and ,*,e &'URL
-ttpWDDlocal-ostDpolyvbnetDde+oD.ervice!.as+&B7./5. PreneQ $n navigate$r0 et ta'eQ dire%te,ent %ette $r&. V#$s #(teneQ
&a ,*,e %h#se -$e 'r%de,,ent. ;n se ra''e&&era d#n% -$e &'$r& -ttpWDDservice2ebB7./5 d#nne a%%:s . &a des%ri'ti#n 3ML
d$ servi%e 2e(. Reven#ns . &a 'age de d'art et 'ren#ns &e &ien TB#nB#$rU. Ra''e&#ns-n#$s -$e B#nB#$r est $ne ,th#de d$ servi%e
2e(. Si n#$s avi#ns e$ '&$sie$rs ,th#des0 e&&es a$raient t t#$tes 'rsentes i%i. N#$s #(ten#ns &a n#$ve&&e 'age s$ivante 4
N#$s av#ns v#&#ntaire,ent tr#n-$ &a 'age #(ten$e '#$r ne 'as a&#$rdir n#tre d,#nstrati#n. Re,ar-$#ns de n#$vea$ &'$r&
#(ten$e 4
http://localhost/polyvbnet/demo/Service1.asmx?op=Bonjour
Si n#$s ta'#ns dire%te,ent %ette $r& dans $n navigate$r0 n#$s #(tiendr#ns &a ,*,e %h#se -$e %i-dess$s. ;n n#$s in%ite . $ti&iser &e
(#$t#n TA''e&erU. Jais#ns-&e. N#$s #(ten#ns $ne n#$ve&&e 'age 4
Servi%es 1EB H"
5'est de n#$vea$ d$ 3ML. ;n A retr#$ve de$/ in+#r,ati#ns -$i taient 'rsentes dans n#tre servi%e 2e( 4
&'es'a%e de n#,s st.istia.$niv-angers.+r de n#tre servi%e
<System.Web.Services.WebService(Namespace:="st.istia.univ-angers.fr")>
&a va&e$r rend$e 'ar &a ,th#de B#nB#$r 4
Return "bonjour !"
f$'av#ns-n#$s a''ris X
&a +a@#n d'%rire $n servi%e 2e( S
&a +a@#n de &'a''e&er
N#$s n#$s intress#ns ,aintenant . &'%rit$re d'$n servi%e 2e( sans &'aide de VS.NET.
L.H. Versi#n
Dans &'e/e,'&e 'r%dent0 VS.NET a +ait (ea$%#$' de %h#ses t#$t se$&. Est-i& '#ssi(&e de %#nstr$ire $n servi%e 2e( sans %et #$ti& X
La r'#nse est #$i et n#$s &e ,#ntr#ns ,aintenant. Ave% $n dite$r de te/te0 n#$s %#nstr$is#ns &e servi%e 2e( s$ivant 4
Imports System.Web.Services
<System.Web.Services.WebService(Namespace:="st.istia.univ-angers.fr")> _
Public Class Bonjour2
Inherits System.Web.Services.WebService
<WebMethod()> Public Function getBonjour() As String
Return "bonjour de nouveau !"
End Function
End Class
La %&asse s'a''e&&e BonCour% et a $ne ,th#de -$i s'a''e&&e getBonCour. E&&e a t '&a%e dans &e +i%hier de+o%.vb &$i ,*,e '&a%
dans &'ar(#res%en%e d$ serve$r IIS dans &e d#ssier 7:LInetpu"LIIIrootLpoly!"netLdemo2. 5'est $ne %&asse VB.NET %&assi-$e -$'#n
'e$t d#n% %#,'i&er 4
dos>vbc /out:demo2 /t:library /r:system.dll /r:system.web.services.dll demo2.vb
dos>dir
02/03/2004 18:04 286 demo2.vb
02/03/2004 18:10 77 demo2.asmx
02/03/2004 18:12 3 072 demo2.dll
N#$s ,ett#ns &'asse,(&age de+o%.dll dans $n d#ssier bin <%e n#, est #(&igat#ire= 4
dos>dir bin
02/03/2004 18:12 3 072 demo2.dll
N#$s %r#ns ,aintenant &e +i%hier de+o%.as+&. 5'est &$i -$i sera a''e& 'ar &es %&ients 2e(. S#n %#nten$ est &e s$ivant 4
<%@ WebService Language="vb" class="Bonjour2,demo2"%>
N#$s av#ns dB. ren%#ntr %ette dire%tive. E&&e indi-$e -$e 4
&a %&asse d$ servi%e 2e( s'a''e&&e BonCour% et se tr#$ve dans &'asse,(&age de+o%.dll. IIS %her%hera %et asse,(&age dans
di++rents endr#its et n#ta,,ent dans &e d#ssier bin d$ servi%e 2e(. 5'est '#$r-$#i0 n#$s av#ns '&a% &. &'asse,(&age
de+o%.dll.
Maintenant n#$s '#$v#ns +aire divers tests. ;n s'ass$re -$e IIS est a%ti+ et #n de,ande ave% $n navigate$r &'$r&
-ttpWDDlocal-ostDpolyvbnetDde+o%Dde+o%.as+& 4
Servi%es 1EB HI
P$is &'$r& -ttpWDDlocal-ostDpolyvbnetDde+o%Dde+o%.as+&B7./5
P$is &'URL -ttpWDDlocal-ostDpolyvbnetDde+o%Dde+o%.as+&Bop=getBonCour0 #> getBonCour est &e n#, de &'$ni-$e
,th#de de n#tre servi%e 2e( 4
N#$s $ti&is#ns &e (#$t#n TA''e&erU %i-dess$s 4
Servi%es 1EB HK
N#$s #(ten#ns (ien &e rs$&tat de &'a''e& . &a ,th#de getBonCour d$ servi%e 2e(. N#$s sav#ns ,aintenant %#,,ent %#nstr$ire
$n servi%e 2e( sans vs.net. N#$s +er#ns ds#r,ais a(stra%ti#n de &a +a@#n d#nt est %#nstr$it &e servi%e 2e( '#$r ne n#$s intresser
-$'a$/ +i%hiers +#nda,enta$/.
L.H.H Versi#n H
Les de$/ versi#ns 'r%dentes d$ servi%e 2e( TB#nB#$rU $ti&isaient de$/ +i%hiers 4
- $n +i%hier .as,/0 '#int d'entre d$ servi%e 2e(
- $n +i%hier .v(0 %#de s#$r%e d$ servi%e 2e(
N#$s ,#ntr#ns i%i0 -$'#n 'e$t se %#ntenter d$ se$& +i%hier .as,/. Le %#de d$ servi%e de+o.as+& est &e s$ivant 4
<%@ WebService Language="vb" class="Bonjour3"%>
Imports System.Web.Services
<System.Web.Services.WebService(Namespace:="st.istia.univ-angers.fr")> _
Public Class Bonjour3
Inherits System.Web.Services.WebService
<WebMethod()> Public Function getBonjour() As String
Return "bonjour en version3 !"
End Function
End Class
N#$s %#nstat#ns -$e &e %#de s#$r%e d$ servi%e est ,aintenant dire%te,ent dans &e +i%hier s#$r%e d$ +i%hier de+o.as+&. La
dire%tive
<%@ WebService Language="vb" class="Bonjour3"%>
ne r+ren%e '&$s $ne %&asse dans $n asse,(&age e/terne0 ,ais $ne %&asse se tr#$vant dans &e ,*,e +i%hier s#$r%e. P&a@#ns %e&$i-%i
dans &e d#ssier _IISr##t`^'#&Av(net^de,#H 4
Lan@#ns IIS etd e,and#ns &'$r& -ttpWDDlocal-ostDpolyvbnetDde+oDde+o.as+& 4
N#$s %#nstat#ns $ne di++ren%e i,'#rtante 'ar ra''#rt . &a versi#n 'r%dente 4 n#$s n'av#ns 'as e$ . %#,'i&er &e %#de VB d$
servi%e. IIS a #'r %ette %#,'i&ati#n &$i-,*,e 'ar &'inter,diaire d$ %#,'i&ate$r VB.NET insta&& s$r &a ,*,e ,a%hine. P$is i& a
d&ivr &a 'age. S'i& A a $ne erre$r de %#,'i&ati#n0 %e&&e-%i sera signa&e 'ar IIS 4
Servi%es 1EB HO
L.H." Versi#n "
N#$s n#$s intress#ns i%i . &a %#n+ig$rati#n d$ serve$r IIS. N#$s av#ns t#$B#$rs0 B$s-$'. ,aintenant0 '&a% n#s servi%es 2e( dans
&'ar(#res%en%e de ra%ine _IISr##t` d$ serve$r IIS0 i%i Te4^inet'$(^222r##tU. N#$s ,#ntr#ns i%i -$e n#$s '#$v#ns '&a%er &e
servi%e 2e( n'i,'#rte #>. 5e&a se +ait . &'aide des d#ssiers virt$e&s de IIS. P&a@#ns n#tre servi%e dans &e d#ssier s$ivant 4
Le d#ssier TD4^data^deve&^v(net^'#&A^%ha'L^de,#HU ne se tr#$ve 'as dans &'ar(#res%en%e d$ serve$r IIS. ;n d#it &'indi-$er .
%e&$i-%i en %rant $n d#ssier IIS virt$e&. Lan@#ns IIS et 'ren#ns &'#'ti#n TAvan%U %i-dess#$s 4
N#$s av#ns $ne &iste de r'ert#ires virt$e&s -$i n#$s est 'rsente. N#$s ne n#$s attarder#ns 'as s$r %e&&e-%i. ;n %re $n n#$vea$
r'ert#ire virt$e& ave% &e (#$t#n TAB#$terU %i-dess$s 4
Servi%es 1EB HE
A &'aide d$ (#$t#n TPar%#$rirU0 n#$s dsign#ns &e d#ssier 'hAsi-$e %#ntenant &e servi%e 2e(0 i%i &e d#ssier
TD4^data^deve&^v(net^'#&A^%ha'L^de,#HU. N#$s d#nn#ns $n n#, &#gi-$e <virt$e&= . %e d#ssier 4 Tvirde,#HU. 5e&a signi+ie -$e &es
d#%$,ents . &'intrie$r d$ d#ssier 'hAsi-$e TD4^data^deve&^v(net^'#&A^%ha'L^de,#HU ser#nt a%%essi(&es s$r &e rsea$ via &'$r&
Thtt'4NN_,a%hine`Nvirde,#HU. La (#Cte de dia&#g$e %i-dess$s %#,'#rte d'a$tres 'ara,:tres -$'#n &aisse en &'tat. N#$s va&id#ns &a
(#Cte. Le n#$vea$ d#ssier virt$e& a''araCt dans &a &iste des d#ssiers virt$e&s de IIS 4
Maintenant0 n#$s 'ren#ns $n navigate$r et n#$s de,and#ns &'$r& Thtt'4NN&#%a&h#stNvirde,#HNde,#H.as,/U. N#$s #(ten#ns &a
,*,e %h#se -$'a$'aravant 4
L.H.I 5#n%&$si#n
N#$s av#ns ,#ntr '&$sie$rs +a@#ns de 'r#%der '#$r %rer $n servi%e 2e(. Par &a s$ite0 n#$s $ti&iser#ns &a ,th#de de &a versi#n H
'#$r &a %rati#n d$ servi%e et &a ,th#de " '#$r sa &#%a&isati#n. N#$s n'a$r#ns 'as ainsi (es#in de VS.NET. Nan,#ins n#t#ns
&'intr*t d'$ti&iser VS.NET '#$r &'aide -$'i& a''#rte a$ d(#gage. I& e/iste des #$ti&s grat$its '#$r dve&#''er des a''&i%ati#n 2e(0
n#ta,,ent &e 'r#d$it 1e(Matri/ s'#ns#ris 'ar Mi%r#s#+t et -$'#n tr#$vera . &'URL Thtt'4NN222.as'.netN2e(,atri/U. 5'est $n
#$ti& e/%e&&ent '#$r d,arrer &a 'r#gra,,ati#n 2e( sans investisse,ent 'ra&a(&e.
L." Un servi%e 2e( d'#'rati#ns
N#$s %#nsidr#ns $n servi%e 1e( -$i #++re %in- +#n%ti#ns 4
F. aB#$ter<a0(= -$i rendra aM(
. s#$straire<a0(= -$i rendra a-(
H. ,$&ti'&ier<a0(= -$i rendra aW(
". diviser<a0(= -$i rendra aN(
I. t#$t+aire<a0(= -$i rendra &e ta(&ea$ TaM(0a-(0aW(0aN(U
Le %#de VB.NET de %e servi%e est &e s$ivant 4
Servi%es 1EB HL
<%@ WebService language="VB" class=operations %>
imports system.web.services
<WebService(Namespace:="st.istia.univ-angers.fr")> _
Public Class operations
Inherits WebService
<WebMethod> _
Function ajouter(a As Double, b As Double) As Double
Return a + b
End Function

<WebMethod> _
Function soustraire(a As Double, b As Double) As Double
Return a - b
End Function
<WebMethod> _
Function multiplier(a As Double, b As Double) As Double
Return a * b
End Function
<WebMethod> _
Function diviser(a As Double, b As Double) As Double
Return a / b
End Function
<WebMethod> _
Function toutfaire(a As Double, b As Double) As Double()
Return New Double() {a + b, a - b, a * b, a / b}
End Function
End Class
N#$s re'ren#ns i%i %ertaines e/'&i%ati#ns dB. d#nnes ,ais -$i ,ritent d'*tre ra''e&es #$ %#,'&tes. La %&asse operations
resse,(&e . $ne %&asse VB.NET ave% %e'endant -$e&-$es '#ints . n#ter 4
&es ,th#des s#nt 'r%des d'$n attri($t Y7eb<et-od01Z -$i indi-$e a$ %#,'i&ate$r &es ,th#des -$i d#ivent *tre
D'$(&iesD %.a.d. rend$es dis'#ni(&es a$ %&ient. Une ,th#de n#n 'r%de de %et attri($t serait invisi(&e a$/ %&ients
distants. 5e '#$rrait *tre $ne ,th#de interne $ti&ise 'ar d'a$tres ,th#des ,ais 'as destine . *tre '$(&ie.
&a %&asse drive de &a %&asse 6e"Ser!ice d+inie dans &'es'a%e de n#,s System.6e".Ser!ices. 5et hritage n'est 'as t#$B#$rs
#(&igat#ire. Dans %et e/e,'&e n#ta,,ent #n '#$rrait s'en 'asser.
&a %&asse e&&e-,*,e est 'r%de d'$n attri($t Y7eb.ervice0Na+espace=Mst.istia.univIangers.frM1Z destin . d#nner
$n es'a%e de n#,s a$ servi%e 2e(. Un vende$r de %&asses d#nne $n es'a%e de n#,s . ses %&asses a+in de &e$r d#nner $n
n#, $ni-$e et viter ainsi des %#n+&its ave% des %&asses d'a$tres vende$rs -$i '#$rraient '#rter &e ,*,e n#,. P#$r &es
servi%es 1e(0 %'est 'arei&. 5ha-$e servi%e 2e( d#it '#$v#ir *tre identi+i 'ar $n n#, $ni-$e0 i%i 'ar st.istia.univI
angers.fr.
n#$s n'av#ns 'as d+ini de %#nstr$%te$r. 5'est d#n% i,'&i%ite,ent &e %#nstr$%te$r de &a %&asse 'arent -$i sera $ti&is.
Le %#de s#$r%e 'r%dent n'est 'as destin dire%te,ent a$ %#,'i&ate$r VB.NET ,ais a$ serve$r 1e( IIS. I& d#it '#rter &e s$++i/e
.asmx et sa$vegard dans &'ar(#res%en%e d$ serve$r 1e(. I%i n#$s &e sa$vegard#ns s#$s &e n#, operations.as+& dans &e d#ssier
YII.rootZNpolyvbnetNoperations 4
N#$s ass#%i#ns . %e d#ssier 'hAsi-$e0 &e d#ssier virt$e& IIS T#'erati#nsU 4
Servi%es 1EB "!
A%%d#ns a$ servi%e ave% $n navigate$r. L'UR& . de,ander est Thtt'4NN&#%a&h#stN#'erati#nsN#'erati#ns.as,/U 4
N#$s #(ten#ns $n d#%$,ent 1e( ave% $n &ien '#$r %ha%$ne des ,th#des d+inies dans &e servi%e 2e( operations. S$iv#ns &e &ien
a,outer 4
La 'age #(ten$e n#$s 'r#'#se de tester &a ,th#de a,outer en &$i +#$rnissant &es de$/ arg$,ents a et " d#nt e&&e a (es#in. Ra''e&#ns
&a d+initi#n de &a ,th#de a,outer 4
<WebMethod> _
Function ajouter(a As Double, b As Double) As Double
Return a + b
End Function
;n n#tera -$e &a 'age a re'ris &es n#,s des arg$,ents a et " $ti&iss dans &a d+initi#n de &a ,th#de. ;n $ti&ise &e (#$t#n Hppeler
et #n #(tient &a r'#nse s$ivante dans $ne +en*tre s'are d$ navigate$r 4
Servi%es 1EB "F
Si %i-dess$s0 #n +ait TA++i%hageNS#$r%eU #n #(tient &e %#de s$ivant 4
Re+ais#ns &'#'rati#n '#$r &a ,th#de Tt#$t+aireU 4
N#$s #(ten#ns &a 'age s$ivante 4
Servi%es 1EB "
Uti&is#ns &e (#$t#n TA''e&erU %i-dess$s 4
Dans t#$s &es %as0 &a r'#nse d$ serve$r a &a +#r,e 4
C^xml !ersionD&1.3& encodingD&ut#V>&^\
2rponse au #ormat S:.
&a r'#nse est a$ +#r,at 3ML
&a &igne F est standard et est t#$B#$rs 'rsente dans &a r'#nse
&es &ignes s$ivantes d'endent d$ tA'e de rs$&tat <double,:rray8f/ouble=0 d$ n#,(re de rs$&tats0 et de &'es'a%e de
n#,s d$ servi%e 2e( <st.istia.univIangers.fr i%i=.
I& e/iste '&$sie$rs ,th#des interr#ger $n servi%e 2e( et #(tenir sa r'#nse . Reven#ns . &'URL d$ servi%e 4
Servi%es 1EB "H
et s$iv#ns &e &ien TaB#$terU. Dans 'age 'rsente0 s#nt e/'#ses de$/ ,th#des '#$r interr#ger &a +#n%ti#n TaB#$terU d$ servi%e 2e(
4
Servi%es 1EB ""
5es de$/ ,th#des d'a%%:s a$/ +#n%ti#ns d'$n servi%e 2e( s#nt a''e&es res'e%tive,ent 4 LTTPIP8.T et .8:P. N#$s &es
e/a,in#ns ,aintenant &'$ne a'r:s &'a$tre.
Note 4 dans &es 're,i:res versi#ns de VS.NET0 i& e/istait $ne Hi:,e ,th#de a''e&e LTTPI6ET. A$ B#$r d'%rit$re de %e
d#%$,ent <,ars !!"=0 %ette ,th#de ne se,(&e '&$s *tre dis'#ni(&e. 5e&a ve$t dire -$e &e servi%e 2e( gnr 'ar VS.NET
n'a%%e'te 'as de re-$*tes GET. 5e&a ne ve$t 'as dire -$'#n ne 'e$t 'as %rire de servi%es 2e( a%%e'tant &es re-$*tes GET0
n#ta,,ent ave% d'a$tres #$ti&s -$e VS.NET #$ si,'&e,ent . &a ,ain.
L.I Un %&ient eTTP-P;ST
N#$s s$iv#ns &a ,th#de 'r#'#se 'ar &e servi%e 2e( 4
5#,,ent#ns %e -$i est %rit. T#$t da'(#rd &e %&ient 2e( d#it env#Aer &es ent*tes eTTP s$ivants 4
POST /operations/operations.asmx/ajouter HTTP/1.1
Le %&ient 2e( +ait $ne re-$*te P;ST . &'URL
N#'erati#nsN#'erati#ns.as,/NaB#$ter se&#n &e 'r#t#%#&e eTTP
versi#n F.F
HOST: localhost
;n 'r%ise &a ,a%hine %i(&e de &a re-$*te. I%i &#%a&h#st. 5et ent*te a
t rend$ #(&igat#ire 'ar &a versi#n F.F d$ 'r#t#%#&e eTTP
Content-Type: application/x-www-form-urlencoded
;n 'r%ise i%i -$'a'r:s &es ent*tes eTTP #n va env#Aer des
'ara,:tres s$''&,entaires a$ +#r,at urlencoded. 5e +#r,at
re,'&a%e %ertains %ara%t:res 'ar &e$r %#de he/ad%i,a&.
Content-length: 7
5'est &a tai&&e en %ara%t:res de &a %haCne de 'ara,:tres -$i sera
env#Ae a'r:s &es ent*tes eTTP.
Les ent*tes eTTP s#nt s$ivis d'$ne &igne vide '$is de &a %haCne de 'ara,:tres d$ P;ST de T5#ntent-LengthU %ara%t:res s#$s &a
+#r,e aV33S(Voo #> 33 et oo s#nt &es %haCnes D$r&en%#desD des va&e$rs des 'ara,:tres a et (. N#$s en sav#ns asseQ '#$r
re'r#d$ire %e -$i %i-dess$s ave% n#tre %&ient t%' gnri-$e dB. $ti&is dans &e %ha'itre s$r &a 'r#gra,,ati#n t%'-i' 4
- n#$s &an@#ns IIS
- &e servi%e est dis'#ni(&e . &'$r& Thtt'4NN&#%a&h#stN#'erati#nsN#'erati#ns.as,/U
- n#$s $ti&is#ns &e %&ient t%' gnri-$e dans $ne +en*tre D;S
Servi%es 1EB "I
dos>clttcpgenerique localhost 80
Commandes :
POST /operations/operations.asmx/ajouter HTTP/1.1
HOST: localhost
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-length: 7
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 13:55:17 GMT
<-- X-Powered-By: ASP.NET
<--
a=2&b=3
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 13:55:26 GMT
<-- X-Powered-By: ASP.NET
<-- Connection: close
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 90
<--
<-- <?xml version="1.0" encoding="utf-8"?>
<-- <double xmlns="st.istia.univ-angers.fr">5</double>
[fin du thread de lecture des rponses du serveur]
fin
[fin du thread d'envoi des commandes au serveur]
Re,ar-$#ns t#$t d'a(#rd -$e n#$s av#ns aB#$t &'ent*te T5#nne%ti#n4 %&#seU '#$r de,ander a$ serve$r de +er,er &a %#nne/i#n
a'r:s av#ir env#A &a r'#nse. 5e&a est n%essaire i%i. Si #n ne &e dit 'as0 'ar d+a$t &e serve$r va garder &a %#nne/i#n #$verte. ;r sa
r'#nse est $ne s$ite de &ignes de te/te d#nt &a derni:re n'est 'as ter,ine 'ar $ne ,ar-$e de +in de &igne. I& se tr#$ve -$e n#tre
%&ient T5P gnri-$e &it des &ignes de te/te ter,ines 'ar &a ,ar-$e de +in de &igne ave% &a ,th#de Read.ine. Si &e serve$r ne +er,e
'as &a %#nne/i#n a'r:s env#i de &a derni:re &igne0 &e %&ient est (&#-$ 'ar%e -$'i& attend $ne ,ar-$e de +in de &igne -$i ne vient 'as.
Si &e serve$r +er,e &a %#nne/i#n0 &a ,th#de Read.ine d$ %&ient se ter,ine et &e %&ient ne reste 'as (&#-$.
A$ssit[t a'r:s av#ir re@$ &a &igne vide signa&ant &a +in des ent*tes eTTP0 &e serve$r IIS env#ie $ne 're,i:re r'#nse 4
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 13:55:17 GMT
<-- X-Powered-By: ASP.NET
<--
5ette r'#nse +#r,e $ni-$e,ent d'ent*tes eTTP indi-$e a$ %&ient -$'i& 'e$t env#Aer &es O %ara%t:res -$'i& a dit v#$&#ir env#Aer.
5e -$e n#$s +ais#ns 4
a=2&b=3
I& +a$t v#ir i%i -$e n#tre %&ient t%' env#ie '&$s de O %ara%t:res '$is-$'i& &es env#ie ave% $ne ,ar-$e de +in de &igne <6rite.ine=. 5a ne
g*ne 'as &e serve$r -$i des %ara%t:res re@$s ne 'rendra -$e &es O 're,iers et 'ar%e -$'ens$ite &a %#nne/i#n est +er,e <(onnection:
close=. 5es %ara%t:res en tr#' a$raient t g*nants si &a %#nne/i#n tait reste #$verte %ar a&#rs i&s a$raient t 'ris %#,,e venant de
&a %#,,ande s$ivante d$ %&ient. Une +#is &es 'ara,:tres re@$s0 &e serve$r env#ie sa r'#nse 4
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 13:55:26 GMT
<-- X-Powered-By: ASP.NET
<-- Connection: close
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 90
<--
<-- <?xml version="1.0" encoding="utf-8"?>
<-- <double xmlns="st.istia.univ-angers.fr">5</double>
N#$s av#ns ,aintenant &es &,ents '#$r %rire $n %&ient 'r#gra,, '#$r n#tre servi%e 2e(. 5e sera $n %&ient %#ns#&e a''e&
-ttpPost% et s'$ti&isant %#,,e s$it 4
dos>httpPost2 http://localhost/operations/operations.asmx
Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser] a b
Servi%es 1EB "K
ajouter 6 7
--> POST /operations/operations.asmx/ajouter HTTP/1.1
--> Host: localhost:80
--> Content-Type: application/x-www-form-urlencoded
--> Content-Length: 7
--> Connection: Keep-Alive
-->
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:38 GMT
<-- X-Powered-By: ASP.NET
<--
--> a=6&b=7
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:38 GMT
<-- X-Powered-By: ASP.NET
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 91
<--
<-- <?xml version="1.0" encoding="utf-8"?>
<-- <double xmlns="st.istia.univ-angers.fr">13</double>
[rsultat=13]
soustraire 8 9
--> POST /operations/operations.asmx/soustraire HTTP/1.1
--> Host: localhost:80
--> Content-Type: application/x-www-form-urlencoded
--> Content-Length: 7
--> Connection: Keep-Alive
-->
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:47 GMT
<-- X-Powered-By: ASP.NET
<--
--> a=8&b=9
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:47 GMT
<-- X-Powered-By: ASP.NET
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 91
<--
<-- <?xml version="1.0" encoding="utf-8"?>
<-- <double xmlns="st.istia.univ-angers.fr">-1</double>
[rsultat=-1]
fin
dos>
Le %&ient est a''e& en &$i 'assant &'URL d$ servi%e 2e( 4
dos>httpPost2 http://localhost/operations/operations.asmx
Ens$ite0 &e %&ient &it &es %#,,andes ta'es a$ %&avier et &es e/%$te. 5e&&es-%i s#nt a$ +#r,at 4
fonction a b
#> fonction est &a +#n%ti#n d$ servi%e 2e( a''e&e <aB#$ter0 s#$straire0 ,$&ti'&ier0 diviser= et a et b &es va&e$rs s$r &es-$e&&es va
#'rer %ette +#n%ti#n. Par e/e,'&e 4
ajouter 6 7
A 'artir de &.0 &e %&ient va +aire &a re-$*te eTTP n%essaire a$ serve$r 1e( et #(tenir $ne r'#nse. Les %hanges %&ient-serve$r s#nt
d$'&i-$s . &'%ran '#$r $ne ,ei&&e$re %#,'rhensi#n d$ 'r#%ess$s 4
ajouter 6 7
--> POST /operations/operations.asmx/ajouter HTTP/1.1
--> Host: localhost:80
--> Content-Type: application/x-www-form-urlencoded
--> Content-Length: 7
--> Connection: Keep-Alive
-->
Servi%es 1EB "O
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:38 GMT
<-- X-Powered-By: ASP.NET
<--
--> a=6&b=7
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:38 GMT
<-- X-Powered-By: ASP.NET
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 91
<--
<-- <?xml version="1.0" encoding="utf-8"?>
<-- <double xmlns="st.istia.univ-angers.fr">13</double>
[rsultat=13]
;n retr#$ve %i-dess$s &'%hange dB. ren%#ntr ave% &e %&ient t%' gnri-$e . $ne di++ren%e 'r:s 4 &'ent*te eTTP =onnectionW
VeepI:live de,ande a$ serve$r de ne 'as +er,er &a %#nne/i#n. 5e&&e-%i reste d#n% #$verte '#$r &'#'rati#n s$ivante d$ %&ient -$i
n'a d#n% 'as (es#in de se re%#nne%ter de n#$vea$ a$ serve$r. 5e&a &'#(&ige %e'endant . $ti&iser $ne a$tre ,th#de -$e Read.ine)+
'#$r &ire &a r'#nse d$ serve$r '$is-$'#n sait -$e %e&&e-%i est $ne s$ite de &ignes d#nt &a derni:re n'est 'as ter,ine 'ar $ne ,ar-$e
de +in de &igne. Une +#is t#$te &a r'#nse d$ serve$r #(ten$e0 &e %&ient &'ana&Ase '#$r A tr#$ver &e rs$&tat de &'#'rati#n de,ande et
&'a++i%her 4
[rsultat=13]
E/a,in#ns &e %#de de n#tre %&ient 4
' espaces de noms
Imports System
Imports System.Net.Sockets
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Collections
Imports Microsoft.VisualBasic
Imports System.Web
' client d'un service @eb operations
Public Module clientPOST
Public Sub Main(ByVal args() As String)
' s(ntae
Const syntaxe As String = "pg URI"
Dim fonctions As String() = {"ajouter", "soustraire", "multiplier", "diviser"}
' nombre d'arguments
If args.Length <> 1 Then
erreur(syntaxe, 1)
End If
' on note l'6A# demande
Dim URIstring As String = args(0)
' on se connecte au serveur
Dim uri As Uri = Nothing ' l'6A# du service @eb
Dim client As TcpClient = Nothing ' la liaison tcp du client avec le serveur
Dim [IN] As StreamReader = Nothing ' le flu de lecture du client
Dim OUT As StreamWriter = Nothing ' le flu d'criture du client
Try
' conneion au serveur
uri = New Uri(URIstring)
client = New TcpClient(uri.Host, uri.Port)
' on cre les flu d'entre-sortie du client 3%,
[IN] = New StreamReader(client.GetStream())
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
Catch ex As Exception
' 6A# incorrecte ou autre problme
erreur("L'erreur suivante s'est produite : " + ex.Message, 2)
End Try
' cration d'un dictionnaire des fonctions du service @eb
Dim dicoFonctions As New Hashtable
Dim i As Integer
For i = 0 To fonctions.Length - 1
dicoFonctions.Add(fonctions(i), True)
Next i
Servi%es 1EB "E
' les demandes de l'utilisateur sont tapes au clavier
' sous la forme fonction a b
' elles se terminent avec la commande fin
Dim commande As String = Nothing ' commande tape au clavier
Dim champs As String() = Nothing ' champs d'une ligne de commande
Dim fonction As String = Nothing ' nom d'une fonction du service @eb
Dim a, b As String ' les arguments des fonctions du service @eb
' invite l'utilisateur
Console.Out.WriteLine("Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser] a b")
' gestion des erreurs
Dim erreurCommande As Boolean
Try
' boucle de saisie des commandes tapes au clavier
While True
' pas d'erreur au dpart
erreurCommande = False
' lecture commande
commande = Console.In.ReadLine().Trim().ToLower()
' fini >
If commande Is Nothing Or commande = "fin" Then
Exit While
End If
' dcomposition de la commande en champs
champs = Regex.Split(commande, "\s+")
Try
' il faut trois champs
If champs.Length <> 3 Then
Throw New Exception
End If
' le champ L doit <tre une fonction reconnue
fonction = champs(0)
If Not dicoFonctions.ContainsKey(fonction) Then
Throw New Exception
End If
' le champ 1 doit <tre un nombre valide
a = champs(1)
Double.Parse(a)
' le champ 2 doit <tre un nombre valide
b = champs(2)
Double.Parse(b)
Catch
' commande invalide
Console.Out.WriteLine("syntaxe : [ajouter|soustraire|multiplier|diviser] a b")
erreurCommande = True
End Try
' on fait la demande au service @eb
If Not erreurCommande Then executeFonction([IN], OUT, uri, fonction, a, b)
End While
Catch e As Exception
Console.Out.WriteLine(("L'erreur suivante s'est produite : " + e.Message))
End Try
' fin liaison client-serveur
Try
[IN].Close()
OUT.Close()
client.Close()
Catch
End Try
End Sub
...........
' affichage des erreurs
Public Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Module
;n a &. des %h#ses dB. ren%#ntres '&$sie$rs +#is et -$i ne n%essitent 'as de %#,,entaires 'arti%$&iers. E/a,in#ns ,aintenant &e
%#de de &a ,th#de executeBonction #> rsident &es n#$vea$ts 4
' eecute1onction
Public Sub executeFonction(ByVal [IN] As StreamReader, ByVal OUT As StreamWriter, ByVal uri As Uri,
ByVal fonction As String, ByVal a As String, ByVal b As String)
' ecute fonction-a'b0 sur le service @eb d'6A# uri
' les changes client-serveur se font via les flu #4 et !63
' le rsultat de la fonction est dans la ligne
Servi%es 1EB "L
' Wdouble mlns2Dst?istia?univ-angers?frD>doubleWTdouble>
' envo(e par le serveur
' construction de la chane de re$u<te
Dim requte As String = "a=" + HttpUtility.UrlEncode(a) + "&b=" + HttpUtility.UrlEncode(b)
Dim nbChars As Integer = requte.Length
' construction du tableau des ent<tes U33, envo(er
Dim entetes(5) As String
entetes(0) = "POST " + uri.AbsolutePath + "/" + fonction + " HTTP/1.1"
entetes(1) = "Host: " & uri.Host & ":" & uri.Port
entetes(2) = "Content-Type: application/x-www-form-urlencoded"
entetes(3) = "Content-Length: " & nbChars
entetes(4) = "Connection: Keep-Alive"
entetes(5) = ""
' on envoie les ent<tes U33, au serveur
Dim i As Integer
For i = 0 To entetes.Length - 1
' envoi au serveur
OUT.WriteLine(entetes(i))
' cho cran
Console.Out.WriteLine(("--> " + entetes(i)))
Next i
' on lit la 1ere rponse du serveur 5eb U33,T1?1 1LL
Dim ligne As String = Nothing
' une ligne du flu de lecture
ligne = [IN].ReadLine()
While ligne <> ""
'cho
Console.Out.WriteLine(("<-- " + ligne))
' ligne suivante
ligne = [IN].ReadLine()
End While
'cho dernire ligne
Console.Out.WriteLine(("<-- " + ligne))
' envoi paramtres de la re$u<te
OUT.Write(requte)
' echo
Console.Out.WriteLine(("--> " + requte))
' construction de l'epression rgulire permettant de retrouver la taille de la rponse Q;*
' dans le flu de la rponse du serveur @eb
Dim modleLength As String = "^Content-Length: (.+?)\s*$"
Dim RegexLength As New Regex(modleLength) '
Dim MatchLength As Match = Nothing
Dim longueur As Integer = 0
' lecture seconde rponse du serveur @eb aprs envoi de la re$u<te
' on mmorise la valeur de la ligne %ontent-*ength
ligne = [IN].ReadLine()
While ligne <> ""
' cho cran
Console.Out.WriteLine(("<-- " + ligne))
' %ontent-*ength >
MatchLength = RegexLength.Match(ligne)
If MatchLength.Success Then
longueur = Integer.Parse(MatchLength.Groups(1).Value)
End If
' ligne suivante
ligne = [IN].ReadLine()
End While
' cho dernire ligne
Console.Out.WriteLine("<--")
' construction de l'epression rgulire permettant de retrouver le rsultat
' dans le flu de la rponse du serveur @eb
Dim modle As String = "<double xmlns=""st.istia.univ-angers.fr"">(.+?)</double>"
Dim ModleRsultat As New Regex(modle)
Dim MatchRsultat As Match = Nothing
' on lit le reste de la rponse du serveur @eb
Dim chrRponse(longueur) As Char
[IN].Read(chrRponse, 0, longueur)
Dim strRponse As String = New [String](chrRponse)
' on dcompose la rponse en lignes de tete
Dim lignes As String() = Regex.Split(strRponse, ControlChars.Lf)
Servi%es 1EB I!
' on parcourt les lignes de tete la recherche du rsultat
Dim strRsultat As String = "?" ' rsultat de la fonction
For i = 0 To lignes.Length - 1
' suivi
Console.Out.WriteLine(("<-- " + lignes(i)))
' comparaison ligne courante au modle
MatchRsultat = ModleRsultat.Match(lignes(i))
' a-t-on trouv >
If MatchRsultat.Success Then
' on note le rsultat
strRsultat = MatchRsultat.Groups(1).Value
End If
Next i
' on affiche le rsultat
Console.Out.WriteLine(("[rsultat=" + strRsultat + "]" + ControlChars.Lf))
End Sub
T#$t d'a(#rd0 &e %&ient eTTP-P;ST env#ie sa de,ande a$ +#r,at P;ST 4
' construction de la chane de re$u<te
Dim requte As String = "a=" + HttpUtility.UrlEncode(a) + "&b=" + HttpUtility.UrlEncode(b)
Dim nbChars As Integer = requte.Length
' construction du tableau des ent<tes U33, envo(er
Dim entetes(5) As String
entetes(0) = "POST " + uri.AbsolutePath + "/" + fonction + " HTTP/1.1"
entetes(1) = "Host: " & uri.Host & ":" & uri.Port
entetes(2) = "Content-Type: application/x-www-form-urlencoded"
entetes(3) = "Content-Length: " & nbChars
entetes(4) = "Connection: Keep-Alive"
entetes(5) = ""
' on envoie les ent<tes U33, au serveur
Dim i As Integer
For i = 0 To entetes.Length - 1
' envoi au serveur
OUT.WriteLine(entetes(i))
' cho cran
Console.Out.WriteLine(("--> " + entetes(i)))
Next i
Dans &'ent*te
--> Content-Length: 7
#n d#it indi-$er &a tai&&e des 'ara,:tres -$i ser#nt env#As 'ar &e %&ient derri:re &es ent*tes eTTP 4
--> a=6&b=7
P#$r %e&a #n $ti&ise &e %#de s$ivant 4
' construction de la chane de re$u<te
Dim requte As String = "a=" + HttpUtility.UrlEncode(a) + "&b=" + HttpUtility.UrlEncode(b)
Dim nbChars As Integer = requte.Length
La ,th#de NttpUtility.Url7ncode)string chaine+ trans+#r,e %ertains des %ara%t:res de cha1ne en _n1n2 #> n1n2 est &e %#de AS5II d$
%ara%t:re trans+#r,. Les %ara%t:res viss 'ar %ette trans+#r,ati#n s#nt t#$s &es %ara%t:res aAant $n sens 'arti%$&ier dans $ne
re-$*te P;ST <&'es'a%e0 &e signe V0 &e signe S0 ...=. I%i &a ,th#de NttpUtility.Url7ncode est n#r,a&e,ent in$ti&e '$is-$e a et " s#nt
des n#,(res -$i ne %#ntiennent a$%$n de %es %ara%t:res 'arti%$&iers. E&&e est i%i e,'&#Ae . titre d'e/e,'&e. E&&e a (es#in de &'es'a%e
de n#,s System.6e". Une +#is -$e &e %&ient a env#A ses ent*tes eTTP 4
--> POST /operations/operations.asmx/ajouter HTTP/1.1
--> Host: localhost:80
--> Content-Type: application/x-www-form-urlencoded
--> Content-Length: 7
--> Connection: Keep-Alive
-->
&e serve$r r'#nd 'ar &'ent*te eTTP 133 (ontinue 4
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:47 GMT
<-- X-Powered-By: ASP.NET
<--
Servi%es 1EB IF
Le %#de se %#ntente de &ire et d'a++i%her . &'%ran %ette 're,i:re r'#nse 4
' on lit la 1ere rponse du serveur 5eb U33,T1?1 1LL
Dim ligne As String = Nothing
' une ligne du flu de lecture
ligne = [IN].ReadLine()
While ligne <> ""
'cho
Console.Out.WriteLine(("<-- " + ligne))
' ligne suivante
ligne = [IN].ReadLine()
End While
'cho dernire ligne
Console.Out.WriteLine(("<-- " + ligne))
Une +#is %ette 're,i:re r'#nse &$e0 &e %&ient d#it env#Aer ses 'ara,:tres 4
--> a=6&b=7
I& &e +ait ave% &e %#de s$ivant 4
' envoi paramtres de la re$u<te
OUT.Write(requte)
' echo
Console.Out.WriteLine(("--> " + requte))
Le serve$r va a&#rs env#Aer sa r'#nse. 5e&&e-%i est %#,'#se de de$/ 'arties 4
F. des ent*tes eTTP ter,ins 'ar $ne &igne vide
. &a r'#nse a$ +#r,at 3ML
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Wed, 03 Mar 2004 14:56:38 GMT
<-- X-Powered-By: ASP.NET
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 91
<--
<-- <?xml version="1.0" encoding="utf-8"?>
<-- <double xmlns="st.istia.univ-angers.fr">13</double>
Dans $n 're,ier te,'s0 &e %&ient &it &es ent*tes eTTP '#$r A tr#$ver &a &igne (ontentV.ength et r%$'rer &a tai&&e de &a r'#nse 3ML
<i%i L!=. 5e&&e-%i est r%$'re a$ ,#Aen d'$ne e/'ressi#n rg$&i:re. ;n a$rait '$ +aire a$tre,ent et sans d#$te de +a@#n '&$s
e++i%a%e.
' construction de l'epression rgulire permettant de retrouver la taille de la rponse Q;*
' dans le flu de la rponse du serveur @eb
Dim modleLength As String = "^Content-Length: (.+?)\s*$"
Dim RegexLength As New Regex(modleLength) '
Dim MatchLength As Match = Nothing
Dim longueur As Integer = 0
' lecture seconde rponse du serveur @eb aprs envoi de la re$u<te
' on mmorise la valeur de la ligne %ontent-*ength
ligne = [IN].ReadLine()
While ligne <> ""
' cho cran
Console.Out.WriteLine(("<-- " + ligne))
' %ontent-*ength >
MatchLength = RegexLength.Match(ligne)
If MatchLength.Success Then
longueur = Integer.Parse(MatchLength.Groups(1).Value)
End If
' ligne suivante
ligne = [IN].ReadLine()
End While
' cho dernire ligne
Console.Out.WriteLine("<--")
Une +#is -$'#n a &a &#ng$e$r N de &a r'#nse 3ML0 #n n'a '&$s -$'. &ire N %ara%t:res dans &e +&$/ IN de &a r'#nse d$ serve$r. 5ette
%haCne de N %ara%t:res est red%#,'#se en &ignes de te/te '#$r &es (es#ins d$ s$ivi %ran. Par,i %es &ignes #n %her%he &a &igne d$
rs$&tat 4
<-- <double xmlns="st.istia.univ-angers.fr">13</double>
Servi%es 1EB I
a$ ,#Aen &. en%#re d'$ne e/'ressi#n rg$&i:re. Une +#is &e rs$&tat tr#$v0 i& est a++i%h.
[rsultat=13]
La +in d$ %#de d$ %&ient est &a s$ivante 4
' construction de l'epression rgulire permettant de retrouver le rsultat
' dans le flu de la rponse du serveur @eb
Dim modle As String = "<double xmlns=""st.istia.univ-angers.fr"">(.+?)</double>"
Dim ModleRsultat As New Regex(modle)
Dim MatchRsultat As Match = Nothing
' on lit le reste de la rponse du serveur @eb
Dim chrRponse(longueur) As Char
[IN].Read(chrRponse, 0, longueur)
Dim strRponse As String = New [String](chrRponse)
' on dcompose la rponse en lignes de tete
Dim lignes As String() = Regex.Split(strRponse, ControlChars.Lf)
' on parcourt les lignes de tete la recherche du rsultat
Dim strRsultat As String = "?" ' rsultat de la fonction
For i = 0 To lignes.Length - 1
' suivi
Console.Out.WriteLine(("<-- " + lignes(i)))
' comparaison ligne courante au modle
MatchRsultat = ModleRsultat.Match(lignes(i))
' a-t-on trouv >
If MatchRsultat.Success Then
' on note le rsultat
strRsultat = MatchRsultat.Groups(1).Value
End If
Next i
' on affiche le rsultat
Console.Out.WriteLine(("[rsultat=" + strRsultat + "]" + ControlChars.Lf))
End Sub
L.K Un %&ient S;AP
N#$s t$di#ns i%i $n se%#nd %&ient -$i va &$i $ti&iser $n dia&#g$e %&ient-serve$r de tA'e .8:P <Si,'&e ;(Be%t A%%ess Pr#t#%#&=. Un
e/e,'&e de dia&#g$e n#$s est 'rsent '#$r &a +#n%ti#n a,outer 4
Servi%es 1EB IH
La de,ande d$ %&ient est $ne de,ande P;ST. ;n va d#n% retr#$ver %ertains des ,%anis,es d$ %&ient 'r%dent. La 'rin%i'a&e
di++ren%e est -$'a&#rs -$e &e %&ient eTTP-P;ST env#Aait &es 'ara,:tres a et " s#$s &a +#r,e
a=A&b=B
&e %&ient S;AP &es env#ie dans $n +#r,at 3ML '&$s %#,'&e/e 4
POST /operations/operations.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "st.istia.univ-angers.fr/ajouter"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ajouter xmlns="st.istia.univ-angers.fr">
<a>double</a>
<b>double</b>
</ajouter>
</soap:Body>
</soap:Envelope>
I& re@#it en ret#$r $ne r'#nse 3ML ga&e,ent '&$s %#,'&e/e -$e &es r'#nses v$es 'r%de,,ent 4
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ajouterResponse xmlns="st.istia.univ-angers.fr">
<ajouterResult>double</ajouterResult>
</ajouterResponse>
</soap:Body>
</soap:Envelope>
M*,e si &a de,ande et &a r'#nse s#nt '&$s %#,'&e/es0 i& s'agit (ien d$ ,*,e ,%anis,e eTTP -$e '#$r &e %&ient eTTP-P;ST.
L'%rit$re d$ %&ient S;AP 'e$t *tre ainsi %a&-$ s$r %e&&e d$ %&ient eTTP-P;ST. V#i%i $n e/e,'&e d'e/%$ti#n 4
dos>clientsoap1 http://localhost/operations/operations.asmx
Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser] a b
ajouter 3 4
--> POST /operations/operations.asmx HTTP/1.1
--> Host: localhost:80
--> Content-Type: text/xml; charset=utf-8
--> Content-Length: 321
--> Connection: Keep-Alive
--> SOAPAction: "st.istia.univ-angers.fr/ajouter"
-->
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Thu, 04 Mar 2004 07:28:29 GMT
<-- X-Powered-By: ASP.NET
<--
--> <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
Servi%es 1EB I"
<ajouter xmlns="st.istia.univ-angers.fr">
<a>3</a>
<b>4</b>
</ajouter>
</soap:Body>
</soap:Envelope>
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Thu, 04 Mar 2004 07:28:33 GMT
<-- X-Powered-By: ASP.NET
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 345
<--
<-- <?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst
ance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ajouterResponse xmlns="st.istia.univ-
angers.fr"><ajouterResult>7</ajouterResult></ajouterResponse
></soap:Body></soap:Envelope>
[rsultat=7]
Se$&e &a ,th#de executeBonction %hange. Le %&ient S;AP env#ie &es ent*tes eTTP de sa de,ande. I&s s#nt si,'&e,ent $n 'e$ '&$s
%#,'&e/es -$e %e$/ de eTTP-P;ST 4
ajouter 3 4
--> POST /operations/operations.asmx HTTP/1.1
--> Host: localhost:80
--> Content-Type: text/xml; charset=utf-8
--> Content-Length: 321
--> Connection: Keep-Alive
--> SOAPAction: "st.istia.univ-angers.fr/ajouter"
-->
Le %#de -$i &es gn:re 4
' eecute1onction
Public Sub executeFonction(ByVal [IN] As StreamReader, ByVal OUT As StreamWriter, ByVal uri As Uri,
ByVal fonction As String, ByVal a As String, ByVal b As String)
' ecute fonction-a'b0 sur le service @eb d'6A# uri
' les changes client-serveur se font via les flu #4 et !63
' le rsultat de la fonction est dans la ligne
' Wdouble mlns2Dst?istia?univ-angers?frD>doubleWTdouble>
' envo(e par le serveur
' construction de la chane de re$u<te +!/,
Dim requteSOAP As String = "<?xml version=" + """1.0"" encoding=""utf-8""?>" + ControlChars.Lf
requteSOAP += "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" + ControlChars.Lf
requteSOAP += "<soap:Body>" + ControlChars.Lf
requteSOAP += "<" + fonction + " xmlns=""st.istia.univ-angers.fr"">" + ControlChars.Lf
requteSOAP += "<a>" + a + "</a>" + ControlChars.Lf
requteSOAP += "<b>" + b + "</b>" + ControlChars.Lf
requteSOAP += "</" + fonction + ">" + ControlChars.Lf
requteSOAP += "</soap:Body>" + ControlChars.Lf
requteSOAP += "</soap:Envelope>"
Dim nbCharsSOAP As Integer = requteSOAP.Length
' construction du tableau des ent<tes U33, envo(er
Dim entetes(6) As String
entetes(0) = "POST " + uri.AbsolutePath + " HTTP/1.1"
entetes(1) = "Host: " & uri.Host & ":" & uri.Port
entetes(2) = "Content-Type: text/xml; charset=utf-8"
entetes(3) = "Content-Length: " & nbCharsSOAP
entetes(4) = "Connection: Keep-Alive"
entetes(5) = "SOAPAction: ""st.istia.univ-angers.fr/" + fonction + """"
entetes(6) = ""
' on envoie les ent<tes U33, au serveur
Dim i As Integer
For i = 0 To entetes.Length - 1
' envoi au serveur
OUT.WriteLine(entetes(i))
' cho cran
Console.Out.WriteLine(("--> " + entetes(i)))
Next i
En re%evant %ette de,ande0 &e serve$r env#ie sa 're,i:re r'#nse -$e &e %&ient a++i%he 4
Servi%es 1EB II
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Thu, 04 Mar 2004 07:28:29 GMT
<-- X-Powered-By: ASP.NET
<--
Le %#de de &e%t$re de %ette 're,i:re r'#nse est &e s$ivant 4
' on lit la 1ere rponse du serveur 5eb U33,T1?1 1LL
Dim ligne As String = Nothing
' une ligne du flu de lecture
ligne = [IN].ReadLine()
While ligne <> ""
'cho
Console.Out.WriteLine(("<-- " + ligne))
' ligne suivante
ligne = [IN].ReadLine()
End While '@hile
'cho dernire ligne
Console.Out.WriteLine(("<-- " + ligne))
Le %&ient va ,aintenant env#Aer ses 'ara,:tres a$ +#r,at 3ML dans -$e&-$e %h#se -$'#n a''e&&e $ne enve&#''e S;AP 4
--> <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ajouter xmlns="st.istia.univ-angers.fr">
<a>3</a>
<b>4</b>
</ajouter>
</soap:Body>
</soap:Envelope>
Le %#de 4
' envoi paramtres de la re$u<te
OUT.Write(requteSOAP)
' echo
Console.Out.WriteLine(("--> " + requteSOAP))
Le serve$r va a&#rs env#Aer sa r'#nse d+initive 4
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Thu, 04 Mar 2004 07:28:33 GMT
<-- X-Powered-By: ASP.NET
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 345
<--
<-- <?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst
ance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ajouterResponse xmlns="st.istia.univ-
angers.fr"><ajouterResult>7</ajouterResult></ajouterResponse
></soap:Body></soap:Envelope>
Le %&ient a++i%he . &'%ran &es ent*tes eTTP re@$s t#$t en A %her%hant &a &igne (ontentV.ength 4
' construction de l'epression rgulire permettant de retrouver la taille de la rponse Q;*
' dans le flu de la rponse du serveur @eb
Dim modleLength As String = "^Content-Length: (.+?)\s*$"
Dim RegexLength As New Regex(modleLength) '
Dim MatchLength As Match = Nothing
Dim longueur As Integer = 0
' lecture seconde rponse du serveur @eb aprs envoi de la re$u<te
' on mmorise la valeur de la ligne %ontent-*ength
ligne = [IN].ReadLine()
While ligne <> ""
' cho cran
Console.Out.WriteLine(("<-- " + ligne))
' %ontent-*ength >
MatchLength = RegexLength.Match(ligne)
If MatchLength.Success Then
longueur = Integer.Parse(MatchLength.Groups(1).Value)
Servi%es 1EB IK
End If
' ligne suivante
ligne = [IN].ReadLine()
End While '@hile
' cho dernire ligne
Console.Out.WriteLine("<--")
Une +#is &a tai&&e N de &a r'#nse 3ML %#nn$e0 &e %&ient &it N %ara%t:res dans &e +&$/ de &a r'#nse d$ serve$r0 d%#,'#se &a %haCne
r%$'re en &ignes de te/te '#$r &es a++i%her . &'%ran et A %her%her &a (a&ise 3ML d$ rs$&tat 4 Ca,outerResult\<C/a,outerResult\ et
a++i%her %e dernier 4
' construction de l'epression rgulire permettant de retrouver le rsultat
' dans le flu de la rponse du serveur @eb
Dim modle As String = "<" + fonction + "Result>(.+?)</" + fonction + "Result>"
Dim ModleRsultat As New Regex(modle)
Dim MatchRsultat As Match = Nothing
' on lit le reste de la rponse du serveur @eb
Dim chrRponse(longueur) As Char
[IN].Read(chrRponse, 0, longueur)
Dim strRponse As String = New [String](chrRponse)
' on dcompose la rponse en lignes de tete
Dim lignes As String() = Regex.Split(strRponse, ControlChars.Lf)
' on parcourt les lignes de tete la recherche du rsultat
Dim strRsultat As String = "?" ' rsultat de la fonction
For i = 0 To lignes.Length - 1
' suivi
Console.Out.WriteLine(("<-- " + lignes(i)))
' comparaison ligne courante au modle
MatchRsultat = ModleRsultat.Match(lignes(i))
' a-t-on trouv >
If MatchRsultat.Success Then
' on note le rsultat
strRsultat = MatchRsultat.Groups(1).Value
End If
'ligne suivante
Next i
' on affiche le rsultat
Console.Out.WriteLine(("[rsultat=" + strRsultat + "]" + ControlChars.Lf))
End Sub
L.O En%a's$&ati#n des %hanges %&ient-serve$r
I,agin#ns -$e n#tre servi%e 2e( operations s#it $ti&is 'ar diverses a''&i%ati#ns. I& serait intressant de ,ettre . dis'#siti#n de %e&&es-
%i $ne %&asse -$i +erait &'inter+a%e entre &'a''&i%ati#n %&iente et &e servi%e 2e( et -$i %a%herait &a ,aBe$re 'artie des %hanges rsea$
-$i0 '#$r &a '&$'art des dve&#''e$rs0 ne s#nt 'as trivia$/. ;n a$rait ainsi &e s%h,a s$ivant 4
L'a''&i%ati#n %&iente s'adresserait . &'inter+a%e %&ient-serve$r '#$r +aire ses de,andes a$ servi%e 2e(. 5e&&e-%i +erait t#$s &es %hanges
rsea$ n%essaires ave% &e serve$r et rendrait &e rs$&tat #(ten$ . &'a''&i%ati#n %&iente. 5e&&e-%i n'a$rait '&$s . s'#%%$'er des %hanges
ave% &e serve$r %e -$i +a%i&iterait grande,ent s#n %rit$re.
L.O.F La %&asse d'en%a's$&ati#n
A'r:s %e -$i a t v$ dans &es 'aragra'hes 'r%dents0 n#$s %#nnaiss#ns (ien ,aintenant &es %hanges rsea$ entre &e %&ient et &e
serve$r. N#$s av#ns ,*,e v$ tr#is ,th#des. N#$s %h#isiss#ns d'en%a's$&er &a ,th#de S;AP. La %&asse est &a s$ivante 4
' espaces de noms
Imports System
Imports System.Net.Sockets
Imports System.IO
Imports System.Text.RegularExpressions
Servi%es 1EB IO
Ma%hine %&iente Ma%hine serve$r
Servi%e 1e(
A''&i%ati#n
%&iente
Inter+a%e
%&ient-serve$r
internet
Imports System.Collections
Imports System.Web
Imports Microsoft.VisualBasic
' client+!/, du service 5eb operations
Public Class clientSOAP
' variables d'instance
Private uri As uri = Nothing ' l'6A# du service @eb
Private client As TcpClient = Nothing' la liaison tcp du client avec le serveur
Private [IN] As StreamReader = Nothing ' le flu de lecture du client
Private OUT As StreamWriter = Nothing' le flu d'criture du client
' dictionnaire des fonctions
Private dicoFonctions As New Hashtable
' liste des fonctions
Private fonctions As String() = {"ajouter", "soustraire", "multiplier", "diviser"}
' verbose
Private verbose As Boolean = False ' vrai' affiche l'cran les changes client-serveur
' constructeur
Public Sub New(ByVal uriString As String, ByVal verbose As Boolean)
' on note verbose
Me.verbose = verbose
' conneion au serveur
uri = New Uri(uriString)
client = New TcpClient(uri.Host, uri.Port)
' on cre les flu d'entre-sortie du client 3%,
[IN] = New StreamReader(client.GetStream())
OUT = New StreamWriter(client.GetStream())
OUT.AutoFlush = True
' cration du dictionnaire des fonctions du service @eb
Dim i As Integer
For i = 0 To fonctions.Length - 1
dicoFonctions.Add(fonctions(i), True)
Next i
End Sub
' fermeture de la conneion au serveur
Public Sub Close()
' fin liaison client-serveur
[IN].Close()
OUT.Close()
client.Close()
End Sub
' eecute1onction
Public Function executeFonction(ByVal fonction As String, ByVal a As String, ByVal b As String) As
String
' ecute fonction-a'b0 sur le service @eb d'6A# uri
' les changes client-serveur se font via les flu #4 et !63
' le rsultat de la fonction est dans la ligne
' Wdouble mlns2Dst?istia?univ-angers?frD>doubleWTdouble>
' envo(e par le serveur
' fonction valide >
fonction = fonction.Trim().ToLower()
If Not dicoFonctions.ContainsKey(fonction) Then
Return "[fonction [" + fonction + "] indisponible : (ajouter, soustraire,multiplier,diviser)]"
End If
' arguments a et b valides >
Dim doubleA As Double = 0
Try
doubleA = Double.Parse(a)
Catch
Return "[argument [" + a + "] incorrect (double)]"
End Try
Dim doubleB As Double = 0
Try
doubleB = Double.Parse(b)
Catch
Return "[argument [" + b + "] incorrect (double)]"
End Try
' division par Mro >
If fonction = "diviser" And doubleB = 0 Then
Return "[division par zro]"
Servi%es 1EB IE
End If
' construction de la chane de re$u<te +!/,
Dim requteSOAP As String = "<?xml version=" + """1.0"" encoding=""utf-8""?>" + ControlChars.Lf
requteSOAP += "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" + ControlChars.Lf
requteSOAP += "<soap:Body>" + ControlChars.Lf
requteSOAP += "<" + fonction + " xmlns=""st.istia.univ-angers.fr"">" + ControlChars.Lf
requteSOAP += "<a>" + a + "</a>" + ControlChars.Lf
requteSOAP += "<b>" + b + "</b>" + ControlChars.Lf
requteSOAP += "</" + fonction + ">" + ControlChars.Lf
requteSOAP += "</soap:Body>" + ControlChars.Lf
requteSOAP += "</soap:Envelope>"
Dim nbCharsSOAP As Integer = requteSOAP.Length
' construction du tableau des ent<tes U33, envo(er
Dim entetes(6) As String
entetes(0) = "POST " + uri.AbsolutePath + " HTTP/1.1"
entetes(1) = "Host: " + uri.Host + ":" + uri.Port.ToString
entetes(2) = "Content-Type: text/xml; charset=utf-8"
entetes(3) = "Content-Length: " + nbCharsSOAP.ToString
entetes(4) = "Connection: Keep-Alive"
entetes(5) = "SOAPAction: ""st.istia.univ-angers.fr/" + fonction + """"
entetes(6) = ""
' on envoie les ent<tes U33, au serveur
Dim i As Integer
For i = 0 To entetes.Length - 1
' envoi au serveur
OUT.WriteLine(entetes(i))
' cho cran
If verbose Then
Console.Out.WriteLine(("--> " + entetes(i)))
End If
Next i
' on lit la 1ere rponse du serveur 5eb U33,T1?1 1LL
Dim ligne As String = Nothing
' une ligne du flu de lecture
ligne = [IN].ReadLine()
While ligne <> ""
'cho
If verbose Then
Console.Out.WriteLine(("<-- " + ligne))
End If
' ligne suivante
ligne = [IN].ReadLine()
End While
'cho dernire ligne
If verbose Then
Console.Out.WriteLine(("<-- " + ligne))
End If
' envoi paramtres de la re$u<te
OUT.Write(requteSOAP)
' echo
If verbose Then
Console.Out.WriteLine(("--> " + requteSOAP))
End If
' construction de l'epression rgulire permettant de retrouver la taille de la rponse Q;*
' dans le flu de la rponse du serveur @eb
Dim modleLength As String = "^Content-Length: (.+?)\s*$"
Dim RegexLength As New Regex(modleLength) '
Dim MatchLength As Match = Nothing
Dim longueur As Integer = 0
' lecture seconde rponse du serveur @eb aprs envoi de la re$u<te
' on mmorise la valeur de la ligne %ontent-*ength
ligne = [IN].ReadLine()
While ligne <> ""
' cho cran
If verbose Then
Console.Out.WriteLine(("<-- " + ligne))
End If
' %ontent-*ength >
MatchLength = RegexLength.Match(ligne)
If MatchLength.Success Then
longueur = Integer.Parse(MatchLength.Groups(1).Value)
End If
' ligne suivante
Servi%es 1EB IL
ligne = [IN].ReadLine()
End While
' cho dernire ligne
If verbose Then
Console.Out.WriteLine("<--")
End If
' construction de l'epression rgulire permettant de retrouver le rsultat
' dans le flu de la rponse du serveur @eb
Dim modle As String = "<" + fonction + "Result>(.+?)</" + fonction + "Result>"
Dim ModleRsultat As New Regex(modle)
Dim MatchRsultat As Match = Nothing
' on lit le reste de la rponse du serveur @eb
Dim chrRponse(longueur) As Char
[IN].Read(chrRponse, 0, longueur)
Dim strRponse As String = New [String](chrRponse)
' on dcompose la rponse en lignes de tete
Dim lignes As String() = Regex.Split(strRponse, ControlChars.Lf)
' on parcourt les lignes de tete la recherche du rsultat
Dim strRsultat As String = "?" ' rsultat de la fonction
For i = 0 To lignes.Length - 1
' suivi
If verbose Then
Console.Out.WriteLine(("<-- " + lignes(i)))
End If ' comparaison ligne courante au modle
MatchRsultat = ModleRsultat.Match(lignes(i))
' a-t-on trouv >
If MatchRsultat.Success Then
' on note le rsultat
strRsultat = MatchRsultat.Groups(1).Value
End If
Next i
' on renvoie le rsultat
Return strRsultat
End Function
End Class
N#$s ne retr#$v#ns rien de ne$+ 'ar ra'#rt . %e -$i a t dB. v$. N#$s av#ns si,'&e,ent re'ris &e %#de d$ %&ient S;AP t$di et
&'av#ns ra,nag -$e&-$e 'e$ '#$r en +aire $ne %&asse. 5e&&e-%i a $n %#nstr$%te$r et de$/ ,th#des 4
' constructeur
Public Sub New(ByVal uriString As String, ByVal verbose As Boolean)
' executeFonction
Public Function executeFonction(ByVal fonction As String, ByVal a As String, ByVal b As String) As
String
' fermeture de la connexion au serveur
Public Sub Close()
et a &es attri($ts s$ivants 4
' variables d'instance
Private uri As Uri = Nothing ' l'URI du service web
Private client As TcpClient = Nothing' la liaison tcp du client avec le serveur
Private [IN] As StreamReader = Nothing ' le flux de lecture du client
Private OUT As StreamWriter = Nothing' le flux d'criture du client
' dictionnaire des fonctions
Private dicoFonctions As New Hashtable
' liste des fonctions
Private fonctions As String() = {"ajouter", "soustraire", "multiplier", "diviser"}
' verbose
Private verbose As Boolean = False ' vrai, affiche l'cran les changes client-serveur
;n 'asse a$ %#nstr$%te$r de$/ 'ara,:tres 4
F. &'URI d$ servi%e 2e( a$-$e& i& d#it se %#nne%ter
. $n (##&en !er"ose -$i0 . vrai0 de,ande -$e &es %hanges rsea$ s#ient a++i%hs . &'%ran0 sin#n i&s ne &e ser#nt 'as.
A$ %#$rs de &a %#nstr$%ti#n0 #n %#nstr$it &es +&$/ I@ de &e%t$re rsea$0 5U% d'%rit$re rsea$0 ainsi -$e &e di%ti#nnaire des +#n%ti#ns
gres 'ar &e servi%e. Une +#is &'#(Bet %#nstr$it0 &a %#nne/i#n %&ient-serve$r est #$verte et ses +&$/ I@ et 5U% $ti&isa(&es.
Servi%es 1EB K!
La ,th#de (lose 'er,et de +er,er &a &iais#n ave% &e serve$r.
La ,th#de 7xecuteBonction est %e&&e -$'#n a %rite '#$r &e %&ient S;AP t$di0 . -$e&-$es dtai&s 'r:s 4
F. Les 'ara,:tres $ri0 IN et ;UT -$i taient a$'aravant 'asss en 'ara,:tres . &a ,th#de n'#nt '&$s (es#in de &'*tre0
'$is-$e %e s#nt ,aintenant des attri($ts d'instan%e a%%essi(&es . t#$tes &es ,th#des de &'instan%e
. La ,th#de 7xecuteBonction -$i rendait a$'aravant $n tA'e !oid et a++i%hait &e rs$&tat de &a +#n%ti#n . &'%ran0 rend
,aintenant %e rs$&tat et d#n% $n tA'e string.
TA'i-$e,ent $n %&ient $ti&isera &a %&asse clientS5H- de &a +a@#n s$ivante 4
F. %rati#n d'$n #(Bet clientS5H- -$i va %rer &a &iais#n ave% &e servi%e 2e(
. $ti&isati#n r'te de &a ,th#de executeBonction
H. +er,et$re de &a &iais#n ave% &e servi%e 1e( 'ar &a ,th#de (lose.
Et$di#ns $n 're,ier %&ient.
L.O. Un %&ient %#ns#&e
N#$s re'ren#ns i%i &e %&ient S;AP t$di a&#rs -$e &a %&asse %&ientS;AP n'e/istait 'as et n#$s &e ra,nage#ns a+in -$'i& $ti&ise
,aintenant %ette %&asse 4
' espaces de noms
Imports System
Imports System.IO
Imports System.Text.RegularExpressions
Imports Microsoft.VisualBasic
Public Module testClientSoap
' demande l'6A# du service @eb operations
' ecute de faPon interactive les commandes tapes au clavier
Public Sub Main(ByVal args() As String)
' s(ntae
Const syntaxe As String = "pg URI [verbose]"
' nombre d'arguments
If args.Length <> 1 And args.Length <> 2 Then
erreur(syntaxe, 1)
End If
' verbose >
Dim verbose As Boolean = False
If args.Length = 2 Then
verbose = args(1).ToLower() = "verbose"
End If
' on se connecte au service @eb
Dim client As clientSOAP = Nothing
Try
client = New clientSOAP(args(0), verbose)
Catch ex As Exception
' erreur de conneion
erreur("L'erreur suivante s'est produite lors de la connexion au service web : " + ex.Message, 2)
End Try
' les demandes de l'utilisateur sont tapes au clavier
' sous la forme fonction a b - elles se terminent avec la commande fin
Dim commande As String = Nothing ' commande tape au clavier
Dim champs As String() = Nothing ' champs d'une ligne de commande
' invite l'utilisateur
Console.Out.WriteLine("Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser] a b" +
ControlChars.Lf)
' gestion des erreurs
Dim erreurCommande As Boolean
Try
' boucle de saisie des commandes tapes au clavier
While True
' au dpart pas d'erreur
erreurCommande = False
' lecture commande
commande = Console.In.ReadLine().Trim().ToLower()
' fini >
If commande Is Nothing Or commande = "fin" Then
Exit While
End If
Servi%es 1EB KF
' dcomposition de la commande en champs
champs = Regex.Split(commande, "\s+")
' il faut trois champs
If champs.Length <> 3 Then
Console.Out.WriteLine("syntaxe : [ajouter|soustraire|multiplier|diviser] a b")
' on note l'erreur
erreurCommande = True
End If
' on fait la demande au service @eb
If Not erreurCommande Then Console.Out.WriteLine(("rsultat=" +
client.executeFonction(champs(0).Trim().ToLower(), champs(1).Trim(), champs(2).Trim())))
' demande suivante
End While
Catch e As Exception
Console.Out.WriteLine(("L'erreur suivante s'est produite : " + e.Message))
End Try
' fin liaison client-serveur
Try
client.Close()
Catch
End Try
End Sub
' affichage des erreurs
Public Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Module
La %&ient est ,aintenant %#nsidra(&e,ent '&$s si,'&e et #n n'A retr#$ve a$%$ne %#,,$ni%ati#n rsea$. Le %&ient ad,et de$/
'ara,:tres 4
F. &'URI d$ servi%e 2e( operations
. &e ,#t %& +a%$&tati+ !er"ose. S'i& est 'rsent0 &es %hanges rsea$ ser#nt a++i%hs . &'%ran.
5es de$/ 'ara,:tres s#nt $ti&iss '#$r %#nstr$ire $n #(Bet clientS5H- -$i va ass$rer &es %hanges ave% &e servi%e 2e(.
' on se connecte au service web
Dim client As clientSOAP = Nothing
Try
client = New clientSOAP(args(0), verbose)
Catch ex As Exception
' erreur de connexion
erreur("L'erreur suivante s'est produite lors de la connexion au service web : " + ex.Message, 2)
End Try
Une +#is #$verte &a %#nne/i#n ave% &e servi%e 2e(0 &e %&ient 'e$t env#Aer ses de,andes. 5e&&es-%i s#nt ta'es a$ %&avier0 ana&Ases
'$is env#Aes a$ serve$r 'ar a''e& . &a ,th#de executeBonction de &'#(Bet clientS5H-.
' on fait la demande au service web
If Not erreurCommande Then Console.Out.WriteLine(("rsultat=" +
client.executeFonction(champs(0).Trim().ToLower(), champs(1).Trim(), champs(2).Trim())))
La %&asse clientS5H- est %#,'i&e dans $n Dasse,(&ageD 4
dos>vbc /r:clientSOAP.dll testClientSOAP.vb
dos>dir
04/03/2004 08:46 6 913 clientSOAP.vb
04/03/2004 09:07 7 168 clientSOAP.dll
L'a''&i%ati#n %&ient test(lientSoap est ens$ite %#,'i&e 'ar 4
dos>vbc /r:clientSOAP.dll /r:system.dll testClientSOAP.vb
dos>dir
04/03/2004 09:08 2 711 testClientSOAP.vb
04/03/2004 09:08 4 608 testClientSOAP.exe
V#i%i $n e/e,'&e d'e/%$ti#n n#n ver(e$/ 4
dos>testclientsoap http://localhost/st/operations/operations.asmx
Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser] a b
ajouter 1 3
rsultat=4
Servi%es 1EB K
soustraire 6 7
rsultat=-1
multiplier 4 5
rsultat=20
diviser 1 2
rsultat=0.5
x
syntaxe : [ajouter|soustraire|multiplier|diviser] a b
x 1 2
rsultat=[fonction [x] indisponible : (ajouter, soustraire,multiplier,diviser)]
ajouter a b
rsultat=[argument [a] incorrect (double)]
ajouter 1 b
rsultat=[argument [b] incorrect (double)]
diviser 1 0
rsultat=[division par zro]
fin
;n 'e$t s$ivre &es %hanges rsea$ en de,andant $ne e/%$ti#ns Dver(e$seD 4
dos>testClientSOAP http://localhost/operations/operations.asmx verbose
Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser] a b
ajouter 4 8
--> POST /operations/operations.asmx HTTP/1.1
--> Host: localhost:80
--> Content-Type: text/xml; charset=utf-8
--> Content-Length: 321
--> Connection: Keep-Alive
--> SOAPAction: "st.istia.univ-angers.fr/ajouter"
-->
<-- HTTP/1.1 100 Continue
<-- Server: Microsoft-IIS/5.0
<-- Date: Thu, 04 Mar 2004 08:15:25 GMT
<-- X-Powered-By: ASP.NET
<--
--> <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ajouter xmlns="st.istia.univ-angers.fr">
<a>4</a>
<b>8</b>
</ajouter>
</soap:Body>
</soap:Envelope>
<-- HTTP/1.1 200 OK
<-- Server: Microsoft-IIS/5.0
<-- Date: Thu, 04 Mar 2004 08:15:25 GMT
<-- X-Powered-By: ASP.NET
<-- X-AspNet-Version: 1.1.4322
<-- Cache-Control: private, max-age=0
<-- Content-Type: text/xml; charset=utf-8
<-- Content-Length: 346
<--
<-- <?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst
ance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ajouterResponse xmlns="st.istia.univ-
angers.fr"><ajouterResult>12</ajouterResult></ajouterResponse></soap:Body></soap:Envelope>
rsultat=12
fin
5#nstr$is#ns ,aintenant $n %&ient gra'hi-$e.
L.O.H Un %&ient gra'hi-$e 2ind#2s
N#$s a&&#ns ,aintenant interr#ger n#tre servi%e 2e( ave% $n %&ient gra'hi-$e -$i $ti&isera &$i a$ssi &a %&asse clientS5H-. L'inter+a%e
gra'hi-$e sera &a s$ivante 4
Servi%es 1EB KH
Les %#ntr[&es s#nt &es s$ivants 4
nQ type no+ rJle
1
Te/tB#/ t/tURI &'URI d$ servi%e 2e( #'erati#ns
2
B$tt#n (tn;$vrir #$vre &a &iais#n ave% &e servi%e 1e(
3
B$tt#n (tnJer,er +er,e &a &iais#n ave% &e servi%e 1e(
4
5#,(#B#/ %,(J#n%ti#ns &a &iste des +#n%ti#n <aB#$ter0 s#$straire0 ,$&ti'&ier0 diviser=
5
Te/tB#/ t/tA &'arg$,ent a des +#n%ti#ns
6
Te/tB#/ t/tB &'arg$,ent ( des +#n%ti#ns
7
Te/tB#/ t/tRs$&tat &e rs$&tat de +#n%ti#n<a0(=
8
B$tt#n (tn5a&%$&er &an%e &e %a&%$& de +#n%ti#n<a0(=
9
Te/tB#/ t/tErre$r a++i%he $n ,sg d'tat de &a &iais#n
I& A a -$e&-$es %#ntraintes de +#n%ti#nne,ent 4
&e (#$t#n "tn5u!rir n'est a%ti+ -$e si &e %ha,' txtURI est n#n vide et -$'$ne &iais#n n'est 'as dB. #$verte
&e (#$t#n "tnBermer n'est a%ti+ -$e &#rs-$'$ne &iais#n ave% &e servi%e 2e( a t #$verte
&e (#$t#n "tn(alculer n'est a%ti+ -$e &#rs-$'$ne &iais#n est #$verte et -$es %ha,'s txtH et txtP s#nt n#n vides
&es %ha,'s txtRsultat et txt7rreur #nt &'attri($t Read5nly . vrai
Le %&ient %#,,en%e 'ar #$vrir &a %#nne/i#n ave% &e servi%e 2e( . &'aide d$ (#$t#n T;$vrirU 4
Servi%es 1EB K"
F

H
" I K
O
E
L
Ens$ite &'$ti&isate$r 'e$t %h#isir $ne +#n%ti#n et des va&e$rs '#$r a et ( 4
Servi%es 1EB KI
Le %#de de &'a''&i%ati#n s$it. N#$s av#ns #,is &e %#de d$ +#r,$&aire -$i ne 'rsente 'as d'intr*t i%i.
'espaces de noms
Imports System
Imports System.Windows.Forms
' la classe du formulaire
Public Class FormClientSOAP
Inherits System.Windows.Forms.Form
' attributs d'instance
Dim client As clientSOAP ' client +!/, du service @eb operations
#Region " Code gnr par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'%et appel est re$uis par le %oncepteur 5indo@s 1orm?
InitializeComponent()
' autres initialisations
myInit()
End Sub
'*a mthode substitue )ispose du formulaire pour netto(er la liste des composants?
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
....
End Sub
...
Private Sub InitializeComponent()
....
End Sub
#End Region
Private Sub myInit()
' init formulaire
cmbFonctions.SelectedIndex = 0
btnOuvrir.Enabled = False
btnFermer.Enabled = True
btnCalculer.Enabled = False
End Sub
Private Sub txtURI_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txtURI.TextChanged
' le contenu du champ de saisie a chang - on fie l'tat du bouton ouvrir
btnOuvrir.Enabled = txtURI.Text.Trim <> ""
End Sub
Private Sub btnOuvrir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
btnOuvrir.Click
' demande d'ouverture d'une conneion avec le service @eb
Try
' cration d'un objet de t(pe Hclient+!/,I
Servi%es 1EB KK
client = New clientSOAP(txtURI.Text.Trim, False)
' tats des boutons
btnOuvrir.Enabled = False
btnFermer.Enabled = True
' l'6A# ne peut plus <tre modifie
txtURI.ReadOnly = True
' tat client
txtErreur.Text = "Liaison au service web ouverte"
Catch ex As Exception
' il ( a eu une erreur - on l'affiche
txtErreur.Text = ex.Message
End Try
End Sub
Private Sub btnFermer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
btnFermer.Click
' fermeture le la conneion au service @eb
client.Close()
' tats boutons
btnOuvrir.Enabled = True
btnFermer.Enabled = False
' 6A#
txtURI.ReadOnly = False
' tat client
txtErreur.Text = "Liaison au service web ferme"
End Sub
Private Sub btnCalculer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
btnCalculer.Click
' calcul d'une fonction f-a'b0
' on efface le rsultat prcdent
txtRsultat.Text = ""
Try
txtRsultat.Text = client.executeFonction(cmbFonctions.Text, txtA.Text.Trim, txtB.Text.Trim)
Catch ex As Exception
' il ( a eu une erreur rseau
txtErreur.Text = ex.Message
' on ferme la liaison
btnFermer_Click(Nothing, Nothing)
End Try
End Sub
Private Sub txtA_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txtA.TextChanged
' changement de la valeur de /
btnCalculer.Enabled = txtA.Text.Trim <> "" And txtB.Text.Trim <> ""
End Sub
Private Sub txtB_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txtB.TextChanged
' changement de la valeur de &
txtA_TextChanged(Nothing, Nothing)
End Sub
' mthode principale
Public Shared Sub main()
Application.Run(New FormClientSOAP)
End Sub
End Class
L. en%#re &a %&asse clientS5H- %a%he t#$t &'as'e%t rsea$ de &'a''&i%ati#n. L'a''&i%ati#n a t %#nstr$ite de &a +a@#n s$ivante 4
- &'asse,(&age %&ientS;AP.d&& %#ntenant &a %&asse %&ientS;AP a t '&a% dans &e d#ssier d$ 'r#Bet
- &'inter+a%e gra'hi-$e clientsoapgui.vb a t %#nstr$ite ave% VS.NET '$is %#,'i&e dans $ne +en*tre d#s 4
dos>vbc /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /r:clientSOAP.dll clientsoapgui.vb
dos>dir
04/03/2004 09:13 7 168 clientSOAP.dll
04/03/2004 16:44 9 866 clientsoapgui.vb
04/03/2004 16:44 11 264 clientsoapgui.exe
L'inter+a%e gra'hi-$e a t ens$ite &an%e 'ar 4
dos>clientsoapgui
Servi%es 1EB KO
L.E Un %&ient 'r#/A
Ra''e&#ns %e -$i vient d'*tre +ait. N#$s av#ns %r $ne %&asse inter,diaire en%a's$&ant &es %hanges rsea$ entre $n %&ient et $n
servi%e 2e( se&#n &e s%h,a %i-dess#$s 4
La '&ate-+#r,e .NET '#$sse %ette &#gi-$e '&$s &#in. Une +#is %#nn$ &e servi%e 1e( . atteindre0 n#$s '#$v#ns gnrer
a$t#,ati-$e,ent &a %&asse -$i va n#$s servir d'inter,diaire '#$r atteindre &es +#n%ti#ns d$ servi%e 1e( et -$i %a%hera t#$te &a
'artie rsea$. ;n a''e&&e %ette %&asse $n pro&y '#$r &e servi%e 2e( '#$r &e-$e& e&&e a t gnre.
5#,,ent gnrer &a %&asse 'r#/A d'$n servi%e 2e( X Un servi%e 2e( est t#$B#$rs a%%#,'agn d'$n +i%hier de des%ri'ti#n a$ +#r,at
3ML. Si &'URI de n#tre servi%e 2e( #'erati#ns est http://localhost/operations/operations.asmx0 s#n +i%hier de des%ri'ti#n est dis'#ni(&e
. &'URL http://localhost/operations/operations.asmxB2sdl %#,,e &e ,#ntre &a %#'ie d'%ran s$ivante 4
;n a &. $n +i%hier 3ML d%rivant 'r%is,ent t#$tes &es +#n%ti#ns d$ servi%e 2e( ave% '#$r %ha%$ne d'e&&es &e tA'e et &e n#,(re de
'ara,:tres0 &e tA'e d$ rs$&tat. ;n a''e&&e %e +i%hier &e +i%hier 1SDL d$ servi%e 'ar%e -$'i& $ti&ise &e &angage 7./5 <6e" Ser!ices
Description .anguage=. A 'artir de %e +i%hier0 $ne %&asse 'r#/A 'e$t *tre gnre . &'aide de &'#$ti& Isdl 4
dos>wsdl http://localhost/operations/operations.asmx?wsdl /language=vb
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 1.1.4322.573]
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
criture du fichier 'D:\data\devel\vbnet\poly\chap9\clientproxy\operations.vb'.
dos>dir
04/03/2004 17:17 6 663 operations.vb
L'#$ti& Isdl gn:re $n +i%hier s#$r%e VB.NET <#'ti#n N&ang$ageVv(= '#rtant &e n#, de &a %&asse i,'&,entant &e servi%e 2e(0 i%i
operations. E/a,in#ns $ne 'artie d$ %#de gnr 4
'------------------------------------------------------------------------------
' <autogenerated>
' This code was generated by a tool.
' Runtime Version: 1.1.4322.573
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------
Option Strict Off
Option Explicit On
Imports System
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Xml.Serialization
'
'Ce code source a t automatiquement gnr par wsdl, Version=1.1.4322.573.
'
Servi%es 1EB KE
Ma%hine %&iente Ma%hine serve$r
Servi%e 1e(
A''&i%ati#n
%&iente
Inter,diaire
%&ient-serve$r
internet
'<remarks/>
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Web.Services.WebServiceBindingAttribute(Name:="operationsSoap", [Namespace]:="st.istia.univ-
angers.fr")> _
Public Class operations
Inherits System.Web.Services.Protocols.SoapHttpClientProtocol

'<remarks/>
Public Sub New()
MyBase.New
Me.Url = "http://localhost/operations/operations.asmx"
End Sub

'<remarks/>
<System.Web.Services.Protocols.SoapDocumentMethodAttribute("st.istia.univ-angers.fr/ajouter",
RequestNamespace:="st.istia.univ-angers.fr", ResponseNamespace:="st.istia.univ-angers.fr",
Use:=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _
Public Function ajouter(ByVal a As Double, ByVal b As Double) As Double
Dim results() As Object = Me.Invoke("ajouter", New Object() {a, b})
Return CType(results(0),Double)
End Function

'<remarks/>
Public Function Beginajouter(ByVal a As Double, ByVal b As Double, ByVal callback As
System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult
Return Me.BeginInvoke("ajouter", New Object() {a, b}, callback, asyncState)
End Function

'<remarks/>
Public Function Endajouter(ByVal asyncResult As System.IAsyncResult) As Double
Dim results() As Object = Me.EndInvoke(asyncResult)
Return CType(results(0),Double)
End Function
....
5e %#de est $n 'e$ %#,'&e/e a$ 're,ier a(#rd. N#$s n'av#ns 'as (es#in d'en %#,'rendre &es dtai&s '#$r '#$v#ir &'$ti&iser.
E/a,in#ns t#$t d'a(#rd &a d%&arati#n de &a %&asse 4
Public Class operations
Inherits System.Web.Services.Protocols.SoapHttpClientProtocol
La %&asse '#rte &e n#, operations d$ servi%e 2e( '#$r &e-$e& e&&e a t %#nstr$ite. E&&e drive de &a %&asse SoapNttp(lient-rotocol 4
N#tre %&asse 'r#/A a $n %#nstr$%te$r $ni-$e 4
Public Sub New()
MyBase.New
Me.Url = "http://localhost/operations/operations.asmx"
End Sub
Le %#nstr$%te$r a++e%te . &'atti($t url &'URL d$ servi%e 2e( ass#%i a$ 'r#/A. La %&asse operations %i-dess$s ne d+init 'as e&&e-,*,e
&'attri($t url. 5e&$i-%i est hrit de &a %&asse d#nt drive &e 'r#/A 4 System.6e".Ser!ices.-rotocols.SoapNttp(lient-rotocol. E/a,in#ns
,aintenant %e -$i se ra''#rte . &a ,th#de a,outer 4
Public Function ajouter(ByVal a As Double, ByVal b As Double) As Double
Dim results() As Object = Me.Invoke("ajouter", New Object() {a, b})
Return CType(results(0),Double)
End Function
Servi%es 1EB KL
;n 'e$t %#nstater -$'e&&e a &a ,*,e signat$re -$e dans &e servi%e 1e( operations #> e&&e tait d+inie %#,,e s$it 4
<WebMethod> _
Function ajouter(a As Double, b As Double) As Double
Return a + b
End Function 'ajouter
La +a@#n d#nt %ette %&asse dia&#g$e ave% &e servi%e 1e( n'a''araCt 'as i%i. 5e dia&#g$e est enti:re,ent 'ris en %harge 'ar &a %&asse
'arent System.6e".Ser!ices.-rotocols.SoapNttp(lient-rotocol. ;n ne tr#$ve dans &e 'r#/A -$e %e -$i &e di++ren%ie des a$tres 'r#/A 4
&'URL d$ servi%e 2e( ass#%i
&a d+initi#n des ,th#des d$ servi%e ass#%i.
P#$r $ti&iser &es ,th#des d$ servi%e 2e( operations0 $n %&ient n'a (es#in -$e de &a %&asse 'r#/A operations gnre 'r%de,,ent.
5#,'i&#ns %ette %&asse dans $n +i%hier assem"ly 4
dos>vbc /t:library /r:system.web.services.dll /r:system.xml.dll /r:system.dll operations.vb
dos>dir
04/03/2004 17:17 6 663 operations.vb
04/03/2004 17:24 7 680 operations.dll
Maintenant %riv#ns $n %&ient %#ns#&e. I& est a''e& sans 'ara,:tres et e/%$te &es de,andes ta'es a$ %&avier 4
dos>testclientproxy
Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser|toutfaire] a b
ajouter 4 5
rsultat=9
soustraire 9 8
rsultat=1
multiplier 10 4
rsultat=40
diviser 6 7
rsultat=0,857142857142857
toutfaire 10 20
rsultats=[30,-10,200,0,5]
diviser 5 0
rsultat=+Infini
fin
Le %#de d$ %&ient est &e s$ivant 4
' espaces de noms
Imports System
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Collections
Imports Microsoft.VisualBasic
Public Module testClientProxy
' ecute de faPon interactive les commandes tapes au clavier
' et les envoie au service @eb operations
Public Sub Main()
' il n'( a plus d'arguments - l'6A* du service @eb tant code en dur dans le pro(
' cration d'un dictionnaire des fonctions du service @eb
Dim fonctions As String() = {"ajouter", "soustraire", "multiplier", "diviser", "toutfaire"}
Dim dicoFonctions As New Hashtable
Dim i As Integer
For i = 0 To fonctions.Length - 1
dicoFonctions.Add(fonctions(i), True)
Next i
' on cre un objet pro( operations
Dim myOperations As operations = Nothing
Try
myOperations = New operations
Catch ex As Exception
' erreur de conneion
erreur("L'erreur suivante s'est produite lors de la connexion au proxy dy service web : " +
ex.Message, 2)
End Try
Servi%es 1EB O!
' les demandes de l'utilisateur sont tapes au clavier
' sous la forme fonction a b - elles se terminent avec la commande fin
Dim commande As String = Nothing ' commande tape au clavier
Dim champs As String() = Nothing ' champs d'une ligne de commande
' invite l'utilisateur
Console.Out.WriteLine("Tapez vos commandes au format : [ajouter|soustraire|multiplier|diviser|
toutfaire] a b" + ControlChars.Lf)
' $$s donnes locales
Dim erreurCommande As Boolean
Dim fonction As String
Dim a, b As Double
' boucle de saisie des commandes tapes au clavier
While True
' au dpart pas d'erreur
erreurCommande = False
' lecture commande
commande = Console.In.ReadLine().Trim().ToLower()
' fini >
If commande Is Nothing Or commande = "fin" Then
Exit While
End If
' dcomposition de la commande en champs
champs = Regex.Split(commande, "\s+")
Try
' il faut trois champs
If champs.Length <> 3 Then
Throw New Exception
End If
' le champ L doit <tre une fonction reconnue
fonction = champs(0)
If Not dicoFonctions.ContainsKey(fonction) Then
Throw New Exception
End If
' le champ 1 doit <tre un nombre valide
a = Double.Parse(champs(1))
' le champ 2 doit <tre un nombre valide
b = Double.Parse(champs(2))
Catch
' commande invalide
Console.Out.WriteLine("syntaxe : [ajouter|soustraire|multiplier|diviser] a b")
erreurCommande = True
End Try
' on fait la demande au service @eb
If Not erreurCommande Then
Try
Dim rsultat As Double
Dim rsultats() As Double
If fonction = "ajouter" Then
rsultat = myOperations.ajouter(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "soustraire" Then
rsultat = myOperations.soustraire(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "multiplier" Then
rsultat = myOperations.multiplier(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "diviser" Then
rsultat = myOperations.diviser(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "toutfaire" Then
rsultats = myOperations.toutfaire(a, b)
Console.Out.WriteLine(("rsultats=[" + rsultats(0).ToString + "," + rsultats(1).ToString +
"," + _
rsultats(2).ToString + "," + rsultats(3).ToString + "]"))
End If
Catch e As Exception
Console.Out.WriteLine(("L'erreur suivante s'est produite : " + e.Message))
End Try
End If
End While
End Sub
' affichage des erreurs
Public Sub erreur(ByVal msg As String, ByVal exitCode As Integer)
' affichage erreur
Servi%es 1EB OF
System.Console.Error.WriteLine(msg)
' arr<t avec erreur
Environment.Exit(exitCode)
End Sub
End Module
N#$s n'e/a,in#ns -$e &e %#de 'r#'re . &'$ti&isati#n de &a %&asse 'r#/A. T#$t d'a(#rd $n #(Bet 'r#/A operations est %r 4
' on cre un objet pro( operations
Dim myOperations As operations = Nothing
Try
myOperations = New operations
Catch ex As Exception
' erreur de conneion
erreur("L'erreur suivante s'est produite lors de la connexion au proxy dy service web : " +
ex.Message, 2)
End Try
Des &ignes #onction a " s#nt ta'es a$ %&avier. A 'artir de %es in+#r,ati#ns0 #n a''e&&e &es ,th#des a''r#'ries d$ 'r#/A 4
' on fait la demande au service @eb
If Not erreurCommande Then
Try
Dim rsultat As Double
Dim rsultats() As Double
If fonction = "ajouter" Then
rsultat = myOperations.ajouter(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "soustraire" Then
rsultat = myOperations.soustraire(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "multiplier" Then
rsultat = myOperations.multiplier(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "diviser" Then
rsultat = myOperations.diviser(a, b)
Console.Out.WriteLine(("rsultat=" + rsultat.ToString))
End If
If fonction = "toutfaire" Then
rsultats = myOperations.toutfaire(a, b)
Console.Out.WriteLine(("rsultats=[" + rsultats(0).ToString + "," + rsultats(1).ToString +
"," + _
rsultats(2).ToString + "," + rsultats(3).ToString + "]"))
End If
Catch e As Exception
Console.Out.WriteLine(("L'erreur suivante s'est produite : " + e.Message))
End Try
;n traite i%i '#$r &a 're,i:re +#is0 &'#'rati#n tout#aire -$i +ait &es -$atre #'rati#ns. E&&e avait t ign#re B$s-$'. ,aintenant %ar e&&e
env#ie $n ta(&ea$ de n#,(res en%a's$& dans $ne enve&#''e 3ML '&$s %#,'&i-$e . grer -$e &es r'#nses 3ML si,'&es des
a$tres +#n%ti#ns ne d&ivrant -$'$n $ni-$e rs$&tat. ;n v#it -$'i%i ave% &a %&asse 'r#/A0 $ti&iser &a ,th#de tout#aire n'est 'as '&$s
%#,'&i-$ -$'$ti&iser &es a$tres ,th#des. L'a''&i%ati#n a t %#,'i&e dans $ne +en*tre d#s de &a +a@#n s$ivante 4
dos>vbc /r:operations.dll /r:system.dll /r:system.web.services.dll testClientProxy.vb
dos>dir
04/03/2004 17:17 6 663 operations.vb
04/03/2004 17:24 7 680 operations.dll
04/03/2004 17:41 4 099 testClientProxy.vb
04/03/2004 17:41 5 632 testClientProxy.exe
L.L 5#n+ig$rer $n servi%e 1e(
Un servi%e 1e( 'e$t av#ir (es#in d'in+#r,ati#ns de %#n+ig$rati#n '#$r s'initia&iser %#rre%te,ent. Ave% &e serve$r IIS0 %es
in+#r,ati#ns 'e$vent *tre '&a%es dans $n +i%hier a''e& Ie".con#ig et sit$ dans &e ,*,e d#ssier -$e &e servi%e 2e(. S$''#s#ns
-$'#n ve$i&&e %rer $n servi%e 2e( aAant (es#in de de$/ in+#r,ati#ns '#$r s'initia&iser 4 $n n#, et $n hge. 5es de$/ in+#r,ati#ns
'event *tre '&a%es dans &e +i%hier Ie".con#ig s#$s &a +#r,e s$ivante 4
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appSettings>
Servi%es 1EB O
<add key="nom" value="tintin"/>
<add key="age" value="27"/>
</appSettings>
</configuration>
Les 'ara,:tres d'initia&isati#n s#nt '&a%es dans $ne enve&#''e 3ML 4
<configuration>
<appSettings>
...
</appSettings>
</configuration>
Un 'ara,:tre d'initia&isati#n de n#, - aAant &a va&e$r F sera d%&are ave% &a &igne 4
<add key="P" value="V"/>
5#,,ent &e servi%e 1e( r%$':re-t-i& %es in+#r,ati#ns X L#rs-$e IIS %harge $n servi%e 2e(0 i& regarde s'i& A a dans &e ,*,e d#ssier
$n +i%hier Ie".con#ig. Si #$i0 i& &e &it. La va&e$r V d'$n 'ara,:tre P est #(ten$e 'ar &'instr$%ti#n 4
String P=ConfigurationSettings.AppSettings["V"];
#> (on#igurationSettings est $ne %&asse dans &'es'a%e de n#,s System.(on#iguration.
Vri+i#ns %ette te%hni-$e s$r &e servi%e 2e( s$ivant 4
<%@ WebService language="VB" class=personne %>
Imports System.Web.Services
imports System.Configuration
<WebService([Namespace] := "st.istia.univ-angers.fr")> _
Public Class personne
Inherits WebService
' attributs
Private nom As String
Private age As Integer
' constructeur
Public Sub New()
' init attributs
nom = ConfigurationSettings.AppSettings("nom")
age = Integer.Parse(ConfigurationSettings.AppSettings("age"))
End Sub
<WebMethod> _
Function id() As String
Return "[" + nom + "," + age.ToString + "]"
End Function
End Class
Le servi%e 2e( personne a de$/ attri($ts nom et age -$i s#nt initia&iss dans s#n %#nstr$%te$r sans 'ara,:tres . 'artir des va&e$rs &$es
dans &e +i%hier de %#n+ig$rati#n Ie".con#ig d$ servi%e personne. 5e +i%hier est &e s$ivant 4
<configuration>
<appSettings>
<add key="nom" value="tintin"/>
<add key="age" value="27"/>
</appSettings>
</configuration>
Le servi%e 2e( a 'ar ai&&e$rs $ne Y7eb<et-odZ id sans 'ara,:tres et -$i se %#ntente de rendre &es attri($ts nom et age. Le servi%e
est enregistr dans &e +i%hier s#$r%e personne.asmx -$i est '&a% ave% s#n +i%hier de %#n+ig$rati#n dans &e d#ssier
c:Linetpu"LIIIrootLstLpersonne 4
dos>dir
09/03/2004 08:25 632 personne.asmx
09/03/2004 08:08 186 web.config
Ass#%i#ns $n d#ssier virt$e& IIS N%#n+ig a$ d#ssier 'hAsi-$e 'r%dent. Lan@#ns IIS '$is ave% $n navigate$r de,and#ns &'$r&
http://localhost/con#ig/personne.asmx d$ servi%e personne 4
Servi%es 1EB OH
S$iv#ns &e &ien de &'$ni-$e ,th#de id 4
La ,th#de id n'a 'as de 'ara,:tres. Uti&is#ns &e (#$t#n Hppeler 4
N#$s av#ns (ien r%$'r &es in+#r,ati#ns '&a%es dans &e +i%hier Ie".con#ig d$ servi%e.
L.F! Le servi%e 1e( IMP;TS
N#$s re'ren#ns &'a''&i%ati#n IMP;TS ,aintenant (ien %#nn$e. La derni:re +#is -$e n#$s av#ns travai&& ave%0 n#$s en avi#ns +ait
$n serve$r distant -$'#n '#$vait a''e&er s$r &'internet. N#$s en +ais#ns ,aintenant $n servi%e 2e(.
L.F!.F Le servi%e 2e(
N#$s 'art#ns de &a %&asse impt %re dans &e %ha'itre s$r &es (ases de d#nnes et -$i se %#nstr$it . 'artir des in+#r,ati#ns
%#nten$es dans $ne (ase de d#nnes ;DB5 4
' options
Option Strict On
Option Explicit On
' espaces de noms
Imports System
Imports System.Data
Imports Microsoft.Data.Odbc
Imports System.Collections
Public Class impt
' les donnes ncessaires au calcul de l'imp7t
' proviennent d'une source etrieure
Private limites(), coeffR(), coeffN() As Decimal
Servi%es 1EB O"
' constructeur
Public Sub New(ByVal LIMITES() As Decimal, ByVal COEFFR() As Decimal, ByVal COEFFN() As Decimal)
' on vrifie $ue les = tablaeu ont la m<me taille
Dim OK As Boolean = LIMITES.Length = COEFFR.Length And LIMITES.Length = COEFFN.Length
If Not OK Then
Throw New Exception("Les 3 tableaux fournis n'ont pas la mme taille(" & LIMITES.Length & "," &
COEFFR.Length & "," & COEFFN.Length & ")")
End If
' c'est bon
Me.limites = LIMITES
Me.coeffR = COEFFR
Me.coeffN = COEFFN
End Sub
' constructeur 2
Public Sub New(ByVal DSNimpots As String, ByVal Timpots As String, ByVal colLimites As String, ByVal
colCoeffR As String, ByVal colCoeffN As String)
' initialise les trois tableau limites' coeffA' coeff4 partir
' du contenu de la table 3impots de la base !)&% )+4impots
' col*imites' col%oeffA' col%oeff4 sont les trois colonnes de cette table
' peut lancer une eception
Dim connectString As String = "DSN=" + DSNimpots + ";" ' chane de conneion la base
Dim impotsConn As OdbcConnection = Nothing ' la conneion
Dim sqlCommand As OdbcCommand = Nothing ' la commande +8*
' la re$u<te +"*"%3
Dim selectCommand As String = "select " + colLimites + "," + colCoeffR + "," + colCoeffN + " from " +
Timpots
' tableau pour rcuprer les donnes
Dim tLimites As New ArrayList
Dim tCoeffR As New ArrayList
Dim tCoeffN As New ArrayList
' on tente d'accder la base de donnes
impotsConn = New OdbcConnection(connectString)
impotsConn.Open()
' on cre un objet command
sqlCommand = New OdbcCommand(selectCommand, impotsConn)
' on ecute la re$u<te
Dim myReader As OdbcDataReader = sqlCommand.ExecuteReader()
' "ploitation de la table rcupre
While myReader.Read()
' les donnes de la ligne courante sont mis dans les tableau
tLimites.Add(myReader(colLimites))
tCoeffR.Add(myReader(colCoeffR))
tCoeffN.Add(myReader(colCoeffN))
End While
' libration des ressources
myReader.Close()
impotsConn.Close()
' les tableau d(nami$ues sont mis dans des tableau stati$ues
Me.limites = New Decimal(tLimites.Count) {}
Me.coeffR = New Decimal(tLimites.Count) {}
Me.coeffN = New Decimal(tLimites.Count) {}
Dim i As Integer
For i = 0 To tLimites.Count - 1
limites(i) = Decimal.Parse(tLimites(i).ToString())
coeffR(i) = Decimal.Parse(tCoeffR(i).ToString())
coeffN(i) = Decimal.Parse(tCoeffN(i).ToString())
Next i
End Sub
' calcul de l'imp7t
Public Function calculer(ByVal mari As Boolean, ByVal nbEnfants As Integer, ByVal salaire As Integer)
As Long
' calcul du nombre de parts
Dim nbParts As Decimal
If mari Then
nbParts = CDec(nbEnfants) / 2 + 2
Else
nbParts = CDec(nbEnfants) / 2 + 1
End If
If nbEnfants >= 3 Then
nbParts += 0.5D
End If
' calcul revenu imposable 9 8uotient familial
Dim revenu As Decimal = 0.72D * salaire
Dim QF As Decimal = revenu / nbParts
' calcul de l'imp7t
limites((limites.Length - 1)) = QF + 1
Dim i As Integer = 0
Servi%es 1EB OI
While QF > limites(i)
i += 1
End While
' retour rsultat
Return CLng(revenu * coeffR(i) - nbParts * coeffN(i))
End Function
End Class
Dans &e servi%e 2e(0 #n ne 'e$t $ti&iser -$'$n %#nstr$%te$r sans 'ara,:tres. A$ssi &e %#nstr$%te$r de &a %&asse va-t-i& devenir &e
s$ivant 4
' constructeur
Public Sub New()
' initialise les trois tableau limites' coeffA' coeff4 partir
' du contenu de la table 3impots de la base !)&% )+4impots
' col*imites' col%oeffA' col%oeff4 sont les trois colonnes de cette table
' peut lancer une eception
' on rcupre les paramtres de configuration du service
Dim DSNimpots As String = ConfigurationSettings.AppSettings("DSN")
Dim Timpots As String = ConfigurationSettings.AppSettings("TABLE")
Dim colLimites As String = ConfigurationSettings.AppSettings("COL_LIMITES")
Dim colCoeffR As String = ConfigurationSettings.AppSettings("COL_COEFFR")
Dim colCoeffN As String = ConfigurationSettings.AppSettings("COL_COEFFN")
' on eploite la base de donnes
Dim connectString As String = "DSN=" + DSNimpots + ";" ' chane de conneion la base
Les %in- 'ara,:tres d$ %#nstr$%te$r de &a %&asse 'r%dente s#nt ,aintenant &$s dans &e +i%hier Ie".con#ig d$ servi%e. Le %#de d$
+i%hier s#$r%e impots.asmx est &e s$ivant. I& re'rend &a ,aBe$re 'artie d$ %#de 'r%dent. N#$s n#$s s#,,es %#ntents d'en%adrer &es
'#rti#ns de %#de 'r#'res a$ servi%e 2e( 4
<%@ WebService language="VB" class=impots %>
' cration d'un servie @eb impots
Imports System
Imports System.Data
Imports Microsoft.Data.Odbc
Imports System.Collections
Imports System.Configuration
Imports System.Web.Services
<WebService([Namespace]:="st.istia.univ-angers.fr")> _
Public Class impt
Inherits WebService
' les donnes ncessaires au calcul de l'imp7t
' proviennent d'une source etrieure
Private limites(), coeffR(), coeffN() As Decimal
Private OK As Boolean = False
Private errMessage As String = ""
' constructeur
Public Sub New()
' initialise les trois tableau limites' coeffA' coeff4 partir
' du contenu de la table 3impots de la base !)&% )+4impots
' col*imites' col%oeffA' col%oeff4 sont les trois colonnes de cette table
' peut lancer une eception
' on rcupre les paramtres de configuration du service
Dim DSNimpots As String = ConfigurationSettings.AppSettings("DSN")
Dim Timpots As String = ConfigurationSettings.AppSettings("TABLE")
Dim colLimites As String = ConfigurationSettings.AppSettings("COL_LIMITES")
Dim colCoeffR As String = ConfigurationSettings.AppSettings("COL_COEFFR")
Dim colCoeffN As String = ConfigurationSettings.AppSettings("COL_COEFFN")
' on eploite la base de donnes
Dim connectString As String = "DSN=" + DSNimpots + ";" ' chane de conneion la base
Dim impotsConn As OdbcConnection = Nothing ' la conneion
Dim sqlCommand As OdbcCommand = Nothing ' la commande +8*
Dim myReader As OdbcDataReader ' lecteur de donnes !dbc
' la re$u<te +"*"%3
Dim selectCommand As String = "select " + colLimites + "," + colCoeffR + "," + colCoeffN + " from " +
Timpots
' tableau pour rcuprer les donnes
Dim tLimites As New ArrayList
Servi%es 1EB OK
Dim tCoeffR As New ArrayList
Dim tCoeffN As New ArrayList
' on tente d'accder la base de donnes
Try
impotsConn = New OdbcConnection(connectString)
impotsConn.Open()
' on cre un objet command
sqlCommand = New OdbcCommand(selectCommand, impotsConn)
' on ecute la re$u<te
myReader = sqlCommand.ExecuteReader()
' "ploitation de la table rcupre
While myReader.Read()
' les donnes de la ligne courante sont mis dans les tableau
tLimites.Add(myReader(colLimites))
tCoeffR.Add(myReader(colCoeffR))
tCoeffN.Add(myReader(colCoeffN))
End While
' libration des ressources
myReader.Close()
impotsConn.Close()
' les tableau d(nami$ues sont mis dans des tableau stati$ues
Me.limites = New Decimal(tLimites.Count) {}
Me.coeffR = New Decimal(tLimites.Count) {}
Me.coeffN = New Decimal(tLimites.Count) {}
Dim i As Integer
For i = 0 To tLimites.Count - 1
limites(i) = Decimal.Parse(tLimites(i).ToString())
coeffR(i) = Decimal.Parse(tCoeffR(i).ToString())
coeffN(i) = Decimal.Parse(tCoeffN(i).ToString())
Next i
' c'est bon
OK = True
errMessage = ""
Catch ex As Exception
' erreur
OK = False
errMessage += "[" + ex.Message + "]"
End Try
End Sub
' calcul de l'imp7t
<WebMethod()> _
Function calculer(ByVal mari As Boolean, ByVal nbEnfants As Integer, ByVal salaire As Integer) As Long
' calcul du nombre de parts
Dim nbParts As Decimal
If mari Then
nbParts = CDec(nbEnfants) / 2 + 2
Else
nbParts = CDec(nbEnfants) / 2 + 1
End If
If nbEnfants >= 3 Then
nbParts += 0.5D
End If
' calcul revenu imposable 9 8uotient familial
Dim revenu As Decimal = 0.72D * salaire
Dim QF As Decimal = revenu / nbParts
' calcul de l'imp7t
limites((limites.Length - 1)) = QF + 1
Dim i As Integer = 0
While QF > limites(i)
i += 1
End While
' retour rsultat
Return CLng(revenu * coeffR(i) - nbParts * coeffN(i))
End Function
' id
<WebMethod()> _
Function id() As String
' pour voir si tout est !X
Return "[" + OK + "," + errMessage + "]"
End Function
End Class
E/'&i-$#ns &es -$e&-$es ,#di+i%ati#ns +aites . &a %&asse impots en-deh#rs de %e&&es n%essaires '#$r en +aire $n servi%e 2e( 4
Servi%es 1EB OO
&a &e%t$re de &a (ase de d#nnes dans &e %#nstr$%te$r 'e$t %h#$er. A$ssi av#ns-n#$s aB#$t de$/ attri($ts . n#tre %&asse et
$ne ,th#de 4
o &e (##&en 5M est . !rai si &a (ase a '$ *tre &$e0 . #aux sin#n
o &a %haCne err:essage %#ntient $n ,essage d'erre$r si &a (ase de d#nnes n'a '$ *tre &$e.
o &a ,th#de id sans 'ara,:tres 'er,et d'#(tenir &a va&e$r %es de$/ attri($ts.
'#$r grer &'erre$r vent$e&&e d'a%%:s . &a (ase de d#nnes0 &a 'artie d$ %#de d$ %#nstr$%te$r %#n%erne 'ar %et a%%:s a t
ent#$re d'$n tryVcatch.
Le +i%hier Ie".con#ig de %#n+ig$rati#n d$ servi%e est &e s$ivant 4
<configuration>
<appSettings>
<add key="DSN" value="mysql-impots" />
<add key="TABLE" value="timpots" />
<add key="COL_LIMITES" value="limites" />
<add key="COL_COEFFR" value="coeffr" />
<add key="COL_COEFFN" value="coeffn" />
</appSettings>
</configuration>
L#rs d'$n 're,ier essai de %harge,ent d$ servi%e impots0 &e %#,'i&ate$r a d%&ar -$'i& ne tr#$vait 'as &'es'a%e de n#,s
:icroso#t.Data.5d"c $ti&is dans &a dire%tive 4
Imports Microsoft.Data.Odbc
A'r:s %#ns$&tati#n de &a d#%$,entati#n
o $ne dire%tive de %#,'i&ati#n a t aB#$te dans Ie".con#ig '#$r indi-$er -$'i& +a&&ait $ti&iser &'asse,(&A :icroso#t.Data.od"c
o $ne %#'ie d$ +i%hier microso#t.data.od"c.dll a t '&a%e dans &e d#ssier "in d$ 'r#Bet. 5e&$i-%i est sAst,ati-$e,ent e/'&#r
'ar &e %#,'i&ate$r d'$n servi%e 2e( &#rs-$'i& re%her%he $n Dasse,(&AD.
D'a$tres s#&$ti#ns se,(&ent '#ssi(&es ,ais n'#nt 'as t %re$ses i%i. Le +i%hier de %#n+ig$rati#n est d#n% deven$ 4
<configuration>
<appSettings>
<add key="DSN" value="mysql-impots" />
<add key="TABLE" value="timpots" />
<add key="COL_LIMITES" value="limites" />
<add key="COL_COEFFR" value="coeffr" />
<add key="COL_COEFFN" value="coeffn" />
</appSettings>
<system.web>
<compilation>
<assemblies>
<add assembly="Microsoft.Data.Odbc" />
</assemblies>
</compilation>
</system.web>
</configuration>
Le %#nten$ d$ d#ssier impotsL"in 4
dos>dir impots\bin
30/01/2002 02:02 327 680 Microsoft.Data.Odbc.dll
Le servi%e et s#n +i%hier de %#n+ig$rati#n #nt t '&a%s dans impots 4
dos>dir impots
09/03/2004 10:13 4 669 impots.asmx
09/03/2004 10:19 431 web.config
Le d#ssier 'hAsi-$e d$ servi%e 2e( a t ass#%i a$ d#ssier virt$e& Di+pots de IIS. La 'age d$ servi%e est a&#rs &a s$ivante 4
Servi%es 1EB OE
Si #n s$it &e &ien id 4
Si #n $ti&ise &e (#$t#n Hppeler 4
Le rs$&tat 'r%dent a++i%he &es va&e$rs des attri($ts 5M <tr$e= et err:essage <DD=. Dans %et e/e,'&e0 &a (ase a t %harge
%#rre%te,ent. 5a n'a 'as t#$B#$rs t &e %as et %'est '#$r-$#i n#$s av#ns aB#$t &a ,th#de id '#$r av#ir a%%:s a$ ,essage d'erre$r.
L'erre$r tait -$e &e n#, DSN de &a (ase avait t d+inie %#,,e /.N utilisateur a&#rs -$'i& +a&&ait &e d+inir %#,,e /.N
syst?+e. 5ette distin%ti#n se +ait dans &e gesti#nnaire de s#$r%es ;DB5 H (its 4
Reven#ns . &a 'age d$ servi%e 4
Servi%es 1EB OL
F

S$iv#ns &e &ien calculer 4


N#$s d+iniss#ns &es 'ara,:tres de &'a''e& et n#$s e/%$t#ns %e&$i-%i 4
Le rs$&tat est %#rre%t.
L.F!. Gnrer &e 'r#/A d$ servi%e i,'#ts
Maintenant -$e n#$s av#ns $n servi%e 2e( impots #'rati#nne&0 n#$s '#$v#ns gnrer sa %&asse 'r#/A. ;n ra''e&&e -$e %e&&e-%i sera
$ti&ise 'ar des a''&i%ati#ns %&ientes '#$r atteindre &e servi%e 2e( impots de +a@#n trans'arente. ;n $ti&ise d'a(#rd &'$ti&itaire Isdl
'#$r gnrer &e +i%hier s#$r%e de &a %&asse 'r#/A '$is %e&$i-%i est %#,'i& dans $n $ne d&&.
dos>wsdl /language=vb http://localhost/impots/impots.asmx
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 1.1.4322.573]
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
criture du fichier 'D:\data\serge\devel\vbnet\poly\chap9\impots\impots.vb'.
D:\data\serge\devel\vbnet\poly\chap9\impots>dir
09/03/2004 10:20 <REP> bin
09/03/2004 10:58 4 651 impots.asmx
09/03/2004 11:05 3 364 impots.vb
09/03/2004 10:19 431 web.config
Servi%es 1EB E!
dos>vbc /t:library /r:system.dll /r:system.web.services.dll /r:system.xml.dll impots.vb
Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4
pour Microsoft (R) .NET Framework version 1.1.4322.573
Copyright (C) Microsoft Corporation 1987-2002. Tous droits rservs.
dos>dir
09/03/2004 10:20 <REP> bin
09/03/2004 10:58 4 651 impots.asmx
09/03/2004 11:09 5 120 impots.dll
09/03/2004 11:05 3 364 impots.vb
09/03/2004 10:19 431 web.config
L.F!.H Uti&iser &e 'r#/A ave% $n %&ient
Dans &e %ha'itre s$r &es (ases de d#nnes n#$s avi#ns %r $ne a''&i%ati#n %#ns#&e 'er,ettant &e %a&%$& de &'i,'[t 4
dos>dir
27/02/2004 16:56 5 120 impots.dll
27/02/2004 17:12 3 586 impots.vb
27/02/2004 17:08 6 144 testimpots.exe
27/02/2004 17:18 3 328 testimpots.vb
dos>testimpots
pg DSNimpots tabImpots colLimites colCoeffR colCoeffN
dos>testimpots odbc-mysql-dbimpots impots limites coeffr coeffn
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :o 2 200000
impt=22504 F
Le 'r#gra,,e testimpots $ti&isait a&#rs &a %&asse impt %&assi-$e %e&&e %#nten$e dans &e +i%hier impots.dll. Le %#de d$ 'r#gra,,e
testimpots.!" tait &e s$ivant 4
Option Explicit On
Option Strict On
' espaces de noms
Imports System
Imports Microsoft.VisualBasic
' pg de test
Module testimpots
Sub Main(ByVal arguments() As String)
' programme interactif de calcul d'imp7t
' l'utilisateur tape trois donnes au clavier C mari nb"nfants salaire
' le programme affiche alors l'imp7t pa(er
Const syntaxe1 As String = "pg DSNimpots tabImpots colLimites colCoeffR colCoeffN"
Const syntaxe2 As String = "syntaxe : mari nbEnfants salaire" + ControlChars.Lf + "mari : o pour
mari, n pour non mari" + ControlChars.Lf + "nbEnfants : nombre d'enfants" + ControlChars.Lf + "salaire
: salaire annuel en F"
' vrification des paramtres du programme
If arguments.Length <> 5 Then
' msg d'erreur
Console.Error.WriteLine(syntaxe1)
' fin
Environment.Exit(1)
End If 'if
' on rcupre les arguments
Dim DSNimpots As String = arguments(0)
Dim tabImpots As String = arguments(1)
Dim colLimites As String = arguments(2)
Dim colCoeffR As String = arguments(3)
Dim colCoeffN As String = arguments(4)
' cration d'un objet imp7t
Dim objImpt As impt = Nothing
Try
objImpt = New impt(DSNimpots, tabImpots, colLimites, colCoeffR, colCoeffN)
Catch ex As Exception
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
Environment.Exit(2)
End Try
' boucle infinie
While True
' au dpart pas d'erreurs
Dim erreur As Boolean = False
Servi%es 1EB EF
' on demande les paramtres du calcul de l'imp7t
Console.Out.Write("Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour
arrter :")
Dim paramtres As String = Console.In.ReadLine().Trim()
' $$ chose faire >
If paramtres Is Nothing Or paramtres = "" Then
Exit While
End If
' vrification du nombre d'arguments dans la ligne saisie
Dim args As String() = paramtres.Split(Nothing)
Dim nbParamtres As Integer = args.Length
If nbParamtres <> 3 Then
Console.Error.WriteLine(syntaxe2)
erreur = True
End If
Dim mari As String
Dim nbEnfants As Integer
Dim salaire As Integer
If Not erreur Then
' vrification de la validit des paramtres
' mari
mari = args(0).ToLower()
If mari <> "o" And mari <> "n" Then
Console.Error.WriteLine((syntaxe2 + ControlChars.Lf + "Argument mari incorrect : tapez o ou
n"))
erreur = True
End If
' nb"nfants
nbEnfants = 0
Try
nbEnfants = Integer.Parse(args(1))
If nbEnfants < 0 Then
Throw New Exception
End If
Catch
Console.Error.WriteLine(syntaxe2 + "\nArgument nbEnfants incorrect : tapez un entier positif ou
nul")
erreur = True
End Try
' salaire
salaire = 0
Try
salaire = Integer.Parse(args(2))
If salaire < 0 Then
Throw New Exception
End If
Catch
Console.Error.WriteLine(syntaxe2 + "\nArgument salaire incorrect : tapez un entier positif ou
nul")
erreur = True
End Try
End If
If Not erreur Then
' les paramtres sont corrects - on calcule l'imp7t
Console.Out.WriteLine(("impt=" & objImpt.calculer(mari = "o", nbEnfants, salaire).ToString + "
F"))
End If
End While
End Sub
End Module
N#$s re'ren#ns &e ,*,e 'r#gra,,e '#$r &$i +aire $ti&iser ,aintenant &e servi%e 2e( impots a$ travers de &a %&asse 'r#/A impots %re
'r%de,,ent. N#$s s#,,es #(&igs de ,#di+ier -$e&-$e 'e$ &e %#de 4
o a&#rs -$e &a %&asse impt d'#rigine avait $n %#nstr$%te$r . %in- arg$,ents0 &a %&asse 'r#/A impots a $n %#nstr$%te$r sans
'ara,:tres. Les %in- 'ara,:tres0 n#$s &'av#ns v$0 s#nt ,aintenant +i/s dans &e +i%hier de %#n+ig$rati#n d$ servi%e 2e(.
o i& n'A a d#n% '&$s (es#in de 'asser %es %in- 'ara,:tres en arg$,ents a$ 'r#gra,,e test
Le n#$vea$ %#de est &e s$ivant 4
Imports System
Imports Microsoft.VisualBasic
' pg de test
Module testimpots
Public Sub Main(ByVal arguments() As String)
' programme interactif de calcul d'imp7t
Servi%es 1EB E
' l'utilisateur tape trois donnes au clavier C mari nb"nfants salaire
' le programme affiche alors l'imp7t pa(er
Const syntaxe2 As String = "syntaxe : mari nbEnfants salaire" + ControlChars.Lf + "mari : o pour
mari, n pour non mari" + ControlChars.Lf + "nbEnfants : nombre d'enfants" + ControlChars.Lf + "salaire
: salaire annuel en F"
' cration d'un objet imp7t
Dim objImpt As impt = Nothing
Try
objImpt = New impt
Catch ex As Exception
Console.Error.WriteLine(("L'erreur suivante s'est produite : " + ex.Message))
Environment.Exit(2)
End Try
' boucle infinie
Dim erreur As Boolean
While True
' au dpart pas d'erreur
erreur = False
' on demande les paramtres du calcul de l'imp7t
Console.Out.Write("Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour
arrter :")
Dim paramtres As String = Console.In.ReadLine().Trim()
' $$ chose faire >
If paramtres Is Nothing Or paramtres = "" Then
Exit While
End If
' vrification du nombre d'arguments dans la ligne saisie
Dim args As String() = paramtres.Split(Nothing)
Dim nbParamtres As Integer = args.Length
If nbParamtres <> 3 Then
Console.Error.WriteLine(syntaxe2)
erreur = True
End If
If Not erreur Then
' vrification de la validit des paramtres
' mari
Dim mari As String = args(0).ToLower()
If mari <> "o" And mari <> "n" Then
Console.Error.WriteLine((syntaxe2 + ControlChars.Lf + "Argument mari incorrect : tapez o ou
n"))
erreur = True
End If
' nb"nfants
Dim nbEnfants As Integer = 0
Try
nbEnfants = Integer.Parse(args(1))
If nbEnfants < 0 Then
Throw New Exception
End If
Catch
Console.Error.WriteLine((syntaxe2 + ControlChars.Lf + "Argument nbEnfants incorrect : tapez un
entier positif ou nul"))
erreur = True
End Try
' salaire
Dim salaire As Integer = 0
Try
salaire = Integer.Parse(args(2))
If salaire < 0 Then
Throw New Exception
End If
Catch
Console.Error.WriteLine((syntaxe2 + ControlChars.Lf + "Argument salaire incorrect : tapez un
entier positif ou nul"))
erreur = True
End Try
' si les paramtres sont corrects - on calcule l'imp7t
If Not erreur Then Console.Out.WriteLine(("impt=" + objImpt.calculer(mari = "o", nbEnfants,
salaire).ToString + " F"))
End If
End While
End Sub
End Module
N#$s av#ns &e 'r#/A impots.dll et &e s#$r%e testimpots dans &e ,*,e d#ssier.
dos>dir
09/03/2004 11:28 <REP> bin
09/03/2004 11:09 5 120 impots.dll
Servi%es 1EB EH
09/03/2004 11:34 3 396 testimpots.vb
09/03/2004 10:19 431 web.config
N#$s %#,'i&#ns &e s#$r%e testimpots.!" 4
dos>vbc /r:impots.dll /r:microsoft.visualbasic.dll /r:system.web.services.dll /r:system.dll testimpots.vb
dos>dir
09/03/2004 11:28 <REP> bin
09/03/2004 11:09 5 120 impots.dll
09/03/2004 11:05 3 364 impots.vb
09/03/2004 11:35 5 632 testimpots.exe
09/03/2004 11:34 3 396 testimpots.vb
09/03/2004 10:19 431 web.config
'$is &'e/%$t#ns 4
dos>testimpots
Paramtres du calcul de l'impt au format mari nbEnfants salaire ou rien pour arrter :o 2 200000
impt=22504 F
N#$s #(ten#ns (ien &e rs$&tat attend$.
Servi%es 1EB E"
F!. A s$ivreZ
I& resterait des th:,es i,'#rtants . %#$vrir. En v#i%i tr#is 4
F. &es #(Bets /ata.et -$i 'er,ettent de grer $ne (ase de d#nnes en ,,#ire0 de &'e/'#rter #$ &'i,'#rter a$ +#r,at 3ML
. $ne t$de de 3ML ave% &es %&asses .NET 'er,ettant de grer &es d#%$,ents 3ML
H. &a 'r#gra,,ati#n 1e( ave% &es 'ages et %#ntr[&es ASP.NET
A &$i se$&0 &e '#int H ,rite $n '#&A%#'i. Les '#ints F et devraient *tre aB#$ts 'r#gressive,ent . %e 'rsent d#%$,ent.

Servi%es 1EB EI
1. LES BASES DU LANGAGE VB.NET .................................................................................................................................... 7
1.1 INTRODUCTION.............................................................................................................................................................................. 7
1.2 LES DONNES DE VB.NET........................................................................................................................................................... 7
1.2.1 LES TYPES DE DONNES PRDFINIS................................................................................................................................................ 7
1.2.2 NOTATION DES DONNES LITTRALES.............................................................................................................................................. 8
1.2.3 DCLARATION DES DONNES..........................................................................................................................................................8
1.2.3.1 Rle des dclaa!"#$s........................................................................................................................................................... 8
1.2.3.2 Dclaa!"#$ des c#$s!a$!es................................................................................................................................................... 9
1.2.3.3 Dclaa!"#$ des %a"a&les..................................................................................................................................................... 9
1.2.' LES CON(ERSIONS ENTRE NO)*RES ET C+A,NES DE CARACT-RES......................................................................................................... 9
1.2.. LES TA*LEA/0 DE DONNES........................................................................................................................................................ 1>
1.3 LES INSTRUCTIONS LMENTAIRES DE VB.NET............................................................................................................................ 13
1.3.1 ECRIT/RE S/R CRAN.................................................................................................................................................................13
1.3.2 LECT/RE DE DONNES TAPES A/ CLA(IER.................................................................................................................................... 1'
1.3.3 E0E)PLE D1ENTRES2SORTIES...................................................................................................................................................... 1'
1.3.' REDIRECTION DES E3S............................................................................................................................................................... 1'
1.3.. AFFECTATION DE LA (ALE/R D1/NE E0PRESSION 4 /NE (ARIA*LE..................................................................................................... 15
1.3...1 L"s!e des #6a!e7s............................................................................................................................................................15
1.3...2 E86ess"#$ a"!9:!";7e.....................................................................................................................................................15
1.3...3 P"#"!s da$s l1%al7a!"#$ des e86ess"#$s a"!9:!";7es................................................................................................. 17
1.3...' E86ess"#$s ela!"#$$elles..................................................................................................................................................17
1.3.... E86ess"#$s &##le$$es..................................................................................................................................................... 18
1.3...5 Ta"!e:e$! de &"!s.............................................................................................................................................................. 18
1.3...7 O6a!e7 ass#c" < 7$e a==ec!a!"#$................................................................................................................................... 19
1.3...8 P"#"! ?$ale des #6a!e7s......................................................................................................................................... 19
1.3...9 Les c#$%es"#$s de !@6e..................................................................................................................................................... 19
1.4 LES INSTRUCTIONS DE CONTRLE DU DROULEMENT DU PROGRAMME............................................................................................... 21
1.'.1 ARRAT..................................................................................................................................................................................... 21
1.'.2 STR/CT/RE DE C+OI0 SI)PLE...................................................................................................................................................... 21
1.'.3 STR/CT/RE DE CAS....................................................................................................................................................................22
1.'.' STR/CT/RE DE RPTITION..........................................................................................................................................................23
1.'.'.1 N#:&e de 6!"!"#$s c#$$7............................................................................................................................................. 23
1.'.'.2 N#:&e de 6!"!"#$s "$c#$$7.......................................................................................................................................... 2'
1.'.'.3 I$s!7c!"#$s de ?es!"#$ de &#7cle....................................................................................................................................... 2'
1.5 LA STRUCTURE D'UN PROGRAMME VB.NET................................................................................................................................. 25
1.6 COMPILATION ET EXCUTION D'UN PROGRAMME VB.NET.............................................................................................................26
1.7 L'EXEMPLE IMPOTS................................................................................................................................................................ 27
1.8 ARGUMENTS DU PROGRAMME PRINCIPAL........................................................................................................................................2!
1.! LES NUMRATIONS..................................................................................................................................................................... 3
1.1 LA GESTION DES EXCEPTIONS......................................................................................................................................................31
1.11 PASSAGE DE PARAM"TRES # UNE $ONCTION..................................................................................................................................33
1.11.1 PASSABE PAR (ALE/R.............................................................................................................................................................. 33
1.11.2 PASSABE PAR RFRENCE.......................................................................................................................................................... 3'
2. CLASSES% STUCTURES% INTER$ACES ............................................................................................................................ 35
2.1 L' OB&ET PAR L'EXEMPLE.............................................................................................................................................................35
2.1.1 BNRALITS............................................................................................................................................................................3.
2.1.2 DFINITION DE LA CLASSE PERSONNE............................................................................................................................................ 3.
2.1.3 LA )T+ODE INITIALISE..............................................................................................................................................................35
2.1.' L1OPRATE/R NEC..................................................................................................................................................................... 35
2.1.. LE )OT CL )E....................................................................................................................................................................... 37
2.1.5 /N PROBRA))E DE TEST............................................................................................................................................................ 37
2.1.7 /TILISER /N FIC+IER DE CLASSES CO)PILES DASSE)*LYE................................................................................................................38
2.1.8 /NE A/TRE )T+ODE INITIALISE..................................................................................................................................................39
2.1.9 CONSTR/CTE/RS DE LA CLASSE PERSONNE.....................................................................................................................................39
2.1.1> LES RFRENCES D1O*FETS........................................................................................................................................................ '1
2.1.11 LES O*FETS TE)PORAIRES......................................................................................................................................................... '2
2.1.12 )T+ODES DE LECT/RE ET D1CRIT/RE DES ATTRI*/TS PRI(S....................................................................................................... '2
Servi%es 1EB EK
2.1.13 LES PROPRITS.......................................................................................................................................................................'3
2.1.1' LES )T+ODES ET ATTRI*/TS DE CLASSE.....................................................................................................................................'.
2.1.1. PASSABE D1/N O*FET 4 /NE FONCTION........................................................................................................................................ '7
2.1.15 /N TA*LEA/ DE PERSONNES...................................................................................................................................................... '8
2.2 L''RITAGE PAR L'EXEMPLE........................................................................................................................................................ 48
2.2.1 BNRALITS............................................................................................................................................................................'8
2.2.2 CONSTR/CTION D1/N O*FET ENSEIBNANT....................................................................................................................................... .>
2.2.3 S/RC+ARBE D1/NE )T+ODE O/ D1/NE PROPRIT.......................................................................................................................... .2
2.2.' LE POLY)ORP+IS)E................................................................................................................................................................... .3
2.2.. REDFINITION ET POLY)ORP+IS)E.................................................................................................................................................3
2.3 D$INIR UN INDEXEUR POUR UNE CLASSE....................................................................................................................................... 56
2.4 LES STRUCTURES......................................................................................................................................................................... 61
2.5 LES INTER$ACES..........................................................................................................................................................................64
2.6 LES ESPACES DE NOMS................................................................................................................................................................. 68
2.7 L'EXEMPLE IMPOTS................................................................................................................................................................ 7
3. CLASSES .NET D'USAGE COURANT ................................................................................................................................ 74
3.1 C'ERC'ER DE L'AIDE AVEC SD(.NET....................................................................................................................................... 74
3.1.1 CINC(......................................................................................................................................................................................7'
3.2 C'ERC'ER DE L'AIDE SUR LES CLASSES AVEC VS.NET................................................................................................................. 77
3.2.1 OPTION AIDE............................................................................................................................................................................77
3.2.2 AIDE3INDE0............................................................................................................................................................................. 79
3.3 LA CLASSE STRING...................................................................................................................................................................... 8
3.4 LA CLASSE ARRA)...................................................................................................................................................................... 82
3.5 LA CLASSE ARRA)LIST............................................................................................................................................................... 84
3.6 LA CLASSE 'AS'TABLE............................................................................................................................................................... 86
3.7 LA CLASSE STREAMREADER.........................................................................................................................................................8!
3.8 LA CLASSE STREAM*RITER........................................................................................................................................................ !
3.! LA CLASSE REGEX...................................................................................................................................................................... !1
3.9.1 (RIFIER G/1/NE C+A,NE CORRESPOND 4 /N )OD-LE DONN........................................................................................................... 93
3.9.2 TRO/(ER TO/S LES L)ENTS D1/NE C+A,NE CORRESPONDANT 4 /N )OD-LE..................................................................................... 9'
3.9.3 RC/PRER DES PARTIES D1/N )OD-LE......................................................................................................................................... 9.
3.9.' /N PROBRA))E D1APPRENTISSABE............................................................................................................................................... 95
3.9.. LA )T+ODE SPLIT....................................................................................................................................................................97
3.1 LES CLASSES BINAR)READER ET BINAR)*RITER....................................................................................................................... !8
4. INTER$ACES GRAP'I+UES AVEC VB.NET ET VS.NET .......................................................................................... 12
4.1 LES BASES DES INTER$ACES GRAP'I+UES..................................................................................................................................... 12
'.1.1 /NE FENATRE SI)PLE............................................................................................................................................................... 1>2
'.1.2 /N FOR)/LAIRE A(EC *O/TON................................................................................................................................................. 1>3
4.2 CONSTRUIRE UNE INTER$ACE GRAP'I+UE AVEC VISUAL STUDIO.NET........................................................................................... 16
'.2.1 CRATION INITIALE D/ PROFET................................................................................................................................................... 1>5
'.2.2 LES FENATRE DE L1INTERFACE DE (S.NET.................................................................................................................................1>7
'.2.3 E0C/TION D1/N PROFET...........................................................................................................................................................1>9
'.2.' LE CODE BNR PAR (S.NET................................................................................................................................................ 1>9
'.2.. CO)PILATION DANS /NE FENATRE DOS........................................................................................................................................ 111
'.2.5 BESTION DES (NE)ENTS........................................................................................................................................................112
'.2.7 CONCL/SION...........................................................................................................................................................................112
4.3 $EN,TRE AVEC C'AMP DE SAISIE% BOUTON ET LIBELL.................................................................................................................. 112
'.3.1 CONCEPTION BRAP+IG/E...........................................................................................................................................................112
'.3.2 BESTION DES (NE)ENTS D1/N FOR)/LAIRE.............................................................................................................................. 11.
'.3.3 /NE A/TRE )T+ODE PO/R BRER LES (NE)ENTS.................................................................................................................... 117
'.3.' CONCL/SION...........................................................................................................................................................................119
4.4 +UEL+UES COMPOSANTS UTILES..................................................................................................................................................11!
'.'.1 FOR)/LAIRE FOR).................................................................................................................................................................. 119
'.'.2 TIG/ETTES LA*EL ET *O,TES DE SAISIE TE0T*O0....................................................................................................................... 12>
'.'.3 LISTES DRO/LANTES CO)*O*O0..............................................................................................................................................121
'.'.' CO)POSANT LIST*O0.............................................................................................................................................................. 123
'.'.. CASES 4 COC+ER C+ECH*O0I *O/TONS RADIO */TTONRADIO.......................................................................................................12.
Servi%es 1EB EO
'.'.5 (ARIATE/RS SCROLL*AR..........................................................................................................................................................125
4.5 VNEMENTS SOURIS................................................................................................................................................................ 128
4.6 CRER UNE $EN,TRE AVEC MENU................................................................................................................................................13
4.7 COMPOSANTS NON VISUELS.........................................................................................................................................................134
'.7.1 *O,TES DE DIALOB/E OPENFILEDIALOB ET SA(EFILEDIALOB.......................................................................................................13'
'.7.2 *O,TES DE DIALOB/E FONTCOLOR ET COLORDIALOB...................................................................................................................138
'.7.3 TI)ER....................................................................................................................................................................................1'>
4.8 L'EXEMPLE IMPOTS.............................................................................................................................................................. 142
5. GESTION D'VNEMENTS .............................................................................................................................................. 147
5.1 OB&ETS DELEGATE.....................................................................................................................................................................147
5.2 GESTION D'VNEMENTS............................................................................................................................................................ 148
..2.1 DCLARATION D1/N (NE)ENT................................................................................................................................................ 1'8
..2.2 DFINIR LES BESTIONNAIRES D1/N (NE)ENT............................................................................................................................. 1'8
..2.3 DCLENC+ER /N (NE)ENT.................................................................................................................................................... 1'8
..2.' /N E0E)PLE...........................................................................................................................................................................1'9
6. ACC"S AUX BASES DE DONNES .................................................................................................................................. 153
6.1 GNRALITS........................................................................................................................................................................... 153
6.2 LES DEUX MODES D'EXPLOITATION D'UNE SOURCE DE DONNES...................................................................................................... 154
6.3 ACC"S AUX DONNES EN MODE CONNECT................................................................................................................................... 155
5.3.1 LES *ASES DE DONNES DE L1E0E)PLE........................................................................................................................................ 1..
5.3.2 /TILISATION D1/N PILOTE OD*C............................................................................................................................................. 1.9
5.3.2.1 La 69ase de c#$$e8"#$.....................................................................................................................................................15>
5.3.2.2 :e!!e des e;7J!es SGL................................................................................................................................................151
5.3.2.3 E86l#"!a!"#$ d7 s7l!a! d17$e e;7J!e SELECT.............................................................................................................. 152
5.3.2.' L"&a!"#$ des ess#7ces................................................................................................................................................. 153
5.3.3 /TILISATION D1/N PILOTE OLE D*.......................................................................................................................................... 153
5.3.' )ISE 4 FO/R D1/NE TA*LE........................................................................................................................................................ 15'
5.3.. I)POTS.............................................................................................................................................................................. 158
6.4 ACC"S AUX DONNES EN MODE DCONNECT................................................................................................................................172
7. LES T'READS D'EXCUTION ....................................................................................................................................... 173
7.1 INTRODUCTION.......................................................................................................................................................................... 173
7.2 CRATION DE T'READS D'EXCUTION.......................................................................................................................................... 174
7.3 INTR,T DES T'READS............................................................................................................................................................... 176
7.4 ACC"S # DES RESSOURCES PARTAGES......................................................................................................................................... 177
7.5 ACC"S EXCLUSI$ # UNE RESSOURCE PARTAGE............................................................................................................................. 178
7.6 S)NC'RONISATION PAR VNEMENTS...........................................................................................................................................181
8. PROGRAMMATION TCP-IP ............................................................................................................................................. 184
8.1 GNRALITS........................................................................................................................................................................... 184
8.1.1 LES PROTOCOLES DE L1INTERNET................................................................................................................................................18'
8.1.2 LE )OD-LE OSI..................................................................................................................................................................... 18'
8.1.3 LE )OD-LE TCP3IP................................................................................................................................................................18.
8.1.' FONCTIONNE)ENT DES PROTOCOLES DE L1INTERNET...................................................................................................................... 187
8.1.. L1ADRESSABE DANS L1INTERNET................................................................................................................................................. 188
8.1...1 Les classes d1adesses IP.................................................................................................................................................. 189
8.1...2 Les 6#!#c#les de c#$%es"#$ Adesse I$!e$e! K22L Adesse 69@s";7e.......................................................................... 19>
8.1.5 LA CO/C+E RSEA/ DITE CO/C+E IP DE L1INTERNET..................................................................................................................... 19>
8.1.5.1 Le #7!a?e........................................................................................................................................................................ 191
8.1.5.2 )essa?es d1ee7 e! de c#$!le...................................................................................................................................... 191
8.1.7 LA CO/C+E TRANSPORT M LES PROTOCOLES /DP ET TCP.............................................................................................................192
8.1.7.1 Le 6#!#c#le /DP M /se Da!a?a: P#!#c#l.................................................................................................................. 192
8.1.7.2 Le 6#!#c#le TCP M Ta$s=e C#$!#l P#!#c#l................................................................................................................ 192
Servi%es 1EB EE
8.1.8 LA CO/C+E APPLICATIONS........................................................................................................................................................192
8.1.9 CONCL/SION...........................................................................................................................................................................193
8.2 GESTION DES ADRESSES RSEAU.................................................................................................................................................. 1!4
8.3 PROGRAMMATION TCP-IP....................................................................................................................................................... 1!6
8.3.1 BNRALITS..........................................................................................................................................................................195
8.3.2 LES CARACTRISTIG/ES D/ PROTOCOLE TCP...............................................................................................................................197
8.3.3 LA RELATION CLIENT2SER(E/R.................................................................................................................................................. 197
8.3.' ARC+ITECT/RE D1/N CLIENT......................................................................................................................................................197
8.3.. ARC+ITECT/RE D1/N SER(E/R................................................................................................................................................... 198
8.3.5 LA CLASSE TCPCLIENT............................................................................................................................................................ 198
8.3.7 LA CLASSE NETCORHSTREA)...................................................................................................................................................198
8.3.8 ARC+ITECT/RE DE *ASE D1/N CLIENT INTERNET............................................................................................................................199
8.3.9 LA CLASSE TCPLISTENER......................................................................................................................................................... 199
8.3.1> ARC+ITECT/RE DE *ASE D1/N SER(E/R INTERNET...................................................................................................................... 2>>
8.4 EXEMPLES................................................................................................................................................................................ 2
8.'.1 SER(E/R D1C+O..................................................................................................................................................................... 2>>
8.'.2 /N CLIENT PO/R LE SER(E/R D1C+O......................................................................................................................................... 2>2
8.'.3 /N CLIENT TCP BNRIG/E..................................................................................................................................................... 2>'
8.'.' /N SER(E/R TCP BNRIG/E.................................................................................................................................................... 2>9
8.'.. /N CLIENT CE*..................................................................................................................................................................... 21.
8.'.5 CLIENT CE* BRANT LES REDIRECTIONS.....................................................................................................................................217
8.'.7 SER(E/R DE CALC/L D1I)PNTS.................................................................................................................................................. 219
!. SERVICES *EB ................................................................................................................................................................... 225
!.1 INTRODUCTION.......................................................................................................................................................................... 225
!.2 LES NAVIGATEURS ET XML...................................................................................................................................................... 225
!.3 UN PREMIER SERVICE *EB........................................................................................................................................................ 226
9.3.1 (ERSION 1............................................................................................................................................................................. 225
9.3.2 (ERSION 2............................................................................................................................................................................. 232
9.3.3 (ERSION 3............................................................................................................................................................................. 23'
9.3.' (ERSION '............................................................................................................................................................................. 23.
9.3.. CONCL/SION...........................................................................................................................................................................235
!.4 UN SERVICE *EB D'OPRATIONS................................................................................................................................................. 236
!.5 UN CLIENT 'TTP-POST........................................................................................................................................................ 241
!.6 UN CLIENT SOAP.................................................................................................................................................................... 25
!.7 ENCAPSULATION DES C'ANGES CLIENT-SERVEUR.........................................................................................................................254
9.7.1 LA CLASSE D1ENCAPS/LATION.................................................................................................................................................... 2.'
9.7.2 /N CLIENT CONSOLE................................................................................................................................................................ 2.7
9.7.3 /N CLIENT BRAP+IG/E CINDOCS............................................................................................................................................... 25>
!.8 UN CLIENT PROX)..................................................................................................................................................................... 264
!.! CON$IGURER UN SERVICE *EB.................................................................................................................................................. 268
!.1 LE SERVICE *EB IMPOTS................................................................................................................................................... 27
9.1>.1 LE SER(ICE CE*....................................................................................................................................................................27>
9.1>.2 BNRER LE PRO0Y D/ SER(ICE I)POTS....................................................................................................................................275
9.1>.3 /TILISER LE PRO0Y A(EC /N CLIENT........................................................................................................................................ 277
1. A SUIVRE. ......................................................................................................................................................................... 281
Servi%es 1EB EL

Vous aimerez peut-être aussi