回头又看了看 第一章 为什么要建模 ,发现还是有些值得整理的地方。温故而知新,每次阅读都会有不一样的体会。
本章内容:建模的重要性;建模的四项原理;软件系统的基本蓝图;面向对象建模。
1 引言
建模是开发优秀软件的所有活动中的核心部分,其目的是为了把想要得到的系统结构和行为沟通起来,为了对系统的体系结构进行可视化和控制,为了更好地理解正在构造的系统,并经常揭示简化和复用的机会,同时也是为了管理风险。
几个 为了 简单揭示了为什么要进行建模。
2 建模的重要性
2.1 模型是什么?
简单地说:模型是对现实的简化。
模型提供了系统的蓝图。模型既可以包括详细的计划,也可以包括从很高的层次考虑系统的总体计划。一个好的模型包括那些有广泛影响的主要元素,而忽略那些与给定的抽象水平不相关的次要元素。每个系统都可以从不同的方面用不同的模型来描述,因而每个模型都是一个在语义上。
抽象与观察者的视角有关。从系统需求分析到完成部署,期间有很多利益相关者。所以不能只用一种抽象层次的模型来描述系统。
2.2 为什么要建模
一个基本理由是:建模是为了能够更好地理解正在开发的系统。
通过建模,要达到以下4个目的。
- 模型有助于按照实际情况或按照所需要的样式对系统进行可视化。
- 模型能够规约系统的结构和行为。
- 模型给出了知道构造系统的模板。
- 模型对做出的决策进行文档化。
我觉得这些措辞比较学术化。还是下述比较接地气。
建模并不只是针对较大的系统。甚至像狗窝那样的软件也能从一些建模中收益。然而,可以准确地讲,系统越大、越复杂,建模的重要性就越大,一个简单的原因是:
因为不能完整地理解一个复杂的系统,所以要对它建模。
人对复杂问题的理解能力是有限的。通过建模,缩小所研究问题的范围,一次只着重研究它的一个方面,这就是Edsger Dijkstra几年前所讲的“分而治之”的基本方法,即把一个困难问题划分成一些列能够解决的小问题;解决了这些小问题也就解决了这个难题。此外,通过建模可以增强人的智力。一个适当选择的模型可以使建模人员在较高的抽象层次上工作。
系统是复杂的,而人处理复杂问题的能力是有限的。我们人类必须借助于工具,借助于方法论来解决问题。说起来也简单,最基本地,分解、抽象、分离关注等。与分而治之的思想是相通的。
3 建模原理
第一,选择要创建什么模型,对如何手动解决问题和如何形成解决方案有着意义深远的影响。
对于软件而言,所选择的模型将在很大程度上影响度对领域的看法。如果以 数据开发者 的视点构建一个系统,可能会注意实体-联系模型,该模型把行为放入触发器和存储过程中。如果以结构化开发者的试点构造一个系统,可能得到以算法为中心的模型,其中包含从处理到处理的数据流。如果以面向对象开发者的观点构造一个系统,将可能得到这样的一个系统:它的体系结构以一组类和交互模式(指出这些类如何一起工作)为中心。
建模方法有很多种,不同的方法有不同的抽象视角。也有着各自的一套方法论,建模方法也不同。
第二,可以在不同的精度界别上表示一种模型。
前面提到,解决复杂问题的方法,最基本的:分解,抽象,分离关注。
最好的模型是与现实相联系的。
这是系统隐喻的另一种说法吧。好的设计会有好的系统隐喻。
第四,单个模型或视图是不充分的。对每个重要的系统最好用一组几乎独立的模型从多个视角去逼近。
还是那句话,系统是复杂的,软件开发的过程中,有着不同角色的参与者。所以需要用不同的抽象去描述系统。
4 面向对象建模
传统的软件开发方法是从算法的角度进行建模。按照这种方法,所有的软件都用过程或者函数作为主要构造块。这种观点导致开发人员把精力集中于控制流程和对大的算法进行分解。这种观点除了常常产生脆弱的系统之外没有其他本质上的害处。当需求发生变化(总会变化的)以及系统增长(总会增长)时,用这种方法建造的系统就会变得很难维护。
现代的软件开发采用面向对象的观点进行建模。按照这种方法,所有软件系统都用对象或者类作为其主要的构造块。简单地讲,对象通常是从问题空间或解空间的的词汇中抽取出来的东西;类是对具有共同性质的一组对象(从建模者的视角)的描述。每一个对象都有标识(能够对它命名,以区别于其他对象)、状态(通常有一些数据与它相联系)和行为(能对该对象做某些事,它也能为其他对象做某些事)。