在整本书中,Lahman都为理论问题进行了例证,解释为什么事情应该这样完成,但对读者没有很高的数学要求。他关注于创建实现无关的模型,该模型可以完全地、精确地、无二义性地解决功能性需求。无论你是开发人员、团队的领导、架构师或者设计师,书中介绍的技术都将帮助你构建更加健壮、易于维护、支持大规模重用的软件。
当今世界,软件变得越来越复杂,软件的用户对软件性能、可靠性、功能性以及交付市场的速度等方面的期望也在呈指数增长。本书通过将经过证实有用的面向对象技术与一种强大的新方法学相结合,为我们展示了应对这些挑战的方法。
《基于模型的软件开发》详细介绍了基于模型的软件开发的核心原则,展示如何分离每一个项目的关注点,使得参与者能够为每个域特有的需要和特征进行优化,通过实例展示如何实施更有效的面向对象的分析、强调抽象、严格的分区、不变量建模、有限状态机和程序单元之间的高效通信。通过阅读本书,你将学到:
回顾面向对象方法诞生的历史背景及面向对象开发的基础。
讲解用于反映设计中用户和计算机环境之间重要区别的问题域和计算域。
为什么应用分区很重要以及如何很好地进行应用分区。
构建描述基本应用结构的静态模型。
为类、类的职责、关联、引用完整性和知识完整性建模。
创建动态模型,用于通过有限状态机描述行为。
成功地使用抽象动作语言(Abstract Action Language,AAL)和动作数据流图(Action Data Flow Diagram,ADFD)。
《基于模型的软件开发》共分三部分,共有18章。第一部分(第1~6章)重点介绍面向对象方法诞生的历史背景,阐述面向对象的方法旨在解决的问题。第二部分(第7~13章)讨论面向对象开发的基本原则如何应用于MDB方法学中,如何定义稳定的应用结构或框架。第三部分(第14~18章)讲述如何利用动态模型描述动态计算需要。
??
H.S. Lahman,1957年在插件板上写了他的第一个软件程序。在接下来的十年,他作为勘探地球物理学家在很多重要的沼泽、沙漠和苔原的丛林中使用尖端技术,这些磨练了他的意志。然后,他回到学校学习经济学、运筹学和计算学。在接下来的30年中,他为MIS系统、科学和R-T/ E环境开发软件。1982年,他成为一名面向对象开发的倡导者。20世纪90年代,他成为一名软件质量和开发过程改进的倡导者。
廖彬山,先后就读于南京大学数学系和北京航空航天大学计算机科学与技术系。现在是美国CMU/SEI认证CMMI主任评估师(CMU/SEI-certified SCAMPI Lead Appraiser),北京国信普道科技有限公司CMMI首席顾问,北京航空航天大学软件学院客座教授。目前主要从事CMMI的培训、咨询和评估工作及软件工程理论与方法的研究工作。迄今为止,已经成功地为几十家不同类型、不同规模、不同应用领域的企业进行了基于CMM和CMMI的咨询与评估工作,积累了丰富的实践经验,有效地解决了企业实际存在的问题。已经成功地为国内近百家企业提供了软件估算、软件度量与量化管理、功能点、统计过程控制、高成熟度组织的过程改进、个体软件过程(PSP)、团队软件过程(TSP)、需求工程、缺陷管理、软件测试、同行评审、持续风险管理、统一软件开发过程等专题培训,有效地提高了国内企业的项目管理和工程开发能力。
王慧,毕业于北京航空航天大学计算机学院,工学博士,研究方向为软件工程和过程工程。她曾从事大型软件过程建模与模拟系统的需求开发、软件设计与实现、系统测试等工作。目前是一名咨询师,成功地为多家不同类型、不同规模、不同应用领域的企事业单位进行了敏捷开发方法、软件项目管理、CMMI、TSP和PSP等咨询工作,有效地解决了企业实际存在的问题。
马苏宏,毕业于北京航空航天大学计算机学院,工学硕士,研究方向为过程工程的建模、模拟与正向工程。曾就职于IBM公司,担任软件工程师,有丰富的软件设计与开发经验。目前是一名业余的翻译爱好者。
译者序
前言
引言
第一部分 面向对象开发的根本
第1章 历史的视角 2
1.1 历史 2
1.2 结构化开发 3
1.3 宝贵教训 8
1.3.1 全局数据 9
1.3.2 巨程序单元 9
1.3.3 软件结构 10
1.3.4 缺乏内聚性 10
1.3.5 耦合 10
1.4 技术革新 12
1.4.1 图灵机 13
1.4.2 语言和方法学 13
1.4.3 集合和图 16
1.4.4 范式 16
1.4.5 数据流 18
1.4.6 状态机 20
第2章 对象技术 22
2.1 基本理念 22
2.1.1 可维护性 22
2.1.2 问题域抽象 23
2.1.3 OOA、OOD和OOP 24
2.1.4 主题 25
2.1.5 关注点分离 26
2.1.6 抽象层次 26
2.1.7 问题域抽象 28
2.1.8 封装 29
2.1.9 内聚性 29
2.1.10 逻辑不可分性 30
2.1.11 通信模型 31
2.2 广度优先处理(又称对等协作) 32
2.2.1 细化与转化 33
2.2.2 消息范式 35
2.2.3 对象特征 36
第3章 泛化、继承、泛型和多态 39
3.1 泛化 39
3.2 继承 42
3.3 多态 42
3.4 泛型 45
第4章 MBD路线图 46
4.1 问题域和计算域 46
4.1.1 问题域 48
4.1.2 计算域 49
4.1.3 转换 50
4.2 可维护性 50
4.2.1 领域分析 50
4.2.2 不变量建模 51
4.2.3 应用分区 52
4.2.4 静态视图 52
4.2.5 动态视图 52
第5章 不变量建模 55
5.1 什么是不变量建模 55
5.1.1 不变量 56
5.1.2 数据 57
5.2 好处 58
5.3 例子 60
5.3.1 银行ATM软件 60
5.3.2 硬件接口 64
5.3.3 折旧 67
5.3.4 远程POS输入示例 72
第6章 应用分区 76
6.1 为什么我们要关注 76
6.2 应用分区的基本概念 77
6.2.1 主题 79
6.2.2 客户端/服务关系 82
6.2.3 抽象层次 84
6.2.4 接口 85
6.3 识别子系统 86
6.3.1 将相同的实体抽象为其他子系统时,当前子系统是否存在不同的视角 86
6.3.2 是否存在客户端/服务的关系 86
6.3.3 服务是否比客户端更加详细 87
6.3.4 是否与其他子系统知识共享 87
6.3.5 是否与其他子系统行为共享 87
6.3.6 主题是否内聚 87
6.3.7 边界定义是否清晰 88
6.3.8 能否重用 88
6.3.9 是否被分布式网络环境绑定 88
6.3.10 是否针对不同的问题域 88
6.4 桥 89
6.4.1 消息范式,又是消息范式 89
6.4.2 桥模型 91
6.5 描述子系统 92
6.5.1 子系统描述 93
6.5.2 关系描述 94
6.5.3 需求分配 94
6.6 一个例子:宠物保健中心 94
6.7 过程 106
第二部分 静?态?模?型
第7章 第二部分路线图 112
7.1 什么是静态模型 113
7.2 知识和行为 114
7.3 实用的注释 115
第8章 类 117
8.1 抽象表示 117
8.1.1 为真实的东西建模 118
8.1.2 局限于子系统或组件中 119
8.1.3 逻辑不可分性 119
8.1.4 委托 120
8.2 类表示法 121
8.3 识别类及其职责 122
8.3.1 对象“突击” 123
8.3.2 用例变异 124
8.4 例子 125
8.4.1 传奇的银行ATM控制器 125
8.4.2 宠物保健中心:处置 131
8.5 使用序列图和协作图 134
第9章 类的职责 137
9.1 属性:一个类对象应该知道什么 137
9.1.1 定义和表示法 137
9.1.2 与数据存储不同 138
9.1.3 状态 139
9.1.4 抽象数据类型 140
9.2 操作和方法:对象必须做什么 142
9.2.1 定义和表示法 142
9.2.2 识别行为 144
9.2.3 拟人化 148
9.3 过程 149
9.4 例子 150
9.4.1 ATM 150
9.4.2 宠物保健中心:处置 158
第10章 关联 165
10.1 定义与基础 165
10.2 表示法 170
10.3 逻辑连接的性质 172
10.3.1 导航到知识与导航到行为 173
10.3.2 关联角色 174
10.3.3 关联路径 175
10.4 条件性 178
10.5 多重性 182
10.5.1 使用“一个”模型替换问题域的“一个或更多个”模型 183
10.5.2 为问题域关联提供二次关联 184
10.5.3 选择和参与 185
10.6 约束 187
10.7 关联类 189
10.8 识别关联 192
10.9 例子 195
10.9.1 ATM控制器 195
10.9.2 宠物保健中心:处置 198
第11章 引用完整性和知识完整性 200
11.1 知识完整性 200
11.1.1 及时性 201
11.1.2 一致性 201
11.1.3 快照和实时访问 202
11.1.4 依赖属性 202
11.1.5 属性标准化 204
11.2 引用完整性 207
11.2.1 标识与引用属性 207
11.2.2 关联循环 209
11.2.3 关系和面向对象范式:完全不同 211
第12章 泛化归来 213
12.1 子类化 213
12.1.1 表示法和规则 215
12.1.2 泛化和特定化 216
12.1.3 分类 219
12.1.4 包含多态 223
12.1.5 为什么是{相交,完整}的子集 225
12.2 多方向子类、多重继承与组合 227
12.3 泛化的备选 235
12.3.1 委托 236
12.3.2 参数多态 238
12.3.3 基本抽象 238
第13章 识别知识 239
13.1 面向对象知识的性质是什么 239
13.2 抽象聚合 241
13.3 挑选适合的抽象 245
13.3.1 抽象人们做什么 246
13.3.2 潜在实体知道哪些 247
13.3.3 对象抽象应当知道哪些实体知识的子集 248
13.3.4 主题是什么 248
13.3.5 抽象层次是什么 251
13.4 抽象是否需要结合实体知识 252
第三部分 动?态?模?型
第14章 第三部分路线图 258
14.1 第三部分路线图 258
14.1.1 一切都关乎行为 259
14.1.2 对象生命周期 261
14.1.3 异步解决方案 262
14.1.4 同步服务 266
14.2 动作语言 269
14.3 Mealy机、Moore机和Harel机 270
14.4 学习曲线 272
第15章 有限状态机 273
15.1 基本的有限状态自动机 273
15.1.1 表示法 277
15.1.2 契约设计的作用 280
15.2 寻找状态机 283
15.2.1 知识和行为 283
15.2.2 管理序列 286
15.3 一些例子 295
15.3.1 车库门遥控器 295
15.3.2 自动家庭厨房 297
15.3.3 空中交通管制系统 297
15.3.4 岩石 298
第16章 状态、转换、事件和动作 300
16.1 状态 300
16.2 转换 305
16.3 事件 306
16.4 动作 309
16.5 执行模型 311
16.6 命名约定 313
第17章 开发状态模型 316
17.1 设计状态机 316
17.2 例子 325
17.2.1 ATM控制器:字符显示 326
17.2.2 ATM控制器:调度器 331
17.2.3 ATM控制器:存款 340
第18章 抽象动作语言 344
18.1 AAL和ADFD 345
18.2 AAL语法 346
18.3 例子 348
18.3.1 车库门遥控器 348
18.3.2 ATM:字符显示 351
术语表 354
作为一个在软件行业摸爬滚打多年的老兵,我见过太多的项目因为沟通不畅、需求模糊而最终走向失败。团队成员之间对需求的理解存在偏差,是导致这些问题的重要原因之一。这本书的书名“基于模型的软件开发”,让我眼前一亮。我猜测,它可能提供了一种解决上述问题的有效途径。通过构建清晰、标准的模型,可以作为团队成员之间沟通的“共同语言”,确保大家对软件的各个方面都有统一的认识。我特别期待书中能够深入探讨模型在需求获取和沟通环节中的作用。它是否能帮助我们更早地发现需求的遗漏和冲突?是否能让非技术人员也能够理解和参与到软件的设计过程中?我还对模型在代码生成和自动化测试方面的应用很感兴趣。如果模型能够直接驱动代码的生成,那么开发效率是否会得到极大的提升?如果模型本身就可以作为测试用例的来源,那么软件的质量是否会更有保障?这本书的名字给我一种“规范、严谨、高效”的感觉,我希望它能够真正地为软件开发的实践带来一些革命性的改变。
评分这本书的封面设计就足够吸引眼球了,深邃的蓝色背景,简洁而现代的字体,仿佛预示着这本书将带领读者进入一个严谨而充满智慧的领域。我一直对软件开发的理论性部分很感兴趣,虽然我是一名从业多年的程序员,每天都在与代码打交道,但总觉得在宏观层面,对软件构建的本质缺乏更深刻的理解。这本书的书名“基于模型的软件开发”,正是我一直以来寻找的方向。我期待它能提供一种系统性的方法论,让我能够跳出日常编码的细节,从更高层次去审视软件的设计、构建和演进。我希望这本书不仅仅是堆砌理论,而是能够提供清晰的逻辑框架,让我理解模型在软件开发生命周期中的作用,它如何指导我们进行需求分析、架构设计,甚至是后期的维护和演化。尤其是模型驱动开发(MDD)和模型驱动架构(MDA)等概念,我一直觉得它们是软件工程领域非常有潜力的方向,但相关的实践和落地案例往往比较零散。我希望这本书能在这方面提供一些详实的指导,让我能够理解如何将模型有效地转化为可执行的代码,以及在实际项目中如何评估和选择合适的模型驱动方法。同时,我也对书中的案例分析部分充满期待,理论的学习离不开实践的支撑,希望通过真实的案例,我能够更好地理解书中提出的概念和方法。
评分最近在技术社区里,听了不少关于“软件架构演进”的讨论,也看到很多文章在谈论“领域驱动设计”(DDD)和“微服务”的结合。虽然这些话题听起来很吸引人,但总感觉缺少一个贯穿始终的、更底层的原理来指导。这本书的出现,似乎正是填补了这一空白。“基于模型的软件开发”这个名字,让我联想到一种更加规范、更加可预测的开发方式。我猜想,这本书可能会探讨如何将业务需求、系统设计等抽象概念,用一种标准化的“模型”来表示,然后通过对这些模型的操作,自动生成代码,或者至少是辅助代码的生成。这听起来有点像“所见即所得”的开发模式,但又更加侧重于软件的内在逻辑和结构。我特别好奇,书中会如何处理模型与代码之间的映射关系,以及如何保证这种映射的正确性和效率。另外,在快速迭代的敏捷开发环境中,如何有效地运用基于模型的开发方法,避免模型本身的更新滞后于业务需求的变化,也是我非常关心的问题。我希望这本书能提供一些切实可行的策略,让我能够将模型的力量融入到敏捷的开发流程中,实现更高效、更健壮的软件构建。
评分最近几年,随着人工智能和大数据技术的飞速发展,软件开发的复杂度也在不断攀升。传统的开发模式,在面对如此庞杂的需求和技术挑战时,显得有些捉襟见肘。我一直在寻找一种能够提升开发效率、保证软件质量的“新范式”。“基于模型的软件开发”这个书名,恰好触动了我内心的期待。我猜测,这本书不仅仅是关于某个具体的模型工具或技术,而是关于一种全新的软件开发哲学。它可能强调的是“以模型为中心”的设计和开发流程,将模型视为软件的“灵魂”,而代码只是“躯壳”。我希望书中能够深入探讨模型在软件生命周期各个阶段的贯穿性作用,从最初的概念验证,到详细的设计,再到最后的部署和维护。我尤其对书中关于“模型复用”和“模型驱动的系统演化”的章节充满好奇。如何在不同的项目之间共享模型?当业务需求发生变化时,如何通过修改模型来驱动整个系统的升级和演化,而不是进行大规模的重写?这些都是我非常关心的问题。这本书的出现,让我看到了软件开发走向更加智能化、自动化和可预测化的可能。
评分说实话,我一直觉得软件开发领域,尤其是在一些大型、复杂的项目中,存在着很大的“经验主义”成分。很多时候,我们依靠的是开发者的直觉和过往的经验来做决策,这虽然在小项目里问题不大,但一旦项目规模上来,就会出现各种难以预料的难题,比如需求变更难以控制,系统集成困难重重,技术债务不断积累等等。这本书的书名“基于模型的软件开发”,给了我一种全新的视角。它似乎在提倡一种更加“工程化”的开发方式,用明确的模型来约束和指导开发过程,减少不确定性。我猜想,这本书会强调“模型”作为软件开发核心的地位,它不仅仅是图纸,而是整个开发流程的驱动力。我希望书中能够详细阐述如何构建不同层次的模型,从高层次的业务模型到低层次的实现模型,以及这些模型之间是如何相互关联、相互转化的。我还对书中关于“模型验证”和“模型转换”的内容非常感兴趣。如何确保模型能够准确地反映业务需求,如何将模型有效地转换为可执行的代码,以及在模型发生变化时如何自动更新代码,这些都是我亟待解决的问题。
评分我基本不评价,实在生气!拿到公司去报销,公司说是盗版的,扫码都扫不上,看来传说中的某东卖假货是真的啊!
评分好
评分好书,顶一个
评分好,东东不错,快递给力,好评!
评分我基本不评价,实在生气!拿到公司去报销,公司说是盗版的,扫码都扫不上,看来传说中的某东卖假货是真的啊!
评分我基本不评价,实在生气!拿到公司去报销,公司说是盗版的,扫码都扫不上,看来传说中的某东卖假货是真的啊!
评分看不懂。。
评分简直无语了 买了一本书打开一看 装订错版 目录和内容全部倒过来了 想找客服也找不到 都不检查就发售 出版商和京东也太不负责了
评分好书,顶一个
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有