Pretty often you have user scenarios that require you to copy an existing object structure. Like when handling revisions of things and the user wants a new revision but want to start with the old and just tweak a few values.
In cases like these it would be neat with a clone mechanism of your modeled objects. And once you have a clone mechanism you pretty soon will discover that cloning just one object will not suffice – you want to follow associations and clone owned child objects – but only in some cases – in other cases you don’t want to clone the child objects but rather reference the same ones from the clone.
Given this model;
We let a viewmodel act as a definition for what the clone should do,, like this for example;
Then in OCL you do;
The deepclone operator returns the new Person object, complete with copies of OwnedBuildings and the Home links.
A good place to use this operator is in a method on a class, for example CreateClone() : Person. That way you just call self.CreateClone from a class action using the returned object as the root of the viewmodel the action opens.
Also see the OCLOperators_transform operator that is a a DeepClone that can change type.