Chinaunix首页 | 论坛 | 博客
  • 博客访问: 404805
  • 博文数量: 38
  • 博客积分: 1490
  • 博客等级: 上尉
  • 技术积分: 406
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-08 00:52
文章分类

全部博文(38)

文章存档

2014年(1)

2013年(1)

2008年(6)

2007年(7)

2006年(23)

我的朋友

分类:

2006-04-12 11:51:25

关于元模型学习的随笔
1、什么是元数据?
  元数据简而言之就是描述数据的数据。被描述的数据可以被称之为具体数据。例如我们举个例子:武林人物元数据张无忌就是一个具体数据,武林人物给了张无忌这个人下了个定义,当然在武林人物这些个元数据可能还有其他一些相关的元数据,例如拥有武功,有门派等描述信息。而张无忌这个人物身上所具有的属性数据都是元数的具体形式,如武功:乾坤大挪移,门派:明教等。
2、什么是元模型?
  元模型简而言之就是描述模型的模型。被描述的模型可以被称为具体模型或具体对象。例如还用上面的例子说明,我们用元模型定义[江湖]的模型,首先有[门派],门派之间有关系,我们称之为[恩怨],当然还有[侠客],[刺客],[武功],这些[侠客],[刺客],[武功]属于[门派]。这些定义基本上为我们极其简单的江湖,那么看一下[笑傲江湖]这个江湖是什么样的:[门派]:华山,恒山等等……[侠客]:令狐冲,仪琳等……[刺客]:田伯光等……[武功]:独孤九剑,吸星大法等……,[恩怨]:魔教和九大门派是世仇,五岳剑派要统一,等等。
3、元模型和程序设计
  对于程序设计来说,特别是这对面向对象的系统设计,对于一个程序系统的设计来说,我们其实是在构造一个元模型。我们使用rose等建模工具来创建一个软件系统,当我们的软件系统在运行的时候,我们的建造的这个软件系统被实例华,成为具体对象系统,例如,假设你定义了一个小汽车的销售系统,你定义汽车类的时候应该是这种样子
classCar
{
  attributes:
      name;
      price;
  fucntions:
     run();
     stop();
     ……    
}
但是这个类到了内存中就被具体化成对象了,可能是:
objectToyota  //注:对象在内存中不是这样放的,在这里只是为了说明方便。
{
  attributes:
       toyota;
       30,000rmb;
  functions:
       run();
       stop();      
}
也可能是
objectAudi{ …… };
所以在这里程序系统依赖你定义的类图和她们之间的关系,通过类的具体对象化来实现了
这个软件系统的具体化。
但是可以发现这种具体化其实是依赖于类属性的具体化实现的,也就是说,我们的类元模型具有的三种元属性是,属性,行为,和关系,我们只是靠属性数据的具体实例化来具体该对象模型,而类的行为和关系基本上是在模型描述的时候就定义好的。所以我们做的整个软件设计在严格意义上来说还不能说是真正意义上的运行时系统的元模型。现在对于C++语言来说,有多态,模板方法等语言功能,但是这些功能大部分仍然局限于编译时的动态,在运行时其实还是不能实现真正的动态改变。
4、升级
  元模型一般来说可以分为四级,M0,M1,M2,M3,数字越大,抽象级别越高,例如M0级可以对应于我们程序中运行时的对象,对应于一个具体的数据体,M1级可以对应于类图等设计时的模型,M2级可以对应于rose这些建模的工具对于类图等模型的描述,M3级就是更高级的抽象了,当然还可以在往上抽象,但是在继续抽下去的时候可能已经失去了现实意义,到最后可能应了老子的话:道可道,非常道。反正到了M3级我就搞不清楚了,再来个M4,M5级,我肯定晕菜,不知道各位如何。
5、结论
  所以说,在软件设计过程中,如果想获得软件系统的灵活性,就要加入中间层或者加入更多的冗余数据,这些数据就是对这些规则进行抽象或者泛化的元数据,然后编成的时候通过元数据的描述来进行程序设计,不要把绑死在具体的数据上,这样就可以达到动态的效果。
例如拿程序菜单举例,一般情况下是在程序编写的时候就完成了菜单资源的创建,在程序完成后的时候菜单是无法改变的。如果是一个编成老手的话,他就有可能把菜单用程序动态创建,按照一定规则构建菜单,菜单的名称分组等信息可能放在外部文件里,这其实也是增加了中间层,增加了描述菜单按照什么规则创建的元数据,所以在程序不变得情况下,菜单文件变,菜单就会变。同样可以把菜单同功能模块之间的联系也用元数据描述,这样连菜单的功能都可以跟着变化。
   元数据的概念简单,但运用比较复杂,需要头脑清楚,理解深刻,而且也要有一定的实践经验才能灵活运用。以后要好好理解学习,哈哈。
 
 
 
阅读(2115) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-05-19 12:06:11

多谢