• Aucun résultat trouvé

Exemple d'appli ation : l'utilisateur de Lyon

proposée.Cetteappli ationillustrelefon tionnementdelaméthodeetintroduitune dis ussionsurlesqualitésetleslimitationsde etteméthode.

Pour ommen er,je proposeunefaçon ompa ted'é rirelesprogrammesdema- nièreàlesrendrepluslisibles.Ensuite,jedé rislesservi esWebné essairesàl'illus- tration.Ces servi esWeb onttrait àlamétéorologie.Enn, jedéroulelesétapesde laméthode.

Requêtede l'utilisateur Dansnotreexemple,l'utilisateurestnotre her heurde LyonquisouhaiteobtenirdesdonnéesderayonnementUVAentrele1

er

janvier2008 et le10janvier2008àParis,dontles oordonnéesgéographiquessont

(48, 2)

.

Pourutilisernotreméthode,l'utilisateurdoittraduiresarequêtedansunlangage ompréhensible par le prototype. Dans notre as l'utilisateur est un utilisateur di- re tet avan éde laméthodede omposition,dansle asgénérall'utilisateurn'aura pas onnaissan edufon tionnementdelaméthodede omposition.Son rleserade remplir un formulaire, la requête pouvant être pré-établie par un professionnel du domaine onnaissantlaméthodeetlesrequêtestypesde esutilisateurs.Il ommen e pardénirlestypesdesdonnéesqu'ilvafournirainsiquelestypesdesdonnéesqu'il souhaiteobtenirpar:

Requete : (geopoint, period) -> irradian e où:

geopointestletypereprésentantles oordonnéesgéographiques;

periodestletypereprésentantl'intervalledetempsdésiréparl'utilisateur;

irradian eestletypedesdonnéesquesouhaiteobtenirl'utilisateur.

L'utilisateurdoitensuitedénirla ompositionqu'ilsouhaitedefaçonpluspré ise andepermettreàlaméthoded'éliminerles ompositionsinvalides.

Considéronsquel'utilisateursouhaiteréaliserla ompositionsuivante:

prog

fun getIrradUVAexe

tmp = { nal :"irradUVA"} ; tmp.date=date;

tmp.geopoint=geopoint; tmp.unit=unit

returntmp

