[ 咳嗽]
实际上前面我们提到的这个扩展机制呢跟另外一个
概念呢是密切相关的,这就是 元和元模型的概念。
首先呢,这个 "元" 呢是什么呢? 啊这个英语是 Meta。
关于 Meta 这个词呢,最早来自于希腊 在英文这个
Meta 这个 词根中呢,词头哇,它这个有很多的一些意思,特别是
在工程或者科学中的应用非常广泛,但是呢 在翻译的过程中呢,并不一定所有的
Meta 都是给翻译成这个元 有的时候呢,在化学中呢翻译成
"偏" 或者说是 "亚" 或者说是 "超"、
啊这些呢,"总",等等 这个…在 IT
领域呢,一般来说呢 Meta
呢是翻译成元,主要呢 这个…因为在 IT 中呢这个
Meta 主要指的是一些 控制、 说明、 描述的意思。
所以呢,跟汉字中的这个"元" 的概念是有一些相似的地方的。
所以把它翻译成元 因为汉字中这个 "元" 呢有两个意思。
一般来说第一个意思就是 "首" 的意思, 你看元旦
然后还有个意思呢就是描述、 说明、
控制,所以呢这个 在 IT 领域呢把 Meta
翻译成元 那么到底什么是元呢?
这个…我们可以追溯到他的这个…产生这个 Meta 的这个历史。
它来自于希腊。
实际上它是在古希腊 著名哲学家亚里士多德,这个在他写完一本这个关于物理学的这个著作之后呢
后面又附了一章叫 Metaphysics 意思呢,直接意思呢是物理学之后。
但实际上呢 这个 Metaphysics
这里边写的并不是一般物理学表示什么 的一些概念。
而是说的是一些物理学背后的一些哲学性的问题 和这个关于存在的根本问题和本源问题
所以后面呢,后人呢就用这个 Metaphysics
表示一门 与哲学有关的一种 学说。
我们中文呢把它翻译成 "形而上学"
实际上就是一种,呃…脱离了 一些具体的一些学问,然后研究
这个学问的一些这个学问, [咳嗽]
实际上这个用一个比较专门的说法呢就是 他研究这个学问背后的存在。
所谓存在 的存在。
这么一种学说,这叫 Metaphysics。
所以元的概念呢是从这来的。
因此呢它 这…这样我们就不难理解什么是 "元模型",什么是 "元语言" 在 IT。
实际上他就是研究 我们这个比如说这个 UML
,什么是 UML 的模型,我们知道,这就是我们后面要重点向大家介绍的
那十几种图和二百种建模元素,这是 UML 语言
那么什么是 UML 元语言呢?这些语言背后
的一些组成规则的这种语言就是 UML
的元语言 具体的说呢,我们前面也提到了。
UML 的元语言那是什么呢? 可以用 Backus
范式来表示,但是呢 既然 UML 它是一种
既可以描述现实世界又可以描述软件世界的一 个问题。
那么 UML 本身是不是也可以用这种语言来描述? 因为 UML
本身就是一种 现实世界或软件世界
尽管这个现实世界不是,呃…它实际上是人造的一种现实世界,就像 Popper
说的有第一世界,但是不是人造的。
第二世界,那是 人构想的一些,存在于人的 意识中的一些世界。
第三世界是人意识中的世界又 还原到或者是固化到了一个客
这个…一种这个客观世界的这个世界 就像软件,本身呢是人头脑中的一个想象,但是最后通过编程的方式
然后又把它放到计算机上,让它存储在一些硬盘上 让它在这个内存中进行执行。
这就是回到第三世界 第一世界它还是称为第三世界。
所以 UML 本身也可以认为是一种 现实世界,也可以用
UML 自身的方式来进行描述 那么描述
UML 的这个语言 那就称之为元语言。
所以这就是元的概念 而我们一般编程语言的这个元语言呢
主要是用 Backus 范式,Backus Naur
范式来表示 所有的高级语言,实际上 Java,C++
唉…它们都可以用一个 Backus 范式来表示,但是自构高级语言这个按照
乔姆斯基这个… 由 Backus 范式不同的约束条件可以把它分为四类语言。
有0 型语言,1 型语言 2 型语言,3 型语言。
在 UML 中也有这种划分 因为
UML 它是一种这个自己描述自己的 这种体系。
也就是说它相当于我们前面提到一种结构的概念 它是自我封闭,自己可以描述自己。
体现了这个 本身这是一个系统,一个结构的一个封闭性,呃…所以呢 这个…在
UML 中的 语言它实际上是用,元语言呢它实际上是用这个一种模型,就是类图来描述的
所以呢,一般情况下呢,我们为了 体现它们的一致性,我们把这个 UML 这个 元语言呢,不叫元语言。
因为它又是一种这个图形表示的一种,所以它称之为元模型
元模型呢实际上就是跟我们前面所说的它是描述 UML
所有的一些建模元素 背后的语法规则的这么一种语言
它是对所有的这个建模元素和 UML 的图进行描述 的一种语言。
啊…描述他们的语法规则的一种语言,所以呢
这个…我们不要认为 什么是元模型呢?是模型的模型。
这个说法是不太确切的 模型的模型有没有?有。
就是这个图中所示的 如果说这个烟斗,然后呢这个,当前的这个
图呢,可以认为,我们这个
画一个,比如说烟斗画一幅画,这幅画是烟斗的一个模型
然后比着这幅画再画一幅画呢,那是模型的模型,是一个 图的图。
实际上呢在 这样这种方式,不断地对这个
模型再抽象再建模,再建模再抽象,这样的话 这是模型的模型。
在软件领域呢也是有的 比如说在逆向工程领域,我们这个首先呢把
一种比如说 Java 语言,一个程序然后呢用逆向的方式给它逆向了一个 非常庞大的一个编程模型。
然后呢这个编程模型过于复杂 不利于我们人掌握,我们进一步地抽象成一个更简单的模型,然后再抽象成一个人能看懂的模型
这是模型的模型的一个过程。
这也是在软件领域 也会用到的。
但是这个绝对不是 元模型的概念。
元模型呢主要是用来描述这个 模型的这个语法规则的。
是对模型的语法和语义进行规约的一种模型 所以我们这也要明确。
在现实世界中呢你像地图 地图的这个图例是属于这个范畴的。
因为这个图例呢实际上是 是描述的,但是它描述的并不是语法规则 而是描述的语义。
我这个图例,地图上的各种符号是表示什么意思 这实际上是属于元模型的范畴。
但是 UML 中的这个元模型呢 是对 UML 的语法规则进行描述的。
因为 UML 的这个语义 目前看来是无法用一个比较形式化的方式来进行描述的
所以它一般来说用自然语言来进行描述