Class Features

Overview

Within the definition of each class in a BMM model are found the declarations of its features. Variables are declared within routines. Features and variables are kinds of formal elements, i.e. typed entities having a signature (BMM_FORMAL_ELEMENT). This section describes class features, their parts, and their semantics.

Feature Taxonomy

Features are understood in BMM as typed entities referenceable within a module context. Class features consist of the formal sub-parts of a class, namely:

  • routines: procedures and functions;

  • properties: mutable static definitions, described in detail in previous sections;

  • constants: immutable static values.

The taxonomy of feature declarations is shown below in the simplified view of the BMM feature meta-model.

LANG bmm.core.feature taxonomy
Figure 1. Feature taxonomy

Class Model

The full feature meta-model is shown below.

LANG bmm.core.feature
Figure 2. base.bmm.core.feature package

Feature Groups and Visibility

Features are arranged within a class in feature groups, each represented by an instance of a meta-type BMM_FEATURE_GROUP, shown in the following UML view.

LANG bmm.core.feature group
Figure 3. Feature Groups

By default there is at least one feature group called "feature". Feature groups may be given any name, and are usually used to group features on the basis of things like:

  • meta-type, e.g. a group called "rules" limited to publicly visible functions only;

  • logical feature type, e.g. commands, queries, factory methods etc.

The primary purpose of feature groups is to represent specific meta-data that naturally applies to more than one feature in general, and is thus convenient to represent on a logical container rather than repeat individually. Feature group meta-data is recorded in the properties attribute. A feature group may also set default visibility for all features in the group.

Selective visibility of features to external clients is expressed in the attributes BMM_FEATURE_GROUP.visibility with potential overrides achieved using BMM_FEATURE.visibility, i.e. at an individual feature level. Visibility is defined using sub-types of the abstract meta-class BMM_VISIBILITY.

TBD: define visibility meta-model; probably need to support C++/Java approach and type-based.

Differential and Flat Form

In modelling or programming terms, the features defined on a particular class within a model constitute the features it introduces with respect to its inheritance parent(s). We can think of this list of features as the differential set. A 'top-level' class with no declared inheritance ancestor is considered to inherit by default from the Any class, and its feature set is relationally differential to the top class.

In contrast, the effective set of features for an instance at runtime is the result of evaluating these lists of features down the inheritance hierarchy to obtain the flat set of features. The features properties and flat_properties defined on BMM_CLASS provide access to these two lists for any class.

Signatures

All features are formal computational entities, and therefore have formal signatures (described in [Signature Meta-type]), represented by BMM_FORMAL_ELEMENT.signature. A standard taxonomy of feature signature types is illustrated below, in which properties have signatures with no arguments (this is also true for argument-less functions), and procedures have the special built-in Status result type (BMM_STATUS_TYPE), following the meta-model of various functional languages, e.g. Haskell (in which procedure invocations return the special 'unit' type).

signature taxonomy
Figure 4. Signature taxonomy

Synthesis due to Generic Parameter Substitution

Due to the possibility of generating concrete types via substitution of concrete generic parameters for formal parameters of generic classes, new concrete types of features may routinely result anywhere in a fully computed in-memory BMM model. BMM allows such features to be synthesised with their resulting concrete types rather than their 'source-defined' open parameter types, and provides the Boolean flag is_synthesised_generic on BMM_FEATURE to mark any such synthesised feature. An example of the use of this is described below in [_generic_inheritance].

Properties

Properties are features whose values are stored rather than computed on each reference, and are represented by the meta-type BMM_INSTANTIABLE_FEATURE. They are distinguished from routines by having no arguments (signature of degree zero).

Static Properties

Static properties are properties whose values are pre-defined by some means, and read-only during execution (is_nullable is False).

Constants

Constant class features (meta-type BMM_CONSTANT) correspond to classic constants in most computer languages, and are defined with a literal value.

The following abstract syntax illustrates how constants may be defined in a BMM model.

class BASIC_DEFINITIONS

feature
    //
    // simple constants
    //
    constant CR: Character = '\015';
    constant LF: Character = '\012';

    //
    // constant of complex type
    // TODO: correct JSON (maybe YAML?) or other syntax
    //
    constant SafeSpeed: Interval<Quantity> = |0.0 km/h .. 60.0 km/h|;

Singletons

The other kind of static property is computed once during execution (meta-type BMM_SINGLETON) via an argumentless function-body. Like a value-based constant, it has the same value for all instances of the containing type, including descendant and generically derived types.

The following illustrates how singletons may be defined in a BMM model.

feature
    //
    // constant generated by a function call
    //
    singleton criticalPressure: ProxyVar<Quantity>
        Result := {ProxyVar<Quantity>}({Quantity}(0.0, "kPa"), {Quantity}(150.0, "kPa"));

Writable Properties

Writable class properties are defined via the meta-class BMM_PROPERTY, and its subtypes which distinguish unitary properties (single-valued attributes in a class) from container properties (multiply-valued attributes).

The BMM_PROPERTY meta-type defines semantics common to all properties, including is_composition, which indicates whether the property reference instantiates a part-of relationship or an association.

Unitary versus Container Properties

Single-valued properties in a BMM model are instances of the type BMM_UNITARY_PROPERTY, and have as their type the meta-type BMM_UNITARY_TYPE. Container properties are instances of the meta-type BMM_CONTAINER_PROPERTY, which adds the attribute cardinality, enabling the possible number of container elements to be constrained (this corresponds to the multiplicities used at the end of UML associations). The meta-type BMM_INDEXED_CONTAINER_PROPERTY adds the attribute index_type, enabling representation of indexed concrete container types such as Hash<K,V> etc.

A typical example of properties of class is shown below, in which the flattened property view of a class OBSERVATION includes the inherited properties other_participations and links properties exemplifying the container property meta-type:

