编辑推荐
面向对象技术以其显著的优势已经成为计算机软件领域的主流技术。《大学计算机优秀教材系列:面向对象分析与设计(第2版)》是一本适合应用型人才培养的关于面向对象分析与设计的教材。
进行面向对象分析与设计需要一套概念与表示法。《大学计算机优秀教材系列:面向对象分析与设计(第2版)》所采用的概念和表示法与UML2.4保持一致,但并不是全盘采用。本书提倡充分运用面向对象方法的基本概念,限制扩充概念的引入,通过加强过程指导而保持建模概念的简练。
进行面向对象分析与设计需要一套过程指导。本书所采用的开发过程,是在借鉴了较为流行的多种面向对象开发方法的基础上,根据青鸟工程的成果和作者参与的科研及工程实践的经验总结出来的,该过程指导具有实用性和广泛的适应性。
与第1版相比,新版有如下改进:
·对面向对象概念的定义更为准确,对概念的解释也更加丰富和深入,对建模指导方面的内容进行了充实。
·内容上更加与时俱进,本书第1版中的建模语言采用的是UML2.0,本版写作时OMG发布了UML2.4,其中模型图的种类、图元素的表示法以及一些解释都发生了变化,本版的建模语言遵循了UML2.4。
·作者和热心的读者在第1版的使用中发现了一些问题,本次再版对这些问题进行了修正。
·本版给出了更多的应用实例,帮助读者加强对分析与设计建模策略和技巧的理解。
内容简介
《大学计算机优秀教材系列:面向对象分析与设计(第2版)》是一本关于面向对象分析与设计的教材,讲述了面向对象的基本思想、主要概念以及相应的表示法,并给出了详细的建模过程指导。《大学计算机优秀教材系列:面向对象分析与设计(第2版)》注重理论与实践相结合,通过给出大量的例题、内容较为详尽的案例分析以及对建模概念的详细剖析,阐明了如何进行面向对象的分析与设计。
《大学计算机优秀教材系列:面向对象分析与设计(第2版)》适合作为高等院校计算机学院(或信息学院等)和软件学院的软件工程专业、计算机专业和相关专业的高年级本科生、工程硕士的教材,也可作为培训班师生以及从事软件开发的工程技术人员的参考书。
作者简介
麻志毅,博士,任教于北京大学信息科学技术学院计算机系,目前还担任国家软件行业协会软件工程分会秘书长。长期从事软件工程方面的教学与科研工作。在国内外学报或会议上发表学术论文100余篇,主持或参加国家高技术研究发展计划(863)、国家重大基础研究(973)、国家科技支撑计划和国家自然科学基金等20余项国家科研项目,出版著(译)作11部。主要研究领域为软件工程支撑环境、面向对象技术和面向服务计算技术等。曾获国家科技进步二等奖和国家科技攻关优秀成果奖等国家部委奖励多项。
内页插图
目录
前言
教学建议
第一部分 概述
第1章 面向对象方法概论
1.1 传统软件开发方法中存在的问题
1.2 面向对象的基本思想
1.3 面向对象的基本原则
1.4 面向对象方法的主要优点
1.5 面向对象方法的发展史及现状简介
1.6 关于统一建模语言UML
习题
第二部分 面向对象分析
第2章 什么是面向对象分析
2.1 分析面临的主要问题
2.2 面向对象分析综述
习题
第3章 建立需求模型——用况图
3.1 系统边界
3.2 参与者
3.2.1 概念与表示法
3.2.2 识别参与者
3.3 用况
3.3.1 概念与表示法
3.3.2 用况与参与者之间的关系
3.3.3 用况之间的关系
3.3.4 捕获用况
3.3.5 用况模板
3.4 用况图
3.5 检查与调整
3.6 用况模型与OOA模型
3.7 例题
习题
第4章 建立基本模型——类图
4.1 对象与类
4.1.1 概念与表示法
4.1.2 识别对象与类
4.1.3 审查与筛选
4.1.4 抽象出类并进行调整
4.1.5 认识对象的主动行为并识别主动对象
4.1.6 类的命名
4.1.7 建立类图的对象层
4.2 属性与操作
4.2.1 属性
4.2.2 操作
4.3 关系
4.3.1 继承
4.3.2 关联
4.3.3 聚合
4.3.4 依赖
4.4 接口
习题
第5章 建立辅助模型
5.1 顺序图
5.1.1 概念与表示法
5.1.2 顺序图中的结构化控制
5.1.3 建立顺序图
5.2 通信图
5.2.1 概念与表示法
5.2.2 建立通信图
5.3 活动图
5.3.1 概念与表示法
5.3.2 建立活动图
5.4 状态机图
5.4.1 概念与表示法
5.4.2 建立状态机图
5.5 包图
5.5.1 概念与表示法
5.5.2 如何划分与组织包
习题
第三部分 面向对象设计
第6章 什么是面向对象设计
6.1 OOA与OOD的关系
6.2 面向对象设计模型和过程
习题
第7章 问题域部分 的设计
7.1 复用类
7.2 增加一般类以建立共同协议
7.3 提高性能
7.4 按编程语言调整继承
7.5 转化复杂关联并决定关联的实现方式
7.6 调整与完善属性
7.7 构造及优化算法
7.8 决定对象间的可访问性
7.9 定义对象实例
7.10 其他
习题
第8章 人机交互部分 的设计
8.1 什么是人机交互部分
8.2 如何分析人机交互部分
8.3 如何设计人机交互部分
8.3.1 设计输入与输出
8.3.2 命令的组织
8.3.3 用OO概念表达所有的界面成分
8.3.4 衔接界面模型和问题域模型
8.4 人机交互部分 的设计准则
习题
第9章 控制驱动部分 的设计
9.1 什么是控制驱动部分
9.2 控制流
9.3 如何设计控制驱动部分
9.3.1 识别控制流
9.3.2 审查
9.3.3 定义控制流
9.3.4 进程间和线程间的通信
9.3.5 控制流间的同步
习题
第10章 数据管理部分 的设计
10.1 什么是数据管理部分
10.2 数据库和数据库管理系统
10.2.1 关系数据库
10.2.2 面向对象数据库
10.3 如何设计数据管理部分
10.3.1 针对关系数据库系统的数据存取设计
10.3.2 针对面向对象数据库系统的数据存取设计
10.3.3 针对文件系统的数据存取设计
习题
第11章 构件及部署部分 的设计
11.1 构件设计
11.1.1 概念与表示法
11.1.2 构件的内部结构
11.1.3 对构件的行为建模
11.1.4 对构件的实现建模
11.2 部署设计
11.2.1 概念与表示法
11.2.2 对系统的部署建模
习题
第12章 若干典型的设计模式
12.1 引言
12.2 外观模式
……
第四部分 系统与模型
第五部分 建模实例
附录A 面向对象的软件建模工具
附录B 文档编制指南
参考文献
精彩书摘
以往在操作系统和编程语言的支持下,或再加上图形包,进行图形方式的人机界面开发,工作量是很大的。现在,可以使用窗口系统、图形用户界面(GUI)和可视化编程环境这样的级别越来越高的界面支持系统进行人机界面开发。特别是可视化编程环境可以按所见即所得的方式,定制所需的人机界面,如此定义的界面对象可由编程环境提供的工具自动地转化为程序代码,这使得人机界面的设计工作大大简化。然而,仍有一些设计工作要做,其中的很多内容对各种设计方法都是相同的,也有一些是采用OO方法所必须要考虑的。例如,可视化编程环境一般都带有内容丰富的界面类库,界面类库中对大部分常用的界面对象都给出了类的源代码,在进行OOD时要充分地复用这些类。
8.3.1 设计输入与输出
根据前面从用况中提取出来的对人机交互的描述,设计输入与输出。首先要选择界面支持系统,如窗口系统、GUI或可视化编程环境,然后进行输入与输出设计。输入与输出技术正在不断地发展,这里仅就目前常见的输入与输出方式进行阐述。
1.设计输入
在设计输入时,要进行如下的工作。
(1)确定输入设备
常见的输入设备有键盘、鼠标、磁卡阅读器、条码阅读器、光电字符识别阅读器、扫描仪、触摸屏、电子笔和书写板等。键盘和鼠标属于标准的计算机设备,不考虑在内。对于一些非标准的计算机外部设备的接口程序,可以把它们放在相应的类中。如果要从外系统进行输入,可以把外系统的接口程序放在相应的类中。如果要隔离外部设备或外系统的变化对本系统的影响,可以针对外部设备或外系统的接口程序单设立类。对于某些复杂的情况,可能还需要考虑同步机制。
(2)设计输入界面
在用户的输入界面中,主要的界面元素有窗口、菜单、对话盒、图符、滚动条和按钮等。下面以菜单和对话盒为例,说明如何设计其内容。
菜单是提供给用户的一系列对应着用户动作的条目列表。大部分系统都具有通常形式的菜单,如文件、视图、工具、窗口和帮助等,但也都具有自己的特有部分。在设计特有部分时,要保证术语的一致性与简洁性,并按逻辑对条目进行分组。菜单要设计成面向不同用户的,最好可以进行重组。
……
前言/序言
在20世纪90年代,面向对象技术以其显著的优势成为计算机软件领域的主流技术,随后该技术在大多数发达国家的软件开发中得到了相当广泛的运用。在我国的软件产业界,面向对象技术的学习与应用热潮出现于20世纪90年代后期,如今面向对象分析与设计技术也已经得到了广泛的应用。
当前,产业界需要大量掌握面向对象分析与设计技术的高级应用型开发人才。很多计算机学院和软件学院在软件工程教学中开设了相应的课程,旨在使学生不仅会使用一种或者几种面向对象编程语言来编程,更重要的是能运用面向对象方法进行系统建模,即通过面向对象分析(Object- Oriented Analysis,OOA)和面向对象设计(Object-Oriented De-sign,OOD)建立系统的分析模型和设计模型。
邵维忠教授和杨芙清院土合著的两本著作在广泛借鉴国际上各种OOA与OOD方法的同时,根据作者长期的研究与实践形成了自己的方法特色。其中最主要的特色有三条;一是提倡充分运用面向对象方法的基本概念,限制扩充概念的引入,通过加强过程指导而保持建模概念的简练;二是对UML(Unified Modeling Language,统一建模语言)所采用的与面向对象有关的概念进行了深入的解析,给出了自己的见解;三是其OOD部分比以往的著作内容更为详细,并且更强调用OO概念表达各种全局性的设计决策。这两部学术专著作为教材适合于理论性强的研究生教学。
探寻软件构建的精妙艺术:一本深入理解面向对象思维的指南 本书并非一本罗列技术细节或语法规则的工具手册,而是一次关于软件生命中至关重要的“如何思考”的深度探索。它旨在引导读者超越单纯的代码编写,抵达软件设计与构建的艺术殿堂,领略面向对象方法论的强大力量与优雅之处。如果你渴望写出结构清晰、易于维护、可扩展性强的优秀软件,如果你希望在软件开发的道路上走得更远、更稳,那么,请允许我们为你揭开这扇通往优秀设计的大门。 在这个日新月异的技术时代,软件已渗透到我们生活的方方面面。从掌上的便捷应用到支撑庞大企业运作的系统,软件的质量直接影响着用户体验、企业效率乃至社会发展。然而,优秀的软件并非凭空而来,它源于精心的设计,而面向对象分析与设计(OOAD)正是孕育优秀软件的基石。本书将带领你踏上一段引人入胜的学习旅程,让你深刻理解面向对象的核心理念,并掌握将其应用于实际软件开发中的方法与技巧。 摆脱零散的碎片化认知,构建全面的面向对象视野 许多开发者在初涉软件编程时,往往被各种编程语言的语法细节和特定的技术框架所吸引,容易陷入“只见树木,不见森林”的困境。本书的核心价值在于,它提供了一个宏观的视角,帮助你从更高层次理解软件的构建逻辑。我们将深入剖析“对象”的本质,它不仅仅是数据的集合,更是行为的载体,是现实世界模型在软件中的映射。通过理解封装、继承、多态这三大面向对象的核心特性,你将学会如何将复杂的问题分解为更易于管理、相互协作的独立单元。 封装: 我们将探讨如何通过封装来隐藏对象的内部实现细节,仅对外暴露必要的接口。这不仅能保护数据的完整性,更能提高代码的可维护性和可复用性,让你在修改对象内部实现时,不必担心影响到其他部分的代码。 继承: 学习如何利用继承机制,让新的类能够重用现有类的属性和行为,并在此基础上进行扩展。这将显著减少重复代码的编写,提高开发效率,并促进代码的结构化。 多态: 掌握多态的强大威力,理解同一个接口如何可以根据不同的对象类型,表现出不同的行为。这将极大地增强代码的灵活性和可扩展性,让你能够轻松地应对需求的变化。 从抽象到具体:循序渐进的分析与设计流程 本书并非停留在理论层面,而是将大量的篇幅用于讲解如何将面向对象的思想应用于实际的软件分析与设计过程中。我们将为你梳理一套清晰、系统的工作流程,帮助你从模糊的需求出发,一步步提炼出高质量的设计方案。 第一阶段:需求分析——理解“什么”是关键 在任何软件项目开始之前,准确理解用户需求是至关重要的。本书将指导你如何有效地进行需求分析,包括: 用户故事与用例: 学习如何通过用户故事和用例来捕捉用户期望的功能和行为。我们将讲解如何编写清晰、完整的用例描述,以及如何识别出潜在的边界情况和异常流程。 领域建模: 探索如何识别出问题域中的关键概念(实体、属性、关系),并将其转化为面向对象的模型。我们将重点讲解如何识别“类”和“对象”,以及它们之间的协作关系。 识别关键实体与行为: 学习从自然语言的需求描述中,敏锐地捕捉出名词(潜在的类)和动词(潜在的方法),并建立初步的对象模型。 第二阶段:设计——构思“如何”实现 有了清晰的需求理解,接下来的任务就是将这些需求转化为具体的软件设计。本书将带你走进设计的核心领域: 类图与序列图: 深入理解UML(统一建模语言)在面向对象设计中的应用。我们将重点讲解类图如何描述类之间的静态关系(继承、关联、聚合、组合),以及序列图如何展示对象之间动态交互的过程。通过这些可视化工具,你可以清晰地描绘出软件的结构和行为。 设计原则与模式: 这是本书的精华所在。我们将系统地介绍一系列被实践证明行之有效的面向对象设计原则,如SOLID原则(单一职责、开闭、里氏替换、接口隔离、依赖倒置)等。这些原则如同软件开发的“道”,能帮助你构建出更健壮、更灵活、更易于维护的设计。 单一职责原则 (SRP): 确保每个类只有一个引起其变化的原因。 开闭原则 (OCP): 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。 里氏替换原则 (LSP): 子类型必须能够替换掉它们的基类型。 接口隔离原则 (ISP): 客户端不应该被强制依赖它们不使用的方法。 依赖倒置原则 (DIP): 高层模块不应该依赖低层模块,两者都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。 常见设计模式的解析与应用: 我们将精选并深入解析一系列经典的设计模式,如工厂模式、单例模式、观察者模式、策略模式、装饰者模式等。这些模式并非僵化的代码模板,而是解决特定设计问题的“套路”和“智慧”。本书将详细阐述每种模式的适用场景、解决的问题、结构以及优缺点,并结合实例讲解如何将其巧妙地融入到你的设计中,从而提升代码的可读性、可维护性和可扩展性。 第三阶段:实现与演进——将设计转化为现实 有了扎实的设计基础,本书还将为你指明如何将设计转化为可执行的代码,并在此过程中持续演进: 从模型到代码的转化: 讲解如何将UML图和设计原则转化为实际的编程语言代码。 重构的艺术: 软件开发并非一蹴而就,随着需求的不断变化和理解的深入,代码往往需要进行重构。本书将介绍何时以及如何进行有效的重构,以不断优化代码结构,提升软件质量,而不会破坏现有功能。 测试驱动开发(TDD)与面向对象: 探讨测试驱动开发与面向对象设计之间的协同作用,如何通过编写测试用例来指导设计,从而确保代码的正确性和鲁棒性。 不仅仅是技术,更是思维方式的转变 本书的价值远远超过了单纯的技术传授。它旨在引导你形成一种全新的、更具前瞻性的思维方式。通过深入理解面向对象的本质,你将学会如何: 以更清晰的逻辑思考: 将复杂系统分解为可管理、可复用的组件。 拥抱变化,而非畏惧变化: 构建易于修改和扩展的软件,以应对不断变化的需求。 团队协作的效率提升: 遵循统一的设计原则和模式,使团队成员能够更高效地沟通和协作。 编写更具“美感”的代码: 追求代码的简洁、优雅和高效,而不仅仅是功能的实现。 本书适合谁? 计算机科学与技术专业的学生: 无论是在校本科生还是研究生,本书都将为你提供坚实的理论基础和实践指导,助你在学习过程中建立起对软件设计的高度认知。 初入软件开发的程序员: 如果你已经掌握了一门编程语言,但感觉在软件设计方面缺乏系统性的指导,本书将是你迈向专业开发者的重要一步。 有一定开发经验但希望提升设计能力的开发者: 即使你已经开发了一段时间,但如果在代码的可维护性、可扩展性方面遇到了瓶颈,本书将为你提供宝贵的洞见和实践方法。 软件项目经理、架构师: 理解面向对象分析与设计是构建高质量软件、领导高效开发团队的关键。 告别“写完就扔”的模式,拥抱“长久生命力”的软件。 本书不追求罗列市面上所有的设计模式或技术细节,而是聚焦于那些最核心、最通用、最能带来长远价值的理念与实践。我们相信,掌握了这些精髓,你将能够举一反三,自信地应对各种软件设计挑战。 拿起这本书,你将获得的不只是知识,更是一种能力——一种将模糊的想法转化为清晰、健壮、优雅的软件的能力。这是一种关于工程的智慧,一种关于创新的艺术。让我们一起,用面向对象的方式,构建更美好的数字世界。