Notes

The problem calls for 2 main concepts: a Person and a set of Roles played by the Person.

A Person keeps a set of Roles which changes dynamically. When something depending on the roles is asked to a person, the person delegates to all its roles the computation and returns either one of the answers or a combination of all the answers. The details are problem specific.