awb class properties
Figure 5. BMM class - properties view

The following illustrates how various kinds of properties may appear in a BMM model. The first two properties are associations, used to represent references to shared objects (including singletons), while the remainder are normal compositional sub-parts, i.e. owned sub-instances that will cease to exist when the parent object is destroyed. All of the properties are single-valued, other than other_participations, which is defined as a container property with cardinality [*] (i.e. 0..*) and 'set' semantics.

abstract class ENTRY extend CARE_ENTRY

feature -- Locale
    association property language: CODE_PHRASE <<"iso::iso_639-2">> [0..1];
    association property encoding: CODE_PHRASE <<"iana::character-sets">> [0..1];

feature -- Access
    composition property protocol: ITEM_STRUCTURE[1];
    composition property guideline_id: OBJECT_REF[0..1];
    composition property subject: PARTY_PROXY[0..1];
    composition property other_participations: PARTICIPATION[*]{set};

Semantic Level

TBD: this BMM feature requires review

Properties also include two other Boolean meta-data items, is_im_runtime and is_im_infrastructure, which can be used to classify property values in a model according to a 'semantic level', which roughly corresponds to the continuum from domain-specific to infrastructure. These may be individually set, or both may be False. The three meaningful value settings are as follows:

  • both False: the value of the property is considered to be design-time constrainable;

  • is IM runtime: True if the property value is only knowable at runtime, as is typically the case for identifiers, dates etc;

  • is infrastructure: True if the property is not a user- or business-oriented property, but something required by software design, e.g instance identifier, meta-data etc.

The above screenshot also includes properties have different settings of the is_im_runtime and is_im_infrastructure meta-data flags: property names in black are neither; those in grey are IM runtime (guideline_id, workflow_id), and those in light grey are infrastructure properties (language, encoding, uid, etc).

Functions and Procedures

Functions and procedures are kinds of routine, which are computational features of a class. The classes BMM_FUNCTION, BMM_PROCEDURE and BMM_ROUTINE respectively provide the meta-model for definitions of the two types of routine.

The formal parameter definitions of both kinds of routines are represented by an ordered list of instances of the meta-class BMM_PARAMETER, which is defined as a kind of variable. A formal parameter may optionally have the read/write direction defined, which indicates whether the variable contains an input value, should only be written to, or both, i.e. read then written to. The is_nullable meta-attribute inherited from BMM_FEATURE indicates whether each parameter is mandatory or not.

An additional feature of the meta-model for functions is the notion of operator, which supports the representation of a function call in a formal expression as an operator symbol with one or two operands, in the typical form found in programming languages and first order logics. The BMM approach considers an operator as an optional addition to any function of arity 1 or 2 that may reasonably be represented in an abstract syntax using operator syntax. Operators thus support the use of expressions like weight > 90 to mean weight.gt (90), where weight is of type Real, and the function gt(other: Real) is defined.

Any routine may have pre- and/or post-conditions defined for it, represented in BMM by BMM_ASSERTIONs populating the pre_conditions and post_conditions attributes of BMM_ROUINE. An Assertion is a tagged Boolean Expression.

The following abstract syntax illustrates the various elements of function definitions.

abstract class DV_AMOUNT
    inherit
        DV_QUANTIFIED

feature -- Arithmetic Operations

    function equal (other: DV_AMOUNT[1]): Boolean[1]
        alias {infix '='};

    function less_than (other: DV_AMOUNT[1]): Boolean[1]
        alias {infix '<'};

feature -- Arithmetic Operations

    function add (other: DV_AMOUNT[1]): DV_AMOUNT[1]
        alias {infix '+'};

    function subtract (other: DV_AMOUNT[1]): DV_AMOUNT[1]
        alias {infix '-'};

    function multiply (val: Real[1]): DV_AMOUNT[1]
        alias {infix '*'};

    function divide (val: Real[1]): DV_AMOUNT[1]
        alias {infix '/', infix '÷'};

Pre- and Post-conditions

All BMM routine definitions may include pre- and/or post-conditions, with the semantics of Djikstra’s weakest pre-condition logic ([1]), Object-Z ([2]) and the Eiffel language ([3]).

The essential semantics are as follows:

  • pre-conditions specify truth conditions on public object state and/or parameters that must hold for the routine to execute correctly;

    • if a pre-condition is not met at the moment of routine call, the client (caller) is at fault;

  • post-conditions specify truth conditions on public object state and/or result (in the case of functions) that will hold at the end of routine execution;

    • if a post-condition is not met at the moment of routine completion, the routine is at fault, i.e. contains bugs.

The use of pre- and post-conditions is also known as design by contract (DbC), a term introduced by Meyer, and is widely used in general IT, particularly in specification languages such as OMG Interface Definition Language (IDL).

The following shows how a routine contract may be specified in an abstract syntax.

class I_EHR_SERVICE

feature -- Creation

    create_ehr_with_id (
        an_ehr_id: UUID[1];
        an_ehr_status: EHR_STATUS[0..1]
    ): UUID[1]
        pre_condition
            No_duplicate: not has_ehr (an_ehr_id)
        post_condition
            Has_ehr: has_ehr (Result)

Creators and Converters

In common with may OOPLs, BMM classes may specify creators, i.e. instance-creating procedures, known as 'constructors' in some OOPLs. These are just a subset of all procedures known in BMM_CLASS.procedures that when executed will satisfy the class invariants. A further subset of the creators are single-argument converters which can initialise a new instance from an instance of another type. Converter routines are typically used to support type conversion in expressions, e.g. String to Date etc. These two subsets are formally defined as the creators and converters reference lists of procedures on BMM_CLASS, as shown in the following UML view.

LANG bmm.core.class creators
Figure 6. Class creators and converters

Creators and converters might be distinguished among other procedures in an abstract syntax as follows.

