Type - modelint/shlaer-mellor-metamodel GitHub Wiki
A Type defines a set of values and supporting type operations. Any metamodel component that holds a set of values must be typed. Attributes, Parameters, and Data Flows are examples that immediately come to mind.
A Scalar is what programmers think of as a 'data type'. It is called a Scalar Type since its internal structure and operations are opaque in a relational context. In a relational context, we just see a value with no discernable internal structure. Consequently, such operations are defined in a typing system orthoganal to the metamodel. In our case, this will be a separate Modeled or Realized Domain. But we do need to keep track of the scalar type names and then correlate them somehow to definitions in a type definition Domain.
A Class is simply a modeled Class in the user model. Classes are used to type Instance Flows so that we know what kind of instances of are flowing.
A Table is characterized by a table header consisting of a possibly empty set of attribute pair types which we just call Table Attributes. Table Types allow us to flow and process intermediate results of relational operations on Instance, Table, and Scalar Flows.
Identifiers
- Name + Domain
Attributes
Name
A name such as 'Pressure' (scalar), 'Cabin' (class), 'Travel Times' (table). Each name within a Domain must be unique. So you cannot name a Scalar Flow the same as some Class in the same Domain, for example.
See note about naming tables in the Table description.
Type
Type Name, based on Name