统一建模语言UML轻松入门(3)――静态建模:类和对象
---------------------------------------------------------------------
宋宝华 email:[email]21cnbao@21cn.com[/email]
---------------------------------------------------------------------
同类相从,同声相应,固天之理也。——《庄子·渔父》
类是一种对本质相同事物的抽象,人类软件开发技术的发展历史,就是还事物以本源的历史,开发技术、名词越来越接近世界的真实,“面向对象”、“类”就是这样的产物。
3.1类图
在UML中,类图显示了一组类、接口、协作以及它们之间的关系。在UML的静态机制中类图是一个重点,它不但为设计人员所关心,更为实现人员所关注,建模工具也主要依据类图来产生代码(正向)工程。因此,类图在UML的各种图中占据了相当重要的地位。
      
在类图中类用矩形框来表示,它的属性和操作分别列在分格中,若不需要表达详细信息时,分格可以省略。一个类可能出现在好几个图中。同一个类的属性和操作只在一种图中列出,在其他图中可省略。图3.1给出Student类和MFC中的CObject类。
图3.1类的表示
类间关系
在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。
(1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能力,继承是类与类之间最常见的关系。类图中继承的表示方法是从子类拉出一条闭合的、单键头(或三角形)的实线指向基类。例如,图3.2给出了MFC中CObject类和菜单类CMenu的继承关系。
图3.2 类的继承
类的继承在C++中呈现为:
class B { }
class A : public B{ }
(2) 关联:指的是模型元素之间的一种语义联系,是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关 联的作用。关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。可以通过关联类进一步描述关联的属性、操作以及其 他信息。关联类通过一条虚线与关联连接。对于关联可以加上一些约束,以加强关联的含义。
关联在C++中呈现为:
class A{...} 
class B{ ...}
A::Function1(B &b)  //或A::Function1(B b) //或A::Function1(B *b)
即一个类作为另一个类方法的参数。
(3) 聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例 如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力***潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。
图3.3 类的聚合
(4)组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。
聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
我 们用浅显的例子来说明聚合和组合的区别。“国破家亡”,国灭了,家自然也没有了,“国”和“家”显然也是组合关系。而相反的,计算机和它的外设之间就是聚 合关系,因为它们之间的关系相对松散,计算机没了,外设还可以独立存在,还可以接在别的计算机上。在聚合关系中,部分可以独立于聚合而存在,部分的所有权 也可以由几个聚合来共享,比如打印机就可以在办公室内被广大同事共用。
在C++语言中,从实现的角度讲,聚合可以表示为:
class A {...} 
class B { A* a; .....}
即类B包含类A的指针;
而组合可表示为:
class A{...}  
class B{ A a; ...}
即类B包含类A的对象。
       准确的UML类图中用空心和实心菱形对聚合和组合进行了区分。
     
图3.4 聚合和组合

图3.5 银行管理系统类图
       图3.5给出了一个典型的银行管理系统的类图,基本上一看就懂:
银行类聚合了账号库(AccountSet)、客户库(EmployeeSet)和员工库(EmployeeSet);
账号库中包含了n个账号(Account)、客户库中包含了n个客户(Employee),员工库包含了n个员工(Employee);
员工类和客户类都继承自人(Person)类,而员工类中又有一种特殊的员工,即员工管理者类(EmployeeAdmin);
账号类和客户类之间体现出一种关联关系;
单独的元素PersonSex定义了枚举类,其中包括Male和Female两种性别。
我们再给出一个类图实例(图3.6),它来源于软件无线电SCA(软件通讯架构)标准。软件无线电技术是目前电信产品、军用电台中研究的大热门,在其定义的SCA体系中,核心框架即以类图的形式呈现,它定义了应用程序基本框架和标准控制服务接口。
实际上,软件无线电核心框架即由类以及类之间的继承、关联和聚合关系组成。

图3.6 软件无线电核心框架
接下来,我们给出建立类图的步骤:
(1)研究分析问题领域确定系统需求;
类的识别是一个需要大量技巧的工作,寻找类的一些技巧包括:名词识别法;根据用例描述确定类;使用CRC分析法;根据边界类、控制类、实体类的划分来帮助分析系统中的类;参考设计模式确定类;对领域进行分析或利用已有领域分析结果得到类;利用RUP中如何在分析和设计中寻找类的步骤。
(2)确定类,明确类的含义和职责、确定属性和操作;
(3)确定类之间的关系。
3.2对象图
对象图显示某时刻对象和对象之间的关系,是类图的变化,一个对象图可看成一个类图的示例(example),对象图表示的是类的对象实例而不是真实的类。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
对象图中并无新的表示法(除了对象名下要加下划线以外),与类图中的表示法一样,可以认为,只有对象而无类的类图就是一个“对象图”。
图3.7 对象图
在对象图中,对象名可以有三种表示形式:
(1)对象名:类名
(2):类名
(3)对象名
图3.7中的是第1种,即“对象名:类名”格式。
实质上,对象图几乎很少被用到(它包含的信息量太小,仅仅用于呈现某一时刻对象的值,对软件的设计几乎没有太大的帮助),使用远没有类图广泛。我们可以这样类比类图和对象图之间的关系:
“动词+名词”构成“动名词”,例如动词“爱”+名词“国”构成动名词“爱国”。
我们可以看到,“动名词”的信息量很大,很抽象,而作为动名词的例子的“爱国”信息量很小,具体程度很高。
动名词 ―――――>  类图
爱国  ―――――> 对象图
把“动名词”看作类图,把“爱国”看作对象图,很明显,对象图就是类图的一个example而已。

转载于:https://blog.51cto.com/21cnbao/120271

统一建模语言UML轻松入门(3)――静态建模:类和对象相关推荐

  1. 统一建模语言UML轻松入门系列

    第五讲:统一建模语言UML轻松入门之综合实例 第四讲:统一建模语言UML轻松入门之动态建模 第三讲:统一建模语言UML轻松入门之静态建模:类和对象 第二讲:统一建模语言UML轻松入门之静态建模:用例 ...

  2. 统一建模语言UML轻松入门(1)――基本概念

    统一建模语言UML轻松入门(1)――基本概念 --------------------------------------------------------------------- 宋宝华 ema ...

  3. 统一建模语言UML轻松入门之用例

    目前,在的内地版<神雕侠侣>中,杨过和小龙女有一份不为人知的默契与浪漫,那就是他们所绘制的并肩小人图.这样的小人图,是UML用例图的一部分,被称为参与者. 2.1 用例与用例图 用例是需求 ...

  4. 统一建模语言UML整理之开篇

    引言: 这段时间将致力于写UML方面的博客,由于个人能力的有限,如果博客中出现错误的地方还请广大博友批评指正.为了更好地了解一个过程或者事物,人们通常根据所研究对象的某些特征(形状.结构.或行为等)建 ...

  5. 『软件工程13』浅谈面向对象方法,统一建模语言UML

    浅谈面向对象方法UML 一.UML的含义 二.UML的主要内容 1.UML的概念模型 2.UML概念模型图例 三.UML的基本构造块 1.UML中的事物 (1)UML中的四种事物 (2)UML中各种事 ...

  6. 统一建模语言UML(四):领域模型和类图

    统一建模语言UML(四):领域模型和类图 领域模型 领域模型是对领域内概念类或现实世界中对象的可视化表示,也称为概念模型.是更为完整的业务模型的一个特例.从UML的表示法角度,领域模型被描述为一组没有 ...

  7. [摘]UML学习二:标准建模语言UML的静态建模机制

    任何建模语言都以静态建模机制为基础,标准建模语言UML也不例外. UML的静态建模机制包括 用例图(Use case diagram).类图(Class diagram).对象图(Object dia ...

  8. 建模语言UML在软件开发中的应用

      建模语言 UML 在软件开发中的应用 摘要:UML( Unified Modeling Language)是建立系统模型和分析业务处理流程强有力的工具,它能够帮助软件开发人员从不同角度描述系统,使 ...

  9. 统一建模语言UML(1)概述

    uml概述 uml(UNIFIED MODELING LANGUAGE) uml是一种工具,隐藏在其后面的是面向对象的想法 url非常适合面向对象分析和设计,在软件开发中想法很重要,而uml是用来表达 ...

最新文章

  1. 广义线性模型、Logistic、sigmoid、softmax、多分类、与大数据、优缺点
  2. 密切值matlab程序,密切值法
  3. 华人“军火专家”——黄仁勋 1
  4. 【JS 逆向百例】webpack 改写实战,G 某游戏 RSA 加密
  5. 计算包含+、-、*、/、(、)等几种运算符的表达式的值。
  6. 英伟达美女工程师:AI从业者要不要读博?要不要自己创业?
  7. 拜登签署行政令,要求保护美国关键供应链(含信息技术)的安全
  8. 批处理处理oracle数据库脚本导入
  9. C# 合并多个PDF
  10. Selenium Grid使用
  11. 产品logo的设计:图标与几何构成
  12. “安卓僵尸”变种木马
  13. 20200413 jzoj 普及c组 Loan Repayment
  14. 移动端和PC端的pdf预览与下载
  15. 海康摄像头实时显示与字符叠加详解
  16. 协方差及协方差矩阵的理解
  17. 数据分析小实验(下)
  18. STC15W4K32S4单片机ADC应用实现
  19. pc端汽车obd软件下载?_人人美剧,不可多得的PC端观影软件
  20. 公司搬家的教训,提几个注意事项

热门文章

  1. python map、filter、reduce
  2. 【字符串操作之】返回指定长度的字符串→→substr方法
  3. 客户端控件调用服务器的参数
  4. C# Check is No number
  5. WindowsAPI-Findwindow函数和FindWindowEx用法
  6. 把combobox控件添加到datagridview控件中_自定义系列:控件属性添加
  7. swiper.js使用心得
  8. 开发pc页面_uniapp支持PC版真正的一统天下来了全端支持不是梦
  9. Visual C++ 2008 runtime files are out of data
  10. Android开发之The application could not be installed: INSTALL_FAILED_VERSION_DOWNGRADE报错