class Date

inherit
    Temporal

convert
    create_from_string

feature -- Creators

    procedure create_from_string (a_date_str: String[1])

    procedure create (a_day, a_month, a_year: Integer[1])

feature -- Modification

    procedure set_day (a_day: Integer[1])

Routine Body

BMM supports the definition of statements, i.e. implementation within a ROUTINE as well as 'external' routines, which are represented by an instance of the meta-class BMM_ROUTINE_EXTERNAL. These classes are shown in the following UML view.

LANG bmm.core.feature routine
Figure 7. Routine body

The meta-model of statements is described in detail in [_statements].

Variables

At the finest level of detail of a model definition are what are typically thought of as variables within a routine scope. These may be either writable (BMM_WRITABLE_VARIABLE) or read-only (BMM_READONlY_VARIABLE) variables.

Writable variables include local variables (variables declared locally within a routine) and the special pre-defined variable Result, which is automatically available within any function. Read-only variables include parameters (declared in the arguments part of a routine declaration), and the special variable Self, which represents the current instance.

Model Theoretic Questions

The features meta-model as defined here entails certain choices that have consequences. One question is how to treat procedures. In a mathematical sense, procedures have no return type, and therefore should not be allowed within 'normal' expressions. However in a computational sense, a procedure call normally performs some state-changing action (for example, authenticating to a database), and it is potentially useful to obtain an execution status and use it in further logic. The choice made in BMM is to treat procedures as typed entities, with a result meta-type and concrete type of Status (represented by BMM_STATUS_TYPE). This is similar to the approach in various languages such as Haskell and Kotlin, which both have a 'unit' type for the same purpose. This approach allows procedures to fit within the typed framework without complicating the meta-model.

Procedure calls are prevented from appearing in expressions by the expressions part of the meta-model, and can only appear on their own (the usual case) or in an assignment statement in which a result status value may be obtained from the Status object. This value may then be used in normal expressions, e.g. a case statement.

Class Definitions

BMM_FEATURE_GROUP Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_FEATURE_GROUP

Description

A logical group of features, with a name and set of properties that applies to the group.

Attributes

Signature

Meaning

1..1

name: String `
`{default = "feature"}

Name of this feature group; defaults to 'feature'.

1..1

properties: Hash <String ,String >

Set of properties of this group, represented as name/value pairs. These are understood to apply logically to all of the features contained within the group.

0..1

features: List <BMM_CLASS_FEATURE>

Set of features in this group.

0..1

visibility: BMM_VISIBILITY

Optional visibility to apply to all features in this group.

BMM_FEATURE_GROUP

A logical group of features, with a name and set of properties that applies to the group.

Attributes

name: String ` [1..1]
`{default = "feature"}

Name of this feature group; defaults to 'feature'.

properties: Hash <String ,String > [1..1]

Set of properties of this group, represented as name/value pairs. These are understood to apply logically to all of the features contained within the group.

features: List <BMM_CLASS_FEATURE> [0..1]

Set of features in this group.

visibility: BMM_VISIBILITY [0..1]

Optional visibility to apply to all features in this group.

{
    "name": "BMM_FEATURE_GROUP",
    "documentation": "A logical group of features, with a name and set of properties that applies to the group. ",
    "properties": {
        "name": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "name",
            "documentation": "Name of this feature group; defaults to 'feature'.",
            "is_mandatory": true,
            "type": "String",
            "default": "\"feature\""
        },
        "properties": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "properties",
            "documentation": "Set of properties of this group, represented as name/value pairs. These are understood to apply logically to all of the features contained within the group.",
            "is_mandatory": true,
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "String"
                ]
            }
        },
        "features": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "features",
            "documentation": "Set of features in this group.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_CLASS_FEATURE"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "visibility": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "visibility",
            "documentation": "Optional visibility to apply to all features in this group.",
            "type": "BMM_VISIBILITY"
        }
    }
}
bmm feature group

BMM_VISIBILITY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_VISIBILITY (abstract)

Description

Abstract parent of visibility representation.

TODO: define schemes; probably need to support C++/Java scheme as well as better type-based schemes.

BMM_VISIBILITY (abstract)

Abstract parent of visibility representation.

TODO: define schemes; probably need to support C++/Java scheme as well as better type-based schemes.

{
    "name": "BMM_VISIBILITY",
    "documentation": "Abstract parent of visibility representation.\n\nTODO: define schemes; probably need to support C++/Java scheme as well as better type-based schemes.",
    "is_abstract": true
}
bmm visibility

BMM_CONSTANT Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_CONSTANT

Description

An immutable, static value-returning element scoped to a class. The value is the result of the evaluation of the generator, which may be as simple as a literal value, or may be any expression, including a function call.

Inherit

BMM_INSTANTIABLE, BMM_CLASS_FEATURE

Attributes

Signature

Meaning

1..1

generator: EL_INSTANCE_REF

Generator expression for the constant value. In the degenerate case, this is just a literal value, but may also be any other expression valid in the context.

Invariants

Inv_not_nullable: is_nullable = False

BMM_CONSTANT

An immutable, static value-returning element scoped to a class. The value is the result of the evaluation of the generator, which may be as simple as a literal value, or may be any expression, including a function call.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_INSTANTIABLE, BMM_CLASS_FEATURE

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

generator: EL_INSTANCE_REF [1..1]

Generator expression for the constant value. In the degenerate case, this is just a literal value, but may also be any other expression valid in the context.

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) signature (): BMM_SIGNATURE [1..1]

Formal signature of this element, in the form:

name [arg1_name: T_arg1, …​][:T_value]

Specific implementations in descendants.
Inherited from BMM_CLASS_ENTITY

Invariants

Inv_not_nullable: is_nullable = False

