工作时培训的时候公司同事讲过UML,当时没怎么听,后在在看相关技术书籍的时候,发现用到还不少,于是恶补了些。UML体系庞杂,非十天半月可以掌握,但是作为简单的工具使用,去看清楚系统的内在逻辑还是可以速成的。(非设计系统),股票市场是一场拼图游戏,而UML也可以作为拼图工具去参与面向对象体系软件设计的!
废话不多说,进入正题。
先介绍几款画UML的工具,三大知名VISIO,RationalRose,PowerDesign不多说,个人喜欢用开源的,一是免费,二是通常体积较小,运行起来比较快。我用的是astah...下载地址:http://astah.net/download#community 。
类与类之间的关系如图:
关联是实线箭头,依赖是虚线箭头,继承是实线大箭头,实现是虚线大箭头。
一 ,关联关系
关联关系就是一个类的对象作为另一个类的成员变量出现。
1 单向关联
public class Menu {
private Button loginButton;
}
public class Button{
....
}
老是记不住谁指向谁?为了方便记忆,就记成:我有你我就指向你。
2双向关联
public class Customer {
private Product[] products;
}
public class Product {
private Customer customer;
}
3 自关联
自关联主要在数据结构中庸的多,构成链表节点的关键就在于自关联,可以说整个Java数据结构和'链'相关的都是自关联。
public class Node<T> { //单链表结点类
public T data; //数据域,保存数据元素
public Node<T> next;
}
4 多重关联
public class Form {
private Button[] button;
}
public class Button {
....
}
一个button只能出现在一个Form中,而一个Form可以有多个或者0个Button。
5 聚合关系
在聚合关系中,通常表示整体与部分的关系。因为这样,所以成员变量通常作为构造方法,Setter,Getter或者业务方法注入到整体对象中。我的生命(整体)里有你的出现(部分)才是完美的!!!
public class Car {
private Engine engine;
private String carName;
public Engine getEngine() {
return engine;
}
//设值注入
public void setEngine(Engine engine) {
this.engine = engine;
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
//构造注入
public Car(Engine engine, String carName) {
super();
this.engine = engine;
this.carName = carName;
}
}
public class Engine {
...
}
6 组合关系
描述整体与部分的关系,组合关系中整体可以控制部分的生命周期,一旦整体不存在,部分也将不存在。具有同生共死的关系。
public class Head{
private Mouth mouth;
public Head(){
mouth = new Mouth();
}
}
public class Mouth{
...
}
二 ,依赖关系
依赖关系很好理解,通常体现三种方式:
1 在某个类中的方法使用了另一个类中的对象作为方法参数。
2 在某个类中的方法使用了另一个类中的对象作为局部变量。
3 在某个类中的方法调用了另一个类的静态方法。
public class Driver{
public void drive(Car car){
car.move();
}
}
public class Car{
public void move();
}
总的来说,关联关系一个类中必须要有另一个类作为成员变量。而依赖关系则不需要。
三 ,泛化关系(继承关系)
泛化很简单就是继承。
继承的UML表示:
例子就不举了。人,大人,小孩。 学生,小学生,初中生,高中生.....
四,接口实现关系
接口的uml就是把继承的实现箭头改成了虚线。
基本的掌握了以上类图模式,就可以入类图如无人之地。酣畅淋漓,岂不快哉!!!
参考书籍《设计模式的艺术--软件开发人员内功修炼之道》,这本书很不错,讲得很清晰。
何时才能仗剑行天涯!!!
转载于:https://blog.51cto.com/thinklili/1762221