We have designed a simple, object-based variant of the join calculus.
Every object is defined as a fixed set of reaction rules that describe
its synchronization behavior.
The expressiveness of the language is significantly increased by
adding classes---a form of open definitions that can be incrementally
assembled before object instantiation.
In particular, our operators for inheritance can express
transformations on the parent class, according to its synchronization
We motivated our design choices using standard, problematic examples
that mix inheritance and synchronization.
We gave operational semantics for objects and classes, and a type
system that prevents standard errors and also enforces privacy.
This work benefited from fruitful discussions with Sylvain Conchon,
Fabrice Le Fessant, and François Pottier.