由于uml(统一建模语言)在开发中经常会用到,特别是在软件开发中的OOAD阶段,因此要理解和使用uml显得尤为重要。在uml开始之前,咱先回顾一个OOAD、OOP的主要特征。

OOAD:根据面向对象的方法学来对软件系统进行分析和设计的过程。它包括OOA 分析阶段和OOD设计阶段。其中分析阶段主要解决“What to do?”的问题,而设计阶段主要解决“How to do?”的问题。具体来说就是:在OOA分析阶段咱要做的主要工作就是建立对业务问题域的视图(建立模型)、列出系统必须要完成的核心任务、列出针对此问题域的最佳解决方案;而在设计阶段咱要做的主要工作是:如何解决具体的业务问题,引入咱工作需要哪些支持,设计系统的实现策略。通常OOAD的开发过程是这样的:a)项目分解为几个模块;b)使用UML进行建模;c)USDP(统一软件开发过程)是一个迭代、递增(需求、分析、设计、实现、测试等)式开发。

OOP的主要特征:封装、继承、多态、抽象、关联、聚合、组合。

下面谈谈我对这些特征的理解:

(1)封装:“合理隐藏,合理暴露”。具体来说就是合理隐藏数据和实现,提供公共方法供咱调用。

(2)继承:发生在子类和父类之间,通常在这两个类型之间存在“is a”的关系,如:香蕉“is a”水果,香蕉为子类,水果为父类。通过继承可实现代码重用且继承也是多态的基础。

(3)多态:“同一种类型的变量调用同一个方法表现出不同特征或行为”。举例来说:呼吸breath()这个动作,人使用肺来完成,而鱼则使用鳃来完成。

(4)抽象:抽象是一种将方法声明和具体实现分离的一个过程。通过抽象,咱只需关注其本质特征(具体能做什么)而忽略掉一个对象(或实体)具体细节。

(5)关联:关联实质上是对象之间交互时的一种引用方式,当一个对象A通过另一个对象B的引用去调用B对象的方法操作或服务时,A和B便产生了关联。比如说:咱(person)使用手机(phone)来打电话(即咱调用了手机的一个功能--打电话dial()),person和phone之间就存在了关联关系。

(6)聚合:聚合是关联关系中的一种,一个对象A作为另外一个对象B的属性Field而存在,在外部对象(如汽车Car)被产生时,可有咱指定与其关联的内部对象(轮胎Wheel)。什么意思呢?说直白点吧,一辆汽车CarA的轮胎坏了咱可以重新换上新的轮胎WheelA,而轮胎WheelA/WheelC也可以卸下来供别的汽车CarB使用。可以看出聚合中的关联关系并没有那么强烈。

(7)组合:组合是关联关系中最为强烈的一种。当一个对象A包含另外一个对象B时,外部对象A负责管理内部对象B的生命周期。本质上:内部对象B的创建由外部对象A自己控制,就拿电脑与显示器来说吧,外部对象(电脑)不存在时,内部对象(显示器)也不能存在,这个应该很好理解了吧~

内聚与耦合

内聚:度量一个类独立完成某项工作的能力。耦合:度量系统内或系统之间依赖关系的复杂度。咱一般的设计原则是:“高内聚,低耦合”,也就是咱要增加内聚,减少耦合。

下面开始咱们的uml之旅。

域模型

域模型也被称为设计模型,它包含两部分组成:一是具体状态和行为的域对象;二是域对象之间的关系,它包括:关联(上面已经介绍了)、依赖(a对象依赖B类中的方法,并且构造B类的实例)、聚集(整体和部分的关系:如手是人的组成部分)、一般化(继承关系)。

uml定义:统一建模语言(Unified Modeling Language),它是一种图形化的语言,可以帮助我们在OOAD阶段标识元素(用例、类、对象等)、构建模块(功能划分)、分析过程并可通过文档(概要说明、详细说明)来说明系统中的重要细节。

uml图形的分类:包括静态模型(static model)、动态模型(dynamic model)。静态建模目的是创建并记录一个系统的静态特征(如:类包含的属性和方法、用例中的参与者和用例以及用例之间的关系、对象之间的关系等)。静态建模包括:用例图、类图、对象图、组件图、部署图;而动态建模包括:时序图(也称顺序图)、协作图、状态图、活动图。

静态建模中的用例图:它是用来展示系统的核心功能及其交互的用户或系统等。

=====================  用例图========================
1. 用例:系统为参与者提供的功能,一般取名为带有动作性的词语。
2. 用例之间的关系 --> 虚线 :
a) 包含关系:大功能包含《include》子功能。
b) 扩展关系:将基用例中一段【相对独立并且可选】的动作,用扩展《extends》用例加以封装。 --虚线反向
c) 泛化关系:一般和特殊(抽象类/接口+实现类/子类)的关系。实线三角形箭头反向。

下面用一张图来说明:

