第6章 UML图
本书中的模式图都采用建模语言UML绘制。
基本的UML图由表示类的框图组成。
public class Person{
private string name;
private int age;
public Person(string nm,int ag)
name=nm;
age=ag;
}
public string makeJob(){
return "hired";
}
public int getAge(){
return age;
}
public void splitNames(){
}
}
我们用UML表示这个类,如图:
Person
name string
age int
Person(nm,ag)
makeJob()string
getAge() int
splitNames() void
Person类给出了私有变量和公有方法
框图的顶层包含了类名和包名(如果有的话),中间层列举出类中的变量,底层列举出类的方法。
名字前面的符号表示成员的可视性,其中“+”表示公有的,“-”表示私有的,“#”表示受保护的。
静态方法带有下划线,抽象方法写成斜体或带有"abstract"标签。
在必要时,也可以在UML图中给出全部的类型信息。
UML不要求给出类的所有属性,通常只给出那些讨论中涉及的部分。还可省略方法的一些细节。
6.1 继承
考虑到一个Person类,它具有公有,受保护的及私有的变量和方法,以及一个由它派生出的Employee类。在基类Person中,将方法getJob声明为抽象的,也就是说要用关键字abstract来声明它.
public abstract class Person{
public abstract string getJob();
} //must override
接下来由它派生出Employee类,并为getJob方法填充代码:
public class Employee:Person{
public Employee(string nm,int ag);
base(nm,ag){
}
public override string getJob(){
return "Worker";
}
}
用一条实线和一个空心箭头表示继承。
对Employee类来说,它是Person类的一个子类.
6.2 接口
若FileExit类实现了Command接口,则类FileExit虚线箭头指向接口Command
6.3 组合
多数时候,类层次结构的UML表示里应当包括对象如何包含在其他对象里的内容.
例如,某个类Company可能包括一个Employee和一个Person实例(可能表示承包人).
public class Company{
private Employee emp;
private Person prs;
public Company(){}
}
类之间的线段表示Company中有0-1个Person实例,0-1个Employee实例,菱形框表示Company类为类的聚集。
如果一个类中有某个类的多个实例,如Employee数组
public class Company{
private Employee[] emps;
private Employee emp;
private Person prs;
public Company(){}
}
则我们把对象组合表示成一条标有一个"*"或一个"0"的线段。
6.4 图注
要注释UML图很方便,可以将注释放置在UML图中的任何地方。
注释可以放在带折角的方框中,或者就写成文本形式.
注释常和箭头线段放在一起,表示被调用方法的出处.
6.5 用WithClass绘制UML图
本书的所有UML图用MicroGold的WithClass程序绘制.
该程序读入被编译过的类,生成这里给出的UML类图.
6.6 C#项目文件
本书的所有程序都用VS.net编写成项目文件。读者可以加载项目并进行编译.