读代码的时候画下类图对于理清关系非常有意义,我今天尝试着画了下,找了些资料,总结后,自己写了一个,记录关键点,备忘.
类图
类图是用来表征一个类的信息的,包括成员变量和成员函数
这是一个类
public class Student {
public Student(String faimly, boolean gender) {
this.faimly = faimly;
this.gender = gender;
}
private String faimly;
private boolean gender;
protected String getFaimly() {
return faimly;
}
public boolean isGender() {
return gender;
}
public void setFaimly(String faimly) {
this.faimly = faimly;
}
}
对应的类图是,我用gliffy画的
解释下,第一行是类名;第二行是成员,由3部分组成,符号+成员名+返回值。第三行是成员函数
符号为-#+,三选一,分别表示private,protected,public。java里还有个package,我不知道该怎么写,不写算了。
接口
接口的写法和类相似,第一行加个《inteface》
举个例子
public interface IEat {
String eat(String food);
}
类的关系--派生(父子类)
泛化(generalization)
描述子类和父类,用三角形头的线表示,指向父类
public class OverseaStudent extends Student {
public OverseaStudent(String faimly, boolean gender) {
super(faimly, gender);
}
public String getCountry() {
return country;
}
private String country;
}
类的关系--实现(接口实现)
实现(Realization)
用虚线三角形表示,指向接口,这里我偷了个懒,就没写具体类了
类的关系--聚合(Aggregation)
表示has a的关系,一个类里有另一个类,比如下图,Man有个字段是Head,就用菱形箭头表示
类的关系--组合(Composition)
组合其实跟聚合类似的,区别之处在于,组合的关系,是没有他肯定没有我。聚合是没有他,也可以有我。比如上面的头和人的关系,是聚合关系。没有人,依然有头。但是下边的头和嘴的关系就是组合关系,没有头肯定没有嘴。
类的关系--依赖(Dependency)
如下图Emplyee依赖于Calculator
类的关系--一般关联(Association)
类的关联包括,一般关联,聚合,组合,后2者我们已经讲过了,再说说一般关联。
一般关联分为单向关联,双向关联,我认为单向关联意义不大,所以只说双向关联,比如下边这个,Wife内有Husband,Husband内有Wife,此时用一根短线表示,也可以再2端都加上箭头。
注释(note)
注释就是对类图的补充说明,用虚线来和类图相关联
好了,其实到现在为止,基本的类图已经可以画了。
参考文献
http://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html
http://blog.csdn.net/tianhai110/article/details/6339565
http://www.uml.org.cn/oobject/201104212.asp
http://blog.csdn.net/lovelion/article/details/7838679
http://www.uml.org.cn/oobject/201211231.asp
http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/