- 导言
- 类
- 类的定义
- 类的介绍
- 类图
- 类图的定义
- 类图的表示
- 类和对象表示示例图
- 类图示例
- 类对应的Java代码
- 类名
- 类名示例
- 属性Atttributes
- 示例
- 类的操作
- 示例
- 类之内部类表示
- 示例
- 结语
导言
学习类图,无一例外得学习类,以及类之间的关系和类图的绘制。
一般是采用UML类图表示法描绘静态模型。
类
类的定义
类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。
一个类可以有多种职责,设计得好的类一般只有一种职责(单一职责原则),在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。
类的属性即类的数据职责,类的操作即类的行为职责。
在软件系统运行时,类被实例化成对象(Object),对象对应于某个具体的事物。类是一组具有相同属性、表现相同行为的对象的抽象,对象是类的实例(Instance)。
类的介绍
类是面向对象程序设计中的概念,是面向对象编程的基础。
类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。
类的构成包括数据成员和成员函数。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“学生”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为接口。
类图
类图的定义
类图使用需要出现在系统内的不同的类来描述系统的静态结构,类图包含类和它们之间的关系,它描述系统内所声明的类,但它没有描述系统运行时类的行为。
类图显示了一组类、接口、协作以及他们之间的关系。
类图的表示
在UML中,类使用具有类名称、属性、操作分割的长方形来表示。
类和对象表示示例图
类图示例
类对应的Java代码
该类对应的java代码
/***********************************************************************
* Module: Employee.java
* Author: tqw
* Purpose: Defines the Class Employee
***********************************************************************/
import java.util.*;
public class Employee {
private String name;
private int age;
private String email;
public Employee() {
// TODO: implement
}
public String getemail() {
return email;
}
public void setemail(String newEmail) {
email = newEmail;
}
public int getage() {
return age;
}
public void setage(int newAge) {
age = newAge;
}
public String getname() {
return name;
}
public void setname(String newName) {
name = newName;
}
}
类名
每个类都必须有一个名字,类名是一个字符串。例如Order、Customer都是合法的类名,按照Java语言的命名规范,类名中每一个单词的首字母都需要大写。
在UML类图中,表示类的方框的顶部区域放置类名。
{abstract}表示类是抽象类
用《…》表示类的属性表示类型
用一个类指向另一个类,指定《bind》表明是边界类
类名示例
本图显示了7种不同类型的类
类名为Class的类为抽象类
类名为Class2的类为泛型类
类名为Class3的泛型类Class的边界类
类名为Class4的类为JavaBean类型的类
类名为Class5的类是AnnotationType(注释)类型的类
类名为Class6的类是Enum(枚举)类型的类
类名为Class7是一个普通类。可以是公有,私有,或者保护类型。
属性(Atttributes)
属性是指类的性质,即类的成员变量。类可以有任意多个属性,也可以没有属性。
UML中规定属性的表示方法
可见性 名称:类型[= 默认值]
其中
(1)可见性表示该属性对类外元素是否可见,包括了公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号”+”、”-“、”#”表示。Java语言增加一种包内可见性(package)。在UML中用符号“*”表示。为了保证数据的封装性,属性的可见性一般为private,通过公有的Getter方法和Setter方法供外界使用。
(2)名称表示属性名,用一个字符串表示,按照Java语言的命名规范,属性名第一个单词首字母一般小写,之后每个单词首字母大写。
(3)类型表示定义属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
(4)默认值是一个可选项,即属性的初始值。
示例
本图的例子,类名为Student,有四个属性;
name属性可见性为private(-),类型为字符串型(String),没有默认值;
age属性可见性为public(+),类型为整型(int),默认值为18;
address属性可见性为protected(#),类型为字符串型(String),没有默认值;
email属性可见性为package(*),类型为字符串型(String),没有默认值;
类的操作
操作是类的任意一个实例对象都可以使用的行为,操作是类的成员方法。
UML规定操作的表示方式
可见性 名称(参数列表):返回类型
其中:
(1)可见性的定义与属性定义相同。
(2)名称即操作名或方法名,用一个字符串表示,按照Java语言的命名规范,方法名第一个单词首字母一般小写,之后每个单词首字母大写。
(3)参数列表表示操作的参数,其语法与属性的表示相同,参数个数是任意的,多个参数之间用逗号“,”隔开。
(4)返回类型表示操作的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回值类型。
示例
本图类名为Demo,其有四个操作方法:
操作method的可见性为private(-),带入了一个Object类型的参数par,返回值为int型;
操作method1可见性为public(+),无参数,返回值为String类型;
操作method2可见性为package(*),包含两个参数,一个参数为int类型,另一个为int[]型,返回值为boolean类型;
操作method3可见性为protect(#),无参数,返回值为float型;
类之内部类表示
Java语言允许出现内部类,因此可能会出现包含四个部分的类图。一个Java可以有多个内部类。
示例
这是一个类名为Container的类:
有属性data,可见性为private(-),数据类型为int;
有操作方法method,无参,可见性为public(+),返回值类型为int;
有两个内部类,Member和Member2;
结语
本节是介绍类图的绘制,下一节介绍类的类型以及类之间的关系~~