• 正版现货新书 大规模C++软件开发 卷1:过程与架构 9787115609779 (美)约翰·拉科斯(John Lakos)著
21年品牌 40万+商家 超1.5亿件商品

正版现货新书 大规模C++软件开发 卷1:过程与架构 9787115609779 (美)约翰·拉科斯(John Lakos)著

全新正版现货,以书名为准,放心购买,购书咨询18931383650朱老师

94.67 6.3折 149.8 全新

库存11件

北京丰台
认证卖家担保交易快速发货售后保障

作者(美)约翰·拉科斯(John Lakos)著

出版社人民邮电出版社

ISBN9787115609779

出版时间2023-08

装帧平装

开本16开

定价149.8元

货号14009151

上书时间2024-10-08

黎明书店

十五年老店
已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介
约翰·拉科斯(John Lakos),《大规模C++程序设计》(Large-Scale C++ Software Design)一书的作者,任职于彭博有限合伙企业,担任高级架构师,同时是全球C++软件开发顾问。2001年他成立了彭博的BDE工作组,按照他的基于组件的方法论、过程和架构来开发细粒度的、可复用的C++软件。他是ACCU、C++Now、CppCon和Meeting C++等业内技术大会的常客,经常发表技术演讲。他自2006年开始任C++标准委员会的投票成员,新一代C++的成型有他的一份功劳,包括C++11的值语义、C++17的PMR分配器和C++20的模块。他于1996年出版的《大规模C++程序设计》一书是用C++做大型系统设计的开山之作,至今还是这个领域的常用参考书。

