技术标签: uml
#《Thinking in UML》学习总结
@(总结)[思考|学习|记录]
最近看完了这本书,感觉还是很有内容的,从面向过程到面向对象,从现实世界到计算机软件,不仅讲述了方法,同时还带给我一种做软件的思想,当我有了这种思想后,也常常会用到生活的其他领域中,比如边界这种思想。总而言之,这本书值得一看,而且还得多看几遍才能明白其中的方方面面。
##面向过程和面向对象
面向过程和面向对象都是是对世界的认识方式,只是角度不一样。
业务用例必须是以达到业务主角的完整业务目标为标准,而不能以实现业务主角业务目标的步骤为标准。
###发现主角
当边界后,业务主角也有了,但是呢,要实际去分析除该业务主角外是否还有隐藏的业务主角,
业务主角区别于系统参与者,系统参与者是系统的实际操作者,通常都有id,而业务主角是用来分析业务的,而业务的分析界都是要与客户交流并达成共识的。因此业务主角不应当被过分地抽象化和虚拟化,应当能能够映射到现实业务中的工作岗位设置、工作职责说明等,并且使用客户习惯的业务术语来命名。
边界定义好了,业务主角找好了,就是获取业务用例的时候了,该怎么获取呢?可以从岗位手册、业务流程指南、职务说明等一些文件获得,还有一种很重要的方法,就是业务主角访谈。通常可以问如下问题:
在定义边界时,可以看到业务主角的业务目标,从目标上看只能得到一个大概的用例,然而业务主角需要做什么具体的事情并不清楚,这就要通过各种方式去寻找业务具体想做的事情是什么。
一个完整的业务模型包括:
场景是说某个业务用例的实际实现过程,包括涉及的步骤、经过哪些角色处理、出现问题怎么办等等。
业务用例的视图之前说过,但是业务用例场景的视图怎么表示呢?
有三种:
如果想强调参与该业务的各参与者的职责和活动,可以选择活动图;如果想强调该业务的完成时间顺序,并且在完成的过程中传递的信息是什么,可以选择时序图;如果想强调参与该业务的各参与者之间的交互过程,可以选择协作图。
规约是对场景视图的文字描述,其中的过程描述可以认为是活动图的文字版,因为文字描述来得严谨,所以用例规约还是必要的,宁可省略活动图,也不要去省略用例规约,不然看着图去开发,理解会有不同,不如白纸黑字写的清楚。
如果业务规则只用于一个用例,直接写在规约里就可以,如果用于多个用例,就要编写专门的业务规则文档。
业务对象模型就是对业务场景中涉及到的一些业务实体建模。
一个业务用例可能有不同的实现,也就是有不同的场景,即实现方式不同。如:
一般一个业务用例实现对应着一个业务用例场景。
业务用例实现场景的建模方式和业务用例场景的建模方式有点差别。用例场景着重表示业务是怎样执行的,并没有去描述这些执行步骤是如何实现的,而用例实现场景就是着重描述步骤是如何实现的,是如何通过人机交互来完成业务的。
如果说业务用例场景是跟客户就业务达成共识,那么业务用例实现场景就是跟客户就如何操作达成共识。
包是用来分类元素的。业务建模中,包图更多用于信息分类。例如将业务用例分类,将参与者分类,因此更多地采用领域包的版型,领域包就是根据业务的不同来定义的一种分包方式。
但是分包还有按业务部门分、按业务过程分等等。
在解决问题的时候,我们通常会分解一个大问题,得到很多个小问题,而这些小问题是相互独立的,那么每个小问题是可以叫做一个领域的。
在建模的方式上,还是有很所不同的,业务用例建模针对的是业务目标来建模,确定一个业务用例是从人做事的角度,说明一个业务目标是由哪些人做哪些事来构成的;领域建模是针对一个整体提出许多关心的问题,再针对每个问题求解。这些问题不会覆盖所有的业务范围,相互之间也没什么因果关系。
首先,用例分析方法是有缺陷的,它能很好地说一个系统的功能性需求,从什么人做什么事的角度来将系统定义清楚,但是它忽略了一些关联性的问题。
从需求上来说,通过用例分析获得的用例一般都是相互独立的,但从系统的角度来说,有些问题是跨多个用例的。单个用例场景有时是无法描述一个问题的。领域模型就可以处理这种情况,提出一个问题,然后求解,在求解的过程中借用用例模型,将独立的用例场景通过问题串在一起将其“系统化”。
其次就是用例分析方法只能分析功能性需求,特别适合交互密集的需求。对于非功能性需求和计算密集型的需求则显得很为难。例如,用户有一个需求是用户界面可以个性化,这是一个非功能性需求,这时使用用例分析方法是很难分析的,但是如果把它转化成一个领域模型来看,得到结果可能是一个portal解决方案,这样问题领域就转化成技术选型的问题了。
在软件开发过程中,通常有一个疑惑,就是需求转到设计这层总是不好把握,总觉得没有根据,心里没底。在这方面除了分析模型可以处理,领域模型也可以帮助到。
领域模型对系统的架构和框架的建立可以起到指导作用。例如我们可以针对事务处理、日志处理、消息机制、编程模型建立领域模型,然后就可以吧业务对象和事务、日志这些属于架构和框架范围的东西结合起来。
有时候业务对象到设计类是有一定差距的,这就需要有一定的范式或指导来帮助进行这种转化。分析类是有效的过渡类型,但是由于分析类是由用例推导出来的,同样是不能描述非功能性需求,也不能表达跨用例的问题。但如果对这个问题建立领域模型,就可以得到业务对象是由哪些领域类组成,在项目的早期能知道业务对象的关系,对于设计类来说是很有帮助的,起码知道在设计类时哪些东西是必要的。
简单需求无需建立。
对核心业务建立。
针对难点建立。
关注非功能性需求。
提出领域问题
- 就是对需要建模的核心业务或者其他提出问题,这些问题可能来自于企业的各个部门或者其他
分析领域问题
- 对每一个问题通过和它有关的业务用例场景图来分析,得到业务对象模型。
- 得到问题领域变量
建立领域模型
- 上述的问题领域变量就是领域模型的基本构成了。但是还不一定是最终的结果,在后续的开发过程中,随着业务的深入,可以增加、减少、合并这些变量。
验证领域模型
- 和业务用例模型一样,领域模型也分静态模型和动态模型。为了验证得到的领域模型是否是满足业务要求,可以把这些领域对象代入到各个业务用例模型中,看是否符合要求。
全局规则是适用于系统大部分业务或系统设计的,是跨用例的规则。全局规则是与用例无关的,是和系统具备的特性相关的。实际上,通常如授权、备份、事务等特性都是由系统框架去实现的,并不会分散到具体的功能中单独去实现它们。AOP模式就是试图将全局规则从业务逻辑当中剥离出来的一种编程模型。
交互规则是产生于用例场景中,通常这部分规则是最复杂,也最不稳定。大家所说的需求经常变更相信绝大部分就来自于此。如果需求无可避免地变更,那么将交互规则单独提取出来,通盘考虑并设计成为扩展性较强的结构就是一种有效的应对手段。在应付交互规则时,我们可以采用很多设计模式来保证扩展性。应用设计模式最重要的一点就是弄明白设计模式的意图和应用条件,交互规则恰恰提供了这些信息,我们就可以针对交互规则来决定是否应当采用某个设计模式。
内禀规则是指那些业务对象本身自有的。比如电话号码的位数、身份证的位数。通常写在业务对象描述文档中。如:
- 获取安全性需求时,应该充分考虑业务内容和应用环境。
- 事务性就是保障系统的ACID能力。
- 稳定性由故障的频率、严重性、可恢复性、可预见性、准确性和平均故障间隔时间(MTBF)等一些指标构成。
- 容易学习。
- 使用效率:客户需要多长时间、执行多少操作才能完成一个关键任务?
- 记忆性:当客户离开再次回来工作时,他的工作是否能记忆下来以便继续工作?
- 错误恢复:当系统出现故障时,客户是否能够从故障中恢复他已经完成的工作?
- 主观满意度。
- 人员因素:软件是否遵循了以用户为中心的设计方式。例如,界面布局是否符合客户的操作习惯;操作是否沿用了客户认同的术语;操作方式是否与客户的工作习惯相符等。
- 美观。
- 用户界面的一致性:软件是否能带给用户一致的操作体验。不一致的比如要跳到下一个界面,有的地方要点击菜单,有的地方要点击按钮,有的地方要点击超链接。
- 联机帮助和环境相关帮助。
- 向导和代理
- 用户手册和培训资料
- 性能包括速度、并发性、吞吐量、响应时间、资源占用率等一些指标。
- 可伸缩性是指当向系统中增加资源时的性能改善,例如cpu、内存或计算机等。可伸缩性同时又分为垂直伸缩和水平伸缩两种情况。垂直伸缩性指为系统换置更高级、快速的设备时性能的改善程度。水平伸缩性是指当为现有的应用程序添加额外的、负载均衡的服务器时性能的改善程度。
- 可扩展性包含资源可扩展性、应用可扩展性和技术升级可扩展性。资源可扩展性指软件系统对增加改变。应用可扩展性是指,当硬件资源扩大时,应用是否能相应获得性能提升的能力。技术升级可扩展性是指,随着某项技术的升级,系统性能是否能够随之提升的能力。
- 采用自顶向下的方法,之前的业务用例模型、领域模型、概念模型在这里就派上了用场;业务用例模型提供了业务的细节,领域模型说明了要关注的问题,概念模型抓住了核心业务,有这些基础,一般来说,对这个项目有了一定的把握。
- 最好从概念模型入手,因为概念模型把握着整个核心业务,只要掌握了核心业务,就有自信说把握了整个项目。从核心业务流程找到粗粒度的构件,然后再细分这些构件,每个粗粒度的构件分出来的多个小构件应该可以用一个逻辑构件关联起来,形成一个整体。这些构件就是积木。
- 当这些构件做好后,不能认为这些构件做的就一定对,因为即使在这个企业可以用,在别的企业就有可能用不了了。所以一般要做很多个项目,不断调整,不断去积累才会在最后沉淀出一些可以拼图的构件。
- 在构建业务架构的时候,我们会发现这和功能分解有什么区别呢?再往上说,这和面向过程的结构化设计方法有什么区别呢?首先,面向过程是什么呢,在前面已经讲过,结构化设计方法得到是将过程分解成子系统或功能模块,比如一个项目按部门分、按业务分,都只是业务员处理过程中的一个小的过程。但是这样分的话有什么根据吗?仅仅是它是这个过程的一个小过程这样的理由就可以了吗?看来是不够充分的。而面向对象的方法中,业务架构建立的方法有着严密的推导过程,它从业务用例模型、领域模型、概念模型中推导。每个业务构件的产生都来自于各类模型和场景。虽然每个构件看起来是一个功能点,但是应该被看作是功能点的集合,是一个大的功能点。比如管理申请单构件,这个构件里面就包括申请单的生命周期管理,从产生到使用,围绕申请单这个实体类,提供一系列的服务和接口,就好像是一个巨大的类一般。这点在结构化设计中是做不到的。并且,结构化设计让我们感觉到“分解”的意思,而业务架构的方法则是“抽取”的感觉。
- 如果实施的项目是一个分布式系统,那么各节点上的部署的应用程序通常应当建立组件模型。
- 如果实施的项目需要向第三方提供支持服务。
- 如果实施的项目需要将某部分业务功能单独抽取出来形成一个可复用的单元,在许多系统或子系统中使用时
- 如果实施的项目需要与其他现存系统或第三方系统集成,集成的接口部分应当建立组件模型。
- 如果实施的项目采用了构件化的软件架构,例如soa,则应当建立组件模型。
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland