From 3b64509b21683faf403de45e4b409b5a1eac46eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 10:33:50 +0000 Subject: [PATCH] deploy: bf37a48848e5371ca544294ddc879ec5cc38a2b8 --- 404.html | 2 +- architecture.html | 2 +- .../{c1aef90c.3b5ee97a.js => c1aef90c.ee7bd4da.js} | 2 +- ...ime~main.c4ce95fd.js => runtime~main.26acc49f.js} | 2 +- bpmn.html | 2 +- choreos.html | 12 ++++++------ choreos_bpmn.html | 2 +- index.html | 2 +- services.html | 2 +- services/airline.html | 2 +- services/bank.html | 2 +- services/geodistance.html | 2 +- services/prontogram.html | 2 +- services/rent.html | 2 +- uml.html | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) rename assets/js/{c1aef90c.3b5ee97a.js => c1aef90c.ee7bd4da.js} (98%) rename assets/js/{runtime~main.c4ce95fd.js => runtime~main.26acc49f.js} (89%) diff --git a/404.html b/404.html index 7eb49aa..f22928b 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ ACME Sky - + diff --git a/architecture.html b/architecture.html index 4184352..96ed0f7 100644 --- a/architecture.html +++ b/architecture.html @@ -4,7 +4,7 @@ Architettura | ACME Sky - + diff --git a/assets/js/c1aef90c.3b5ee97a.js b/assets/js/c1aef90c.ee7bd4da.js similarity index 98% rename from assets/js/c1aef90c.3b5ee97a.js rename to assets/js/c1aef90c.ee7bd4da.js index d092ec4..e2db201 100644 --- a/assets/js/c1aef90c.3b5ee97a.js +++ b/assets/js/c1aef90c.ee7bd4da.js @@ -1 +1 @@ -"use strict";(self.webpackChunkacme_sky_docs=self.webpackChunkacme_sky_docs||[]).push([[497],{9798:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var s=i(4848),r=i(8453);const t={sidebar_position:4,slug:"/choreos/"},o="Coreografie",a={id:"Coreografie",title:"Coreografie",description:"Legenda",source:"@site/docs/Coreografie.md",sourceDirName:".",slug:"/choreos/",permalink:"/docs/choreos/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"/choreos/"},sidebar:"defaultSidebar",previous:{title:"Diagrammi coreografie",permalink:"/docs/choreos_bpmn/"},next:{title:"Diagrammi UML",permalink:"/docs/uml/"}},c={},l=[{value:"Legenda",id:"legenda",level:3},{value:"Coreografie globali",id:"coreografie-globali",level:3},{value:"Verifica connectedness delle coreografie",id:"verifica-connectedness-delle-coreografie",level:3},{value:"Conclusione",id:"conclusione",level:4},{value:"Proiezioni",id:"proiezioni",level:3},{value:"ACMEsky",id:"acmesky",level:4},{value:"Utente",id:"utente",level:4},{value:"Airline service",id:"airline-service",level:4},{value:"Prontogram",id:"prontogram",level:4},{value:"Bank service",id:"bank-service",level:4},{value:"Geographical Distance service",id:"geographical-distance-service",level:4},{value:"Rent Service",id:"rent-service",level:4}];function _(n){const e={code:"code",h1:"h1",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"coreografie",children:"Coreografie"}),"\n",(0,s.jsx)(e.h3,{id:"legenda",children:"Legenda"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Nome"}),(0,s.jsx)(e.th,{children:"Sigla"}),(0,s.jsx)(e.th,{children:"Note"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"ACME"}),(0,s.jsx)(e.td,{children:"ACME"}),(0,s.jsx)(e.td,{children:"Indica l'azienda AcmeSky"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Airline service"}),(0,s.jsxs)(e.td,{children:["AIR",(0,s.jsx)("sub",{children:"k"})]}),(0,s.jsx)(e.td,{children:"Indica la k-esima compagnia aerea"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Rent service"}),(0,s.jsxs)(e.td,{children:["RENT",(0,s.jsx)("sub",{children:"t"})]}),(0,s.jsx)(e.td,{children:"Indica la t-esima compagnia di noleggio"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Prontogram"}),(0,s.jsx)(e.td,{children:"PTG"}),(0,s.jsx)(e.td,{children:"Indica il servizio di messagistica"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Bank service"}),(0,s.jsx)(e.td,{children:"BANK"}),(0,s.jsx)(e.td,{children:"Indica il servizio bancario"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Geodistance service"}),(0,s.jsx)(e.td,{children:"GEO"}),(0,s.jsx)(e.td,{children:"Indica il servizio di calcolo distanze"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"User"}),(0,s.jsxs)(e.td,{children:["USER",(0,s.jsx)("sub",{children:"x"})]}),(0,s.jsx)(e.td,{children:"Indica l'x-esimo utente"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"coreografie-globali",children:"Coreografie globali"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"\n( requestInterest: USER\u2093 -> ACME ; responseInterest: ACME -> USER\u2093 )* \n| \n\n( queryFlights: ACME -> AIR\u2096 ; responseFlights: AIR\u2096 -> ACME )* \n| \n\n( sendLastMinute: AIR\u2096 -> ACME ; responseLastMinute: ACME -> AIR\u2096 )*\n|\n\n( offerToken: ACME -> PTG ; notifyUser: PTG -> USER\u2093 ; \n notifyResponse: USER\u2093 -> PTG ; messageSended: PTG -> ACME )*\n|\n\n( \n confirmOffer: USER\u2093 -> ACME ; \n (\n ( \n responseOfferOk: ACME -> USER\u2093 ;\n requestPaymentLink: USER\u2093 -> ACME ;\n bookTickets: ACME -> AIR\u2096 ;\n (\n (\n responseTickets: AIR\u2096 -> ACME ;\n requestBankLink: ACME -> BANK ; \n responselink: BANK -> ACME ;\n paymentLink: ACME -> USER\u2093 ;\n\n (\n (\n payment: USER\u2093 -> BANK ;\n successPaymentBank: BANK -> ACME ;\n (\n // Richiesta a Geodistance se costo > 1000\u20ac\n 1 \n + \n (\n requestDistance: ACME -> GEO ; \n responseDistance: GEO -> ACME ; \n ( // Richiesta a Rent service se distanza <30Km\n 1 \n + \n (\n (\n requestDistanceRent: ACME -> GEO ; \n responseDistanceRent: GEO -> ACME ;\n )* ;\n requestRent: ACME -> RENT\u209c ; \n responseRent: RENT\u209c-> ACME ;\n )\n )\n )\n ) ;\n SendJourneyReceipt: ACME -> USER\u2093;\n )\n ) \n )\n )\n )\n )\n)*\n"})}),"\n",(0,s.jsx)(e.h3,{id:"verifica-connectedness-delle-coreografie",children:"Verifica connectedness delle coreografie"}),"\n",(0,s.jsx)(e.p,{children:"Per verificare se la coreografia fornita verifica la propriet\xe0 di connessione, dobbiamo scomporla e analizzare ogni composizione, scelta e iterazione sequenziale. Di seguito un'analisi dettagliata della coreografia asincrona precedentemente rappresentata, passo dopo passo:\nPer quanto riguarda la prima parte della coreografia globale:"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"( requestInterest: USER\u2093 -> ACME ; responseInterest: ACME -> USER\u2093 )* \n| \n( queryFlights: ACME -> AIR\u2096 ; responseFlights: AIR\u2096 -> ACME )* \n| \n( sendLastMinute: AIR\u2096 -> ACME ; responseLastMinute: ACME -> AIR\u2096 )*\n|\n( offerToken: ACME -> PTG ; notifyUser: PTG -> USER\u2093 ; \n notifyResponse: USER\u2093 -> PTG ; messageSended: PTG -> ACME )*\n"})}),"\n",(0,s.jsx)(e.p,{children:"La propriet\xe0 di connectedness \xe8 verificata in quanto si tratta di operazioni parallele, in cui il mittente della prima operazione \xe8 il ricevente della seconda operazione e, viceversa, il ricevente della prima operazione \xe8 il mittente della seconda e i ruoli rimangono gli stessi."}),"\n",(0,s.jsxs)(e.p,{children:["Per quanto riguarda invece l'operazione ",(0,s.jsx)(e.code,{children:"confirmOffer"}),":"]}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"confirmOffer: USER\u2093 -> ACME ; \n(\n // Confirmation of the offer\n responseOfferOk: ACME -> USER\u2093 ;\n requestPaymentLink: USER\u2093 -> ACME ;\n bookTickets: ACME -> AIR\u2096 ;\n (\n // Booking tickets and payment link generation\n responseTickets: AIR\u2096 -> ACME ;\n requestBankLink: ACME -> BANK ; \n responselink: BANK -> ACME ;\n paymentLink: ACME -> USER\u2093 ;\n (\n // Payment process\n payment: USER\u2093 -> BANK ;\n successPaymentBank: BANK -> ACME ;\n (\n // Additional services based on payment amount\n 1 \n + \n (\n requestDistance: ACME -> GEO ; \n responseDistance: GEO -> ACME ; \n (\n 1 \n + \n (\n requestDistanceRent: ACME -> GEO ; \n responseDistanceRent: GEO -> ACME ;\n requestRent: ACME -> RENT\u209c ; \n responseRent: RENT\u209c -> ACME ;\n )\n )\n )\n ) ;\n SendJourneyReceipt: ACME -> USER\u2093;\n )\n )\n)\n"})}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 1"}),": confirmOffer: USER\u2093 -> ACME ; responseOfferOk: ACME -> USER\u2093"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: USER\u2093 \xe8 il mittente della prima interazione e il ricevente della seconda interazione, quindi \xe8 connesso."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 2"}),": responseOfferOk: ACME -> USER\u2093 ; requestPaymentLink: USER\u2093 -> ACME-"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: USER\u2093 \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 3"}),": requestPaymentLink: USER\u2093 -> ACME ; bookTickets: ACME -> AIR\u2096"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> AIR\u2096"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 4"}),": bookTickets: ACME -> AIR\u2096 ; responseTickets: AIR\u2096 -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> AIR\u2096"}),"\n",(0,s.jsx)(e.li,{children:"AIR\u2096 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME e AIR\u2096 sono coinvolti in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 5"}),": responseTickets: AIR\u2096 -> ACME ; requestBankLink: ACME -> BANK"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"AIR\u2096 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 6"}),": requestBankLink: ACME -> BANK ; responselink: BANK -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"BANK -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME e BANK sono coinvolti in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 7"}),": responselink: BANK -> ACME ; paymentLink: ACME -> USER\u2093"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"BANK -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 8"}),": paymentLink: ACME -> USER\u2093 ; payment: USER\u2093 -> BANK"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: USER\u2093 \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 9"}),": payment: USER\u2093 -> BANK ; successPaymentBank: BANK -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"BANK -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: BANK \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 10"}),": successPaymentBank: BANK -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 1: 1"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 2: requestDistance: ACME -> GEO ; responseDistance: GEO -> ACME"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: Il primo Branch 1 rappresenta un elemento neutro (nessuna interazione), quindi \xe8 connesso.\nNel secondo Branch, ACME \xe8 coinvolto in entrambe le interazioni:\nACME -> GEO ; GEO -> ACME"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 11"}),": responseDistance: GEO -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 1: 1"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 2: requestDistanceRent: ACME -> GEO ; responseDistanceRent: GEO -> ACME\n; requestRent: ACME -> RENT\u209c ; responseRent: RENT\u209c -> ACME"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: Il primo Branch 1 \xe8 un elemento neutro.\nNel secondo Branch: ACME -> GEO ; GEO -> ACME; ACME -> RENT\u209c ; RENT\u209c -> ACME.\nACME \xe8 coinvolto in tutte le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 12"}),": Interazione finale\nSendJourneyReceipt: ACME -> USER\u2093 in risposta a USER\u2093 -> ACME"]}),"\n",(0,s.jsx)(e.h4,{id:"conclusione",children:"Conclusione"}),"\n",(0,s.jsx)(e.p,{children:"Ogni composizione sequenziale si connette appropriatamente con almeno un ruolo condiviso.\nOgni scelta assicura che gli stessi ruoli siano coinvolti inizialmente e non crea rami disconnessi.\nLe iterazioni coinvolgono ruoli consistenti durante tutto il corpo del ciclo.\nPertanto, l'operazione confirmOffer, insieme alle sue interazioni annidate, verifica la propriet\xe0 di connettivit\xe0, assicurando che la coreografia sia connessa."}),"\n",(0,s.jsx)(e.h3,{id:"proiezioni",children:"Proiezioni"}),"\n",(0,s.jsx)(e.p,{children:"Nella sezione seguente vengono descritte solamente le proiezioni considerante significative per i rispettivi ruoli / attori."}),"\n",(0,s.jsx)(e.h4,{id:"acmesky",children:"ACMEsky"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(FlightQuery, ACME) = \n ____________\n ( queryFlights@AIR\u2096 ; responseFlights@AIR\u2096 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(ReceiveLastMinute, ACME) = \n __________________\n ( sendLastMinute@AIR\u2096 ; responseLastMinute@AIR\u2096 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(RegisterInterest, ACME) = \n ________________\n ( requestInterest@USER\u2093 ; responseInterest@USER\u2093 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(SendOffer, ACME) = \n __________\n ( offer@PTG ; 1 ; 1 ; messageSent@PTG )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, ACME) = \n ( confirmOffer@USER\u2093 ; \n ( _______________ ___________\n (responseOfferOk@USER\u2093 ; requestPaymentLink@USER\u2093 ; bookTickets@AIR\u2096\n (\n ( \n responseTickets@AIR\u2096 ;\n ______________\n requestBankLink@BANK ; responselink@BANK ;\n ___________\n paymentLink@USER\u2093 ; 1 ;\n (\n (\n 1; successPaymentBank@BANK ;\n _______________\n ( 1 + ( requestDistance@GEO ; responseDistance@GEO ;\n ___________________\n ( 1 + ( ( requestDistanceRent@GEO ; responseDistanceRent@GEO )* ;\n ___________\n requestRent@RENT\u209c ; responseRent@RENT\u209c ;\n ) \n )\n ); __________________\n ) SendJourneyReceipt@USER\u2093\n ) \n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"utente",children:"Utente"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(RegisterInterest, USER\u2093) = \n _______________\n ( requestInterest@ACME ; responseInterest@ACME )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(SendOffer, USER\u2093) = \n ______________\n ( 1 ; notifyUser@PTG ; notifyResponse@PTG ; 1 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, USER\u2093) = \n ____________\n ( confirmOffer@ACME ; \n ( __________________\n ( responseOfferOk@ACME ; requestPaymentLink@ACME ; 1 ;\n ( _______\n ( 1 ; 1 ; 1 ; paymentLink@ACME ; payment@BANK ;\n (\n (\n 1 ; //successPaymentBank: BANK ->ACME\n ( 1 + ( 1 ; 1 ; //req distance\n ( 1 + (( 1 ; 1)* ; 1 ; 1 ;))\n )\n ); SendJourneyReceipt@ACME\n )\n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"airline-service",children:"Airline service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(QueryFlights, AIR\u2096) = \n _______________\n ( queryFlights@ACME ; responseFlights@ACME )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(sendLastMinute, AIR\u2096) = \n ______________\n ( sendLastMinute@ACME ; responseLastMinute@ACME )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, AIR\u2096) =\n ( 1 ; \n (\n (1 ; 1 ; bookTickets@ACME ;\n (\n ( _______________\n responseTickets@ACME ;\n 1 ; 1 ; 1 ;\n (\n ( 1; 1 ;\n ( 1 + ( 1 ; 1 ;)*\n (1 ; 1 )\n ) 1 ;\n )\n ) \n ) \n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"prontogram",children:"Prontogram"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(SendOffer, PTG) = \n __________\n ( offerToken@ACME ; notifyUser@USER\u2093 ; \n _____________\n notifyResponse@USER\u2093 ; messageSended@ACME )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"bank-service",children:"Bank service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, BANK) = \n ( 1 ; \n (\n ( 1 ; 1 ; 1 ;\n (\n ( ____________\n 1 ; requestBankLink@ACME ; responselink@ACME ; 1\n (\n ( __________________\n payment@USER\u2093 ;successPaymentBank@ACME ;\n (\n 1 + ( 1 ; 1 ;\n ( 1 + (( 1 ; 1)* ; 1 ; 1))\n )) 1 ;\n )\n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"geographical-distance-service",children:"Geographical Distance service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, GEO) = \n ( 1 ; \n (\n ( 1 ; 1 ; 1 ;\n (\n ( 1 ; 1 ; 1 ; 1;\n (\n (\n 1 ; 1;\n ________________\n ( 1 + ( requestDistance@ACME ; responseDistance@ACME ;\n ____________________\n ( 1 + (( requestDistanceRent@ACME ; responseDistanceRent@ACME )* ; \n ) 1; 1)\n )\n ) 1 ;\n )\n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"rent-service",children:"Rent Service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, RENT\u209c) = \n ( 1 ; \n (\n ( 1 ; 1 ; 1 ;\n (\n ( 1 ; 1 ; 1 ; 1 ;\n (\n ( 1 ; 1 ; \n ( 1 + ( ( 1 ; 1 )*; \n ____________\n requestRent@ACME ; responseRent@ACME ;\n )\n ) 1 ;\n )\n )\n )\n )\n ) \n )\n )*\n"})})]})}function d(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(_,{...n})}):_(n)}},8453:(n,e,i)=>{i.d(e,{R:()=>o,x:()=>a});var s=i(6540);const r={},t=s.createContext(r);function o(n){const e=s.useContext(t);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:o(n.components),s.createElement(t.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkacme_sky_docs=self.webpackChunkacme_sky_docs||[]).push([[497],{9798:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var s=i(4848),r=i(8453);const t={sidebar_position:4,slug:"/choreos/"},o="Coreografie",a={id:"Coreografie",title:"Coreografie",description:"Legenda",source:"@site/docs/Coreografie.md",sourceDirName:".",slug:"/choreos/",permalink:"/docs/choreos/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"/choreos/"},sidebar:"defaultSidebar",previous:{title:"Diagrammi coreografie",permalink:"/docs/choreos_bpmn/"},next:{title:"Diagrammi UML",permalink:"/docs/uml/"}},c={},l=[{value:"Legenda",id:"legenda",level:3},{value:"Coreografie globali",id:"coreografie-globali",level:3},{value:"Verifica connectedness delle coreografie",id:"verifica-connectedness-delle-coreografie",level:3},{value:"Conclusione",id:"conclusione",level:4},{value:"Proiezioni",id:"proiezioni",level:3},{value:"ACMEsky",id:"acmesky",level:4},{value:"Utente",id:"utente",level:4},{value:"Airline service",id:"airline-service",level:4},{value:"Prontogram",id:"prontogram",level:4},{value:"Bank service",id:"bank-service",level:4},{value:"Geographical Distance service",id:"geographical-distance-service",level:4},{value:"Rent Service",id:"rent-service",level:4}];function _(n){const e={code:"code",h1:"h1",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"coreografie",children:"Coreografie"}),"\n",(0,s.jsx)(e.h3,{id:"legenda",children:"Legenda"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Nome"}),(0,s.jsx)(e.th,{children:"Sigla"}),(0,s.jsx)(e.th,{children:"Note"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"ACME"}),(0,s.jsx)(e.td,{children:"ACME"}),(0,s.jsx)(e.td,{children:"Indica l'azienda AcmeSky"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Airline service"}),(0,s.jsxs)(e.td,{children:["AIR",(0,s.jsx)("sub",{children:"k"})]}),(0,s.jsx)(e.td,{children:"Indica la k-esima compagnia aerea"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Rent service"}),(0,s.jsxs)(e.td,{children:["RENT",(0,s.jsx)("sub",{children:"t"})]}),(0,s.jsx)(e.td,{children:"Indica la t-esima compagnia di noleggio"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Prontogram"}),(0,s.jsx)(e.td,{children:"PTG"}),(0,s.jsx)(e.td,{children:"Indica il servizio di messagistica"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Bank service"}),(0,s.jsx)(e.td,{children:"BANK"}),(0,s.jsx)(e.td,{children:"Indica il servizio bancario"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Geodistance service"}),(0,s.jsx)(e.td,{children:"GEO"}),(0,s.jsx)(e.td,{children:"Indica il servizio di calcolo distanze"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"User"}),(0,s.jsxs)(e.td,{children:["USER",(0,s.jsx)("sub",{children:"x"})]}),(0,s.jsx)(e.td,{children:"Indica l'x-esimo utente"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"coreografie-globali",children:"Coreografie globali"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"\n( requestInterest: USER\u2093 -> ACME ; responseInterest: ACME -> USER\u2093 )* \n| \n\n( queryFlights: ACME -> AIR\u2096 ; responseFlights: AIR\u2096 -> ACME )* \n| \n\n( sendLastMinute: AIR\u2096 -> ACME ; responseLastMinute: ACME -> AIR\u2096 )*\n|\n\n( offerToken: ACME -> PTG ; notifyUser: PTG -> USER\u2093 ; \n notifyResponse: USER\u2093 -> PTG ; messageSended: PTG -> ACME )*\n|\n\n( \n confirmOffer: USER\u2093 -> ACME ; \n (\n ( \n responseOfferOk: ACME -> USER\u2093 ;\n requestPaymentLink: USER\u2093 -> ACME ;\n bookTickets: ACME -> AIR\u2096 ;\n (\n (\n responseTickets: AIR\u2096 -> ACME ;\n requestBankLink: ACME -> BANK ; \n responselink: BANK -> ACME ;\n paymentLink: ACME -> USER\u2093 ;\n\n (\n (\n payment: USER\u2093 -> BANK ;\n successPaymentBank: BANK -> ACME ;\n (\n // Richiesta a Geodistance se costo > 1000\u20ac\n 1 \n + \n (\n requestDistance: ACME -> GEO ; \n responseDistance: GEO -> ACME ; \n ( // Richiesta a Rent service se distanza <30Km\n 1 \n + \n (\n (\n requestDistanceRent: ACME -> GEO ; \n responseDistanceRent: GEO -> ACME ;\n )* ;\n requestRent: ACME -> RENT\u209c ; \n responseRent: RENT\u209c-> ACME ;\n )\n )\n )\n ) ;\n SendJourneyInvoice: ACME -> USER\u2093;\n )\n ) \n )\n )\n )\n )\n)*\n"})}),"\n",(0,s.jsx)(e.h3,{id:"verifica-connectedness-delle-coreografie",children:"Verifica connectedness delle coreografie"}),"\n",(0,s.jsx)(e.p,{children:"Per verificare se la coreografia fornita verifica la propriet\xe0 di connessione, dobbiamo scomporla e analizzare ogni composizione, scelta e iterazione sequenziale. Di seguito un'analisi dettagliata della coreografia asincrona precedentemente rappresentata, passo dopo passo:\nPer quanto riguarda la prima parte della coreografia globale:"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"( requestInterest: USER\u2093 -> ACME ; responseInterest: ACME -> USER\u2093 )* \n| \n( queryFlights: ACME -> AIR\u2096 ; responseFlights: AIR\u2096 -> ACME )* \n| \n( sendLastMinute: AIR\u2096 -> ACME ; responseLastMinute: ACME -> AIR\u2096 )*\n|\n( offerToken: ACME -> PTG ; notifyUser: PTG -> USER\u2093 ; \n notifyResponse: USER\u2093 -> PTG ; messageSended: PTG -> ACME )*\n"})}),"\n",(0,s.jsx)(e.p,{children:"La propriet\xe0 di connectedness \xe8 verificata in quanto si tratta di operazioni parallele, in cui il mittente della prima operazione \xe8 il ricevente della seconda operazione e, viceversa, il ricevente della prima operazione \xe8 il mittente della seconda e i ruoli rimangono gli stessi."}),"\n",(0,s.jsxs)(e.p,{children:["Per quanto riguarda invece l'operazione ",(0,s.jsx)(e.code,{children:"confirmOffer"}),":"]}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"confirmOffer: USER\u2093 -> ACME ; \n(\n // Confirmation of the offer\n responseOfferOk: ACME -> USER\u2093 ;\n requestPaymentLink: USER\u2093 -> ACME ;\n bookTickets: ACME -> AIR\u2096 ;\n (\n // Booking tickets and payment link generation\n responseTickets: AIR\u2096 -> ACME ;\n requestBankLink: ACME -> BANK ; \n responselink: BANK -> ACME ;\n paymentLink: ACME -> USER\u2093 ;\n (\n // Payment process\n payment: USER\u2093 -> BANK ;\n successPaymentBank: BANK -> ACME ;\n (\n // Additional services based on payment amount\n 1 \n + \n (\n requestDistance: ACME -> GEO ; \n responseDistance: GEO -> ACME ; \n (\n 1 \n + \n (\n requestDistanceRent: ACME -> GEO ; \n responseDistanceRent: GEO -> ACME ;\n requestRent: ACME -> RENT\u209c ; \n responseRent: RENT\u209c -> ACME ;\n )\n )\n )\n ) ;\n SendJourneyInvoice: ACME -> USER\u2093;\n )\n )\n)\n"})}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 1"}),": confirmOffer: USER\u2093 -> ACME ; responseOfferOk: ACME -> USER\u2093"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: USER\u2093 \xe8 il mittente della prima interazione e il ricevente della seconda interazione, quindi \xe8 connesso."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 2"}),": responseOfferOk: ACME -> USER\u2093 ; requestPaymentLink: USER\u2093 -> ACME-"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: USER\u2093 \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 3"}),": requestPaymentLink: USER\u2093 -> ACME ; bookTickets: ACME -> AIR\u2096"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> AIR\u2096"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 4"}),": bookTickets: ACME -> AIR\u2096 ; responseTickets: AIR\u2096 -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> AIR\u2096"}),"\n",(0,s.jsx)(e.li,{children:"AIR\u2096 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME e AIR\u2096 sono coinvolti in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 5"}),": responseTickets: AIR\u2096 -> ACME ; requestBankLink: ACME -> BANK"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"AIR\u2096 -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 6"}),": requestBankLink: ACME -> BANK ; responselink: BANK -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"BANK -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME e BANK sono coinvolti in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 7"}),": responselink: BANK -> ACME ; paymentLink: ACME -> USER\u2093"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"BANK -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: ACME \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 8"}),": paymentLink: ACME -> USER\u2093 ; payment: USER\u2093 -> BANK"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"ACME -> USER\u2093"}),"\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: USER\u2093 \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 9"}),": payment: USER\u2093 -> BANK ; successPaymentBank: BANK -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"USER\u2093 -> BANK"}),"\n",(0,s.jsx)(e.li,{children:"BANK -> ACME"}),"\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: BANK \xe8 coinvolto in entrambe le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 10"}),": successPaymentBank: BANK -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 1: 1"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 2: requestDistance: ACME -> GEO ; responseDistance: GEO -> ACME"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: Il primo Branch 1 rappresenta un elemento neutro (nessuna interazione), quindi \xe8 connesso.\nNel secondo Branch, ACME \xe8 coinvolto in entrambe le interazioni:\nACME -> GEO ; GEO -> ACME"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 11"}),": responseDistance: GEO -> ACME"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 1: 1"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:"Branch 2: requestDistanceRent: ACME -> GEO ; responseDistanceRent: GEO -> ACME\n; requestRent: ACME -> RENT\u209c ; responseRent: RENT\u209c -> ACME"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Connettivit\xe0: Il primo Branch 1 \xe8 un elemento neutro.\nNel secondo Branch: ACME -> GEO ; GEO -> ACME; ACME -> RENT\u209c ; RENT\u209c -> ACME.\nACME \xe8 coinvolto in tutte le interazioni, garantendo la connettivit\xe0."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Passo 12"}),": Interazione finale\nSendJourneyInvoice: ACME -> USER\u2093 in risposta a USER\u2093 -> ACME"]}),"\n",(0,s.jsx)(e.h4,{id:"conclusione",children:"Conclusione"}),"\n",(0,s.jsx)(e.p,{children:"Ogni composizione sequenziale si connette appropriatamente con almeno un ruolo condiviso.\nOgni scelta assicura che gli stessi ruoli siano coinvolti inizialmente e non crea rami disconnessi.\nLe iterazioni coinvolgono ruoli consistenti durante tutto il corpo del ciclo.\nPertanto, l'operazione confirmOffer, insieme alle sue interazioni annidate, verifica la propriet\xe0 di connettivit\xe0, assicurando che la coreografia sia connessa."}),"\n",(0,s.jsx)(e.h3,{id:"proiezioni",children:"Proiezioni"}),"\n",(0,s.jsx)(e.p,{children:"Nella sezione seguente vengono descritte solamente le proiezioni considerante significative per i rispettivi ruoli / attori."}),"\n",(0,s.jsx)(e.h4,{id:"acmesky",children:"ACMEsky"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(FlightQuery, ACME) = \n ____________\n ( queryFlights@AIR\u2096 ; responseFlights@AIR\u2096 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(ReceiveLastMinute, ACME) = \n __________________\n ( sendLastMinute@AIR\u2096 ; responseLastMinute@AIR\u2096 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(RegisterInterest, ACME) = \n ________________\n ( requestInterest@USER\u2093 ; responseInterest@USER\u2093 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(SendOffer, ACME) = \n __________\n ( offer@PTG ; 1 ; 1 ; messageSent@PTG )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, ACME) = \n ( confirmOffer@USER\u2093 ; \n ( _______________ ___________\n (responseOfferOk@USER\u2093 ; requestPaymentLink@USER\u2093 ; bookTickets@AIR\u2096\n (\n ( \n responseTickets@AIR\u2096 ;\n ______________\n requestBankLink@BANK ; responselink@BANK ;\n ___________\n paymentLink@USER\u2093 ; 1 ;\n (\n (\n 1; successPaymentBank@BANK ;\n _______________\n ( 1 + ( requestDistance@GEO ; responseDistance@GEO ;\n ___________________\n ( 1 + ( ( requestDistanceRent@GEO ; responseDistanceRent@GEO )* ;\n ___________\n requestRent@RENT\u209c ; responseRent@RENT\u209c ;\n ) \n )\n ); __________________\n ) SendJourneyInvoice@USER\u2093\n ) \n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"utente",children:"Utente"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(RegisterInterest, USER\u2093) = \n _______________\n ( requestInterest@ACME ; responseInterest@ACME )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(SendOffer, USER\u2093) = \n ______________\n ( 1 ; notifyUser@PTG ; notifyResponse@PTG ; 1 )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, USER\u2093) = \n ____________\n ( confirmOffer@ACME ; \n ( __________________\n ( responseOfferOk@ACME ; requestPaymentLink@ACME ; 1 ;\n ( _______\n ( 1 ; 1 ; 1 ; paymentLink@ACME ; payment@BANK ;\n (\n (\n 1 ; //successPaymentBank: BANK ->ACME\n ( 1 + ( 1 ; 1 ; //req distance\n ( 1 + (( 1 ; 1)* ; 1 ; 1 ;))\n )\n ); SendJourneyInvoice@ACME\n )\n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"airline-service",children:"Airline service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(QueryFlights, AIR\u2096) = \n _______________\n ( queryFlights@ACME ; responseFlights@ACME )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(sendLastMinute, AIR\u2096) = \n ______________\n ( sendLastMinute@ACME ; responseLastMinute@ACME )*\n"})}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, AIR\u2096) =\n ( 1 ; \n (\n (1 ; 1 ; bookTickets@ACME ;\n (\n ( _______________\n responseTickets@ACME ;\n 1 ; 1 ; 1 ;\n (\n ( 1; 1 ;\n ( 1 + ( 1 ; 1 ;)*\n (1 ; 1 )\n ) 1 ;\n )\n ) \n ) \n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"prontogram",children:"Prontogram"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(SendOffer, PTG) = \n __________\n ( offerToken@ACME ; notifyUser@USER\u2093 ; \n _____________\n notifyResponse@USER\u2093 ; messageSended@ACME )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"bank-service",children:"Bank service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, BANK) = \n ( 1 ; \n (\n ( 1 ; 1 ; 1 ;\n (\n ( ____________\n 1 ; requestBankLink@ACME ; responselink@ACME ; 1\n (\n ( __________________\n payment@USER\u2093 ;successPaymentBank@ACME ;\n (\n 1 + ( 1 ; 1 ;\n ( 1 + (( 1 ; 1)* ; 1 ; 1))\n )) 1 ;\n )\n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"geographical-distance-service",children:"Geographical Distance service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, GEO) = \n ( 1 ; \n (\n ( 1 ; 1 ; 1 ;\n (\n ( 1 ; 1 ; 1 ; 1;\n (\n (\n 1 ; 1;\n ________________\n ( 1 + ( requestDistance@ACME ; responseDistance@ACME ;\n ____________________\n ( 1 + (( requestDistanceRent@ACME ; responseDistanceRent@ACME )* ; \n ) 1; 1)\n )\n ) 1 ;\n )\n )\n )\n )\n )\n )\n )*\n"})}),"\n",(0,s.jsx)(e.h4,{id:"rent-service",children:"Rent Service"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-JS",children:"proj(confirmOffer, RENT\u209c) = \n ( 1 ; \n (\n ( 1 ; 1 ; 1 ;\n (\n ( 1 ; 1 ; 1 ; 1 ;\n (\n ( 1 ; 1 ; \n ( 1 + ( ( 1 ; 1 )*; \n ____________\n requestRent@ACME ; responseRent@ACME ;\n )\n ) 1 ;\n )\n )\n )\n )\n ) \n )\n )*\n"})})]})}function d(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(_,{...n})}):_(n)}},8453:(n,e,i)=>{i.d(e,{R:()=>o,x:()=>a});var s=i(6540);const r={},t=s.createContext(r);function o(n){const e=s.useContext(t);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:o(n.components),s.createElement(t.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.c4ce95fd.js b/assets/js/runtime~main.26acc49f.js similarity index 89% rename from assets/js/runtime~main.c4ce95fd.js rename to assets/js/runtime~main.26acc49f.js index 803d574..592ab10 100644 --- a/assets/js/runtime~main.c4ce95fd.js +++ b/assets/js/runtime~main.26acc49f.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,o,n={},c={};function f(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=n,f.c=c,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(f.O).every((e=>f.O[e](r[d])))?r.splice(d--,1):(c=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,f.d(o,n),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",166:"4d0644fa",228:"ce36a6fc",233:"dc7abf1f",266:"e1b4be11",279:"3d9c95a4",401:"17896441",478:"f2766321",497:"c1aef90c",548:"247783bb",565:"a70bf486",581:"935f2afb",647:"5e95c892",889:"46d39e0a",901:"8b35e029",980:"cd8a10ac",994:"905c090c"}[e]||e)+"."+{48:"77937af9",98:"5f3a2f27",166:"41c5db5f",228:"4c7d4513",233:"f3981716",237:"31c1c35f",266:"9b7188a5",279:"a18d5d30",401:"62e4f36a",478:"aba55b37",497:"3b5ee97a",548:"8e10f758",565:"d39562b8",581:"ab3db9a5",647:"863de482",889:"8d7531e6",901:"8d44fd60",980:"16cb85df",994:"d5d91fcf"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="acme-sky-docs:",f.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var c,d;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u{c.onerror=c.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),d&&document.head.appendChild(c)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/docs/",f.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98","4d0644fa":"166",ce36a6fc:"228",dc7abf1f:"233",e1b4be11:"266","3d9c95a4":"279",f2766321:"478",c1aef90c:"497","247783bb":"548",a70bf486:"565","935f2afb":"581","5e95c892":"647","46d39e0a":"889","8b35e029":"901",cd8a10ac:"980","905c090c":"994"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=f.p+f.u(t),c=new Error;f.l(n,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],c=r[1],d=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in c)f.o(c,a)&&(f.m[a]=c[a]);if(d)var u=d(f)}for(t&&t(r);i{"use strict";var e,t,r,a,o,n={},c={};function f(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=n,f.c=c,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(f.O).every((e=>f.O[e](r[d])))?r.splice(d--,1):(c=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,f.d(o,n),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",166:"4d0644fa",228:"ce36a6fc",233:"dc7abf1f",266:"e1b4be11",279:"3d9c95a4",401:"17896441",478:"f2766321",497:"c1aef90c",548:"247783bb",565:"a70bf486",581:"935f2afb",647:"5e95c892",889:"46d39e0a",901:"8b35e029",980:"cd8a10ac",994:"905c090c"}[e]||e)+"."+{48:"77937af9",98:"5f3a2f27",166:"41c5db5f",228:"4c7d4513",233:"f3981716",237:"31c1c35f",266:"9b7188a5",279:"a18d5d30",401:"62e4f36a",478:"aba55b37",497:"ee7bd4da",548:"8e10f758",565:"d39562b8",581:"ab3db9a5",647:"863de482",889:"8d7531e6",901:"8d44fd60",980:"16cb85df",994:"d5d91fcf"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="acme-sky-docs:",f.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var c,d;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u{c.onerror=c.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(b.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=b.bind(null,c.onerror),c.onload=b.bind(null,c.onload),d&&document.head.appendChild(c)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/docs/",f.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98","4d0644fa":"166",ce36a6fc:"228",dc7abf1f:"233",e1b4be11:"266","3d9c95a4":"279",f2766321:"478",c1aef90c:"497","247783bb":"548",a70bf486:"565","935f2afb":"581","5e95c892":"647","46d39e0a":"889","8b35e029":"901",cd8a10ac:"980","905c090c":"994"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=f.p+f.u(t),c=new Error;f.l(n,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],c=r[1],d=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in c)f.o(c,a)&&(f.m[a]=c[a]);if(d)var u=d(f)}for(t&&t(r);i Diagramma BPMN | ACME Sky - + diff --git a/choreos.html b/choreos.html index 1357fc1..c864a91 100644 --- a/choreos.html +++ b/choreos.html @@ -4,7 +4,7 @@ Coreografie | ACME Sky - + @@ -12,14 +12,14 @@

Legenda

NomeSiglaNote
ACMEACMEIndica l'azienda AcmeSky
Airline serviceAIRkIndica la k-esima compagnia aerea
Rent serviceRENTtIndica la t-esima compagnia di noleggio
ProntogramPTGIndica il servizio di messagistica
Bank serviceBANKIndica il servizio bancario
Geodistance serviceGEOIndica il servizio di calcolo distanze
UserUSERxIndica l'x-esimo utente

Coreografie globali

-

( requestInterest: USER-> ACME ; responseInterest: ACME -> USER)*
|

( queryFlights: ACME -> AIR; responseFlights: AIR-> ACME )*
|

( sendLastMinute: AIR-> ACME ; responseLastMinute: ACME -> AIR)*
|

( offerToken: ACME -> PTG ; notifyUser: PTG -> USER;
notifyResponse: USER-> PTG ; messageSended: PTG -> ACME )*
|

(
confirmOffer: USER-> ACME ;
(
(
responseOfferOk: ACME -> USER;
requestPaymentLink: USER-> ACME ;
bookTickets: ACME -> AIR;
(
(
responseTickets: AIR-> ACME ;
requestBankLink: ACME -> BANK ;
responselink: BANK -> ACME ;
paymentLink: ACME -> USER;

(
(
payment: USER-> BANK ;
successPaymentBank: BANK -> ACME ;
(
// Richiesta a Geodistance se costo > 1000€
1
+
(
requestDistance: ACME -> GEO ;
responseDistance: GEO -> ACME ;
( // Richiesta a Rent service se distanza <30Km
1
+
(
(
requestDistanceRent: ACME -> GEO ;
responseDistanceRent: GEO -> ACME ;
)* ;
requestRent: ACME -> RENT;
responseRent: RENT-> ACME ;
)
)
)
) ;
SendJourneyReceipt: ACME -> USER;
)
)
)
)
)
)
)*
+

( requestInterest: USER-> ACME ; responseInterest: ACME -> USER)*
|

( queryFlights: ACME -> AIR; responseFlights: AIR-> ACME )*
|

( sendLastMinute: AIR-> ACME ; responseLastMinute: ACME -> AIR)*
|

( offerToken: ACME -> PTG ; notifyUser: PTG -> USER;
notifyResponse: USER-> PTG ; messageSended: PTG -> ACME )*
|

(
confirmOffer: USER-> ACME ;
(
(
responseOfferOk: ACME -> USER;
requestPaymentLink: USER-> ACME ;
bookTickets: ACME -> AIR;
(
(
responseTickets: AIR-> ACME ;
requestBankLink: ACME -> BANK ;
responselink: BANK -> ACME ;
paymentLink: ACME -> USER;

(
(
payment: USER-> BANK ;
successPaymentBank: BANK -> ACME ;
(
// Richiesta a Geodistance se costo > 1000€
1
+
(
requestDistance: ACME -> GEO ;
responseDistance: GEO -> ACME ;
( // Richiesta a Rent service se distanza <30Km
1
+
(
(
requestDistanceRent: ACME -> GEO ;
responseDistanceRent: GEO -> ACME ;
)* ;
requestRent: ACME -> RENT;
responseRent: RENT-> ACME ;
)
)
)
) ;
SendJourneyInvoice: ACME -> USER;
)
)
)
)
)
)
)*

Verifica connectedness delle coreografie

Per verificare se la coreografia fornita verifica la proprietà di connessione, dobbiamo scomporla e analizzare ogni composizione, scelta e iterazione sequenziale. Di seguito un'analisi dettagliata della coreografia asincrona precedentemente rappresentata, passo dopo passo: Per quanto riguarda la prima parte della coreografia globale:

( requestInterest: USER-> ACME ; responseInterest: ACME -> USER)* 
|
( queryFlights: ACME -> AIR; responseFlights: AIR-> ACME )*
|
( sendLastMinute: AIR-> ACME ; responseLastMinute: ACME -> AIR)*
|
( offerToken: ACME -> PTG ; notifyUser: PTG -> USER;
notifyResponse: USER-> PTG ; messageSended: PTG -> ACME )*

La proprietà di connectedness è verificata in quanto si tratta di operazioni parallele, in cui il mittente della prima operazione è il ricevente della seconda operazione e, viceversa, il ricevente della prima operazione è il mittente della seconda e i ruoli rimangono gli stessi.

Per quanto riguarda invece l'operazione confirmOffer:

-
confirmOffer: USER-> ACME ; 
(
// Confirmation of the offer
responseOfferOk: ACME -> USER;
requestPaymentLink: USER-> ACME ;
bookTickets: ACME -> AIR;
(
// Booking tickets and payment link generation
responseTickets: AIR-> ACME ;
requestBankLink: ACME -> BANK ;
responselink: BANK -> ACME ;
paymentLink: ACME -> USER;
(
// Payment process
payment: USER-> BANK ;
successPaymentBank: BANK -> ACME ;
(
// Additional services based on payment amount
1
+
(
requestDistance: ACME -> GEO ;
responseDistance: GEO -> ACME ;
(
1
+
(
requestDistanceRent: ACME -> GEO ;
responseDistanceRent: GEO -> ACME ;
requestRent: ACME -> RENT;
responseRent: RENT-> ACME ;
)
)
)
) ;
SendJourneyReceipt: ACME -> USER;
)
)
)
+
confirmOffer: USER-> ACME ; 
(
// Confirmation of the offer
responseOfferOk: ACME -> USER;
requestPaymentLink: USER-> ACME ;
bookTickets: ACME -> AIR;
(
// Booking tickets and payment link generation
responseTickets: AIR-> ACME ;
requestBankLink: ACME -> BANK ;
responselink: BANK -> ACME ;
paymentLink: ACME -> USER;
(
// Payment process
payment: USER-> BANK ;
successPaymentBank: BANK -> ACME ;
(
// Additional services based on payment amount
1
+
(
requestDistance: ACME -> GEO ;
responseDistance: GEO -> ACME ;
(
1
+
(
requestDistanceRent: ACME -> GEO ;
responseDistanceRent: GEO -> ACME ;
requestRent: ACME -> RENT;
responseRent: RENT-> ACME ;
)
)
)
) ;
SendJourneyInvoice: ACME -> USER;
)
)
)

Passo 1: confirmOffer: USERₓ -> ACME ; responseOfferOk: ACME -> USERₓ