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éesdetypeI1
etI2
,etapoursortie unedonnéedetypeO
.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éesequence
. Ensuite il par ourt l'intervalletemporel entreperiod.begin
etperiod.end
. À haquedate
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éeenirradU 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-