MM(ModelMaker)两小时上手指南
作者:郭方明
完成日期:2005-12-06 version 1.0
联系信箱:
[email protected]
注:转载文章,请注明作者信息。
关键字:ModelMaker上手指南 Delphi建模工具 CASE工具
引文:
本文通过一个简单的例子介绍使用MM(ModelMaker)设计类图和生成Delphi代码,以及代码逆向同步的过
程;让你在最短的时间内上手MM。 编写本文使用的是ModelMaker 7,不能保证文章内容适合所有版本。
谁需要阅读本文:
.. 刚接触MM 需要掌握其基本操作方法。
.. 使用Delphi 语言想要学习UML 建模的初学者。
第 1 页 共 6 页
目 录
MM 简介....................................................................................................................................................... 3
1、MM可爱的脸......................................................................................................................................... 3
2、MM中的工程(PROJECT) ...................................................................................................................... 3
3、新建类图............................................................................................................................................. 4
4、添加类成员......................................................................................................................................... 4
5、实现类的方法..................................................................................................................................... 5
6、生成DELPHI代码................................................................................................................................... 5
7、逆向到模型......................................................................................................................................... 5
8、完全的逆向工程................................................................................................................................. 6
结束语....................................................................................................................................................... 6
第 2 页 共 6 页
正文:
MM简介:ModelMaker简称为MM,是一个与Delphi紧密绑定的CASE建模工具。MM弥补了Delphi IDE在建模设
计上的不足。MM与其他 CASE工具最大的不同就是其强大的实时同步引擎,你的设计可以直接映射成代码,在代
码上的修改可以自动逆向反映到设计模型。以“设计-编码-精练”方式代替了传统的“设计-编码”的工作
方式。MM是一个强大的UML建模工具,她还支持时下流行的“设计模式”。
闲话少说, 通过以下8 个部分你就可以上手了,“Follow me, step by step”。
1、MM 可爱的脸
我们先浏览一下MM 的芳容,打开MM7。
MM的安装很简单这里就不介绍了,如果需要更多的信息可以浏览http:\\www.modelmakertools.com
MM 的默认布局(菜单条下的工具栏上有一个下拉框,选中“basic”)分四大块。
1.左上是【树状视图区】包括:【图】(Diagrams),【类视图】(Classes)和【单元视图】(Units)。
2.左下方是【类成员区】。
3.右上是【编辑区】包括:【图编辑页】(Diagram Editor),【实现编辑页】(Implementation)和【单
元代码编辑页】(Unit Code)。
4.右下是【消息】和【文档】区。
注意:MM 的各个页面都有“停靠”功能,你可以随意安排布局,但是由于MM 的页面比较多,建议初学者
使用默认的布局风格。如果不慎搞乱了布局可以点击工具栏上的下拉框选中“basic”即可恢复。另外,在1024
×768 以上的分辨率下使用会得到更好的效果。
2、MM 中的工程(Project)
现在开始用MM 了,首先我们需要搞清她会产生的文件。
先创建一个新工程(或模型),选择菜单“File|New”。你将得到一个空白的工程,该工程包含一个默认的
祖先TObject 和 IUnknown。
然后选择菜单“File|Save As...”命名为FirstMM,你将得到FirstMM.mpd 文件。
其实.mpd 是以下的文件集合的打包:
1. <model>.mpr; 包含工程设置;
2. <model>.mma; 包含与工程相关的宏;
3. <model>.mmb; 包含代码模型数据;
4. <model>.mmc; 包含模型中的文档;
5. <model>.mmd; 包含图;
6. <model>.mme; 包含事件类型定义;
7. <model>.mmf; 包含工程信息。
也可是设置MM(参考帮助文件“Options | Environment options”)使其保存项目时存为以上一系列的
文件。
第 3 页 共 6 页
3、新建类图
在MM 建一个类有很多种方法(比如使用“Tools|Create Class Wizard...”)。我们用MM 强大的图形建模
功能来建我需要的类。
首先点击【编辑区】的【图编辑页】(Diagram Editor),把注意力都放在这个区域哦。
1.点击类似“+”的“add Diagram”按钮(将鼠标移到按钮上,稍停就会有该按钮的名称。以下提到的
按钮我们都以MM 提示名称来表示)。
2.MM 弹出对话框要我们输入图名(name)输入:testClass。
3.在下拉框(type)中选择 Classes Diagram 后点击“ok”。我们那就得到了一张名为testClass 的空白
类图。
4.这时你发先图左侧的一派按钮都可用了,点击“add Class”按钮(应该是第一个)。
5.这时鼠标带了一个“+”在图上找个合适的位置点击一下,MM 弹出了对话框要求输入类名class name
等类的基本信息。输入class name:TMMobject。选择祖先类Ancestor:TObject。现在我们已经得到了一个类
并且看到了他的图形。
注意:选择Ancestor 时你会发现你只能选TObject 如果我们想要从其他类继承怎么办呢?
这里有一个必须说明的问题。MM 规定新类的父类类必须作为模型数据的一部分,否则MM 可能无法正常生
成新类的代码部分。这就意味这如果想要声明一个新类就必须导入其父类,而导入其父类需要导入其父类的祖
先类,如此循环好像必须要把Delphi 类的继承关系全部导入到模型中!问题当然不能这样解决。
MM 提供了一个叫“占位符”的标志来解决这个问题。我们打开界面左上方【树状视图区】的【类视图】
(Classes)页面。选中TObject。从弹出式菜单中选择“Add descendant” 输入TKK 作为类名。双击该类并
在类编辑器对话框中选中选项“placeholder”。你会发现TKK 变成一个虚框,这时的Tkk 就是一个“占位符”。
把Tkk 拖到我们testClass 类图上。
6.重复步骤4 和步骤5,我们加上另外两个类TMMFace 和TMMBoday,他们的祖先类都是TMMobject。我们
的图上有四个类TMMobject、TMMFace、TMMBoday 和Tkk。那么如何展现他们之间的关系呢?
7.当然我们可以自己来画箭头,但是这个办法好好像很笨。一个更好的办法是用MM 提供的向导。
步骤如下:先用鼠标圈住(或用键盘Ctrl+A)以上四个类。点击右键“Wizards|visualize class
relations...”这是MM 自动的生成了TMMFace和TMMBoday 指向TMMobject 的箭头。或者点击“Wizards|visualize
related classes ...”这样MM 会把关联到的类全部显示出来,我们的类图上就会多了TObject。
4、添加类成员
有了这些类后我们来添加类成员(属性和方法等)。
1.选中TMMFace 在右键弹出菜单“class|add property”。
2.name 输入:color,根据需要设置其他各项(相信会delphi 都应该明白是什么意思,我们在这里就用
默认的选项)。
3.ok 后“好像世界没什么改变?”难道有bug?呵呵,如果你够仔细的话你会发现在左下方的【类成员区】
出现两成员Fcolor:integer 和color:integer。你是不是在想我的图上为什么没有呢?其实这是选项设置的问
第 4 页 共 6 页
题。
在图的空白区域上点右键“visual style|Diagram properties”,选“symbol style”页,将“Project member
type filter”前的勾去掉。把“fields、properties”等根据需要选中。“世界终于改变了!”
4.如上所述,给TMMFace 加入方法WashFace。给TMMBoday 加入属性:face:TMMFace 和方法bath。
注意:给TMMBoday 加入属性:face:TMMFace 时你也许会遇到困难。步骤如下:在弹出的对话框上的DataType
中选class 在DataTypeName 输入TMMFace 即可。相信你明白这是什么意思了TMMBoday 引用了TMMFace。哪么
他们的关系应该反映在类图上啊,“Wizards|visualize class relations...”就OK 了,看到你期望的哪条线
了吧。
5、实现类的方法
在MM 中我们可以直接用Delphi 代码实现类的方法(好像Delphi IDE 完全没用了一样,呵呵)。
在【类成员区】选中要实现的方法,点击【编辑区】,【实现编辑页】(Implementation)写代码。Implementation
页的功能很简单这里就不详细介绍了,推荐大家回到Delphi IDE 中来写代码,毕竟这是Delphi IDE 的强项。
6、生成Delphi 代码
激动人心的时刻到来了,生成Delphi 代码。
模型建好了,我们还要干什么?
1.在界面左上【树状视图区】的【单元视图】(Units),点“add new unit”按钮。
2.在path Alias 选择路径。Relative File name 输入“MMUnit”单元名,ok。
3.工具栏按钮“Unlock Code Generation”按钮解锁(这一步必须要哦)。
4.在【单元视图】(Units)点击按钮“Generate”。
5.赶快在你本地的文件夹(刚才设置的path Alias)下找找,一个MMUnit.PAS 出现了,打开看看Unit
的开头都有了,却没有发现TMM 们的身影?为什么?
6.在【单元视图】(Units)把“Class not assigned to units”下的类都拖到“MMUnit”下。
7.点击按钮“Generate”。
8.我看到你脸上露出了笑意!呵呵,成功了!
7、逆向到模型
下面我们看看在Delphi 中对类的修改怎样返回到MM 中,用Delphi 打开MMUnit.PAS。
1.我们给类TMMFace 增加一个成员(str:string)使其代码如下:
TMMFace = class(TMMobject)
private
Fcolor: Integer;
str:string;
public
第 5 页 共 6 页
procedure WashFace;
property color: Integer read Fcolor write Fcolor;
end;
2.在Delphi 中点菜单“ModelMaker|Jump to ModelMaker ”回到MM 中。
3.在【单元视图】(Units)选“refresh Import”按钮。
4.查看TMMFace 发现【类成员视图】果然有了str:string。
注意:在【图编辑页】(Diagram Editor)查看TMMFace 发现没有str:string。这选项的问题。在图的
空白区域上点右键“visual style|Diagram properties”“Member visibility filter”把private,public
等全选上就有了。
中间小结:
以上讲的过程为:用MM 设计-在Dephi 中(实现,修改)-重新映射到MM 模型中-重新修改精练设计。
这样一个过程。这是一个正向的开发过程,也是我们在实际开发中正常的流程。
但是在没有MM 以前我们已经有了很多的类,很多的项目。我们能把他们变成漂亮的图形吗?
8、完全的逆向工程
逆向工程在MM 中十分简单。但是要提醒你的是不熟悉MM 的脾气的时候先备份一下你的旧代码。
1.【单元视图】(Units)选“Import Unit..”
2.选择你要导入的.pas 文件。
3.ok 后你在【单元视图】(Units)可以看见多了一个新的单元。
4.【图编辑页】(Diagram Editor),右键菜单“Wizards|visualiztion Wizards”选刚导入的单元,单
元下的类选到右边。next,finish,我们的图上多了刚才选中类图。
图形化我们已有的类就是这么简单,一个完全的逆向工程就完成了。
结束语:
MM 的功能十分的强大,本文只介绍了很小的一部分,有兴趣的读者可以参考MM 的操作手册
另外,我计划写一篇新的文章《MM 与模式设计》,完成后与大家分享。
笔者也在学习当中,文中如有错误或疑问请发邮件
[email protected]给我,谢谢。
第 6 页 共 6 页