类图的概述

类图的概述

类图是描述类、接口以及它们之间关系的图,是一种静态模型,显示了系统中的各个类的静态结构。

类图是面向对象系统建模中最常见和最基本的图之一,它提供了用于定义和使用对象的主要规则,同时类图是正向工程(将模型转化为代码)的主要资源,是逆向工程的生成物。其他许多图(如状态图、协作图、组件图和配置图等)都是在类图的基础上进一步描述系统的其他特性。

类图可以包括类、接口、依赖关系、泛化关系和实现关系等模型元素,另外在类图中也可以包含注释、约束】包或者子系统。

类图的用武之地

  1. 对系统词汇的建模

    在进行系统建模时,通常首先构造系统的基本词汇,以描述系统的边界。
    
  2. 对协作建模

    协作是一些协同工作的类、接口和其他元素的共同体,其中元素协作强于它们单独工作功能之和。系统分析员能用类图形化系统中的类及它们之间的关系。

  3. 数据库模式建模

类图遵循原则

  1. 简化原则

    项目的初阶段不要使用所有符号,只要能表达就好。

  2. 分层理解原则

    根据项目开发的不同阶段,使用不同层次的类图来进行表达方便理解,不要一开始就陷入实现类图的细节当中,因为项目进展的阶段不同对项目的理解会不同项目也会不断完善,不可能一次性就把类图画好,开始阶段对类图的理解程度也不深,之后完善能比较科学。

  3. 关注关键点原则

    人的精力是有限的,而且东西太多也会容易混乱,我们应该在开始时关注关键点,把握大方向,之后再完善细节。

类及类的表示

类不仅是构成类的基础,也是面向对象系统的组织结构的核心。

类和对象之间的区别:

类~类是对资源的定义,它用来描述某类实体的特征以及使用这些实体的方法。用来实例化对象,使对象具有相同的属性、操作、关系和语义。

对象~类示例化的结果。

类包括三个部分:名称(身份)、属性和操作。

名称

类名是类的身份。为类命名时最好能够反映类所代表的问题域中的概念,并且要清楚准确。

类名分为简单名称和路径名称,见下图。

简单名称:

这里写图片描述

路径名称:

这里写图片描述

属性

类的属性描述软件中代表的事物所具备的特性。

【可见性】 属性名 【:类型】 【=初始值】 【{属性字符串}】

可见属性包含5个部分:可见性、属性名、类型、初始值、属性字符串。

可见性(对操作也是起作用的)

可见性用于指定它所描述的属性能否被其他类访问,以及能以何种形式访问即和其他类产生联系。

常见的有三种,公有(Public)、私有(Private)和被保护(Protected)。

public:被声明为public的属性和操作可以在它所在的类的外部被查看、使用和更新,构成了类的公共接口。类的公共接口应尽可能减少变化,以防止任何使用该类的地方有不必要的变化。public属性能在本类内直接(不需要新建对象)被使用,同包的类则要通过新建对象,不同的包也要。

protected:在本类中可以直接使用,同包的类则要通过新建对象,不同包则不能,继承的子类和本类的权限一样。

private:安全级别跟高,只能在本类和继承的类中使用。

在UML中public类型用符号“+”表示,private类型用“-”表示,protected类型用“#”表示。

如图一:

这里写图片描述

属性名

类的属性是类定义的一部分,每个属性都应有唯一的属性名,以标识该属性并以此区别其他属性。属性名通常由描述所属类的特性的名词或者名词短语组成,单字属性名小写,如果包含多个单词,则这些单词可以合并,并且从第二单词起,每个单词首写字母大写。

类型

每个属性都应指定其所属的数据类型。常用的数据类型有整型、实型、布尔型、枚举型等。这些类型在不同的编程语言中可能有不同的定义,可以在UML中使用目标语言中的类型表达式,这在软件开发的实施阶段是非常有用的。

除了上面的类型外,属性的数据类型还可以用户自定义,属性定义后,类的所有对象的状态由其属性的特定值所决定。

初始值

设置初始值的目的是存在默认值,赋初始值会很方便可以直接用。

如图二:

这里写图片描述

属性字符串

属性字符串用来指定关于属性的其他信息,任何希望添加属性定义字符串但又没有合适地方可以加入的规则都可以放在属性字符串里。

除了上面介绍外还有一种类型的属性,它能被所属类的所有对象共享,这就是类变量(例如java类中的静态变量)。

操作

属性仅仅描述了要处理的数据,而操作则描述了处理数据的具体方法。操作可以看作是类的接口,通过该接口,通过该接口可以实现内、外信息的交互,操作 的具体实现被称作方法。

UML中用于描述操作的语法形式如下:

【可见性】 操作名 【{参数列表}】 【:返回类型】 【{属性字符串}】

职责

所谓的职责是指类或者其他元素的契约或者义务,可以在类标记中操作分栏的下面另加一个分栏,用于描述职责。

约束和注释

字面意思,约束由花括号的文本表示,具体看下图

这里写图片描述

定义类

定义类之前要识别类,参考: 
http://blog.csdn.net/qq_23473123/article/details/51493031

至于类的属性和方法的确定要分析系统的需求规格说明、问题域,确定各类是要扮演怎样的角色——要完成什么?需要什么数据。

接口

对于Java或c#等高级语言不陌生的读者一定知道:一个类只能有一个父类(你只有一个父亲)。我们继承父类的目的是因为你将要创建的一个或者几个类和一个某个类很像,那么我们就没有必要重复写代码,直接继承就能使用父类的属性和方法。

但如果有些方法比较难写或者比较常用,不想每次都自己写怎么办?答案就是接口。

从上面的描述中可以看出接口是没有属性的,只有操作(方法),而且为了满足各种类的引用,接口的方法肯定是不能写的很具体的,只是一个空架子,具体要到接入的类中具体实现。

在进行建模时,接口起到十分重要的作用,因为模型元素之间的协作是通过接口进行的。相关人员可以为类、组件和包的定义接口,利用接口说明类、组件和包能够支持的行为。一个良好的系统,通常定义了比较规范的接口。

接口的表示:

构造型表示法 
这里写图片描述

球形表示法 
这里写图片描述

球形接口和它的实现类表示图 
这里写图片描述

构造型和它的实现类表示图(依赖关系) 
这里写图片描述

泛化关系

类与类之间的关系有多种,如依赖关系、实现关系和泛化关系等。泛化描述一般事物与该事物的特殊种类之间的关系。在解决复杂问题时通常需要将具有共同特性的元素抽象成类别,并通过增加一些“不同”而进一步分类。就同java中的子类与父类,这里就不作赘述。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值