{
    "name": "BMM_CONSTANT",
    "documentation": "An immutable, static value-returning element scoped to a class. The `_value_` is the result of the evaluation of the `_generator_`, which may be as simple as a literal value, or may be any expression, including a function call.",
    "ancestors": [
        "BMM_INSTANTIABLE",
        "BMM_CLASS_FEATURE"
    ],
    "properties": {
        "generator": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "generator",
            "documentation": "Generator expression for the constant value. In the  degenerate case, this is just a literal value, but may also be any other expression valid in the context.",
            "is_mandatory": true,
            "type": "EL_INSTANCE_REF"
        }
    },
    "invariants": {
        "Inv_not_nullable": "is_nullable = False"
    }
}
bmm constant

BMM_PROPERTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_PROPERTY (abstract)

Description

Meta-type of a property definition within a class definition of an object model. The is_composition attribute indicates whether the property has sub-part or an association semantics with respect to the owning class.

Inherit

BMM_INSTANTIABLE, BMM_CLASS_FEATURE

Attributes

Signature

Meaning

0..1

is_im_runtime: Boolean `
`{default = false}

True if this property is marked with info model im_runtime property.

0..1

is_im_infrastructure: Boolean `
`{default = false}

True if this property was marked with info model im_infrastructure flag.

0..1

is_composition: Boolean `
`{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.

Functions

Signature

Meaning

1..1

existence (): `Multiplicity_interval `

Interval form of 0..1, 1..1 etc, derived from is_nullable.

1..1

display_name (): `String `

Name of this property to display in UI.

Invariants

Inv_signature_no_args: signature.arguments = Void

BMM_PROPERTY (abstract)

Meta-type of a property definition within a class definition of an object model. The is_composition attribute indicates whether the property has sub-part or an association semantics with respect to the owning class.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_INSTANTIABLE, BMM_CLASS_FEATURE

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

is_im_runtime: Boolean ` [0..1]
`{default = false}

True if this property is marked with info model im_runtime property.

is_im_infrastructure: Boolean ` [0..1]
`{default = false}

True if this property was marked with info model im_infrastructure flag.

is_composition: Boolean ` [0..1]
`{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) signature (): BMM_SIGNATURE [1..1]

Formal signature of this element, in the form:

name [arg1_name: T_arg1, …​][:T_value]

Specific implementations in descendants.
Inherited from BMM_CLASS_ENTITY

existence (): `Multiplicity_interval ` [1..1]

Interval form of 0..1, 1..1 etc, derived from is_nullable.

display_name (): `String ` [1..1]

Name of this property to display in UI.

Invariants

Inv_signature_no_args: signature.arguments = Void

{
    "name": "BMM_PROPERTY",
    "documentation": "Meta-type of a property definition within a class definition of an object model. The `_is_composition_` attribute indicates whether the property has sub-part or an association semantics with respect to the owning class.",
    "is_abstract": true,
    "ancestors": [
        "BMM_INSTANTIABLE",
        "BMM_CLASS_FEATURE"
    ],
    "properties": {
        "is_im_runtime": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_im_runtime",
            "documentation": "True if this property is marked with info model `_im_runtime_` property.",
            "type": "Boolean",
            "default": false
        },
        "is_im_infrastructure": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_im_infrastructure",
            "documentation": "True if this property was marked with info model `_im_infrastructure_` flag.",
            "type": "Boolean",
            "default": false
        },
        "is_composition": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_composition",
            "documentation": "True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.",
            "type": "Boolean",
            "default": false
        }
    },
    "functions": {
        "existence": {
            "name": "existence",
            "documentation": "Interval form of `0..1`, `1..1` etc, derived from `_is_nullable_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Multiplicity_interval"
            }
        },
        "display_name": {
            "name": "display_name",
            "documentation": "Name of this property to display in UI.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    },
    "invariants": {
        "Inv_signature_no_args": "signature.arguments = Void"
    }
}
bmm property

BMM_UNITARY_PROPERTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_UNITARY_PROPERTY

Description

Meta-type of for properties of unitary type.

Inherit

BMM_PROPERTY

Attributes

Signature

Meaning

1..1
(redefined)

type: BMM_UNITARY_TYPE

Declared or inferred static type of the entity.

BMM_UNITARY_PROPERTY

Meta-type of for properties of unitary type.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_INSTANTIABLE, BMM_CLASS_FEATURE, BMM_PROPERTY

Attributes

type: BMM_UNITARY_TYPE [1..1]

Declared or inferred static type of the entity.

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

is_im_runtime: Boolean ` [0..1]
`{default = false}

True if this property is marked with info model im_runtime property.
Inherited from BMM_PROPERTY

is_im_infrastructure: Boolean ` [0..1]
`{default = false}

True if this property was marked with info model im_infrastructure flag.
Inherited from BMM_PROPERTY

is_composition: Boolean ` [0..1]
`{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.
Inherited from BMM_PROPERTY

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) signature (): BMM_SIGNATURE [1..1]

Formal signature of this element, in the form:

name [arg1_name: T_arg1, …​][:T_value]

Specific implementations in descendants.
Inherited from BMM_CLASS_ENTITY

existence (): `Multiplicity_interval ` [1..1]

Interval form of 0..1, 1..1 etc, derived from is_nullable.
Inherited from BMM_PROPERTY

display_name (): `String ` [1..1]

Name of this property to display in UI.
Inherited from BMM_PROPERTY

Invariants

Inv_signature_no_args: signature.arguments = Void
Inherited from BMM_PROPERTY

{
    "name": "BMM_UNITARY_PROPERTY",
    "documentation": "Meta-type of for properties of unitary type.",
    "ancestors": [
        "BMM_PROPERTY"
    ],
    "properties": {
        "type": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "type",
            "documentation": "Declared or inferred static type of the entity.",
            "is_mandatory": true,
            "type": "BMM_UNITARY_TYPE"
        }
    }
}
bmm unitary property

