
2.1 软件建模简介
建模是研究系统的重要手段和前提。建模用于定义应用程序的要求,确定可能被其他企业级应用程序重复使用的数据和服务,并为将来扩展奠定了强有力的基础。本节将简要介绍软件建模的相关内容。
2.1.1 什么是模型
模型(model)是用某种媒介对相同媒介或其他媒介里的一些事物的表现形式。从一个建模角度出发,模型就是要抓住事物的最重要方面而简化或忽略其他方面。简而言之,模型就是对现实的简化。建立模型的过程,称为建模。
模型提供了系统的蓝图。它既可以包括详细的计划,也可以包括系统的总体计划。每个系统都可以从不同方面用不同模型来描述刻画,每个模型都是在一个特定语义上闭合的系统抽象。模型可以是结构性的或行为性的,这对应着静态与动态的两种建模机制。
软件系统的模型用建模语言来表达,包括语义信息和表示法,可以使用图形和文字等多种不同形式。本书中讨论的UML就是以图形作为表现形式的一种建模语言。
2.1.2 建模的重要性
建模可以帮助理解正在开发的系统,这是需要建模的一个基本理由。人对复杂问题的理解能力是有限的。建模可以帮助开发者缩小问题的范围,每次着重研究一个方面,进而对整个系统产生更加深刻的理解。可以明确地说,越大、越复杂的系统,建模的重要性也越大。建模对一个系统主要有以下几点作用。
• 捕获和精确表达项目的需求和应用领域的知识,以使全部涉众能够理解并达成一致。通过建模,可以捕获关于这个软件的应用领域、使用方法、模块拆分和构造模式等方面的需求信息。这里的涉众包括软件架构师、系统分析员、程序员、项目经理、顾客、投资者、最终用户和使用软件的操作员。
• 完成系统设计。在编写代码前,软件模型可以帮助软件开发人员方便地研究多种架构和设计方案。一个好的建模语言可以让设计者对软件系统的架构有全面的认识。
• 分离需求与具体实现细节。在软件开发过程中,客户往往更关注软件系统是否实现了相关业务需求,而对具体的设计和实现细节并不关心。软件系统的其中一类模型可以向客户展示说明系统的外部行为,即需求的实现效果;另一类模型则可以展示系统中的类及实现系统外部行为所需的内部操作,即具体的设计细节。
• 帮助生成有用的工作产品。通过软件建模可以获得类的声明、过程体、用户交互界面、数据库、系统有效的使用场景、配置脚本以及系统异常列表。这些工作产品可以减小软件开发人员在开发过程中的困难,提高系统开发效率。
• 方便研究多种解决方案。针对一个大型软件系统,可以提出多个设计方案进行建模并且进行相互比较。即使是一个粗糙的模型也能反映出最终设计所需解决的诸多问题。通过建模,可以在设计阶段清晰有效地选择出更好的解决方案,有效地降低了开发成本。
• 全面把握复杂的系统。大型系统因其复杂性可能无法直接进行研究,而模型可以在不损失细节的情况下,将系统抽象到更便于理解的层次上。人们可以对模型进行分析来找出系统可能存在的问题点。这样,在对系统实物进行改动前,就可以通过模型得出这种改动会带来何种影响。此外,模型也能够展示出应该如何调整系统来减少相关负面影响。
2.1.3 建模的基本原理
各个工程学科都有其丰富的建模运用历史,这些经验形成了建模的四条基本原理。
• 选择创建什么模型对如何解决问题和如何形成相应解决方案意义深远。换句话说,就是要认真选择模型。正确的模型能说明问题所在,而错误的模型将容易使人误入歧途。不同的建模方法将导致不同类型的系统,并且代价和收益也是不同的。
• 可以在不同的层次级别上表示不同模型。在软件开发过程中,有时需要一个快速简洁的用户界面模型,有时则需要进入底层对一个处理二进制数据的过程建模。最好的模型应该要根据使用者的身份及使用原因提供不同详细程度的模型。
• 最好的模型总是与现实世界联系密切。如果一个模型不能与现实中的事物在同样条件下以相同方式做出反应,那么这个模型是不准确的,甚至有时是极其危险的。所有模型都是对现实世界的简化;关键是简化不能掩盖任何重要的细节。
• 单个模型或视图是不充分的。优秀的系统需要用一组几乎独立的模型从多个角度去诠释。就像在建造一所建筑物时,没有任何一张设计图能描述该建筑的所有细节。这里所说的“几乎独立”指的是各种模型能够被单独进行研究和构造,而模型之间仍然是互相联系的。