Aprendre plegats
dimarts, de març 08, 2005
 
ES2(40) Una mica d'OCL
Considereu el mateix exemple del dia anterior:

Diagrama de classes


amb les operacions:
context Persona::onVius():String
body: llocDeResidència.dónaNom()

context Persona::onTreballes():String
body: empresa.onSituada().dónaNom()

context Població::dónaNom():String
body: nom

context Empresa::onSituada():Població
body: població

Comenteu, si voleu, la resposta a almenys una (no és imprescindible totes) de les preguntes següents
.
(Nota: En algun cas, potser s'han de fer canvis en el diagrama (o afegir-hi altres operacions) per tal de respectar les regles de navegabilitat i visibilitat, i la llei de Demeter. Indiqueu quins són)



1- Suposeu que les poblacions s'identifiquen pel seu nom. Com s'expressa això en OCL?.


2- Considereu l'operació: Empresa::hiTreballaGentDeFora():Boolean, que dóna True si l'empresa té un o més treballadors que viuen en una població diferent de la d'on està situada l'empresa. Com s'expressaria en OCL la postcondició d'aquesta operació?.


3- Considereu l'operació: Empresa::hiTreballaTotElPoble():Boolean, que dóna True si totes les persones que viuen a la població de l'empresa, treballen en l'empresa (hi pot haver també treballadors d'altres poblacions). Com s'expressaria en OCL la postcondició d'aquesta operació?.


4- Considereu l'operació: quantesPersonesViuenOnTreballen():Natural, que dóna el nombre de persones (pot ser zero) que tenim al sistema i que viuen i treballen a la mateixa població, sigui quina sigui aquesta població. Indiqueu en quina classe definiríeu aquesta operació, si seria operació de classe o d'instància, i com s'expressaria en OCL.



Comments:
Vaig a intentar els dos primers punts:

1. Crec que per dir que un atribut és únic es fa així, en el context de la classe població:

Poblacio.allInstances->isUnique(pb|pb.nom=nom)

2. La post de la operació Empresa::hiTreballaGentDeFora():Boolean crec que sería alguna cosa així:

body: if ( Persona.allInstances()->select(p|p.empresa=self and p.onVius()<>p.onTreballes()) -> size() > 1) then

True
else
False

end if
 
Publica un comentari a l'entrada

<< Home

Powered by Blogger