BMM_CONTAINER_PROPERTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_CONTAINER_PROPERTY

Description

Meta-type of for properties of linear container type, such as List<T> etc.

Inherit

BMM_PROPERTY

Attributes

Signature

Meaning

0..1

cardinality: `Multiplicity_interval `

Cardinality of this container.

1..1
(redefined)

type: BMM_CONTAINER_TYPE

Declared or inferred static type of the entity.

Functions

Signature

Meaning

1..1
(redefined)

display_name (): `String `

Name of this property in form name: ContainerTypeName<>.

BMM_CONTAINER_PROPERTY

Meta-type of for properties of linear container type, such as List<T> etc.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_INSTANTIABLE, BMM_CLASS_FEATURE, BMM_PROPERTY

Attributes

type: BMM_CONTAINER_TYPE [1..1]

Declared or inferred static type of the entity.

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

is_im_runtime: Boolean ` [0..1]
`{default = false}

True if this property is marked with info model im_runtime property.
Inherited from BMM_PROPERTY

is_im_infrastructure: Boolean ` [0..1]
`{default = false}

True if this property was marked with info model im_infrastructure flag.
Inherited from BMM_PROPERTY

is_composition: Boolean ` [0..1]
`{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.
Inherited from BMM_PROPERTY

cardinality: `Multiplicity_interval ` [0..1]

Cardinality of this container.

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) signature (): BMM_SIGNATURE [1..1]

Formal signature of this element, in the form:

name [arg1_name: T_arg1, …​][:T_value]

Specific implementations in descendants.
Inherited from BMM_CLASS_ENTITY

existence (): `Multiplicity_interval ` [1..1]

Interval form of 0..1, 1..1 etc, derived from is_nullable.
Inherited from BMM_PROPERTY

display_name (): `String ` [1..1]

Name of this property in form name: ContainerTypeName<>.

Invariants

Inv_signature_no_args: signature.arguments = Void
Inherited from BMM_PROPERTY

