SimSoup: Design

Chemistry Sub-system

The SimSoup Chemistry sub-system represents the types of molecule (Molecule_Types) that can exist, and the types of interaction (Interaction_Types) in which they can be involved. As such, the SimSoup Chemistry sub-system represents a static definition of the entities that may exist and the ways in which they may interact.

Class Diagram

The class diagram below shows the classes that form the SimSoup Chemistry Subsystem


Chemistry Sub-system class diagram

Class Descriptions

The classes that are included in the Chemistry sub-system, and their definitions, are as follows:-

Chemistry: Identifies the Molecule_Types and Interaction_Types that are included in the SimSoup Chemistry sub-system. The Chemistry object provides a point of integration for other objects in the Chemistry sub-system, and also provides a number of sub-system level operations. Only one Chemistry object can exist in SimSoup at any time.

Molecule_Type: Represents a type of molecule.

Interaction_Type: A base class. Classes derived from Interaction_Type represent types of interaction that can take place involving Molecule_Types. Interaction_Type represents those aspects that are common to all types of interaction. This includes one Reactant and one Product.

Construction: A Construction is a kind of Interaction_Type. It has interaction scheme A + B --> C. In a Construction, two Molecules join together to produce a single product Molecule.

Fission: A Fission is a kind of Interaction_Type. It has interaction scheme A --> B+ C. In a Fission, a single Molecule splits to form two product Molecules.

Transformation: A Transformation is a kind of Interaction_Type. It has interaction scheme A --> B. In a Transformation, a single Molecule transforms into a single product Molecule of a different Molecule_Type.

Explanation of Class Relationships

The Chemistry has Molecule_Types and Chemistry has Interaction_Types aggregation relationships indicate that the Chemistry object is the point of integration that holds together all of the Molecule_Types and Interaction_Types in the Chemistry. The Chemistry object hold a List of Molecule_Types and a List of Interaction_Types.

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 Input relationship between Interaction_Type and Molecule_Type indicates that one Molecule_Type can be an input to many different Interaction_Types. Each Molecule_Type maintains a List of Interaction_Types to which it can be an input.

Similarly, the Molecule_Type_Is_Product relationship indicates that one Molecule_Type can be a product of many different Interaction_Types. Each Molecule_Type object maintains a List of the Interaction_Types of which it is a product.

The Molecule_Type is Reactant 1 relationship indicates that each Interaction_Type has a 'first' Reactant. Each Interaction_Type object maintains a pointer to its Reactant 1 Molecule_Type.

Similarly, the Molecule_Is_Product1 relationship indicates that each Interaction_Type has a 'first' Product. Each Interaction_Type object maintains a pointer to its Product 1 Molecule_Type.

The Construction class has two Reactants. The Molecule_Type is Reactant 2 relationship indicates that in addition to having a relationship with a 'first' Reactant (inherited from its base class), each Construction also has a relationship with a second reactant (Reactant 2). Each Construction maintanis a pointer to its Reactant 2 Molecule_Type.

Similarly, each Fission has a Molecule_Type is Product 2 relationship, and 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).

Finally, the Molecule_Type is / has been realised and Interaction_Type is currently realisable relationships indicate that each Molecule_Type can be associated with a Realised_Molecule_Type in the Reactor sub-system, and each Interaction_Type can be associated with a Realisable_Interaction_Type in the Reactor sub-system.