前言 当前,软件已经融入社会生活的各个角落,成为一种社会服务。遗憾的是,软件服务的提供者感到服务的构建越来越复杂;软件服务的客户感到对软件系统的变更越来越困难,对服务供应商的变更也越来越困难。其本质原因在于软件的复杂性。 结构化方法和面向对象方法是控制软件系统复杂性的有效方法。面向数据流的功能分解、把对数据流的变换映射到模块是结构化分析和设计方法的要点;把现实世界问题空间的事物映射到计算机系统内求解空间的对象,通过对象间消息的交互完成业务功能则是面向对象软件开发方法的范型。 控制复杂性的另外一个方面是控制软件的可理解性。结构化方法使用数据流图、数据字典、程序流程图,使得人们不必学习计算机程序设计语言就能理解软件的结构和行为;统一建模语言(UML)综合了各种对象建模模型,成为工业界流行的建模语言,支持UML的建模工具也很多。用例模型、类模型和状态机等为早期软件开发阶段的分析提供了表达工具;交互图(顺序图、协作图、交互概览图和时序图)和活动图有力地表达了面向对象的设计决策和业务流程;包图、组件图和部署图则更多关注实现和部署。 大多数理工科的毕业生都至少学习过一门高级程序设计语言,程序设计语言中的控制结构、模块调用、人机交互等概念形成软件服务的利益相关者理解软件行为的本体。另外,建立模型的最终目标也是为了得到可运行的程序。所以本书把“从模型到代码的映射”作为范式,使得读者能够根据源代码的语义理解UML模型或者UML图的语义。 全书内容分为三部分: 面向对象范型、UML以及案例研究。面向对象范型部分介绍面向对象方法、技术以及面向对象软件工程过程。从控制依赖复杂性角度,介绍了架构设计、设计模式等;从可理解性角度出发,还介绍了编码规范和软件质量等内容。UML部分根据UML 2.5.1介绍了常用的UML模型和UML图。使用StarUML作为建模工具,该工具支持模型元素与图形元素分离。最后一部分内容是一个综合案例“面向对象的学生选课系统开发”。该案例以迭代开发方式,依次设计和构建了无界面无持久化设施的控制台应用版本、无界面并以文件作为持久化设施的应用版本、无界面以MySQL数据库管理系统作为持久化设施的应用版本、有桌面图形用户界面但无持久化设施的GUI版本以及基于Web的版本。通过该案例,不仅展示了如何应用面向对象的方法和技术构造系统,还展示了界面、业务逻辑和持久化等重要的架构设计概念。 三个附录依次是如何使用建模工具StarUML、UML标准版型和中英文术语对照表。 书中所用案例是2012年以来作者面向专业硕士讲授的学位基础课“面向对象软件工程”所使用的案例的精简版,该案例于2019年被评为省级专业学位教学案例(库)。其他内容是在讲义的基础上进一步修改和补充资料而成。在UML章节,每章都是先介绍模型元素,再介绍UML图的语法和语义,最后是一个小型案例研究。所有章节后面均有思考题。 限于学识,书中不当和疏漏之处敬请读者批评指正。 董东于河北师范大学2021年8月