{
    "name": "BMM_CONTAINER_PROPERTY",
    "documentation": "Meta-type of for properties of linear container type, such as List<T> etc.",
    "ancestors": [
        "BMM_PROPERTY"
    ],
    "properties": {
        "cardinality": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "cardinality",
            "documentation": "Cardinality of this container.",
            "type": "Multiplicity_interval"
        },
        "type": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "type",
            "documentation": "Declared or inferred static type of the entity.",
            "is_mandatory": true,
            "type": "BMM_CONTAINER_TYPE"
        }
    },
    "functions": {
        "display_name": {
            "name": "display_name",
            "documentation": "Name of this property in form `name: ContainerTypeName<>`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    }
}
bmm container property

BMM_INDEXED_CONTAINER_PROPERTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_INDEXED_CONTAINER_PROPERTY

Description

Meta-type of for properties of linear container type, such as Hash<Index_type, T> etc.

Inherit

BMM_CONTAINER_PROPERTY

Attributes

Signature

Meaning

1..1
(redefined)

type: BMM_INDEXED_CONTAINER_TYPE

Declared or inferred static type of the entity.

Functions

Signature

Meaning

1..1
(redefined)

display_name (): `String `

Name of this property in form name: ContainerTypeName<IndexTypeName, …​>.

BMM_INDEXED_CONTAINER_PROPERTY

Meta-type of for properties of linear container type, such as Hash<Index_type, T> etc.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_INSTANTIABLE, BMM_CLASS_FEATURE, BMM_PROPERTY, BMM_CONTAINER_PROPERTY

Attributes

type: BMM_INDEXED_CONTAINER_TYPE [1..1]

Declared or inferred static type of the entity.

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

is_im_runtime: Boolean ` [0..1]
`{default = false}

True if this property is marked with info model im_runtime property.
Inherited from BMM_PROPERTY

is_im_infrastructure: Boolean ` [0..1]
`{default = false}

True if this property was marked with info model im_infrastructure flag.
Inherited from BMM_PROPERTY

is_composition: Boolean ` [0..1]
`{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.
Inherited from BMM_PROPERTY

cardinality: `Multiplicity_interval ` [0..1]

Cardinality of this container.
Inherited from BMM_CONTAINER_PROPERTY

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) signature (): BMM_SIGNATURE [1..1]

Formal signature of this element, in the form:

name [arg1_name: T_arg1, …​][:T_value]

Specific implementations in descendants.
Inherited from BMM_CLASS_ENTITY

existence (): `Multiplicity_interval ` [1..1]

Interval form of 0..1, 1..1 etc, derived from is_nullable.
Inherited from BMM_PROPERTY

display_name (): `String ` [1..1]

Name of this property in form name: ContainerTypeName<IndexTypeName, …​>.

Invariants

Inv_signature_no_args: signature.arguments = Void
Inherited from BMM_PROPERTY

{
    "name": "BMM_INDEXED_CONTAINER_PROPERTY",
    "documentation": "Meta-type of for properties of linear container type, such as `Hash<Index_type, T>` etc.",
    "ancestors": [
        "BMM_CONTAINER_PROPERTY"
    ],
    "properties": {
        "type": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "type",
            "documentation": "Declared or inferred static type of the entity.",
            "is_mandatory": true,
            "type": "BMM_INDEXED_CONTAINER_TYPE"
        }
    },
    "functions": {
        "display_name": {
            "name": "display_name",
            "documentation": "Name of this property in form `name: ContainerTypeName<IndexTypeName, ...>`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    }
}
bmm indexed container property

BMM_ROUTINE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_ROUTINE (abstract)

Description

A feature defining a routine, scoped to a class.

Inherit

BMM_CLASS_FEATURE

Attributes

Signature

Meaning

0..1

parameters: List <BMM_PARAMETER>

Formal parameters of the routine.

0..1

locals: List <BMM_LOCAL>

Local variables of the routine.

0..1

pre_conditions: List <BMM_ASSERTION>

0..1

post_conditions: List <BMM_ASSERTION>

0..1

body: BMM_ROUTINE_BODY

Body of a routine, i.e. executable program.

Functions

Signature

Meaning

1..1

arity (): `Integer `

Return number of arguments of this routine.

1..1
(effected)

signature (): `/classes/ `

Formal signature of this element, in the form

'[arg1_name: T_arg1, …​]:T_value'.

BMM_ROUTINE (abstract)

A feature defining a routine, scoped to a class.

Inherits: BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_CLASS_FEATURE

Attributes

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

parameters: List <BMM_PARAMETER> [0..1]

Formal parameters of the routine.

locals: List <BMM_LOCAL> [0..1]

Local variables of the routine.

pre_conditions: List <BMM_ASSERTION> [0..1]

post_conditions: List <BMM_ASSERTION> [0..1]

body: BMM_ROUTINE_BODY [0..1]

Body of a routine, i.e. executable program.

Functions

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

signature (): `/classes/ ` [1..1]

Formal signature of this element, in the form

'[arg1_name: T_arg1, …​]:T_value'.

arity (): `Integer ` [1..1]

Return number of arguments of this routine.

{
    "name": "BMM_ROUTINE",
    "documentation": "A feature defining a routine, scoped to a class.",
    "is_abstract": true,
    "ancestors": [
        "BMM_CLASS_FEATURE"
    ],
    "properties": {
        "parameters": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "parameters",
            "documentation": "Formal parameters of the routine.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_PARAMETER"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "locals": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "locals",
            "documentation": "Local variables of the routine.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_LOCAL"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "pre_conditions": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "pre_conditions",
            "type_def": {
                "container_type": "List",
                "type": "BMM_ASSERTION"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "post_conditions": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "post_conditions",
            "type_def": {
                "container_type": "List",
                "type": "BMM_ASSERTION"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "body": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "body",
            "documentation": "Body of a routine, i.e. executable program.",
            "type": "BMM_ROUTINE_BODY"
        }
    },
    "functions": {
        "arity": {
            "name": "arity",
            "documentation": "Return number of arguments of this routine.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Integer"
            }
        },
        "signature": {
            "name": "signature",
            "documentation": "Formal signature of this element, in the form\n\n`'[arg1_name: T_arg1, ...]:T_value'`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": ""
            }
        }
    }
}
bmm routine

BMM_FUNCTION Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_FUNCTION

Description

A formal element with signature of the form: name ({arg:TArg}*):TResult. A function is a computed (rather than data) element, generally assumed to be non-state-changing.

Inherit

BMM_TYPED_FEATURE, BMM_ROUTINE

Attributes

Signature

Meaning

0..1

operator_definition: BMM_OPERATOR

Optional details enabling a function to be represented as an operator in a syntactic representation.

1..1

result: BMM_RESULT

Automatically created Result variable, usable in body and post-condition.

Invariants

Operator_validity: operator_def /= Void implies arity in |1..2|

Inv_signature_has_result: signature.result /= Void

Inv_result_type: type = Result.type

BMM_FUNCTION

A formal element with signature of the form: name ({arg:TArg}*):TResult. A function is a computed (rather than data) element, generally assumed to be non-state-changing.

Inherits: BMM_TYPED, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_CLASS_FEATURE, BMM_TYPED_FEATURE, BMM_ROUTINE

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

parameters: List <BMM_PARAMETER> [0..1]

Formal parameters of the routine.
Inherited from BMM_ROUTINE

locals: List <BMM_LOCAL> [0..1]

Local variables of the routine.
Inherited from BMM_ROUTINE

pre_conditions: List <BMM_ASSERTION> [0..1]

+ Inherited from BMM_ROUTINE

post_conditions: List <BMM_ASSERTION> [0..1]

+ Inherited from BMM_ROUTINE

body: BMM_ROUTINE_BODY [0..1]

Body of a routine, i.e. executable program.
Inherited from BMM_ROUTINE

operator_definition: BMM_OPERATOR [0..1]

Optional details enabling a function to be represented as an operator in a syntactic representation.

result: BMM_RESULT [1..1]

Automatically created Result variable, usable in body and post-condition.

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

signature (): `/classes/ ` [1..1]

Formal signature of this element, in the form

'[arg1_name: T_arg1, …​]:T_value'.
Inherited from BMM_ROUTINE

arity (): `Integer ` [1..1]

Return number of arguments of this routine.
Inherited from BMM_ROUTINE

Invariants

Operator_validity: operator_def /= Void implies arity in |1..2|

Inv_signature_has_result: signature.result /= Void

Inv_result_type: type = Result.type

{
    "name": "BMM_FUNCTION",
    "documentation": "A formal element with signature of the form: `name ({arg:TArg}*):TResult`. A function is a computed (rather than data) element, generally assumed to be non-state-changing.",
    "ancestors": [
        "BMM_TYPED_FEATURE",
        "BMM_ROUTINE"
    ],
    "properties": {
        "operator_definition": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "operator_definition",
            "documentation": "Optional details enabling a function to be represented as an operator in a syntactic representation.",
            "type": "BMM_OPERATOR"
        },
        "result": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "result",
            "documentation": "Automatically created Result variable, usable in body and post-condition.",
            "is_mandatory": true,
            "type": "BMM_RESULT"
        }
    },
    "invariants": {
        "Operator_validity": "operator_def /= Void implies arity in |1..2|",
        "Inv_signature_has_result": "signature.result /= Void",
        "Inv_result_type": "type = Result.type"
    }
}
bmm function

BMM_OPERATOR Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_OPERATOR

Description

Definition of a symbolic operator associated with a function.

Attributes

Signature

Meaning