总结

今天只是开了个头,讲了一下OOAD、OOP的几个特征以及uml建模中的分类(静态、动态建模),最后一个静态建模中的用例图来开始了咱们的uml建模之旅。接下来会继续讲解uml中的剩下的几个常用uml建模。

对软件开发中uml建模的理解和图形整理(一)相关推荐

  1. 软件开发中如何理解人机料法环

    黑色部分是百度百科定义,红色部分是个人理解. 人机料法环 人机料法环是对全面质量管理理论中的五个影响产品质量的主要因素的简称.人,指制造产品的人员:机,制造产品所用的设备:料,指制造产品所使用的原材料 ...

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

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

  3. 软件开发中会使用到的图

    文章目录 软件开发中会用到的图 一.背景 二.图为了解决什么问题 三.不同流程中适合运用的图 四.实际的运用 五.结语 软件工程中的各种图 软件工程用的15种图 数据关系流图怎么画?这款软件教你轻松绘 ...

  4. 软件工程中的系统文献映射研究实例-软件开发中的假设条件与哪些软件制品关联(第四部分)

    之前的博客详细描述了软件工程中的系统文献映射研究方法.这里接着给出一个我曾经做过的工作作为例子,以更直观地展示这种研究类型.该研究的背景信息这里不再赘述. 这篇博客主要介绍第三个研究问题的结果,即软件 ...

  5. 软件开发重要性_在软件开发中考虑时间的重要性

    软件开发重要性 by Crunch Tech 通过Crunch Tech 在软件开发中考虑时间的重要性 (The importance of time to think in Software Dev ...

  6. 论软件开发中的可信赖的工作

    中大型软件开发,免不了团队开发,团队开发就少不了分工合作.在团队开发中,当然每个人的能力都很重要,但是我认为可信赖的工作是团队开发的首要条件,也是团队开发存在的基本保证.没有可信赖的工作,就没有团队分 ...

  7. 软件开发中常见知识总结

    最近在准备软件开发的笔试面试,复(yu)习(xi)了一些在软件开发中的常见知识.为了给自己攒点RP,故与大家分享一二. 软件开发需要准备的比较多,主要分为编程语言,数据结构和算法,计算机网络,计算机操 ...

  8. 【软件测试】稳定性和可靠性测试在软件开发中的重要性

    软件测试的某些方面经常会在那些刚接触流程的人中造成混淆--例如在稳定性和可靠性测试之间划清界限.两者通常可以互换使用,并且有一个共同的目标,即确保系统可以在选定的时间范围内稳定运行. 在这篇文章中,我 ...

  9. C++软件开发中“时间”相关操作全攻略

    1.  时间概念 在日常生活中我们遇到的和时间相关的概念有北京时间.时差.12小时制.24小时制等,在软件开发中我们也经常遇到和时间相关的概念,软件虽说是一个虚拟的事物,但它仍然是来源于生活,不会脱离 ...

最新文章

  1. 基于深度学习的Person Re-ID(综述)
  2. 剑指offer 面试36题
  3. linux ce mysql安装_Linux 安装 MySQL 8.0
  4. 什么是反射和字节码对象。
  5. 如何获得C4C里某个code字段对应的描述信息
  6. linux命令行变大,Linux命令行下'!'的8大神奇的用法!
  7. 找到符合条件的索引_高频面试题:MySQL联合索引的最左前缀匹配原则
  8. 【转载】 C#中使用int.TryParse方法将字符串转换为整型Int类型
  9. laravel路由不生效,404,除了/ 都不行,关于nginx环境下laravel除了默认路由都出现404报错的处理方法...
  10. Security+ 学习笔记27 灾后恢复
  11. 如何制作离线tts?
  12. python代码服务器上运行报错
  13. 常见硬盘接口技术:从IDE、SCSI到SATA、SAS再到M.2、PCIe
  14. 百度CarLife Android车机端黑屏问题
  15. 微信浏览器浏览,后台编辑器添加视频
  16. Hexo个人博客搭建教程
  17. 群晖nas中使用registry搭建docker镜像私人服务器以及设置群晖远程docker服务
  18. Springboot项目使用Idea直接生成docker镜像部署到Centos7.6
  19. commons compress使用+ziji
  20. PIR热释电传感器使用笔记

热门文章

  1. About Intellij IDEA
  2. 摇一摇抽奖 php,利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
  3. 使用无人机 LiDAR 的重叠树冠的新型植被点云密度树分割模型
  4. Windos 内网渗透之Token的使用
  5. shiro权限框架详解02-权限理论介绍
  6. 程序员如何优雅的挣零花钱?
  7. 夺命雷公狗---Smarty NO:03 设计篇1
  8. 八,如何检测PC1,PC2直接通信?
  9. oracle11g的g什么意思,oracle11g到底是什么
  10. 一文读懂数据要素(附研究文档大合集下载)