Model Maker上手指南

目录

1.MM可爱的脸

2.MM中的工程Project

3.新建类图

4.添加类成员

5.实现类的方法

6.生成Delphi代码

7.逆向到模型

8.完全的逆向工程

作者:郭方明

完成日期:2005-12-06 version 1.0

联系信箱:gfm_job@163.com

注:转载文章,请注明作者信息。

引文

本文通过一个简单的例子介绍使用MM(ModelMaker)设计类图和生成Delphi代码,以及代码逆向同步的过程;让你在最短的时间内上手MM。 编写本文使用的是ModelMaker 7,不能保证文章内容适合所有版本。

 

谁需要阅读本文

刚接触MM需要掌握其基本操作方法。

使用Delphi语言想要学习UML建模的初学者。

正文:

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、新建类图

在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。你是不是在想我的图上为什么没有呢?其实这是选项设置的问题。

在图的空白区域上点右键“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
          
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与模式设计》,完成后与大家分享。

笔者也在学习当中,文中如有错误或疑问请发邮件gfm_job@163.com给我,谢谢。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Model Maker上手指南的更多相关文章

  1. X下轻量级桌面WindowMaker上手指南

    layout: post title: 轻量级桌面WindowMaker上手指南 tags: x11, cygwin, raspi --- 最近工作上需要在远程Linux上运行一个桌面(我需要跑Net ...

  2. Rancher 快速上手指南操作(1)

    Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...

  3. UnityShader快速上手指南(三)

    简介 这一篇还是一些基本的shader操作:裁剪.透明和法向量的应用 (纠结了很久写不写这些,因为代码很简单,主要是些概念上的东西) 先来看下大概的效果图:(从左到右依次是裁剪,透明,加了法向量的透明 ...

  4. Windows 8 系统完全上手指南 - 非常详尽的 Win8 系统入门学习手册与使用技巧专题教程!

    每次当有新版本的操作系统发布的时候,市面上总会冒出各种从入门到精通类的学习书籍,这次最新的 Windows 8 也不例外!不过,今天给大家送上免费的大礼——<Windows 8 完全上手指南&g ...

  5. Resharper上手指南

    原文http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html Resharper上手指南 我是visual studio的忠实用户, ...

  6. NewLife.XCode 上手指南2018版(二)增

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  7. NewLife.XCode 上手指南2018版(一)代码生成

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  8. Gatsby上手指南 - 让你的静态网站用react来高逼格的写

    注意:Gatsby V2版本安装及使用问题请移步<Gastby V2安装过程中常见问题>,此文较旧,主要针对V1版Gatsby而介绍 前言 一直以来都是用之前比较流行的静态网站生成器Hex ...

  9. [转]Rancher 快速上手指南操作(1)

    本文转自:http://www.cppblog.com/zhiyewang/archive/2016/03/17/213053.aspx Rancher 快速上手指南操作(1)该指南知道用户如何快速的 ...

随机推荐

  1. 排序+并查集——cf1213F

    /* 有向边(pi,pi+1),形成链后进行dfs,求出dfs序 一个联通块内的元素必须是同一个字符,如果最后的联通块个数<k,说明不行 */ #include<bits/stdc++.h ...

  2. vscode 编写Python走过的坑

    1,在使用vscode 中import turtle 这个模块, 再调用t = turtle.Pen(),始终提示无法找到turtle模块 2.可是使用terminal 中调用turtle模块,没有问 ...

  3. 不带头结点的单链表------C语言实现

    File name:no_head_link.c Author:SimonKly Version:0.1 Date: 2017.5.20 Description:不带头节点的单链表 Funcion L ...

  4. Bagging vs Boosting vs Stacking

    原文地址:https://www.jianshu.com/p/9dacdc88d3ec Bagging 用于减小方差. 使用训练数据的不同随机子集(大小常等于训练数据,采用不放回的方式进行抽取)来训练 ...

  5. SDUTOJ 3374 数据结构实验之查找二:平衡二叉树

    题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/3374.html 题目大意 略. 分析 ...

  6. (转载)js调用打印机 打印整体或部分

    本文转载自:https://www.cnblogs.com/lfhy/p/6802781.html 以下为原文内容: 有时前端的项目中需要添加打印的功能,首先要知道打印分为整体打印和局部打印两种,而局 ...

  7. etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc等配置文件区别

    什么是交互式shell和非交互式shell,什么是login shell 和non-login shell. 交互式模式:就是shell等待你的输入,并且执行你提交的命令.这种模式被称作交互式是因为s ...

  8. while循环和for循环

    while循环 n='我怎么那么可爱呀' count= while count<len(n): print(n[count]) count+= for循环 n='我怎么那么可爱呀' for i ...

  9. Codeforces 1152D DP

    题意:有一颗由长度为2 * n的合法的括号序列构成的字典树,现在你需要在这颗字典树上选择一些不连接的边,问最多可以选择多少条边? 思路:不考虑题目条件的话,我们只考虑在随意的一棵树上选择边,这是一个贪 ...

  10. 笔记53 Mybatis快速入门(四)

    动态SQL 1.if 假设需要对Product执行两条sql语句,一个是查询所有,一个是根据名称模糊查询.那么按照现在的方式,必须提供两条sql语句:listProduct和listProductBy ...