1..1

position: BMM_OPERATOR_POSITION

Position of operator in syntactic representation.

1..1

symbols: List <String >

Set of String symbols that may be used to represent this operator in a textual representation of a BMM model.

1..1

name: `String `

Formal name of the operator, e.g. 'minus' etc.

BMM_OPERATOR

Definition of a symbolic operator associated with a function.

Attributes

position: BMM_OPERATOR_POSITION [1..1]

Position of operator in syntactic representation.

symbols: List <String > [1..1]

Set of String symbols that may be used to represent this operator in a textual representation of a BMM model.

name: `String ` [1..1]

Formal name of the operator, e.g. 'minus' etc.

{
    "name": "BMM_OPERATOR",
    "documentation": "Definition of a symbolic operator associated with a function.",
    "properties": {
        "position": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "position",
            "documentation": "Position of operator in syntactic representation.",
            "is_mandatory": true,
            "type": "BMM_OPERATOR_POSITION"
        },
        "symbols": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "symbols",
            "documentation": "Set of `String` symbols that may be used to represent this operator in a textual representation of a BMM model.",
            "is_mandatory": true,
            "type_def": {
                "container_type": "List",
                "type": "String"
            },
            "cardinality": {
                "lower": 1,
                "upper_unbounded": true
            }
        },
        "name": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "name",
            "documentation": "Formal name of the operator, e.g. 'minus' etc.",
            "is_mandatory": true,
            "type": "String"
        }
    }
}
bmm operator

BMM_OPERATOR_POSITION Enumeration

  • Definition

  • Effective

  • BMM

  • UML

Enumeration

BMM_OPERATOR_POSITION

Description

Enumeration of possible position of operator in a syntactic representation for operators associated with 1- and 2- degree functions.

Constants

Signature

Meaning

prefix

Prefix operator position: operator comes before operand.

infix

Infix operator position: operator comes between left and right operands.

BMM_OPERATOR_POSITION

Enumeration of possible position of operator in a syntactic representation for operators associated with 1- and 2- degree functions.

Inherits: String

Constants

prefix

Prefix operator position: operator comes before operand.

infix

Infix operator position: operator comes between left and right operands.

{
    "_type": "P_BMM_ENUMERATION_STRING",
    "name": "BMM_OPERATOR_POSITION",
    "documentation": "Enumeration of possible position of operator in a syntactic representation for operators associated with 1- and 2- degree functions.",
    "ancestors": [
        "String"
    ],
    "item_names": [
        "prefix",
        "infix"
    ],
    "item_documentations": [
        "Prefix operator position: operator comes before operand.",
        "Infix operator position: operator comes between left and right operands."
    ]
}
bmm operator position

BMM_PROCEDURE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_PROCEDURE

Description

A formal element with signature of the form: name ({arg:TArg}*). A procedure is a computed (rather than data) element, generally assumed to be state-changing.

Inherit

BMM_ROUTINE

Invariants

Inv_signature_no_result: signature.result = Void

BMM_PROCEDURE

A formal element with signature of the form: name ({arg:TArg}*). A procedure is a computed (rather than data) element, generally assumed to be state-changing.

Inherits: BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_CLASS_FEATURE, BMM_ROUTINE

Attributes

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List <BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

parameters: List <BMM_PARAMETER> [0..1]

Formal parameters of the routine.
Inherited from BMM_ROUTINE

locals: List <BMM_LOCAL> [0..1]

Local variables of the routine.
Inherited from BMM_ROUTINE

pre_conditions: List <BMM_ASSERTION> [0..1]

+ Inherited from BMM_ROUTINE

post_conditions: List <BMM_ASSERTION> [0..1]

+ Inherited from BMM_ROUTINE

body: BMM_ROUTINE_BODY [0..1]

Body of a routine, i.e. executable program.
Inherited from BMM_ROUTINE

Functions

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

signature (): `/classes/ ` [1..1]

Formal signature of this element, in the form

'[arg1_name: T_arg1, …​]:T_value'.
Inherited from BMM_ROUTINE

arity (): `Integer ` [1..1]

Return number of arguments of this routine.
Inherited from BMM_ROUTINE

Invariants

Inv_signature_no_result: signature.result = Void

{
    "name": "BMM_PROCEDURE",
    "documentation": "A formal element with signature of the form: `name ({arg:TArg}*)`. A procedure is a computed (rather than data) element, generally assumed to be state-changing.",
    "ancestors": [
        "BMM_ROUTINE"
    ],
    "invariants": {
        "Inv_signature_no_result": "signature.result = Void"
    }
}
bmm procedure

BMM_VARIABLE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_VARIABLE (abstract)

Description

A mutable entity whose scope is a routine.

Inherit

BMM_INSTANTIABLE, BMM_CLASS_ENTITY

Attributes

Signature

Meaning

1..1
(redefined)

scope: BMM_ROUTINE

Routine within which variable is defined.

Functions

Signature

Meaning

1..1
(effected)

signature (): `/classes/ `

Formal signature of this element, in the form 'name [arg1_name: T_arg1, …​][:T_value]'.

BMM_VARIABLE (abstract)

A mutable entity whose scope is a routine.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_INSTANTIABLE, BMM_CLASS_ENTITY

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_ROUTINE [1..1]

Routine within which variable is defined.

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

signature (): `/classes/ ` [1..1]

Formal signature of this element, in the form 'name [arg1_name: T_arg1, …​][:T_value]'.

{
    "name": "BMM_VARIABLE",
    "documentation": "A mutable entity whose scope is a routine.",
    "is_abstract": true,
    "ancestors": [
        "BMM_INSTANTIABLE",
        "BMM_CLASS_ENTITY"
    ],
    "properties": {
        "scope": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "scope",
            "documentation": "Routine within which variable is defined.",
            "is_mandatory": true,
            "type": "BMM_ROUTINE"
        }
    },
    "functions": {
        "signature": {
            "name": "signature",
            "documentation": "Formal signature of this element, in the form `'name [arg1_name: T_arg1, ...][:T_value]'`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": ""
            }
        }
    }
}
bmm variable

