You are on page 1of 20

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

%DVHV GH GRQQpHV HW 'pYHORSSHPHQW GDSSOLFDWLRQV SHUVLVWDQWHV


0RWVFOpV 
    

6yvphvrvhr @irqqrq TRG Qprqhy TRG TRG8hyyGrryDrshpr P978 E978

5HWRXU VXU OREMHFWLI


6*%'  XQ PrPH ORJLFLHO TXL SHUPHW 'H VWUXFWXUHU HW GH VWRFNHU OHV GRQQpHV LQWHOOLJHPPHQW 'H OHV LQWHUURJHU HIILFDFHPHQW 'H OHV PRGLILHU FRUUHFWHPHQW 'DQV XQ HQYLURQQHPHQW PXOWLXWLOLVDWHXUV 4XHOOH RXYHUWXUH YHUV OH[WpULHXU " 4XHOOHV LQWHUIDFHV SURJUDPPDWLTXHV DX[ 6*%'" -'%& /LPSHGDQFH PLVPDWFK HW ORULHQWp REMHW

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

"

5HWRXU VXU OH[HPSOH 0\64/  3K3


,QWpUrW 3XLVVDQFH HW IDFLOLWp GXWLOLVDWLRQ

3K3  /DQJDJH VLPSOH W\SDJH G\QDPLTXH HWF $3, 64/ ,PEULFDWLRQ DYHF +70/ SURWRFROH +773

$FFqV j OD %'

$UFKL &6  $SSOLFDWLRQ GLVWDQWH

5pYpODWHXU 3RLQW IRUW  DUFKLWHFWXUH 3RLQW IDLEOH  LQFRKpUHQFH GHV PRWHXUV GH[pFXWLRQ

 PRGqOHV GH GRQQpHV HQ FDV GH ODQJDJH W\Sp

,QWHUDFWLRQ 6*%'  /3
3ULQFLSH  OHFWXUH  PLVHjMRXU  pFULWXUH /D %' DVVXUH OD SHUVLVWDQFH &RSLH GHV GRQQpHV SHUVLVWDQWHV GDQV OHV VWUXFWXUHV GX SURJUDPPH ! WUDQVLHQWHV /H SURJUDPPH PHW j MRXU OHV GRQQpHV WUDQVLHQWHV 5HFRSLH GHV GRQQpHV WUDQVLHQWHV VXU OH 6*%' 4XHVWLRQV 3RUWDELOLWp  6*%' '\QDPLFLWp  VWUXFWXUHV GH GRQQpHV 'LVWULEXWLRQ GHV GRQQpHV HW GHV WUDLWHPHQWV

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

Embedded SQL86

EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; char *dbaccess="bda10/bda@T:zazie:o1"; VARCHAR ename[50]; VARCHAR job[40]; VARCHAR dname[40]; EXEC SQL END DECLARE SECTION; char Buf[1024]; connection(); EXEC SQL DECLARE csa CURSOR FOR SELECT e.ename, e.job, d.dname FROM emp e, dept d, WHERE e.deptno = d.deptno ORDER BY d.dname, e.ename;

EXEC SQL OPEN csa ; val=0; /* compteur du nombre de tuples */ while (1) { EXEC SQL WHENEVER NOT FOUND DO break; EXEC SQL FETCH csa INTO :ename, :job, :dname; i=ename.len; while(ename.arr[i-1]== ) i--; ename.arr[i]=\0; printf("%s # ", ename.arr); i=job.len; while(job.arr[i-1]== ) i--; job.arr[i]=\0; printf("%s # ", job.arr); i=dname.len; while(dname.arr[i-1]== ) i--; dname.arr[i]=\0; printf("%s \n ", dname.arr); val++; } EXEC SQL CLOSE csa; printf("%d\n",val); deconnection();

64/ HPEHGGHG 64/


Source C-embedded SQL .pc

(PEHGGHG 64/ /H FRGH VRXUFH HVW QRUPDOLVp )RQFWLRQV GH OD OLEUDLULH QRQ QRUPDOLVpHV 5HTXrWHV VWDWLTXHV 3UpFRPSLODWHXU SURSULpWDLUH &RPSLODWLRQ HQ

Prcompilateur SQL

Mtabase DB call interfaces

Code C "pur" .c

Compilateur C

Code objet .o DB library

SUpVHQFH GX 6*%'

Editeur de liens

Excutable

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

&

8QH ORQJXH VXLWH GH VWDQGDUG


6WDQGDUG $16,   ,62  (PEHGGHG 64/ 64/&2'(   64/  ;2SHQ 6$* 64/ G\QDPLTXH 'LFWLRQQDLUH GH GRQQpHV   64/ ,62 64/67$7( 64/ SURFpGXUDO  64/ &/,   64/ $'7

$16,

'

64/ FODULILH HW SUpFLVH


64/ DWWHQGXH GHSXLV   SDJHV  SRXU 64/  SDUWLHV  GHV H[WHQVLRQV 64/)UDPHZRUN 64/)RXQGDWLRQV 64/&/, 64/360 64/%LQGLQJV 64/;$ WUDQVDFWLRQV GLVWULEXpHV  64/7HPSRUDO 64/0(' GRQQpHV QRQ 64/  64/2%-

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

&RQIRUPLWp j 64/
 QLYHDX[ GH FRQIRUPLWp j OD QRUPH &RUH 64/ VXSSRUW

IUDPHZRUN  FRUH IRXQGDWLRQV   ELQGLQJ VW\OH  64/&/, RX 64/360 RX 64/%LQGLQJV RX DX PRLQV  64/ SDFNDJH GDWHWLPH LQWHJULW\ 2/$3 360 &/,  64/ )ODJJHU

@)prhr vqr

(QKDQFHG 64/ VXSSRUW


64/ SUpYX 64/00 64/5'$

64/ 3HUVLVWHQW VWRUHG PRGXOH 64/360


3URFpGXUH IRQFWLRQ PpWKRGH $MRXW  64/ %ORFV GH FRQWUROHV

,IWKHQHOVH ERXFOHV H[FHSWLRQ HWF

'pFODUDWLRQ HW DIIHFWDWLRQ GH YDULDEOHV *HVWLRQ GH ]RQHV GH GLDJQRVWLFV

,QIRV VXU OpWDW GX SURFHVVXV

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

64/  64/&DOO /HYHO LQWHUIDFH 64/&/,

&RXFKH ORJLFLHOOH TXL SHUPHW OLQVHUWLRQ GH FRPPDQGHV 64/ FRPPH SDUDPqWUHV GH IRQFWLRQV

2Q VWDQGDUGLVH OHV SURWRW\SHV GH OD ELEOLRWKqTXH GX 6*%' pGLWLRQ GH OLHQ

2Q pYLWH OD SUpFRPSLODWLRQ /H 6*%' HVW VpOHFWLRQQp j O


H[pFXWLRQ j SDUWLU G
XQ ILFKLHU GH FRQILJXUDWLRQ &KDUJHPHQW G\QDPLTXH GH OD OLEUDLULH GX 6*%' DFFpGp

([HPSOH  -'%& RQ SHXW WUDYDLOOHU DYHF SOXVLHXUV 6*%' j OD IRLV

'HX[ VROXWLRQV FRPSOpPHQWDLUHV


8QH TXHVWLRQ FUXFLDOH  R H[pFXWHU OHV WUDLWHPHQWV " *DUWQHU JURXS
Qprhv qvvipr Qprhv qvhr Gtvr hyvphvr qvvipr 9pr qvhr 9pr qvvipr

Brv qr qpr

Brv qr qpr

Brv qr qpr

Brv qr qpr

Brv qr qpr

Trr

Uhvrr

Uhvrr

Uhvrr

Brv qr qpr

Qprhv

Uhvrr

Uhvrr

Uhvrr

Qprhv 8yvr

Qprhv

Qprhv

Qprhv

Qprhv

Ahpryvsvt

Apv uvvt

9hhuvvt

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

"

(W LQGXVWULHOOHV
/HV DUFKLWHFWXUHV PXOWLQLYHDX[ VH JpQpUDOLVHQW (OOHV SHUPHWWHQW OLQWpJUDWLRQ GHV VWDQGDUGV V\VWqPHV GLQIRUPDWLRQ RXYHUWV

64/ SRXU OHV EDVHV GH GRQQpHV ;0/ VWDQGDUG pPHUJHDQW SRXU O(', HWF

/HV SUREOqPHV FKDQJHQW


&RW GH JHVWLRQ GHV DUFKLWHFWXUHV &RW GH OD PDLQWHQDQFH GHV DSSOLFDWLRQV

3UpVHQWDWLRQ GH -DYD
8Q WUqV JURV VXFFqV  3RXUTXRL " 'HV GRPDLQHV GXWLOLVDWLRQ GH OD WHFKQRORJLH -DYD WUqV YDULpV 8Q VRXWLHQ WUqV IRUW GHV JUDQGV DFWHXUV GX PLOLHX LQIRUPDWLTXH 'HV UDLVRQV WHFKQLTXHV

/DQJDJH RULHQWp REMHW 2ULHQWp :HE HW %DVHV GH GRQQpHV

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

+LVWRULTXH
/DQJDJH UpFHQW OLp j OpYROXWLRQ G,QWHUQHW   SURMHW 2$. 6XQ 0LFURV\VWHPV  /DQJDJH SRXU IDYRULVHU OD FRPPXQLFDWLRQ GHV DSSDUHLOV GRPRWLTXHV   DEDQGRQ G2$. PDLV UHSULVH GH OD WHFKQRORJLH SRXU ODGDSWHU j XQ QRXYHDX ODQJDJH j GHVWLQDWLRQ G,QWHUQHW   DQQRQFH RIILFLHOOH OH -'.    YHUVLRQ DFWXHOOH OH -'. 

-'.
-'.  -DYD 'HYHORSPHQW .LW /H ODQJDJH GH SURJUDPPDWLRQ HW VRQ FRPSLODWHXU /D PDFKLQH YLUWXHOOH SRXU OH[pFXWLRQ GHV SURJUDPPHV /HV $3, $SSOLFDWLRQ 3URJUDPPLQJ ,QWHUIDFH  ELEOLRWKqTXHV GH FODVVHV HQ VWDQGDUG !  8Q HQVHPEOH GRXWLOV  MDYD MDYDF MGE MDYDGRF MDU

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

&

'RPDLQHV GXWLOLVDWLRQ
/H ODQJDJH HVW FRQoX GH WHOOH PDQLqUH TXH OHV

DSSOLFDWLRQV GpYHORSSpHV VRLW IDFLOHPHQW FRPPXQLFDQWHV 

,QWHUQHW 

*pQpUDWLRQ GH FRQWHQX :HE  6HUYOHWV -63 &RGH PRELOH  DSSOHWV -DYD :HE 6WDUW  &RPPXQLFDWLRQ GHV SURJUDPPHV YLD OH UpVHDX  50,

$FFqV DX[ EDVHV GH GRQQpHV  -'%& )RUPDW GH FRPSRVDQWV VHUYHXU  (-%

'

6RXWLHQ GHV JUDQGV DFWHXUV


6XSSRUW GX -'. VXU OD PDMRULWp GHV V\VWqPH

GH[SORLWDWLRQV DFWXHOV 
8QL[ 6RODULV OLQX[ :LQGRZV 0DF 26

$FFqV DX EDVHV GH GRQQpHV  6WUDWpJLH -DYD G2UDFOH /D SOXSDUW GHV %' GLVSRVHQW GH SLORWHV -'%&

3KLOLSSH 3LFRXHW (167 %UHWDJQH

0DVWqUHV ,$'%$

$QQpH VFRODLUH 

5DLVRQV WHFKQLTXHV  OH ODQJDJH


/DQJDJH RULHQWp REMHW FRPPH & PDLV TXL pYLWH

FHUWDLQHV GLIILFXOWpV

+pULWDJH VLPSOH 3DV GH SRLQWHXUV 7\SDJH IRUW *HVWLRQ DXWRPDWLTXH GH OD PpPRLUH SDV GH IUHH QL GH PDOORF

%LEOLRWKqTXH VWDQGDUG WUqV pWHQGXH TXL SHUPHW ODFFqV

j GH PXOWLSOHV IRQFWLRQQDOLWpV JUkFH j GHV $3, GH KDXW QLYHDX /DQJDJH VLPSOH j SUHQGUH HQ PDLQ PDLV SDV OLPLWp

!

5DLVRQV WHFKQLTXHV  OHQYLURQQHPHQW


/DQJDJH LQWHUSUpWp  SRUWDELOLWp GX ODQJDJH
Code Java Machine virtuelle
machine virtuelle Java

Systme d'exploitation

:LQGRZV

javac

java

machine virtuelle Java

8QL[

SURJMDYD

SURJFODVV

machine virtuelle Java

(WF

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

-'%&  LQWURGXFWLRQ

,QWHUIDFH -DYD SRXU OD FRQQH[LRQ j GHV EDVHV GH GRQQpHV UHODWLRQQHOOHV $3, -DYD SRXU OH 64/ G\QDPLTXH

Embauche dun nouvel employ : - saisie des renseignements - stockage

9vrE978

!!

-'%&  UpVXPp
9vrHhhtr 8rpv

rtvr9vr9vr
9vr

prhrThrr rhrThrry rhr8hyyy

tr8rpvy

Thrr

QrhrqThrr

8hyyhiyrThrr

rrprRry rrprVqhry

rrprRr rrprVqhr

@rpr

SryTr

trYYYvfpy

vTvt

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

!"

/HV FODVVHV 6WDWHPHQW HW 5HVXOW6HW


9vrHhhtr 8rpv

rtvr9vr9vr
9vr

prhrThrr rhrThrry rhr8hyyy

tr8rpvy

Thrr

QrhrqThrr

8hyyhiyrThrr

rrprRry rrprVqhry

rrprRr rrprVqhr

@rpr

SryTr

trYYYvfpy

vTvt

!#

/D FODVVH VWDWHPHQW

6WDWHPHQW
Vrqr"pyhrrprhqrvpvTRG8ryyrpvyhy
vyrrrqrppryrvpvTRGpyprhvr

"puqrvpvhyr)

rrprVqhr9@G@U@ASPHH6fU67G@XC@S@IPH2 Y0
QqrvpvTRGqrvrjwrvryrirqrhtpr qvsvpr

rrprRrT@G@8UASPHH6fU67G@0
QqrhryTRGprprhvrqrqprqryhihrSrvr SryTrrriyrqrpyh

rrpr hqvyrvrqrqryvpvTRGhvprrrr
vrjwqhyrphqvpvTRGtppprqhvrr SrvrrvyrvrSryTr

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

!$

/D FODVVH 5HVXOW6HW

5HVXOW6HW
tqrhiyrhqryvtrprhyrpyhqrrrryh
srqrqryvrhtpr

Qyvrpuqrrvyryrpyrqryhsr)

rtrUrv Tvt0pqryhpyr

vhqpSryrrpvrrhtprGh
puqrnext() rrqrhrjyhhtprvhr@yyrrvr

true

vyrvrrprrqrhtpryprhvrfalse

vDyrvrhqrpuqrprevious()E978!vqvqr ryyrpuqrrrhqpyhprrqhyr!qvrpv

!%

/HV FODVVHV 6WDWHPHQW HW 5HVXOW6HW

public Vector getNomsImages() throws SQLException,RemoteException{ Vector noms = new Vector(); Statement stmt = connexion.createStatement(); ResultSet rset = stmt.executeQuery("SELECT ENAME FROM EMP"); while(rset.next()) noms.addElement(rset.getString(1)); stmt.close(); return noms; }

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

!&

*HVWLRQ GHV SLORWHV HW FRQQH[LRQ j OD EDVH


'ULYHU0DQDJHU &RQQHFWLRQ

rtvr9vr9vr
'ULYHU V

prhrThrr rhrThrry rhr8hyyy

tr8rpvy

6WDWHPHQW

3UHSDUHG6WDWHPHQW

&DOODEOH6WDWHPHQW

rrprRry rrprVqhry

rrprRr rrprVqhr

@rpr

5HVXOW6HW

trYYYvfpy

vTvt

!'

*HVWLRQ GHV SLORWHV HW FRQQH[LRQ j OD EDVH

'ULYHU0DQDJHU

8yhrvh!{yr)

vrjwryvrqr9vrprr0 hrjyhyvphvyrqvrprqhjyVSGhvr

Qrrqirvrprvjihrqrqpr

puqr

JHW&RQQHFWLRQ  vrvrrvhprqr8rpv

&RQQHFWLRQ

TiyvrrhhpvhrprihrqrqprBqryrhsrqr vpvTRGyrhyvqhvryrhyhv)

puqr

FRPPLW UROOEDFN VHW$XWR&RPPLW ERROHDQ 

QrrqrpprrvhprqryhpyhrThrr

puqr

FUHDWH6WDWHPHQWvrvrrvhprqrThrr

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

!(

*HVWLRQ GHV SLORWHV HW FRQQH[LRQ j OD EDVH

Connection connexion; // ... public void connect() throws SQLException, RemoteException{ String s = "jdbc:oracle:thin:tanguy/philippe@penfret:1521:BASETEST"; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); connexion = DriverManager.getConnection(s); }

"

/D FODVVH 3UHSDUHG6WDWHPHQW

3UHSDUHG6WDWHPHQW

QrrqryvrqrhhqrjhryTRGhhrppv qhpv qrssvphpvp

GrhhqrhpjyvpvTRGjyhvqrqrpuqr

setType(position,valeur)

rD #$0 rTvt!8p

public void miseAJourEmploi(String ename,String job) throws SQLException,RemoteException { PreparedStatement pstmt = connexion.prepareStatement( "UPDATE EMP SET JOB=? WHERE ENAME=?"); pstmt.setString(1,job); pstmt.setString(2,ename); pstmt.executeUpdate(); pstmt.close(); }

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

"

/HV FODVVHV 6WDWHPHQW HW 5HVXOW6HW


'ULYHU0DQDJHU &RQQHFWLRQ

UHJLVWHU'ULYHU 'ULYHU
'ULYHU V

FUHDWH6WDWHPHQW SUHSDUH6WDWHPHQW VTO SUHSDUH&DOO VTO

JHW&RQQHFWLRQ XUO

6WDWHPHQW

3UHSDUHG6WDWHPHQW

&DOODEOH6WDWHPHQW

H[HFXWH4XHU\ VTO H[HFXWH8SGDWH VTO

H[HFXWH4XHU\ H[HFXWH8SGDWH

([HFXWH

5HVXOW6HW

JHW;;; LQW_QRPBFRO

vTvt

"!

/D FODVVH &DOODEOH6WDWHPHQW
&DOODEOH6WDWHPHQW
Qrrqryvryrppqrpxprqhyhihr GrpqrTRGhvrrrphexecuteUpdate(...) hvyhryjr
ppqrpxprrppryhvqrr

public void creerEmpVide(String ename) throws SQLException,RemoteException{ CallableStatement cstmt = connexion.prepareCall("{call insertion_image_vide(?)}"); cstmt.setString(1,ename); cstmt.execute(); cstmt.close(); }

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

""

/HV PpWDGRQQpHV

5HVXOW6HW0HWD'DWD
6rqrppvvyriwrSryTr tppp
IirqrpyrprrqhyrSryTrqrpyr vivyvpq hssrpryhhyryyjrpyr

GvhprqSryTrHrh9hhrirrhyhpuqr)

SryTrHrh9hhq 2rtrHrh9hh0 tr8y8tr8hhytIhrv 8y trTpurhIhrv8yvIyyhiyrv8y

'DWDEDVH0HWD'DWD
6rqrppvvyhihrqrqpr
Uhiyrrvhrq vyvhrvrqvpvqppvr

G vhprrirrhyhpyhr8rpv)

h8rv trHrh9hh0

"#

&ODVVHV GH -'%&
Driver Statement Connection ResultSet ResultSetMetaData DatabaseMetaData
E978 

PreparedStatement

Array

Blob

Clob

Ref

SQLData

SQLInput

SQLOutput

Struct

CallableStatement

-DYDXWLO'DWH

-DYDODQJ2EMHFW

'DWH

7LPH

7LPHVWDPS

'ULYHU0DQDJHU

'ULYHU3URSHUW\,QIR

7\SHV

http://java.sun.com/products/jdk/1.3/docs/guide/jdbc/getstart/GettingStartedTOC.fm.html

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

"$

/HV DUFKLWHFWXUHV GH -'%&

8purytvpvryyrssrrh qpryr6QDvrr yvrvqvpvTRG srqrhhqrqrpuqr Ehh

Programme JAVA JDBC Driver Manager JDBC/ODBC Driver

Drshprqpsvvrhryh prvryhtrvqrhppq hqpr

ODBC driver
9vrvyrq svr vqvrhiyr

JDBC Driver ORACLE

ODBC Driver ORACLE 64/ 1HW

E978spvrryr yhrsrEhh9rryr FvrqvviyrE9F

Autre SGBD

Oracle Local

Oracle distant

"%

3me tier 2me tier


Servlet Servlet
ETX9FXriTrr rsr

Browser

+773

Appli JAVA

Appli JAVA
8yvr Y

-'%& -'%&

BASETEST
PL/SQL JSP

Oracle LQWHUMedia

1er tier
Phpyr'vrrrsr

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

"&

'LVWULEXWLRQ GHV UHVVRXUFHV


$UFKLWHFWXUHV FOLHQWVHUYHXU RX GLVWULEXpHV LQFOXDQW GHV

EDVHV GH GRQQpHV WUDQVSDUHQFH "


7wrp 7ryrr 7hvtr

Select ENAME, SAL FROM E, G, S WHERE DUR > 12 AND E.ENO = G.ENO AND E.TITLE = S.TITLE

Tokyo Paris
Qhvwrp

Boston Communication Network

Qhvryrr Qhvhvtr 7ryrr

Montreal New York


7wrp Ir`xryrr Ir`xwrp Ir`xhvtr Hrhywrp Qhvwrp Ir`xwrp Hrhyryrr Hrhyhvtr

"'

&RQFOXVLRQ

5HYDQFKH GH 64/ VXU OD WKpRULH


,PPHQVH LPSOLFDWLRQ GHV LQGXVWULHOV $UFKLWHFWXUHV FOLHQWVHUYHXU EDQDOLVpHV


TyvhyrhvrppqviyrhTB79qvvip Thqhqvhvqrpyrqrhyvqhvqrhhpvqvvipr

&RPPHQW JpUHU O,PSHGDQFH PLVPDWFK" 0RGqOH 6*%'  ODQJDJH GH SURJUDPPDWLRQ

7\SHV GH GRQQpHV GLIIpUHQWV



Urryhvryvyr UrGQpprvivp

0RWHXU GH[pFXWLRQ GLIIpUHQWV



@riyvrrvyryrTB79ryhvry Uyr j yr rpyrryrGQ

3KLOLSSH 3LFRXHW (167 %UHWDJQH



0DVWqUHV ,$'%$

$QQpH VFRODLUH 

"(

3KLOLSSH 3LFRXHW (167 %UHWDJQH



You might also like