The inheritance relationships between Chemistry and Construction, Fission and Transformation show that the latter three are different kinds of interaction derived from the Interaction Type base class.
The Molecule Type is reactant for Interaction Type relationship indicates that one Molecule Type can be a reactant for many different Interaction Types. In the C++ implementation, each Molecule Type maintains a List of Interaction Types for which it can be a reactant.
Similarly, the Molecule Type is product of Interaction Type relationship indicates that one Molecule Type can be a product of many different Interaction Types. In the C++ implementation, each Molecule Type object maintains a List of the Interaction Types of which it is a product.
The Molecule Type is reactant 1 for Interaction Type relationship indicates that each Interaction Type has a 'first' Reactant. In the C++ implementation, each Interaction Type object maintains a pointer to its Reactant 1 Molecule Type.
Similarly, the Molecule Type is product 1 of Interaction Type relationship indicates that each Interaction Type has a 'first' Product. In the C++ implementation, each Interaction Type object maintains a pointer to its Product 1 Molecule Type.
Each Construction has two Reactants. The Molecule Type is reactant 2 for Interaction Type relationship indicates that in addition to having a relationship with a 'first' Reactant, each Construction also has a relationship with a second reactant. In the C++ implementation, each Construction maintains a pointer to its Reactant 2 Molecule Type.
Similarly, each Fission has an is product 2 of relationship, and the C++ implementation maintains a pointer to the Product 2 Molecule Type.
Since a Transformation has only one Reactant and one Product, it needs no relationships beyond the ones it inherits from its base class (Interaction Type).
The Realised Molecule Type identifies realised Molecule Type relationship indicates that the Molecule Type has been realised. That is, at least one Molecule of the type currently exists, or has existed in the Reactor at some time during the model run. In the C++ implementation, the objects at both ends of the relationship each maintain a pointer to the other.
The Realisable Interaction Type can currently realise Interaction Type relationship indicates that the Interaction Type is currently realisable. That is, there are sufficient Reactant Molecules of the correct types currently in the Reactor for at least one interaction of the type to take place. In the C++ implementation, the objects at both ends of the relationship each maintain a pointer to the other.
The Realised Interaction Type identifies current or previous realisation of Interaction Type relationship indicates that the particular Interaction Type has been realised in the Reactor, regardless of whether or not it is currently realisable. In the C++ implementation, the the Realised Interaction Type object maintains a pointer to the Interaction Type object.