BMM_LOCAL Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_LOCAL

Description

A routine local variable.

Inherit

BMM_VARIABLE

BMM_LOCAL

A routine local variable.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_INSTANTIABLE, BMM_CLASS_ENTITY, BMM_VARIABLE

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_ROUTINE [1..1]

Routine within which variable is defined.
Inherited from BMM_VARIABLE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

signature (): `/classes/ ` [1..1]

Formal signature of this element, in the form 'name [arg1_name: T_arg1, …​][:T_value]'.
Inherited from BMM_VARIABLE

{
    "name": "BMM_LOCAL",
    "documentation": "A routine local variable.",
    "ancestors": [
        "BMM_VARIABLE"
    ]
}
bmm local

BMM_RESULT Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_RESULT

Description

Automatically declared variable representing result instance of a Function call.

Inherit

BMM_VARIABLE

Attributes

Signature

Meaning

1..1
(redefined)

name: String `
`{default = "Result"}

Name of this model element.

BMM_RESULT

Automatically declared variable representing result instance of a Function call.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_INSTANTIABLE, BMM_CLASS_ENTITY, BMM_VARIABLE

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: String ` [1..1]
`{default = "Result"}

Name of this model element.

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_ROUTINE [1..1]

Routine within which variable is defined.
Inherited from BMM_VARIABLE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

signature (): `/classes/ ` [1..1]

Formal signature of this element, in the form 'name [arg1_name: T_arg1, …​][:T_value]'.
Inherited from BMM_VARIABLE

{
    "name": "BMM_RESULT",
    "documentation": "Automatically declared variable representing result instance of a Function call.",
    "ancestors": [
        "BMM_VARIABLE"
    ],
    "properties": {
        "name": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "name",
            "documentation": "Name of this model element.",
            "is_mandatory": true,
            "type": "String",
            "default": "\"Result\""
        }
    }
}
bmm result

BMM_PARAMETER Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_PARAMETER

Description

A routine parameter variable.

Inherit

BMM_VARIABLE

Attributes

Signature

Meaning

0..1

direction: BMM_PARAMETER_DIRECTION

Optional read/write direction of the parameter. If none-supplied, the parameter is treated as in, i.e. readable.

BMM_PARAMETER

A routine parameter variable.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_INSTANTIABLE, BMM_CLASS_ENTITY, BMM_VARIABLE

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean ` [0..1]
`{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: `String ` [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash <String ,Any > [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_ROUTINE [1..1]

Routine within which variable is defined.
Inherited from BMM_VARIABLE

extensions: Hash <String ,Any > [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean ` [0..1]
`{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

direction: BMM_PARAMETER_DIRECTION [0..1]

Optional read/write direction of the parameter. If none-supplied, the parameter is treated as in, i.e. readable.

Functions

is_boolean (): Boolean `

Post_result: `Result = type().equal( {BMM_MODEL}.boolean_type_definition())
[1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean `

Post_result: `Result = (scope = self)
[1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

signature (): `/classes/ ` [1..1]

Formal signature of this element, in the form 'name [arg1_name: T_arg1, …​][:T_value]'.
Inherited from BMM_VARIABLE

{
    "name": "BMM_PARAMETER",
    "documentation": "A routine parameter variable.",
    "ancestors": [
        "BMM_VARIABLE"
    ],
    "properties": {
        "direction": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "direction",
            "documentation": "Optional read/write direction of the parameter. If none-supplied, the parameter is treated as `in`, i.e. readable.",
            "type": "BMM_PARAMETER_DIRECTION"
        }
    }
}
bmm parameter

BMM_PARAMETER_DIRECTION Enumeration

  • Definition

  • Effective

  • BMM

  • UML

Enumeration

BMM_PARAMETER_DIRECTION

Description

Enumeration of parameter read/write direction values.

Constants

Signature

Meaning

in

Parameter is an input parameter, and treated as readonly by the receiving routine.

out

Parameter is an output parameter, and treated as a reference to an entity writeable by the receiving routine.

in_out

Parameter is an input and output parameter, and treated as a reference to an entity readable and writeable by the receiving routine.

BMM_PARAMETER_DIRECTION

Enumeration of parameter read/write direction values.

Inherits: String

Constants

in

Parameter is an input parameter, and treated as readonly by the receiving routine.

out

Parameter is an output parameter, and treated as a reference to an entity writeable by the receiving routine.

in_out

Parameter is an input and output parameter, and treated as a reference to an entity readable and writeable by the receiving routine.

{
    "_type": "P_BMM_ENUMERATION_STRING",
    "name": "BMM_PARAMETER_DIRECTION",
    "documentation": "Enumeration of parameter read/write direction values.",
    "ancestors": [
        "String"
    ],
    "item_names": [
        "in",
        "out",
        "in_out"
    ],
    "item_documentations": [
        "Parameter is an input parameter, and treated as readonly by the receiving routine.",
        "Parameter is an output parameter, and treated as a reference to an entity writeable by the receiving routine.",
        "Parameter is an input and output parameter, and treated as a reference to an entity readable and writeable by the receiving routine."
    ]
}
bmm parameter direction
References
  • [1] E. W. Dijkstra, A discipline of programming. Prentice-Hall Englewood Cliffs, N.J, 1976.

  • [2] G. Smith, The Object Z Specification Language. Kluwer Academic Publishers, 2000. [Online]. Available: http://www.itee.uq.edu.au/~smith/objectz.html

  • [3] B. Meyer, Object-oriented Software Construction, Second. Prentice Hall, 1997.