Abstract base class for all static simulation attributes.
Implementations must provide a no-arg default contstructor (either implicitly
or explicitly) to enable deserialization from JSON.
Attributes are "static" parameters i.e. they are immutable while a simulation
is running. This is implemented by deriving from the
Sealable interface. Attributes can have
setters, but the setters must call the {@code checkSealed()} method before
changing a value! In addition, if an attributes class contains other
attributes classes as fields, it must override #seal() to also seal
these objects. All other fields must be immutable (e.g. String, Double,
VPoint,...).
The standard clone method makes a flat copy. This is enough if the subclass
only triangleContains immutable fields. If the subclass triangleContains other Attributes
objects, it must implement a copy constructor and override #clone()
to make a deep copy.