再回首UML之上篇

简介:         UML,统一建模语言,是一种用来对真实世界物体进行建模的标准标记,这个建模的过程是开发面向对象设计方法的第一步,UML不是一种方法学,不需要任何正式的工作产品。

        UML,统一建模语言,是一种用来对真实世界物体进行建模的标准标记,这个建模的过程是开发面向对象设计方法的第一步,UML不是一种方法学,不需要任何正式的工作产品。

  UML提供多种类型的模型描述图,当在某种给定的方法学中使用这些图时,她使得开发中的应用程序更容易别我们所理解,UML的内涵远不只是这些模型描述图,但是对于我们来说,这些图对这门语言及其用法背后的基本原理提供了很好的介绍,通过把标准的UML图放进工作产品中,熟练UML的人员就更加容易加入项目并迅速进入角色。在UML这个大家族中用例图,类图,时序图是我们最常用的。米老师常说,学习是一个不断循环往复的过程,随着第一次文档图的验收,各位师傅的讲解,这些图在我心目中重新定义,而我对她的认识也在一步一步的加深,再一次回首用例图,类图和时序图。

 首先, 我们来看一下用例图。用例图由于参与者(Actor),用例(User Case),关系,系统边界以及箭头组成,需要特别注意的是他们之间的关系,也就是泛化(Generalization),其中泛化从某种程度上可以分为扩展(Extend)和包含(Include)。扩展(Extend)是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能,Extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才能被执行。我们以为机房收费系统为例,看看扩展是如何被应用的。


  在机房收费系统中,一般用户和操作员均有导出Excel这个功能,从上图中我们可以看出来操作员和一般用户扩展了导出表格这个功能,导出表格是一般用户和操作员在某些情况下触发产生的,导出表格并不是一般用户和操作员所必须存在的部分,一般用户和操作员可以单独存在,一般用户和操作员知道有导出表格这个功能的存在,但是导出表格这个功能不知道一般用户和操作员的存在,因为导出表格不知到底是谁扩展了她,一般用户和操作员是对导出表格在一些基本功能上具体的扩展。简单的来说,就是A Extend B表示B是A在系统某些情况下触发产生的,B不是A中必须存在的部分,B可以单独存在,B知道A的存在,但是A不知道B的存在,因为A不知道是谁扩展了她,B是对A在一些基本功能上具体的扩展,需要注意的是,箭头从子用例指向基用例。我们再来了解一下Include,仍然以机房收费系统为例,如下图:


 Include为包含关系,当两个或多个用例中公用一组相同的动作,这是可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例共享,因为子用例被抽出,基用例并非一个完整的用例,所以Include关系中基用例必须和子用例一起使用才够完整,子用例也必然被执行。从上图中我们了解到,学生查询信息包含了学生查询余额,查看上机记录,查看充值记录以及上机状态查询,这些查询都是学生查询信息整个过程中不可或缺的一部分,注意画法,箭头从基用例指向子用例。用例图的基础理论知识就先介绍到这里,接下来,以机房收费系统为例,我修改过的用例图:


 介绍完用例图,我们在来看看我们的类图,对于类图,我们要十分清楚明白的知道,类图中的四种关系,关联,依赖,泛化,实现,其中关联包括聚合和组合。首先,我们来看一下关联中的聚合,聚合,从她的字面上的意思就是大家伙聚到一起没有特别强的约束力,强调的是整体与部分之间的关系,下面我们来看一张聚合的图:


我们来看看在代码中是怎么样实现的呢?

Public class GooseGroup
{
    public Goose goose;
    public GooseGroup(Goose Goose)
    {
    this.Goose=Goose;
    }
}
          大雁和大雁群她们之间的关系就属于聚合关系,大雁进行迁徙的时候,一只大雁属于一个大雁群,一个雁群可以有很多大雁,大雁离开了雁群还是大雁,雁群离开了其中某一只大雁,照样还有其他的大雁,大雁可以脱离雁群独立存在。接下来,关联中的组合关系,从她的字面上,我们很容易理解,大家伙组装在一起,具有很强的约束力,下面我们来看一张组合的图:


我们再来看看组合在代码中又是如何实现的呢:

Public class Goose
{
   public Wings wing;
   public Goose()
   {
      wing=new wing();
   }
}
         大雁与翅膀之间的关系就是组合,没有大雁就没有翅膀,只有翅膀也不可能是大雁,翅膀离开大雁没有了存在的意义,大雁离开了翅膀也不能构成大雁,翅膀不能脱离大雁独立存在。组合是聚合的一种形式,她具有更强的拥有关系,强调整体与部分的生命周期是一致的,整体负责部分的生命周期的管理,如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。聚合和组成我们就先介绍到这里,预知后面的关系如何,且听下回分解,UML未完,待续(再回首UML之下篇).........

目录
相关文章
|
3天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
303 100
|
4天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
5天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
230 132
|
4天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
196 110