走上高级的路径(一)----需带着UML走

参考自《大象UML》

说一个面向对象的名句:

面向对象编程的目标从来都不是复用。相反,对象提供了一种处理复杂性问题的方式。这个问题可以追溯到亚里士多德:您把这个世界视为过程还是对象?在面向对象兴起运动之前,编程以过程为中心,例如结构化设计方法。然而,系统已经到达了超越其处理能力的复杂性极点。有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统,这才是面向对象编程运动真正的胜利。(UML创始人之一  Grady Booch)

从本质上说,面向过程和面向对象都是一个已经存在的认识论问题。但是面向对象这种认识论能够帮助我们从现实世界构建更为复杂的系统来解决现实世界的问题。必须认清比掌握具体的技术更重要的是掌握认识论所采用的方法和分析过程。

 

 

对世界的认知方法,都是看到事物形成概念,用概念去描述事物,验证这个概念是否正确的说明了这个事物,比如看到一个盘子,从外形、颜色、用途、产地、纹路等等这些概念(或者称之为视角)来描述它,然后从外形、颜色、用途等等概念角度向世界解释,世界能否理解这些概念,从这些概念认识到这是一个盘子。所以将世界的事物作为对象,那么也需要通过下面的过程

一种把现实世界映射到对象世界的方法

一种从对象世界描述现实世界的方法

一种验证对象世界行为是否正确反映了现实世界的方法

实际上,这些过程就是对事物的建模过程

 

那么到底什么是建模?

从理论上说,建立模型是指通过对客观事物建立一种抽象的方法,用来表征事物并获得对事物本身的理解,再把这种理解概念化,并将这些逻辑概念组织起来,形成对所观察的对象的内部结构和工作原理的便于理解的表达。

模型要能够真实反映客观事物就需要一个论证过程,使得模型建立过程是严谨的、可追溯和可验证的。对于一种软件建模方法来说,为现实世界建立逻辑模型也是要严谨的、可追溯的、可验证的,除了描述清楚需求,还要能很容易地将这个模型转化为计算机可理解的模型。

那么如何建模?

其实怎么建就是我们上面说的认识事物的方法,或者称之为方法论。我们描述筷子、勺子、盘子的不同点时,可以从外观、用途、重量、材质、使用方法等多个方面来说明,其实这个多个方面叫做抽象的角度,当我们把抽象的角度确定好之后,那么描述这些事物就变得比较清晰,面向对象就是把事物通过不同的角度分解成小问题,问题就会变得简单化。因此面对问题领域时首先不能决定通盘考虑,而是找出问题领域里面的抽象角度,抽象角度找全了,问题就能得到有效解决;做需求时不要弄清楚业务是如何一步一步完成的,而是抽象概括业务、找到各个业务的参与者的目标,参与者的目标就是抽象角度,而抽象角度在UML里面实际上指的就是用例。因此如何建指的就是具备业务概括性的抽象角度,而抽象角度就是UML中的用例,而用例又是参与者的业务目标,在这里解释一下业务目标跟上面说的外观、用途、重量、材质、使用方法怎么理解,我们平时说这些,可以说成我们从多个维度来说明了这个事物,其实维度也是指的抽象角度,但我们平时找筷子、勺子、盘子时,我们实际上是将这些维度作为我们的目标在找,比如我们平时找东西,就说在野外烧烤,找个能放肉的盘子,那么我们找的时候是不是以这些维度来找的,最终我们看到地上有个石板,符合我们的从维度转化出来的目标,那么它就是盘子。

 

那么什么是模?

模其实指的就是找出完成用例目标的场景。而场景包含人、事、物、规则,这些在UML中都有对应的符号描述和视图描述。完成用例目标的场景越多,我们从场景中提取出的对象就越丰富、对象的行为也越准确。模就是场景里面的人、事、物、规则。

综上:

问题 = 抽象角度1+抽象角度2+.......+抽象角度n

抽象角度 = 问题领域边界之外的参与者的业务目标=业务用例

业务用例 = 场景1+场景2+......+场景n

场景 = 静态的事物 + 特定的条件 +特定的动作 或者 特定的事物 + 特定的规则 +特定的人的行为

 

抽象角度(视角)和抽象层次(抽象粒度)、和抽象边界 

当我们描述一个人的时候,我们可以从头发、五官、身高、衣着等等维度来说明这个人,注意我们这个时候是从人体外部

在描述这个人,当我们描述一个人的心、肝、脾、肺、肾时,这是从人体的内部在描述。注意,我们从外部、内部描述时

实际上是遵从一个边界在描述,这个边界指的就是抽象边界,而我们从外部说的头发、身高这些视角都是在这个边界上处于同一个抽象层级,当你从心脏的心血管、瓣膜、心房等抽象层级上描述时,又换到了另外一个边界。所以外部、内部是抽象边界,心、肝、脾等等是抽象角度,而多个边界又构成了多层抽象层次。

上面描述的这些可以用国家-->省-->市--->县-->乡镇--->村--->户,这个逻辑层级来理解一下。

 

