在讲软件开发方法学的 未来发展和最新趋势之前呢,我们先插讲一个
两个概念,就是元模型和扩展机制。
为什么要讲这两个 概念呢?因为这两个概念呢跟我们后面要讲的软件开发
方法学的未来的发展密切相关
首选呢,请大家看
几个例子,这些例子呢都是来自于我们 中国的汉字。
在这是 孔子的故里曲阜,在这个孔子后人时代生活的这个
府邸门口呢有两个对联,一副对联
这副对联的 其中呢就是这副对联呢有两个字看似写错了
就是富字上头没有点,文章的章字呢
这一竖通到上面去了
有人就会问了,是谁这么不小心,在这么
有名的这个,在这个府邸里 这个门口写了两个错别字呢?其实不是这样的,写这副对联的人呢
是清朝的这个著名的 大学问家纪晓岚,他为什么
故意将这两个字写错呢?其实是别有一番深意的 他这个把富字的这个头去了,那是表示
一种更加的富,非常富,富得都没有头了。
把文章的章字 这一竖通到上头去,表示
文章通天,写的这个文章不是一般的文章,而是非常好的文章
所以呢,它表面上看是写错了,实际上呢
它是运用汉字的一种扩展机制
汉字的扩展机制实际上并不少见,在历代呢都有人
使用汉字的扩展机制进行扩展,比如说 这些字我们认识吗?我们不认识,一个字也不认识,基本上
发明这些字的人呢是很著名的 这个唐朝人武则天,她呢
在当皇帝的时候呢造了很多字,这些字呢
表面上看不认识,但是呢,都有一些运用这个汉字的一些造字法
这个是严格符合造字法的,有新生字,有会意字 假借等等。
我们再看一下这是 非常久远的一个汉字,应该是
甲骨文,在商朝时候的这个文字
这个甲骨文在从土里边刨出来的时候,这时候那个
人们好像感觉这个离我们现在的文字差异很大,但实际上经过 考古学家、
文字学家的研究发现,这些字和我们 现在使用的汉字实际上是一脉相承的,我们完全通过
一些造字法,然后呢可以读出来他们写的什么意思,很多的一些
考古的一些发现 都依赖于这些从地里边挖出来的这些甲骨文证实历史
这个文字呢
我们猛一看是汉字,实际上不是汉字,但是呢 这是西夏
文字,这个西夏文字呢 表面上好像我们都不认识,但是我们只要经过
它也符合汉字的造字法,汉字的造字法,所以呢尽管我们猛一看不认识,但实际上呢
我们通过研究还是可以看出来这个汉字 这个西朗文的一些意思,尽管现在它
不流通了,但实际上我们可以通过
石碑上的一些这些西朗文的了解这个当时的一些历史
这些字呢
很奇怪,这些字呢是 契丹文,契丹文呢跟西夏文呢有些相似的地方,但是呢
这个所不同的是,这些文字我们猛一看认识 但是我们当我们读解他们的这个每一个句子的时候我们不知道是什么意思
这个文字呢 实际上呢它分为两种,两种文字,不管是这
一个是叫契丹大字,一个叫契丹小字,但不管是哪一种文字呢
到目前为止呢,我们已经不知道它是什么意思了 所以呢,尽管它借用了汉字的这个形式
但是它没有用到汉字的造字法来进行造字,它实际上呢是 用汉字作为一种标音,相当于一种这个
字母的方式,所以它不符合这个汉字的这个造字法,因此呢
到目前为止我们非常遗憾,很少能够破译这个
契丹语它是到底是什么意思,尽管现在留存下来 很多的一些石碑,但是我们也不知道它们上面写的到底是什么意思
为什么要说这个呢?这就是说我们这个汉字实际上是
有一个造字法,尽管我们有好几万汉字,但是呢 这些汉字有的时候也不一定够用,在
某些时候呢也需要对它进行扩展,扩展的依据是什么呢?其实就是 在《说文解字》中说的这六书,指事、
象形 形声、 会意、 转注、 假借
这六书呢就是我们这个造字 造新的汉字的一些依据,只要我们
按照这个规范来造一些汉字,尽管我们 可能感觉比较生僻,但是我们通过研究,通过研究这个
六书我们可能会知道它是 什么意思。
但是如果我们不用这个汉字的六书来进行造字 尽管我们这个造字跟汉字很像,但是我们也不知道它是什么意思
为什么要说这个呢?实际上我们就引入 到我们这个
UML 中,我们 UML 呢也是一种语言
这个它本身呢可以是 提供了很多的一些语法、
语义,然后呢可以适应非常 普适地适用基本上所有的软件领域的建模
但是即使是这样呢,就 UML 这非常庞大的这个体系来看
它也很难适应精确地对 某一些特定的领域一些建模,尽管用
所有的一些领域都可以抽象为对象、 类、 关系
但是呢如果我想精确地描述某一些领域的一些业务或者是一些新的技术点的话 UML
这 10几种图 200 种这种建模元素仍然是不够的
仍然需要对 UML 进行扩展。
这个现在有一个词叫 私人订制,有个电影,实际上呢这个跟那个很像,就是根据它具体的
一个特定的要求我要订制一种建模语言 订制的依据呢就是要对
UML 进行扩展 那么具体来说呢,对 UML
进行扩展的必要性呢 就是为了适应不同的方法,因为每个方法
有不同的一个术语,可能我们前面也讲过,形式化的方法 一些
AUP,一些 Agent,这些方法里边定义了一些
除了面向对象之外呢,还定义了新的一些概念,这些概念在 UML 中是没法表示
适应不同的建模领域,有实时建模、 逆向工程领域
和软件过程领域,而这些领域里边 可以用面向对象的方法学进行
研发,但是呢,除了面向对象之外呢 它有一些术语呢,面向对象现在有的这些
概念呢是不支持的,所以呢要对它进行扩展。
关于逆向工程我们后面有一个实例,我们可以 看看这个如何在逆向工程中用
扩展 UML 或者说是这个建立一种新的建模语言来支持逆向工程,实现 由代码逆向为
模型,然后再由模型产生百分之百的 源代码,直接可以执行。
另外还有适应不同的平台,在当今
软件开发已进入云加端的时代,这种需求是更加明显的,因为我们现在的这个
不管是云端还是手机端,或者说是 平板端,它有各种不同的厂商的平台,每个厂商的平台
它支持的一些技术,用到的一些 技术手段是不同的
几个很难用 UML 精确地来对它们进行建模 只要我们把这个技术
业务非常精确地描述,那么我们就会下一步 生成代码、
模型驱动提供了一个非常好的基础 如果我们描述的这个模式是一个非常笼统的,没有体现出来这个技术点
那么我们就无法生成特定于这个,特定领域的模型
此外呢,软件方法学领域也是 不断有新的方法和技术涌现
比如说面向方面、 语义网络、 Agent,等等,很多的一些技术,这些技术的
发展有赖于对 UML 进行扩展 因此对 UML
扩展是非常有必要的,在当今 目前看来呢,为了支持模型驱动的软件开发,需要对特定领域
做模型驱动的软件开发方法的时候,在使用 UML
进行扩展或者说建立一种 用这个 UML
的这种造字法来 构造一种新的
UML 的一些元素,或者说一些模型,那是显得非常必要
因此
扩展是非常有必要的 但是呢如果我们随便扩展的话呢
想怎么扩展怎么扩展,没有任何规矩,没有一些规则来进行扩展 UML 的话
那么我们扩展出来的这个模型实际上是不能被其它