fun Servi eA exe result=[℄;

forea hi inrange(period.begin,period.end) do tmp={sequen e: [℄};

tmp.date=i;

tmp.geopoint=geopoint; tmp.unit="JM2";

result.sequen e=append(result.sequen e,getIrradUVA(tmp)) done

returnresult none

exe

request={latitude:48,longitude:2};

request.period={begin:20080101,end :20080110}; result=Servi eA(request);

returnresult

Dans ette omposition,l'utilisateurdé lareunservi eWeb:getIrradUVA.L'iden- tiant lef

f inal

ontenu dans lapartie résultatindique que e servi e Web est un servi eWebdebase.L'utilisateurdé lareaussiunservi eWebnormalnomméServi- eA.A etteétape,iln'estpasné essaireque Servi eAsoit ee tivementunservi e Webexistant.

Base de données des servi es Web onnus Pour et exemple, le prototype onnaîtles

N

servi esWebsuivants:

Servi eBquifournitdesdonnéesderayonnementglobaltotalàpartird'unlieu donné;

Servi eA qui fournit le rayonnementdans les UVA pour unlieu parti ulieret une périodedonnée;

Lesdeuxservi esWebpré édentsfournissentlesdonnéesen

Jm

−2

;

ondisposeensuited'un servi eWeb, Servi eC,qui permet,àpartirdurayon- nement globaltotal, defournir desrayonnementsUVA, obtenus parun al ul approprié;

De la même façonquel'utilisateur dénit sarequête, lesservi es Webdé rivent lestypesdeleursentréeset deleurssorties.

Lades riptiondestypesd'entréeetdesortiedesservi esWeb,donnée i-dessous, s'é ritdelafaçonsuivante:

ServiceX : (I1, I2)− > O

Etselit:le

ServiceX

apourentréedesdonnéesdetype

I1

et

I2

,etapoursortie unedonnéedetype

O

.

Voi i lades riptiondesservi esWeb:

Servi e A : (geopoint,period) -> (irradian e) Servi e B : (geopoint,period) -> (irradian e) Servi e C : (irradian e) -> (irradian e)

Comme nouspouvons leremarquer, ette des riptionnepermet pasdediéren- ier tous les servi es Web entre eux. En eet, si on se limite à l'analyse de ette des ription,lesservi esWebA etBfontlamême hose.Ce iillustrelaraisonpour laquelle ertainesméthodesnedis ernentpas ertainsservi esWebentreeux etque lades ription omportementaleest importante.

Pourdé rirele omportementdesservi esWeb,ilfaut ommen erpardé rireles fon tions de référen e.Ces fon tionspermettent de fournirles donnéesde base qui serontmanipuléesparles servi esWeb.Dansnotre exemple,nousavonsdeuxtypes debasedépendants,qui sontirradGlobalTotalet irradUVA.

Ces typesdebase sontdé ritsdanslelangagedelafaçonsuivante :

fun getIrradGlobalTotalexe

tmp = { nal :"irradGlobalTotal"} ; tmp.date=date;

tmp.geopoint=geopoint; tmp.unit=unit;

returntmp

fun getIrradUVAexe

tmp = { nal :"irradUVA"} ; tmp.date=date;

tmp.geopoint=geopoint; tmp.unit=unit;

returntmp

Cestypesd'irradian edépendentuniquementd'unedate,d'unelo alisationetde leursunités.

La diéren iation entre les deux types est faite par la présen e du mot lef - nal dans le résultat, le premier servi e de base fournit le mot lef

f inal

asso ié à

”irradGlobalT otal”

,alorsquelese ondasso ie

”irradU V A”

àl'identiant lefnal. Ce ipermettradelesdiéren ierlorsdel'exé utionthéorique.

Commeil estimpossiblededéterminerlesrelationsentre esdiérentstypespar etteuniquedes ription,ilestné essairededénirle omportementdesservi esWeb. Ce omportementvadéterminer ommentlesservi esWebproduisentetutilisentles donnéesdestypesdebase.

Ladénition desservi esWebprésentéspré édemmentestlasuivante:

fun Servi eAexe

result={sequen e:[ ℄};

forea hiin range(period.begin,period.end) do tmp = { } ;

tmp.date=i;

tmp.geopoint=geopoint; tmp.units ="JM2";

result.sequen e=append(result.sequen e,getIrradUVA(tmp)) done

returnresult

On remarque que le servi e Web Servi eA ommen e par initialiser le résultat, appelé

result

, ommeun di tionnaire omportant uneliste vide, appelée

sequence

. Ensuite il par ourt l'intervalletemporel entre

period.begin

et

period.end

. À haque

date

i

,il appelleleservi eWebdebasegetIrradUVAaugeopointdonnéet àladate onsidérée. De plus,il dénit l'unité de haque valeur omme

”JM 2”

. Son résultat est onstruit parla on aténationdesrésultatsrenvoyésparleservi eWeb.

fun Servi eBexe

result={sequen e:[ ℄};

forea hiinrange(period.begin,period.end) do tmp ={};

tmp.date=i;

tmp.geopoint=geopoint; tmp.unit ="JM2";

result.sequen e=append(result.sequen e,getIrradGlobalTotal(tmp)) done

returnresult

On remarque quelades riptionde e Servi eBest identiqueà elle deServi eA sauf que Servi eBfait appel àgetIrradGlobalTotalà lapla e de getIrradUVA; e i signiequeServi eBfournit unesérietemporelled'irradian eglobaletotale.

Enn Servi eCpar ourtlaliste

sequence

quiluiestfournieenentréedemanière ày repérer paruntest lesvaleursde l'irradian e globaletotale.Servi eC hange le typede haquevaleurnaletrouvéeen

irradU V A

, equipeutêtreinterprété omme une onversiond'une irradian e globaletotale en une irradian e dans les UVA. On remarqueraégalementquele servi eWebélimine toutes lesautres valeurspossibles et renvoieunelistene omportantquedesvaleursd'irradian edanslesUVA.

fun Servi eCexe

result={sequen e:[ ℄}; forea hiinsequen edo

if i.nal=="irradGlobalTotal"then i.nal="irradUVA";

result.sequen e=append(result.sequen e,i) else

skip end returnresult

Appli ationetdéroulementdelaméthodeproposée Lapremièreétape onsiste àtrouverles heminsdanslegrapheforméave lareprésentation onventionnelle.Pour notreexemple,onobtientles heminssuivants:

Servi eA; Servi eB;

Servi eA, Servi eC; Servi eB,Servi eC;

Unefoistousles heminspossiblessansbou ledénis,ilfauttraduire es hemins danslelangagedé rivantle omportementdesservi esWeb.Parexemple,le hemin Servi eA, Servi eCseratraduitpar:

prog

... dé larationdesservi esWeb... exe

input0 ={geopoint:{latitude:48,longitude:2}}; input0.period={begin:20080101,end:20080110}; input1 =Servi eA (input0);

input2 =Servi eC(input1) returninput2

Cha unde esprogrammesestexé utépourobtenirl'environnementnalquisera omparéàl'environnementsouhaité.Larègleappliquéeest Silavaleurderetourest in lusedanslavaleurderetoursouhaitéeparl'utilisateur,alors ette ompositionest valide; etterègleestréaliséeparla omparaisondesenvironnements.L'étapenale onsiste àexé uterla omposition hoisie.Voi i lerésultat obtenu pour l'exé ution delarequêtedel'utilisateur:

{sequen e:

{nal:"irradUVA",date:20080101,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} {nal:"irradUVA",date:20080102,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} {nal:"irradUVA",date:20080103,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} ...

{nal:"irradUVA",date:20080110,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} }

Puis voi i lerésultatdel'appelàServi eB:

{sequen e:

{nal:"irradGlobalTotal",date:20080101,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} {nal:"irradGlobalTotal",date:20080102,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} {nal:"irradGlobalTotal",date:20080103,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} ...

{nal:"irradGlobalTotal",date:20080110,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} }

On onstate que, dans ette omposition, lerésultat n'est pas onforme àlare- quête; etteséquen eseradon éliminée.Les ompositionsinvalidessontéliminéeset les ompositionsrestantessonttriéesparordredequalitéglobale.Ilneresteplusque les ompositionssuivantesdansl'ordredequalité :

Servi eA;

Servi eB,Servi eC;

Supposonsquelerésultatobtenuparlapremière ompositionsoit :

{sequen e:

{value:400,date :20080101,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} {value:410,date :20080102,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} {value:405,date :20080103,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} }

On n'obtient que lestrois premières valeurssouhaitées: les trois premiers jours dejanvier2008.Laméthodenevalideradon pas e résultatetessayeralaséquen e suivante:

{sequen e:

{value:405,date :20080102,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} {value:408,date :20080103,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} ...

{value:500,date :20080110,

geopoint:{latitude: 48,longitude:2},unit:"JM2"} }

Lerésultatestplus ompletmaisilmanquelapremièrevaleur.Leprototypefera don l'unionde es résultatsdemanièreàfournirunrésultat ompletàl'utilisateur.

5.8 Cas parti ulier où la omparaison des omporte-