抽象有两种方法,一种是自顶而下,另一种是自底向上,这两种方法要同时使用,自顶而下逐层细化、自底向上反向修正,以自顶而下为主、自底向上为辅。抽象是面向对象的精髓所在,同时也是面向对象的最困难所在,那么如何抽象?建模、建模的过程、抽象边界、抽象层次、抽象角度这些就是在说明如何抽象。

 

 

那么什么是对象?对象的怎么识别,对象的特征都是什么?

1、一切都是对象

一切有名字的东西都是对象,那怕是某某业务流程

2、对象都是独立的

获取和分析对象的手段是场景分析。但对象是独立的,对象不是因为这个场景存在它才存在,对象是始终存在的,在某个场景中对象展现了部分的特征,在另外一个场景中对象又展现了另外一部分特征,在各个场景中的对象称之为对象的实例。因此对象来源于场景分析,场景分析越多,对象的特征约丰富,获取的对象也就越精准。那么获取的对象越精准,也越能得出对象的公共部分,也就是可抽象部分,这就是对象抽象的源泉。

3、对象都是原子性的

无论怎样,在同一抽象层次上,在分析的过程中,都应当将对象视为一个不可分割原子,哪怕对象是大厦、小虫子。因为原子性是抽象层次有意义的重要保证,因为在同一个抽象层次上各个对象不具备同样的粒度,将会使分析变得混乱。比如列举主要的国家有中国、美国、英国、俄罗斯、日本,我们从国家层面上分析事物,如果在日本的后面增加一个北京市,那么你会发展北京市这个对象跟其他表示国家的对象格格不入。

而且对象都有一个边界,不要打破边界去窥探对象的内部,我们应当将分析过程中得到的所有对于对象的认识都是基于对象的边界,在实现这个对象之前不要理会内部的细节,这称之为面向接口编程

4、对象都是可抽象的

对象有着很多个不同的方面,对象参与一个场景时会展示出某一个方面,总可以将对象的某一个方面抽象出来,让其作为对象的一个代表来参与场景交互。

对象所参与的场景越多,对象越具有抽象价值,反之则越没有抽象价值,因此在分析过程中,应当关注那些参与了很多场景的对象。

5、对象都有层次性

对象都是有抽象层次的,层次越高,其描述越粗略但适应能力越广;层次越低则描述越精确但适应能力越下降。

在分析过程中,应当根据问题领域的复杂程度设定多个抽象层次,在每个抽象层次上使用适合的抽象程度的对象描述,将有助于显著减少分析的难度和工作量。

 

使用UML对对象建模的过程

现实世界-->业务建模-->概念建模-->设计建模-->设计实现

1、现实世界--->业务模型

现实世界的业务由人、事、物、规则构成,人是中心,现实世界向业务模型转化,首先要找业务的驱动者----人,这个人在UML中称之为参与者,第二,参与者的诉求和愿望是我们建模的目标,而建模的过程中我们就是要捕获这些目标,以及完成这些目标需要的场景,这些目标在UML中称之为用例,这些场景在UML中称之为业务场景和用例场景,场景解释了人、事、物、规则是如何发生联系的。

这个过程是一种把现实世界映射到对象世界的方法。

2、业务模型--->概念模型

建立的业务模型计算机是无法识别的,概念模型处于业务模型后面设计模型前面,这个模型是让计算机识别业务的重要过渡阶段。

UML通过称之为概念化的过程来建立适合计算机理解和实现的模型,这个模型称之为分析模型,是介于原始需求和计算机实现之间的一种过渡模型,分析模型向上映射原始需求,向下为计算机实现指定了约束和指导。

分析模型中主要的元部件有边界类、实体类、控制类。

边界类,边界里面包含了边界范围内的事。用户与系统的交互、系统与系统的交互、模块与模块的交互,这些都是两个不同的职责簇之间的交互,两个职责簇之间就存在边界,在各自的边界内行驶各自的职责,其实也就是各自做什么事,因此,边界决定了外面能让里面做什么事。

实体类,原始需求中的领域模型中的业务实体映射了现实世界中的参与者完成业务目标时所涉及的事物。

控制类,边界、实体都是静止的,UML采用控制类来表示原始需求中的动态信息,即业务或用例场景中的步骤和活动。面向对象强调边界类与实体类、边界类与边界类、实体类与实体类之间是不能直接相互访问,他们都需要控制类来代理访问。

 

总结一下,边界类决定了能做什么事,实体类则是从领域模型中转化过来,代表现实中的物,控制类则是现实中的规则。

在概念建模阶段,对分析类从计算机角度来进行分析整理,则会产生包、组件、节点等元素,软件架构和框架也是在这个阶段产生的。

这个过程是一种从对象世界描述现实世界的方法

3、概念模型--->设计模型

概念模型获得了软件设计的蓝图,蓝图包含了软件所需要的组成内容和软件所需要的所有必要细节。这个阶段,概念模型中的边界类可以被转化为操作界面或者系统接口;控制类转化为工作流、算法等控制程序;实体类可以转为数据库表、XML文档或者其他带有持久化特征的类。这些转化需遵循软件架构和框架的要求、具体编程语言的要求、软件的规范等等。

设计模型是概念模型根据具体软件架构框架、编程语言、规范下的实例化,这些实例化执行了概念模型中描述的世界的行为。

这个过程是一种验证对象世界行为是否正确反映了现实世界的方法

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值