140 likes | 295 Views
Progetto Alloy. Gestione di aziende di compravendita Prof. Di Nitto Elisabetta Stud. Russo Emanuela Rosalia Ingegneria del software 2 Matricola : 680441. Organizzazione dell’azienda 1/2. Verifica. Direttore. set. set. Azienda. set. set. Ritiro.
E N D
Progetto Alloy Gestione di aziende di compravendita Prof. Di Nitto Elisabetta Stud. Russo Emanuela Rosalia Ingegneria del software 2 Matricola : 680441
Organizzazione dell’azienda 1/2 Verifica Direttore set set Azienda set set Ritiro Spedizione L’azienda è costituita da tre settori: Ritiro, Verifica e Spedizione, e da dei direttori che non appartengono a nessun settore in particolare ma sono comunque dipendenti dell’azienda, per questa ragione ho deciso di includerli nella signature Azienda
Organizzazione dell’azienda 2/2 Ipotizzo che Ritiro Verifica e Spedizione siamo distinti e che ogni azienda li abbia tutti e tre fact Generale { no(ritiro&verifica) no(verifica&spedizione) no(spedizione&ritiro) all a:Azienda | a.verifica in Settore&&a.ritiro in Settore && a.spedizione in Settore }
Organizzazione dei settori Settore set one Fattorino Manager set Impiegato Ad ogni settore appartengono tre categorie di persone: Manager, Impiegato, Fattorino che possono instaurare rapporti di amicizia o meno. Persona Amico set
Gerarchia aziendale E’ IMPORTANTE CONOSCERE LE RELAZIONI DI AMICIZIA CHE INTERCORRONO TRA UN LAVORATORE E UN SUO DIRETTO SUPERIORE PER EVITARE CHE UN SUCCESSIVO AVANZAMENTO DI LIVELLO SIA DA RICONDURRE ALLA SUDDETTA AMICIZIA. pred AmiciziaPred(p:Persona, q:Persona) { p in q.amico => q in p.amico } MANAGER DIRETTORE IMPIEGATO FATTORINO
Sistema informativo aziendale • Il sistema informativo aziendale è fatto in modo che nel momento in cui l’azienda decide che un lavoratore può avanzare al livello immediatamente successivo della gerarchia aziendale, si deve verificare che non abbia alcun tipo di amicizia con un suo diretto superiore. Solo in questo caso l’avanzamento di livello è consentito. • Per evitare situazioni in cui l’avanzamento è dovuto non ai meriti personali ma ai rapporti inter-personali di amicizia che si possono instaurare ho specificato tre predicati che mi dicono rispettivamente: • non ci può essere amicizia tra un impiegato e un fattorino • dello stesso settore; • non ci può essere amicizia tra un impiegato e un direttore dell’azienda • non ci può essere amicizia tra direttore dell’azienda e un manager di un settore
1. impiegati - fattorini pred NOIF(s:Settore,p,p':Persona) { s.impiegato=p s.fattorino=p' p!=p'=>not AmiciziaPred(p,p') }
2. Impiegati direttori pred NOID(s:Settore, a:Azienda,p,p':Persona) { s.impiegato=p a.direttore=p' p!=p'=>not AmiciziaPred(p,p') }
3. direttori-manager pred NODM(s:Settore,a:Azienda,p,p':Persona) { s.manager=p a.direttore=p' p!=p'=>not AmiciziaPred(p,p') }
Ho supposto che ci possano essere due tipi di avanzamento di livello: • Da fattorino a impiegato • Da impiegato a direttore • Non ho previsto il caso di passaggio da direttore a manager in quanto • nell’azienda ho supposto ci sia un solo manager quindi finché non va in • pensione nessun passaggio può essere effettuato. • Dapprima ho specificato due predicati che mi dicono rispettivamente: • passaggio tra fattorino e impiegato di uno stesso settore senza verificare • eventuale rapporto di amicizia • Passaggio tra impiegato di un settore e direttore dell’azienda senza verificare eventuale rapporto di amicizia • Successivamente ho specificato altri due predicati i quali specificano che: • il passaggio 3 può avvenire solo se è anche verificata la non amicizia tra • fattorino e impiegato; • Il passaggio 4 può avvenire solo se è anche verificata la non amicizia tra • impiegato e direttore
1. Passaggio da Fattorino a Impiegato pred DaFaI(s,s':Settore,a,a':Azienda,i,f:Persona) { f in s.fattorino a'.verifica=a.verifica a'.ritiro=a.ritiro a'.spedizione =a.spedizione s'.impiegato=s.impiegato+f s'.fattorino=s.fattorino-f a'.direttore=a.direttore s'.manager=s.manager } Come si può vedere dalla simulazione effettuata con alloy è avvenuto la promozione dei fattorini a impiegati
2. Passaggio da impiegato a fattorino pred DaIaD(s,s':Settore,a,a':Azienda,imp,d:Persona) { imp in s.impiegato a'.verifica=a.verifica a'.ritiro=a.ritiro a'.spedizione =a.spedizione a'.direttore=a.direttore+imp s'.impiegato=s.impiegato-imp s'.fattorino=s.fattorino s'.manager=s.manager } Come si può vedere dalla simulazione effettuata con alloy si è verificata la promozione degli impiegati a direttori
pred PrimoPassaggio(s,s':Settore,a,a':Azienda,i,fatt:Persona) { fatt in s.fattorino (fatt!=i =>not AmiciziaPred(i,fatt))&&DaFaI(s,s',a,a',i,fatt) }
pred SecondoPassaggio(s,s':Settore,a,a':Azienda,i,d:Persona) { i in s.impiegato (i!=d=>not AmiciziaPred(i,d))&&DaIaD(s,s',a,a',i,d) }