使用visio画类图.docx

上传人:b****3 文档编号:5489442 上传时间:2022-12-17 格式:DOCX 页数:9 大小:332.85KB
下载 相关 举报
使用visio画类图.docx_第1页
第1页 / 共9页
使用visio画类图.docx_第2页
第2页 / 共9页
使用visio画类图.docx_第3页
第3页 / 共9页
使用visio画类图.docx_第4页
第4页 / 共9页
使用visio画类图.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

使用visio画类图.docx

《使用visio画类图.docx》由会员分享,可在线阅读,更多相关《使用visio画类图.docx(9页珍藏版)》请在冰豆网上搜索。

使用visio画类图.docx

使用visio画类图

因为类图很直观,所以恐怕C++成员首先接触到的应该就是类图了.在这篇文章中我们要将下面一个在MFC程序中随处可以见到类用UML图表现出来.

classCGraphicObject

{

   CRectm_rectBound;

public:

   BOOLSetRect(CRectrect);

   CRectGetRect();

};

创建类图

在模型资源管理器中选择[StaticModel]-[TopPackage],点鼠标右键,从弹出菜单中选择[New]-[StaticStructureDiagram]即可创建用于制作类结构图的图面了.

准备工作

首先我们遇到的问题是,CRect和BOOL两种类型在Visio数据类型中找不到.所以我们先从追加数据类型开始.为了便于管理我们会先创建MFC数据类型包.

创建数据包

右键点击下图中模型资源管理器的根节点.在弹出菜单中,选择[包]项目.

下图是弹出的包属性对话框.点击[New]按钮,在[UMLPackage]列中输入[MFCDataTypes],点击[OK]按钮结束.上图可以看到追加的MFC数据类型包.

追加BOOL数据类型

在[MFCDataTypes]项目上点击右键,选择[New]-[DataType],在弹出的[UMLDatatypeProperty]窗口中的类别窗口中选择[DataType]项目,在名称项目中填写[BOOL],选择[OK]结束.用同样的方法追加CRect类型.

注意:

在MFC中CRect是一个类,但是由于我们并不关心CRect的细节,所以把CRect作为简单数据类型来处理.

追加一个类

追加一个类很简单,然后从形状窗口中的[UMLStaticSturcture]分类中拖动[Class]对象就可以了.

设定类的详细信息

设定类的详细信息的大部分工作都是同时属性对话框实现的.对于C++程序员来说,需要设定的内容包括类名,数据成员,成员函数.

以开头提到的类为例。

类名

首先在[Categories]窗口中选择[Class]项目,然后在右面的名称栏目中写入类名就可以了.在这一页中我们可以暂时不必在意其他的内容.

如果只是设定类名的话,大可不必用属性对话框.只要在选中类对象后,再在最上面一栏中单击左键,然后在输入就可以了.

添加数据成员

在[Categories]窗口中选择[Attributes]项目,在右面的画面中增加属性。

[Attribute]栏目中写入变量名,[Type]是用来选择数据类型的。

这里我们选择[MFCDataTypes:

:

CRect]。

[Visibility]栏目选择的是这个成员是公共的(public),保护的(protected)还是私有的(private)。

这里我们选择[protected].[Multiplicity]一般翻译成多重性,是指,在类中,数据成员的个数。

[1]代表在这个类中,有而且只有一个数据成员。

[0..1]表示,没有或者有一个。

可以在[Init.Value]中输入数据成员的初值。

增加成员函数

在[Category]窗口中选择[Operations]项目,在右面的表格中追加成员函数。

在[Visiblility]中选择函数是,共有,保护还是私有的。

[Polymorphic]表示函数是否为多态,也就是使否是虚函数。

[Scope]表示一个函数是属于实例(instance)还是属于类(classifier),静态函数,也被称为类的成员函数,普通的成员函数也被称为实例的成员函数。

所以如过,在这里选中了[classifier],就说明这个函数是静态函数。

上面的操作,只是设定函数的一些基本信息,更详细的信息可以通过选中函数后,点击[属性]按钮,在出现的[UML Operation Properties]窗口中设定。

首先是设定函数的基本信息。

和上面的窗口重复的内容,我们不再说明。

我们只说明[Profix]和[Suffix]。

如果我们想要返回的类型是指针类型或者是应用类型的话,只要在[suffix]中填写[*]或[&]就可以了。

接下来是设定函数的参数。

这个函数只有一个参数rect,但是[Parameter]窗口中却出现了,两个参数。

不过通过观察[Kind]列的内容可以知道,第一个参数[SetRect]是函数的返回值。

第二个[rect]才是我们想要的。

这个参数的[Kind]是[in]表明这个参数是用来向函数传递信息的。

如果是用来取得信息的,就选择[out],如果是双方向传递信息的,就选择[inout]。

完成上面的工作以后,点击[OK]按钮两次,回到作图画面。

来看看我们的成果吧。

类之间的关系

继承关系

继承关系是最容易理解的关系。

画成图的话就像下面这样。

面向对象的说法就是is-a关系。

也就是说Class2isaClass1。

在C++中我们说Class2是Class1的派生类,或者说Class1是Class2的基类。

聚集和组成

从容易理解的关系说起.经常有一个类是另一格类的数据成员的情况。

在UML中表现为,聚集(aggregation)和组成(composition)。

从图上来看,这两种关系都表现为一端是菱形的直线。

其中有菱形的一端是整体,另外一端是部分。

区别就是菱形是空心还是实心的。

从C++曾序来看的话,如果图画成实心菱形的

话,Class1就要负责Class2的创建和销毁。

更准确的说,就是如果Class1不存在了,Class2也一定不存在。

例如象下面的程序。

classClass2

{

};

classClass1

{

   Class2m_objClass2;

}

当然也有下面的情况

classClass2

{

};

classClass1

{

   Class1();

   ~Class1();

   Class2*m_pClass2Obj;

};

光看类的声明就不行了。

这是就需要看类的实现部分了。

Class1:

Class1()

{

   m_pClass2Obj=newClass1; 

}

Class1:

:

~Class1()

{

   deletem_pClass2Obj;

   m_pClass2=NULL;

}

组成(Composition)关系,如果在Class1的对象销毁的时候,比如在析构函数中没有将数据成员销毁的代码,那么这种关系就是聚集(aggregation)关系。

当然,销毁数据成员的代码,会有很多种。

依赖关系

依赖关系就是在以个类中使用了另一个类。

例如下面的代码

Class1:

DoSomething()

{

   Class3obj;

   obj.DoClass3Work();

}

就是这样的情况。

画成图的话就像下面这样。

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1