写在前面:最近在做技术设计,自己画的时序图,发现好多不对的地方,以及对业务的抽象能力也需要加强。感觉自己很有必要加强下这方面的训练,首先就从UML开始吧。
今天查了一些关于UML的文章,发现总是零零散散的,不太系统,所以就找了一本书《UML精粹:标准对象建模语言简明指南:第3版》,作者是个外国人 Fowler, M。本书是一本思想大于教条的好书,作者的目标就是:寻求UML最有用的部分,而且就告诉你这部分。闲言少叙,正式开始。
什么是UML?
UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言。
UML 作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现。
说白了 就是统一建模语言。
UML 的目标:
UML 的目标就是 UML 被定义为一个简单的建模机制,帮助我们按照实际情况或者按照我们需要的样式对系统进行可视化,提供一种详细说明系统的结构或行为的方法,给出一个指导系统构造的模板,对我们所做出的决策进行文档化。
面向对象的分析与设计
面向对象的分析与设计的目的可以描述为:
-
确定一个系统中的对象.
-
确定它们之间的关系.
-
做一个设计,使用面向对象的语言可以转换为可执行文件.
步骤可以被定义为:
Analysis --> Design --> implementation using languages
以上三点可以详细描述:
-
在面向对象的分析,最重要的目的是确定对象和描述他们以适当的方式。如果这些对象的有效识别,那么接下来的设计工作是很容易的。对象应确定职责。职责是对象所执行的功能。每一个对象具有某种类型的要执行的责任。当这些责任协作系统的目的达成。
-
第二阶段是面向对象的设计。在这个阶段的重点是要求及其履行情况。在这一阶段中的对象根据其预期的关联协作。协作完成设计也完成了。
-
第三阶段是面向对象的执行。在这个阶段,设计采用面向对象语言,如 php,go 等。
UML 在面向对象设计中的作用:
UML是一种建模语言,重点是面向对象的软件应用建模。因此面向对象的设计和UML之间的关系是非常重要的。在正确的进行了面向对象分析与设计完成后,下一步是很容易的,从面相对象的设计输入到UML图中。
UML基本元素:
先大概了解下UML的一些基本元素
- 三个基本模块:事务,关系,图。
- 四种事务
- 结构事务:类,接口,协作,用例,活动类,组件,节点。
- 行为事务:交互,状态机。
- 分组事务:包
- 注释事务:注释。
- 四种关系
- 依赖
- 关联
- 实现
- 泛化
- 十种图
- 用例图
- 类图
- 对象图
- 包图
- 部署图
- 活动图
- 状态图
- 时序图
- 协作图
- 组件图
之前一直以为 UML就是类图,今天才发现其实UML包含了很多,我们常画的时序图,也是UML的一种,作者书中主要讲解的是 类图 跟 时序图,因为这俩种可以满足我们日常工作的很多需求,但是感觉状态图我们也是总用,接下来,主要学习画类图,时序图(序列图),以及状态图。
最后附上作者的一段话。
从远古时代起,最有才华的架构师和最有天赋的设计人员就都知道吝啬定律。吝啬定律不管表述得像悖论(少就是多),还是佛家心法(禅心即初心),它的智慧是永恒的:把每一件事情减少到实质,这样就可以使其功能更好地发挥出来。从金字塔到悉尼歌剧院,从冯·诺依曼架构到UNIX和Smalltalk,最好的架构师和设计人员都努力遵从宇宙的这条永恒原则。
不太懂吝啬定律,百度后附上解释。
吝啬定律也即是奥卡姆剃刀原理,又称“奥康的剃刀”。一个理论或者猜想(所有理论一开始都是猜想)所需要的前提每多一条,这个理论或猜想的适用性或者说其适用域就减少一分,稍微变动任何一点条件都会让其不成立。三个点构成一个面无需证明,4个点,5个点,6个点,也有可能构成一个面,但是每多一点,不共面的概率就飞速上升。一个定理的前提支撑太多,这些前提同时成立的可能性就越小,小到0就无法成立,为1则成为特例不成理论。而且有些前提又依赖于更多前提,这就让这个理论的适用域趋于空集。
剃刀原理基本就是这个意思。
同样我们做系统设计,依赖的越少,系统越稳定。如无必要,勿增实体。