Part III. The Systems Modeling Language
The Systems Modeling Language (SysML) is a domain-independent systems modeling language, which is based on KerML and allows modeling not only digital software/hardware systems such as information systems, but also socio-cyber-physical systems such as spacecrafts or smart cities. SysML directly uses some elements of KerML, but most SysML elements are specializations of KerML elements.
The primary authors of the SysML v2 specification are: • Sanford Friedenthal, SAF Consulting • Ed Seidewitz, Model Driven Solutions • Roger Burkhart, Thematix Partners • Eran Gery, IBM • Hisashi Miyashita, Mgnite • Hans Peter de Koning, DEKonsult.
The "Definitions" and "Usages" Terminology
SysML2 defines a new terminology of "definitions and usages" for referring to the general pattern that features are "usages" of classifier definitions (and may be named by the same name, typically in lowercase, as the classifier defined as their range). For instance, in the example model below, the part type definition Engine is called a "part definition" and the feature Vehicle::eng is called a "part usage" of this definition. Likewise, the data-valued feature Vehicle::drivingState is called an "attribute usage" of the (data type) definition DrivingState.
attribute def DrivingState { attribute gearSetting : Integer; attribute acceleratorPosition : Real; } part def Engine; part def Vehicle { attribute drivingState : DrivingState; part eng : Engine; }
In this new terminology, the term "usage" becomes a synonym of the term feature, and the term "definition" becomes a synonym of the term classifier, allowing to say that "an attribute usage a1 is defined by the attribute definition A1" instead of "an attribute a1 is typed by the data type A1".
The SysML2 spec claims that the "definitions and usages" terminology facilitates reuse in different contexts, thus improving the usability of SysML. But is this really the case?
It seems confusing to call the definition of a data type, like DrivingState, an "attribute definition". Rather, the term "attribute definition" normally refers to a definition of an attribute as a data-valued property within a class definition. So, what is normally considered an attribute definition, is called an "attribute usage" in SysML2, while what is called an "attribute definition", is normally considered a data type definition.
A poll about the question if the new terminology improves the usability of SysML was taken by 5 software engineers (e.g., from JAXA, RATPgroup, Siemens, OOSE) and 6 aerospace engineers (e.g., from Airbus, JAXA, Capgemini Engineering), all of them professionals working for companies in the area of systems engineering (and no academics). Each of them had two votes. The result was 14 votes against, versus 8 in favor of the new terminology. For the software engineers, the picture is even more clear: they voted 9 to 1 against the new terminology, while the aerospace engineers voted 7 to 5 in favor of the new terminology (see also this LinkedIn article).
As a consequence, I will not use the "definitions and usages" terminology in this book, but rather stick to the classical terminology of item type definitions versus item(-valued) properties/features, and, likewise, part/connection/action/etc type definitions versus part/connection/action/etc(-valued) properties/features.
Feature-Focused Modeling
- allows direct modeling of nested hierarchical decomposition, possibly using default type definitions (more natural for end-users as they don't have to bother defining/choosing types first)
- allows redefinition of features directly at any nesting level
A usage can also be contained directly in an owning package. In this case, the usage element is considered to be an implicit feature of the most general kernel type Anything. That is, a package-level usage is essentially a generic feature that can be applied in any context, or further specialized in specific contexts. [7.6.1]
This is illustrated by the following example where the feature eng implicitly defines a feature of the classifier Anything:
part def Engine; part eng : Engine;