目录
第0章动机1

 0.1目标:进度更快、产品更好、预算更低1

 0.2应用软件与库软件3

 0.3协作式软件与可复用软件8

 0.4层次化可复用软件12

 0.5易延展软件与稳定软件16

 0.6物理设计的关键作用24

 0.7物理形式统一的软件:组件25

 0.8对层次化复用的量化:一个类比32

 0.9软件资本51

 0.10增大投入57

 0.11保持警觉62

 0.12小结65

 第1章编译器、连接器和组件70

 1.1知识就是力量:细节决定成败70

 1.1.1“HelloWorld!”70

 1.1.2创建C++程序71

 1.1.3头文件的作用72

 1.2C++程序的编译和连接73

 1.2.1构建流程:编译器和连接器的使用73

 1.2.2目标文件(.o)的经典原子性77

 1.2.3.o文件中的节和弱符号79

 1.2.4静态库79

 1.2.5“单例”注册表的例子81

 1.2.6库间依赖84

 1.2.7连接顺序和构建时行为87

 1.2.8连接顺序和运行时行为87

 1.2.9共享(动态连接)库88

 1.3声明、定义和连结88

 1.3.1声明与定义88

 1.3.2(逻辑的)连结与(物理的)连接92

 1.3.3需要了解连接工具92

 1.3.4物理“连结”的另一种定义:绑结92

 1.3.5连接器运作的更多细节93

 1.3.6对一些需要全程序范围内地址专享的实体的介绍94

 1.3.7客户编译器需要看到定义的源代码的构件96

 1.3.8声明并不一定要带上定义才能起作用97

 1.3.9客户编译器通常需要看到类定义97

 1.3.10客户编译器必须看到定义的源代码的其他实体98

 1.3.11枚举具有外连结,但又会怎样98

 1.3.12内联函数略有特殊99

 1.3.13函数模板和类模板99

 1.3.14函数模板和显式特化100

 1.3.15类模板及其偏特化104

 1.3.16extern模板106

 1.3.17用工具来理解单一定义规则和绑结108

 1.3.18命名空间108

 1.3.19对const实体默认连结的阐释109

 1.3.20本节小结109

 1.4头文件111

 1.5包含指令和包含保护符118

 1.5.1包含指令118

 1.5.2内置的包含保护符119

 1.5.3外置的包含保护符(已废弃)121

 1.6从.h/.cpp文件对到组件123

 1.6.1组件特性1123

 1.6.2组件特性2125

 1.6.3组件特性3126

 1.7符号和术语128

 1.7.1概要128

 1.7.2Is-A逻辑关系130

 1.7.3Uses-In-The-Interface逻辑关系130

 1.7.4Uses-In-The-Implementation逻辑关系131

 1.7.5Uses-In-Name-Only逻辑关系和协议类133

 1.7.6In-Structure-Only(ISO)协作式逻辑关系135

 1.7.7受约束模板和接口继承的相似之处136

 1.7.8受约束模板和接口继承的不同之处137

 1.7.93种“继承型”关系各有所长138

 1.7.10给模板的类型约束编写注释139

 1.7.11本节小结140

 1.8Depends-On关系141

 1.9隐含依赖144

 1.10层级编号149

 1.11抽取实际的依赖151

 组件特性4152

 1.12小结153

 第2章打包和设计规则159

 2.1观全貌159

 2.2物理聚合161

 2.2.1物理聚合的一般定义161

 2.2.2物理聚合谱的小端162

 2.2.3物理聚合谱的大端162

 2.2.4聚合的概念原子性163

 2.2.5聚合依赖的广义定义163

 2.2.6架构显著性164

 2.2.7一般发布单元的架构显著性164

 2.2.8发布单元中具有架构显著性的部分164

 2.2.9发布单元的什么部分不是架构显著的164

 2.2.10组件“自然地”具有架构显著性164

 2.2.11组件必须是一对.h/.cpp文件吗165

 2.2.12何时不宜写成一对.h/.cpp文件165

 2.2.13对.cpp文件的划分仅是组织上的改变165

 2.2.14实体清单和可容许依赖165

 2.2.15对可容许依赖的包络的表达需求167

 2.2.16物理层次需平衡得当167

 2.2.17不仅要层次化,而且要讲究平衡168

 2.2.18物理聚合超过3级即算过多169

 2.2.19即使是大型系统,3级也已足够170

 2.2.20发布单元总有2级或3级的物理聚合171

 2.2.21平衡得当的3级聚合就已足够171

 2.2.22发布单元应该是最为架构显著的171

 2.2.23架构显著的名称必须专享171

 2.2.24不要出现循环物理依赖172

 2.2.25本节小结173

 2.3逻辑连贯和物理连贯173

 2.4逻辑名称衔接和物理名称衔接175

 2.4.1过去对命名空间污染的应对措施175

 2.4.2名称务必专享,衔接的命名有益于人175

 2.4.3既不衔接又不有助记忆的命名荒谬至极176

 2.4.4需要相互衔接的名称177

 2.4.5过去/现在对包的定义177

 2.4.6使用点就应足够敲定位置177

 2.4.7专有软件须有企业级命名空间182

 2.4.8逻辑构件署名应锚定于其组件182

 2.4.9在包级命名空间的作用域中只有类、结构体和自由运算符183

 2.4.10包的前缀命名不仅仅是编程风格189

 2.4.11包前缀即其所在包组名192

 2.4.12using指令和声明往往是坏主意193

 2.4.13本节小结196

 2.5组件源代码的组织196

 2.6组件设计规则202

 2.7组件私有类和附属组件219

 2.7.1组件私有类220

 2.7.2有几种实现方案可待选择220

 2.7.3下划线的约定用法220

 2.7.4使用组件私有类的经典案例224

 2.7.5附属组件227

 2.7.6本节小结229

 2.8包229

 2.8.1用包来分解子系统229

 2.8.2包间循环是不好的234

 2.8.3布置、作用域和规模是首要考量235

 2.8.4包前缀的专享性对沟通大有裨益236

 2.8.5本节小结238

 2.9包组238

 2.9.1物理聚合的第三层级238

 2.9.2在部署时对包组的组织245

 2.9.3在实践中如何使用包组245

 2.9.4去中心化的(自治的)包的创建248

 2.9.5本节小结249

 2.10包和包组的命名249

 2.10.1平铺直叙的包名不一定好249

 2.10.2包组的名称250

 2.10.3包的名称250

 2.10.4本节小结252

 2.11子包252

 2.12遗留软件、开源软件和第三方软件254

 2.13应用255

 2.14层次化可测试性的需求258

 2.14.1将本书的方法论运用于细粒度的单元测试中258

 2.14.2本节安排(还有卷2及特别是卷3的引子)258

 2.14.3测试要能层次化地推进258

 2.14.4测试时的局部组件依赖的相对导入263

 2.14.5可容许的跨包的测试驱动程序依赖266

 2.14.6尽量减少测试驱动程序对外部环境的依赖268

 2.14.7坚持统一(独立)的测试驱动程序调用接口269

 2.14.8本节小结270

 2.15从开发到部署271

 2.15.1不应在软件的灵活部署方面让步271

 2.15.2.h和.o文件名的专享性非常关键271

 2.15.3在开发过程中软件组织会有所变化271

 2.15.4在全公司范围内让名称保持专享有助于重构272

 2.15.5在构建过程中软件组织都可能有所变化272

 2.15.6即使在正常情况下部署中仍需要灵活性272

 2.15.7让定制化部署成为可能是灵活性之价值的重要体现273

 2.15.8头文件中风格化呈现的灵活性273

 2.15.9库的部署方式不应架构显著273

 2.15.10出于工程原因对已部署的软件进行划分274

 2.15.11出于业务原因对已部署的软件进行划分275

 2.15.12本节小结276

 2.16元数据276

 2.16.1元数据即“法令”277

 2.16.2元数据的类型277

 2.16.3元数据的呈现281

 2.16.4本节小结282

 2.17小结283

 第3章物理设计和分解290

 3.1从物理的角度思考290

 3.1.1纯经典的(逻辑的)软件设计是幼稚的291

 3.1.2组件充当细粒度的模块291

 3.1.3软件的设计空间是有方向性的291

 3.1.4软件有其绝对位置292

 3.1.5并置与否的准则应该看本质,不应流于表面293

 3.1.6不规整的非初等功能搜寻十分麻烦293

 3.1.7包的作用域是一项重要的设计考量293

 3.1.8禁止循环物理依赖带来的一些295

 3.1.9对友元的约束有意排除了某些逻辑设计297

 3.1.10一个有正当理由要求包装的案例297

 3.1.11本节小结302

 3.2避免糟糕的物理模块化303

 3.2.1有很多糟糕的模块化准则,语法是其中之一303

 3.2.2将用途广泛的软件分解并加入库中非常重要303

 3.2.3迫于压力未能维持应用/库的模块化303

 3.2.4可复用组件的持续降级至关重要304

 3.2.5对应用开发者而言,物理依赖不是实现细节305

 3.2.6迭代器有助于减少初等功能的开发量309

 3.2.7既要最小也要初等:实用结构体309

 3.2.8总结性示例:封装型多边形类接口309

 3.2.9语义与语法作为模块化准则322

 3.2.10本节小结323

 3.3逻辑相近的事物在物理上应分组在一起324

 3.3.1类并置的4个明确准则324

 3.3.2组件之上的并置327

 3.3.3何时让辅助类供其组件私用327

 3.3.4模板特化的并置329

 3.3.5附属组件的使用329

 3.3.6将紧密的相互协作并置于单个发布单元中330

 3.3.7计算天数的示例330

 3.3.8最后的示例:单线程引用计数型函子336

 3.3.9本节小结344

 3.4避免循环的连接时依赖345

 3.5层级划分技术351

 3.5.1经典层级划分技术351

 3.5.2升级352

 3.5.3降级357

 3.5.4不透明指针359

 3.5.5哑数据365

 3.5.6冗余367

 3.5.7回调371

 3.5.8管理器类389

 3.5.9分解391

 3.5.10升级封装392

 3.5.11本节小结407

 3.6避免过度的连接时依赖408

 3.6.1起初分解妥当的日期类会随时间退化408

 3.6.2将工作日功能添加到日期类中(坏主意)414

 3.6.3提供一个物理上整块式的平台适配器(坏主意)415

 3.6.4本节小结418

 3.7横展架构与分层架构418

 3.7.1另一个与建筑业的类比419

 3.7.2(经典的)分层架构419

 3.7.3对纯组合式设计加以改进421

 3.7.4最小化累积组件依赖度421

 3.7.5基于继承的横展架构424

 3.7.6横展架构与分层架构的测试427

 3.7.7本节小结427

 3.8避免不当的连接时依赖428

 3.8.1不当的物理依赖428

 3.8.2在单一技术上“押注”(坏主意)431

 3.8.3本节小结436

 3.9确保物理互操作性436

 3.9.1妨碍层次化的复用是坏主意436

 3.9.2领域特定的条件编译是坏主意437

 3.9.3在库组件中的应用特定的依赖是坏主意439

 3.9.4约束并排型复用是坏主意440

 3.9.5防止故意的滥用不是目的441

 3.9.6让组件侵占全局资源是坏主意441

 3.9.7隐藏头文件来实现逻辑封装是坏主意441

 3.9.8可复用库中存在对不可移植软件的依赖是坏主意443

 3.9.9将潜在可复用软件隐藏起来是坏主意446

 3.9.10本节小结447

 3.10避免不必要的编译时依赖447

 3.10.1封装不能杜绝编译时耦合447

 3.10.2共享枚举和编译时耦合449

 3.10.3C++中的编译时耦合比C语言中更为普遍451

 3.10.4避免不必要的编译时耦合451

 3.10.5避免编译时耦合的益处及真实示例454

 3.10.6本节小结458

 3.11架构隔离技术458

 3.11.1封装与隔离的形式化定义459

 3.11.2用组件的概念阐释封装与隔离459

 3.11.3整体隔离与部分隔离460

 3.11.4架构显著的整体隔离技术461

 3.11.5纯抽象接口(协议)类461

 3.11.6接近隔离型具体包装器组件467

 3.11.7过程接口471

 3.11.8隔离和动态加载库484

 3.11.9面向服务的架构484

 3.11.10本节小结485

 3.12用组件进行设计485

 3.12.1原先陈述的“需求”485

 3.12.2实际(外延)的需求486

 3.12.3用C++类型表示日期值487

 3.12.4确定今天的日期值494

 3.12.5确定给定日期值是否为工作日496

 3.12.6解析和格式化功能508

 3.12.7值的传输与持久化510

 3.12.8债券计息日数惯例510

 3.12.9日期数学510

 3.12.10日期和日历实用件513

 3.12.11充实分解透彻的实现515

 3.12.12本节小结527

 3.13小结529

 结论536

 参考文献538

