设计模式 (4)类图一

来源:互联网 发布:义乌淘宝培训班 编辑:程序博客网 时间:2024/05/13 14:24

  • 导言
    • 类的定义
    • 类的介绍
  • 类图
    • 类图的定义
    • 类图的表示
      • 类和对象表示示例图
      • 类图示例
        • 类对应的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;

结语

本节是介绍类图的绘制,下一节介绍类的类型以及类之间的关系~~

1 0
原创粉丝点击