前 言
本书采用说教和深入研究相结合的方式介绍开发信息系统的过程中面向对象元素分析和设计的要素。
与介绍本领域的其他书籍不同的是,其他书籍大多是对UML模型图的罗列陈述以及对其各种用法的介绍,本书则关注于分析师和设计师的日常工作,并解释在开发过程中各种模型图的异同,以更好地开发和优化系统。
尽管距面向对象方法的提出已经有四十多年,但还是有许多机构觉得用它来开发高质量的软件存在一定困难,特别是在他们所开发的系统缺乏可维护性和灵活性时。本书所介绍的信息和技术主要是为了弥补这些不足。
作者已将书中所介绍的技术成功应用在了许多软件开发公司以及一些高校的科研项目当中。
本书主要面向计算机专业人员(分析师、设计师以及程序员等)、计算机科学专业的学生,包括具有一定面向对象开发或建模经验的本科生和研究生。初学者和具有一定经验的读者会发现本书的内容会对提高他们的项目质量有很大的帮助。而本书的目的就是要帮助他们更好地完成 设计。
与按照事件活动的顺序进行分析和设计的瀑布模型(Royce,1970)不同的是,类似UP这样的迭代模型提出这些活动(也称为事件)在任何阶段内均十分重要。
本书将更多地着重于分析师和设计师日常会涉及的活动,包括业务建模、需求工程、分析和设计等,也涉及项目管理、实施、测试等内容。对于其他内容的详细信息,可以参考2010年Pressman出版的软件工程类图书,或2003年Kruchten出版的有关统一过程的图书。
UP初始阶段的目标是建立系统的常规视图及其上下文,并计划下一步的开发。该阶段的两个主要建模工具分别是概念建模(conceptual modeling)(第6章和第7章内容)和高级用例(high-level use case)(第3章内容)。第2章业务建模(business modeling)的重点程度是根据需要开发项目的进展情况决定的。
在初始阶段的后期,高级用例可用于作为该项目其余部分(第4章内容)的基础规划。通常情况下,该规划涉及用例的评级,根据它们的复杂性及其优先级分为小型、中型或者大型等。当每个用例的复杂性已知时,就可以估算开发这些用例所需的平均时间(Karner,1993),因此可能会计划将迭代操作作为一组活动,这些活动在可利用的时间内是切实可行的。
统一过程的细化阶段完成一系列的迭代操作。每一个迭代都会被分配给一组要开发的用例 。开发独立的用例通常会从扩展到它的流开始(第5章内容)。当然,用例可能会被表示为系统时序图(system sequence diagram),以帮助发现必须被执行的系统查询和命令。
在细化阶段,随着架构体系的演变,概念模型(conceptual model)会不断地进行修改和完善(第6章和第7章内容)。
系统查询和系统命令可能由某种编程语言实现,但开发人员也许会为系统查询和系统命令指定一些契约(contracts)(第8章内容),这对于定义测试用例可能会有所帮助(第11章内容)。这些契约相当于系统的功能模型,定义了每一个查询和命令所涉及的输入内容和输出结果。
经过上述阶段,现在可能已经开始实施系统,或者已有相关工具自动生成代码。不过,此时还是追求更为简洁的代码,以利于为每个系统操作新生成一些图集,如时序图或通信图等(第9章内容)。这些图指明不同的对象如何交换信息,以便明确职责并获得预期的契约中所指定的后验条件。通过这个过程,设计模式更容易应用到代码中。这些图同时也指明每个类中需要实施的方法(除了getter函数和setter函数以外),以及如何实施等。
在细化阶段,要完成接口(界面)的设计(第12章内容)。本书介绍了IFML算法 作为系统建模的一个可选工具。IFML是一个全新的面向信息流的建模语言标准,2013年3月起被OMG标准化组织采用。
虽然构建阶段更强调数据库结构的生成(第13章内容)和代码的运行(第10章内容),但细化阶段也同样会涉及这些内容。如果有合适的工具,也可以自动生成持久性数据。但即使其是自动化的,也应该了解该持续机制如何运行。同样,代码生成也可以表示为一些自动化的规则。
互联网上提供了很多练习供读者参考,方便读者更深入地理解各项内容。