For example, in a distributed library application, when a book is returned to a remote application only its title, author, ISBN number, and year of publication are provided. Other aspects of the book, such as the list of copies the library has, require a remote invocation. Goop uses an adaptive programming approach that allows such requirements to be specified without committing to too many details about the class hierarchy. Cool - Coordiantion Language specifies coordination between objects, for example which opeartions cannot happen concurrently, using autoex and mutex relationships. Also, state variables, such as isFloodgateOpen can be defined.
State transitions can occur before or after method invocations.
Since each sublanguage is devoted to a relatively few concerns, its syntax remains relatively simple. For example, the BNF rules for Cool's syntax requires only 15 lines, and Act's requires 10. Also, your software becomes more compact because more aspects of the program are specified declaratively and at a meta level. For example, one can specify which operations cannot occur simultaneously in one line. While it is important to separate concerns, it is not possible to separate them completely.