一、UML类图的表示方式
在UML中,类使用包括类名、属性和操作且带有分割线的矩形来表示。
(1)类名:是一个字符串。
(2)属性:指类的成员变量。UML表示格式:[可见性]属性名:类型[=默认值]
例如-name:String
(3)操作:是类的成员方法。UML表示格式:[可见性]名称(参数列表)[:返回类型]
例如:+display():void
可见性表示该属性对类外的元素是否可见,包括公有(public)、私有(private)、受保护(protected)和缺省四种,在类图中分别用符号+、-、#、~表示。
银行账户类的UML表示:
二、类之间的关系
类与类之间主要有6种关系,耦合度从弱到强排列依次是:依赖、关联、聚合、组合、继承、实现。
1、依赖关系
依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。是use-a的关系。
依赖关系体现在,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法。
方法执行完毕,就没有关系。
class Cat {
public static void eat(){
System.out.println("猫在吃喵粮");
}
}
class User {
//使用形参方式发生依赖关系
public void user1(Cat cat){
cat.eat();
}
//使用局部变量发生依赖关系
public void user2(){
Cat cat = new Cat();
cat.eat();
}
//使用静态变量发生依赖关系
public void user3(){
Cat.eat();
}
}
在UML类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。
2、关联关系
关联关系是对象之间的一种引用关系,用于表示一个类对象与另一个类对象之间的联系,如老师和学生、师傅和徒弟、客户和订单等。
在代码中,通常将一个类的对象作为另一个类的成员变量来实现关联关系。
在整个对象的生命周期,一直有关系。
public class Customer {
public Address address;
public void setAddress (Address address){
this.address= address;
}
public Address getAddress (){
return address;
}
}
在UML类图中,双向的关联用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。
关联、聚合和组合关系仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等,它们在编程语言中的体现却是基本相同的。
3、聚合关系
聚合关系是关联关系的一种特例,是强关联关系,是整体和部分之间的关系,即has-a的关系。
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。
例如汽车由引擎、轮胎以及其它零件组成,如果汽车毁了,它的引擎和轮胎还可以安装在别的汽车上。
public class Team {
public Person person;
public Team(Person person){
this.person = person;
}
}
//Team 由 Person 组成,其生命周期不同,整体不存在了,部分依然存在,当前Team解散了,人还在,还可以加入别的组。
在UML类图中,聚合关系用带空心菱形的实线来表示,菱形指向整体。
4、组合关系
组合关系是关联关系的一种,表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是contains-a 关系。
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。
例如头和嘴,人和人的大脑的关系。
public class Person {
public Head head;
public Body body;
public Arm arm;
public Leg leg;
public Person(){
head = new Head();
body = new Body();
arm=new Arm();
leg=new Leg();
}
}
//head,body,Arm和Leg等组合成People,其生命周期相同,如果整体不存在了,部分也将消亡。
在UML类图中,组合关系用带实心的菱形的实线来表示,菱形指向整体。
5、继承关系
继承关系是对象之间耦合度最大的一种关系。继承关系指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,是is-a 的关系。
在UML类图中,继承关系用带空心三角箭头的实线来表示,箭头从子类指向父类,子接口指向父接口。
6、实现关系
实现关系是接口与实现类之间的关系。在这种关系中,类实现了接口中所声明的所有的抽象操作。
interface UserService{}
public class UserServiceImpl implements UserService{}
在UML类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。
三、高内聚低耦合
注:现在的软件结构设计,要求高内聚低耦合。
高内聚低耦合,是判断软件设计好坏的标准,主要用于程序的面向对象的设计。
耦合:
就是模块之间的互相依赖程度。
模块之间的耦合度越低,意味着它们的独立性越高,修改一个模块不会影响到其他模块。少使用继承和全局变量。内聚:
一个模块内的元素是否紧密相关,即模块的功能。
高内聚就是模块的功能要尽可能简洁,最好一个模块只完成一个功能。