内容摘要
本书通过具体示例演示大规模C++开发的基本设计设想,为各种规模的项目奠定基础,并演示成功进行大规模实际开发所需的过程、方法、技术和工具。通过阅读本书,读者可以逐步改变自己的设计和开发方法。本书旨在使用软件从业人员熟悉的C++构件来解决现实问题,同时确定(并激发)现代C++替代方案。作者利用超过30年的构建大规模、关键任务的企业系统的实践经验,展示了如何创建和增长软件资本。

本书专为有经验的C++软件开发者和系统设计师编写,从事大型软件开发工作的架构师或项目负责人等也可以通过阅读本书解决实际工作中的问题。

主编推荐
·热销图书作者约翰·拉科斯(John Lakos)新作,将其在C++领域超过30年的经验汇聚于此,帮助读者学到实用的知识和技能。 ·大规模C++编程全解,内容丰富。从设计理念到开发过程,从方法论到技术工具,无一不包,让读者深入了解大规模C++软件开发的各个方面。 ·不仅介绍理论知识,还通过具体示例展示了开发实践。在实际开发应用中,提高开发效率和代码质量。 ·系统介绍设计概念,为大规模的项目奠定基础。无论你是C++初学者还是经验丰富的开发者,都会受益匪浅。

精彩内容
本书通过具体示例演示大规模C++开发的基本设计设想,为各种规模的项目奠定基础,并演示成功进行大规模实际开发所需的过程、方法、技术和工具。通过阅读本书,读者可以逐步改变自己的设计和开发方法。本书旨在使用软件从业人员熟悉的C++构件来解决现实问题,同时确定(并激发)现代C++替代方案。作者利用超过30年的构建大规模、关键任务的企业系统的实践经验,展示了如何创建和增长软件资本。

 本书专为有经验的C++软件开发者和系统设计师编写,从事大型软件开发工作的架构师或项目负责人等也可以通过阅读本书解决实际工作中的问题。

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP