分析和设计存在很多的不同之处,设计的目的是为了更高实现一个技术方案,而分析的目的是为了理解问题的本质。这不仅仅是用用例列出需求清单那么简单的事情。
假设我们想开发一个斯诺克台球模拟游戏,击打白球后,白球按照一定的轨迹运动,并且撞击红球。用例可以列出成千上万,但是这不足以让我们开发出一个更好的软件——你必须了解运动背后蕴含的规律。这个问题不难解决,因为这些规律已经众所周知。
但是在很多的应用领域,相关的规律并不让人易于理解。为此,我们创建了概念模型——一种运行我们了解并简化问题的智力模型。其实可以理解为运动定律,运动定律在进行表述的时候,就是忽略了很多的其他因素——风力影响,摩擦力影响等。这个过程其实就是从复杂的世界中获取简单的模型,然后在用简单的模型去指导复杂的世界。
模型可能有多个,就像上面的例子,可以使用牛顿模型或者爱因斯坦模型。你可能感觉爱因斯坦模型更加精确,但是复杂度也更高。因为球速运动很慢,所以基本可以忽略质量的变化。这说明一个问题:不存在正确或者错误的模型,只存在对当前任务更适用的模型。
建模原则:模型无对错之分,只有好用和不好用之分。
模型的选择最终会影响到系统的灵活性和可重用性。你可能会认为,使用爱因斯坦模型可能具有更大的灵活性,能够处理原子碰撞的问题。但是,一个斯诺克模拟游戏用到原子碰撞的可能性微乎其微。过多的考虑灵活性将是软件系统过分复杂。要建造满足某个目标的软件系统,就必须开发满足实际需要的模型。你需要的是所能获得的最简单的模型。
简单的模型不一定就是马上想到的模型。一个简单的模型的诞生过程包含了从简单到复杂,再从复杂到简单这样一个反复的过程。刚开始我们看到的往往是需求的表明现象,随着分析的深入,会发现系统的各个方面,包括隐含的功能和性能需求,限制约束等,这个是模型越来越复杂。等在深入进去,将系统的各个方面按照一定的原则排列,会最终找到一个简单的模型。
概念模型的表示。可以使用编程语言来表示,优点是可以快速验证,并且能够减少从模型到思想的工作量。缺点是在建模的过程中可能会陷入语言的使用问题中而忽略实际的问题,也可能会使用语言特有的特性,增加从模型转化为其他语言的难度。
避免这些问题的方法是使用分析和设计技术。它能够帮助人们将注意力放在概念性问题上而不是软件设计问题上。
使用分析与设计技术的一个好处是让领域专家参与概念建模。什么是领域专家?lhs和hxy,lxr应该有一定的这个角色。有效的模型只能由那些了解该领域的员工来创建,而不是有软件开发人员来创建。(?我对一个问题一直有疑问:什么是概念模型?它和架构有什么区别?概念模型应该是问题的本质,就像运动定律。架构是在理解本质后的一种现实解决方案。)
专家知识是建立一个好的分析模型的关键。
作者努力是分析技术独立于软件技术,比较理想的情况是概念建模技术独立于软件技术,就像运动定律一样。但是实际的情况可能不是这样。我们目前的建模一般会依赖于面向对象技术。
概念模型应该更加贴近于软件的接口,而不是软件的实现。
建模原则:概念模型是与接口(类型)而不是实现(类)相关联的。
这一节学习完了,分析模式,概念模型对我来说是一个全新的领域,所,一节的学习写了这么多的笔记来辅助学习。总结一下:
1、 分析的目的是为了获得问题的本质,最终的结构是概念模型。
2、 设计的目的是解决问题,结果是架构设计或方案设计。