以PowerDesigner畫UML类圖
UML类图操作(一)
类图(Class Diagram)用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析设计阶段的重要产物,也是编码测试的重要模型依据。在uml2.0中,类图使用的频率是最高的,这里使用PowerDesigner16.5版本来操作。
首先我们先要了解类图的显示结构,其次再來了解类間之結合关系,由於类有普通类、抽象类、接口(*即介面)之區別,分別展示如下:
接著创建一个类图:在PowerDesigner-->File-->NewModel-->ModelTypes-->Object Oriented Model-->Class Diagram
接著创建一个类並展開此类Class Properties頁面,再對此类添加如下属性(Attributes)和方法(Operations)以熟悉添加元素之操作演練:
接着可先查看它自动生成的代码(在Class Properties頁面-->Preview頁籤下):
如没有自动生成代码呀,可在Class Properties页面的General頁籤下將Generate code勾上:
下面我们结合c#語法來分析类图的顯示結構:
类图分为四部分:
第一部分:类名
第二部分:属性
第三部分:操作行為,含方法、构造器等
第四部分:內部类
- 类名:普通类直接以类名作表示;抽象类下面有{Abstract}标志;接口則可以一个符号表示;
注意:类還有静态类(static)、密封类(sealed)等之區分,此如何表示呢?但这个不会体现在表示层上,这可在Class Properties頁面-->C#-->Modifiers 里面勾选,类图雖不表示其變化但在生成的代码会显示其變化。
- 属性表示规则:
可见性 名称:类型 [ = 初始值 ]
- 操作表示规则:
可见性 名称(参数列表) [ : 返回类型]
至於可见性(访问修饰符)如下:
public:+
private:-
protected:#
internal:i
protected internal:r
注意:如在代码中直接写public int age {get;set;},則會同時在属性里面显示<<Property>>age:int,及操作里面显示<<Getter>><<Setter>>…..之變化。
如果类太多的话字体過小,可如下操作如下:
Ctrl+A全选类图-->点击一个大A來设置字体,如下图所示
UML类图操作(二)
一般类不會只是单独存在的,类与类之间會存在着結合关系,UML提供了类间关系的不同表达方式。
下面只简单說明一些必要设置之操作,双击关系线,然后找到Detail頁籤:
1.关联关系(Association)
对象与对象之间的结构关系
1.1.1单向关联
class Man
{
public Car car;
}
class Car
{
}
1.1.2双向关联
class Studen
{
public Grade grade;
}
class Grade
{
public Student student;
}
1.1.3自关联
class ClassA
{
public ClassA classA;
}
1.1.4多重关联:用來表示對象之數量关系
1..1 : 表示另一个类的一个对象只与该类的一个对象有关系
0..*:表示另一个类的一个对象与该类的零个或多个对象有关系
1..*:表示另一个类的一个对象与该类的一个或多个对象有关系
0..1:表示另一个类的一个对象没有或者只有一个对象有关系
m..n:表示另一个类的一个对象与该类最少有m个最多有n个对象有关系
这里值得注意的是:只要有*的关联就要以数组表示之
1.2聚合关系(Aggregation)
表示整体与部分关系,部分是整体的一部分,也可以脱离整理独立存在。也就是说car被回收,gasoline不会跟car一起被回收。
class Car
{
public Gasoline gasoline;
//构造注入(*此法錯誤!!)
public Car(Gasoline gasoline)
{
this.gasoline = gasoline;
}
//以get/set設置
public Gasoline gasoline
{
get { return gasoline; }
set { gasoline = value; }
}
}
class Gasoline
{
}
这里注意的是:通过get/set設置
1.3组合关系
也是整体和部分的关系,但是组合关系中整体控制部分的生命周期,也就是说你在使用car对象的时候,在它的构造函数里面创建wheel實例或以构造注入wheel實例,在回收car的时候wheel同时被回收
class Car
{
public Wheel wheel;
public Car()
{
//实例化
this.wheel = new Wheel();
}
//构造注入
public Car(Wheel wheel)
{
this.wheel = wheel;
}
}
class Wheel
{
}
2.依赖关系(Dependency)
属于一种使用关系,一般都是某个类使用另一个类里面的对象作为参数使用
所以我们一般用到的3种方式
(1)将一个对象作为参数传入类的方法,比如 :public void A(Car car);
(2)在一个类里面调用静态对象的方法,比如 Car.Move();
下面我们使用第一种方式
class Driver
{
public drive(Car car)
{
car.Move();
}
}
class Car
{
public void Move()
{ }
}
3.泛化关系(Generalization)
俗称继承关系。
public class Subclass : Base
{
}
public class Base
{
}
4.实现关系(Realization)
类继承接口的关系
class Subclass : IBase
{
public void Move()
{
}
}
interface IBase
{
void Move();
}