context A inv:
(self.b->size() >= 2 and self.b->size() <= 4) or (self.b->size() = 33)
context B inv:
(self.a->size() >= 8 and self.a->size() <= 11) or (self.a->size() = 1)
a) context Persona inv:
Persona.allInstances()->isUnique(ci)
b) context Persona inv:
Persona.allInstances()->forAll (p1,p2 / p1 <> p2 implies p1.ci <> p2.c2)
a) context Auto inv:
self.precio = self.parte->collect (precio) -> sum()
otra forma:
context Auto inv:
self.precio = self.parte.precio-> sum()
Aqui "." no es navegacion sino abrevia a collect (no se me ocurre otra forma)
b) context Auto inv:
self.parte->forAll (self.precio>= precio)
c) context Auto inv:
self.parte->select(p/ p.precio > self.precio / 2) -> size() = 1
a) context Vendedor inv:
self.empresa.producto->includes(self.producto)
o
self.producto.empresa->includes(self.empresa)
b) context Vendedor inv:
self.empresa.producto->includesAll(self.producto)
c) context Vendedor
-- Vende uno o mas productos de la empresa para la que trabaja
inv: self.empresa.producto->includesAll(self.producto)
-- Al menos vende un producto para cada empresa
inv: self.producto->forAll(p | p.empresa -> intersection (self.empresa)->notEmpty())

context Seleccion inv:
self.jugador->select(oclIsTypeOf(Arquero))->size()=3
Ejercicio 7 ¡Nuevo!

Ejercicio 8 ¡Nuevo!


Parte 2: Modelado del Dominio
Ejercicio 1 ¡Nuevo!

Ejercicio 2 ¡Nuevo!

Ejercicio 3 ¡Nuevo!

En el select(p / p.precio > self.precio/2) ..., no sería:
ResponderEliminarselect(p | p.precio .... ??
Lo mismo en el forAll ...
Sobre el ejercicio 3 parte (a), a ver qué te parece esta otra forma:
context Auto inv:
self.precio = self.parte->iterate(p.Parte; suma:Real=0 | suma = suma + p.precio)
El iterate está en la página 29 del pdf sobre OCL.
No habia visto hasta el momento sumar asi.
ResponderEliminarAca va otra forma y van...
context Auto inv:
self.precio=self.parte->iterate(p:Parte;acc:Bag(Real)| acc->including(p.precio)->sum())
En cuanto al pipe (|) estoy de acuerdo, esta como decis en el manual.
Saludos!
Para 7.c (no resuelto):
ResponderEliminarcontext Examen inv:
self.Pregunta->forAll(p:Pregunta | p.Examen->size()<2)
Tal vez podria ser una sol. sencilla!;)
Si, excelente!
ResponderEliminarLa pregunta está asociada como máximo a un examen.
Gracias por el aporte.