UML::InstanceValue是元类吗
不是。请看下图
摘自UML2.0 infrastructure:
Classifier
A classifier is a classification of instances — it describes a set of instances that have something in common. A classifier
can have features that characterize those instances.
<< A classifier就是UML::Classifier的一个逻辑实例,相当于上图中的M1::People >>,<<这里的"instance"是什么,应该是M0级的事物,希望规范不要一会儿用"instance"指M0级事物,一会又指M1级事物>>
Description
A classifier is a namespace whose members can include features. A typed element's type is a classifier — the classifier
defines a limit on the typed element's range of permitted values. Classifier is an abstract metaclass. << Classifier是元类>>
InstanceValue
An instance value is a value specification that identifies an instance. << UML2.0没有UML::Instance >>
Description
An instance value specifies the value modeled by an instance specification.
-------------------------------------------------------------------------------------------------------------
元类(metaclass--是class es 的抽象,而a class是objects的抽象)
结论:如果一个UML2.0的模型元素(如UML::InstanceValue)没有两次且仅两次“UML逻辑实例化”含义,则不是元类。因为UML::Class可以进行第二次逻辑实例化(上图中的红线标识),所以它是元类(同时以UML::Class继承自UML::Classifier佐证)。因为UML::InstanceValue没有第二次逻辑实例化的“含义”(证据非常弱,只能是思维惯性),所以它不是元类,只是M2级的一个类。
M0--建模的主题域,经常被遗忘,M0是不受UML规范控制的地带。上图的M1与M0间的”represent”指表示关系,相当于在M1级为M0级垂直建立了一个token model,而水平间的实例化关系(如:上图的“3GL逻辑实例化”)也称为ontological-instanceOf,它建立了一个type model和token model间的ontology关系。
“实例化”一词用的很烂,好像不用又找不到合适的词,我还没说“物理实例化”呢。。。
逻辑实例化关系是导出吗?也没错,当在M1级为M0的主题事物C++::People建立token 项M1::People时,借助“3GL逻辑实例化”+“represent”就可以导出“UML逻辑实例化”(上图的红色标记)。同理,“UML物理实例化”+下层的“represent”可导出“UML逻辑实例化”。这么一来,“3GL逻辑实例化”就说错了,应该是“3GL物理实例化”或者更好的说法是“同层实例化”。(希望这里不是唐僧在说教)。
anyway,M2的UML metamodel仅仅是UML语言的抽象语法么,至少一个证据说明它不像传统的编程语言的抽象语法(会涉及数据存诸的BNF吗?)