
作者:(美)马丁,(美)马丁著
ISBN:10位[7115165076]13位[9787115165077]
出版社:人民邮电出版社
出版日期:2008-1-1
定价:¥89.00元
页数:529
开本:16开
包装:平装
内容提要本书旨在指导.NET程序员学习构建软件的最佳实践,从而创建更好的设计并提升.NET应用的质量。书中使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程,包含了极具价值的可重用的C#源代码,还重点讲述了如何使用UML和设计模式解决面向客户系统的问题。
本书适于软件开发和管理人员提高自身水平学习之用,也适于用作高校计算机专业本科生、研究生以及软件学院的软件工程和软件开发相关课程的教材或参考书。
编辑推荐软件开发的不朽经典,生动阐述面向对象原则、敏捷实践、UML和模式,大量C#实战示例,让你亲历现场,丰富的词汇和背景注释,助你轻松读经典。
“我最喜爱的技术作家RobertMartin善于通过实战展示技术,让读者能够以自己喜欢的方式逐步理解……请把Bob大叔当作你在敏捷世界里的导师。”
——ChrisSells,NET资深技术专家,微软“软件传奇人物”
“本书是对敏捷编程和敏捷原则最全面和最有价值的介绍……绝对是所有NET程序员必读之作。”
——JesseLiberty,微软资探技术专家,ProgrammingC#作者
要想成为一名优秀的软件开发傊,需要熟练应用编程语言和开发工具,更重要的是能够领悟代美代码背后的原则和前人总结的经验——这正是本书的主题。本书凝聚了世界级软件开发大师RobertCMartin数十年软件开发和培训经验,Java版曾荣获计算机图书最高荣誉——Jolt大奖,是广受推的经典著作,自出版以来一直畅销不衰。
本书不仅是一部深入浅出、生动易懂的面向对象原则与模式著作,而且还是一部通俗的敏捷方法导引书和快速实用UML教程。通过本书你会发现,许多以前看起来非常枯燥费解的概念,忽然间都豁然开朗,变得鲜活生动起来。
C#版与此前的Java版相比,主要的更新包括加强了对UML的介绍章节,使其更加贴近实战,增加了对MVP模式的介绍等。注释版在原著基础上增加了丰富的词语注释和背景提示,使读者能够轻松地领略原汁原味的名著的风采。
作者简介RobertC.Martin世界级的软件开发大师,著名软件咨询公司ObjectMentor公司的创始人和总裁。曾经担任C++Report杂志主编多年,也是设计模式和敏捷开发运动的主要倡导者之一。
目录SectionI:AgileDevelopment敏捷开发
Chapter1:AgilePractices敏捷实践
TheAgileAlliance敏捷联盟
IndividualsandInteractionsoverProcessesandTools人和交互重于过程和工具
WorkingSoftwareoverComprehensiveDocumentation可以工作的软件重于面面俱到的文档
CustomerCollaborationoverContractNegotiation客户合作重于合同谈判
RespondingtoChangeoverFollowingaPlan随时应对变化重于遵循计划
Principles原则
Conclusion结论
Bibliography参考文献
Chapter2:OverviewofExtremeProgramming极限编程概述
ThePracticesofExtremeProgramming极限编程实践
WholeTeam完整团队
UserStories用户故事
ShortCycles短交付周期
AcceptanceTests验收测试
PairProgramming结对编程
Test.DrivenDevelopment(TDD)测试驱动开发
CollectiveOwnership集体所有权
ContinuousIntegration持续集成
SustainablePace可持续的开发速度
OpenWorkspace开放的工作空间
ThePlanningGame计划游戏
SimpleDesign简单设计
Refactoring重构
Metaphor隐喻
Conclusion结论
Bibliography参考文献
Chapter3:Planning计划
InitialExploration初始探索
Spiking,Splitting,andVelocity探究、分解和速度
ReleasePlanning发布计划
IterationPlanning迭代计划
Defining“Done”定义“完成”
TlaskPlanning任务计划
Iterating迭代
Tracking跟踪
Conclusion结论
Bibliography参考文献
Chapter4:Testing测试
TIest-DrivenDevelopment测试驱动开发
ExampleofTest-FirstDesign测试优先设计的例子
TestIsolation测试促使模块之间隔离
SerendipitousDecoupling意外获得的解耦合
AcceptanceTests验收测试
SerendipitousArchitecture意外获得的构架
Conclusion结论
Bibliography参考文献
Chapter5:Refactoring重构
ASimpleExampleofRefactoring:GeneratingPrimes素数产生程序:一个简单的重构示例
UnitTesting单元测试
Refactoring重构
TheFinalReread最后审视
Conclusion结论
Bibliography参考文献
Chapter6:AProgrammingEpisode一次编程实践
TheBowlingGame保龄球比赛
Conclusion结论
OverviewoftheRulesofBowling保龄球规则概述
SectionIIAgileDesign敏捷设计
Chapter7:WhatIsAgileDesign什么是敏捷设计
DesignSmells设计臭味
DesignSmells——TheOdorsofRottingSoftware设计坏味——腐化软件的气味
Rigidity僵化性
Fragility脆弱性
Immobility顽固性
Viscosity粘滞性
NeedlessComplexity不必要的复杂性
NeedLlessRepetition不必要的重复
Opacity晦涩性
WhySoftwareRots软件为何会腐化
TheCopyProgramCopy程序
AFamiliarScenario熟悉的场景
AgileDesignoftheCopyProgramcopy程序的敏捷设计
Conclusion结论
Bibliography参考文献
Chapter8:TheSingle-ResponsibilityPrinciple(SRP)SRP:单一职责原则
DefiningaResponsibility定义职责
SeparatingCoupledResponsibilities分离耦合的职责
Persistence持久化
Conclusion结论
Bibliography参考文献
Chapter9:TheOpen/ClosedPrinciple(OCP)OCP:开放-封闭原则
Description0fOCPOCP概述
TheShapeApplicationShape应用程序
ViolatingOCP违反OCP
ConformingtoOCP遵循OCP
Anticipationand“Natural”Structure预测变化和“贴切的”结构
Puttingthe“Hooks”In放置吊钩
UsingAbstractiontoGainExplicitClosure使用抽象获得显式封闭
UsingaData-DrivenApproachtoAchieveClosure使用“数据驱动"的方法获取封闭性
Conclusion结论
Bibliography参考文献
Chapter10:TheLiskovSubstitutionPrinciple(LSP)LSP:Liskov替换原则
Violations0fLSP违反LSP的情形
ASimpleExample简单例子
AMoreSubtleViolation更微妙的违反情形
AReal-WorldExample实际的例子
FactoringInsteadofDeriving用提取公共部分的方法代替继承
HeuristicsandConventions启发式规则和习惯用法
Conclusion结论
Bibliography参考文献
Chapter11:TheDependency-InversionPrinciple(DIP)DIP:依赖倒置原则
Layering层次化
OwnershipInversion倒置的接口所有权
DependenceonAbstractions依赖于抽象
ASimpleDIPExample简单的DIP示例
FindingtheUnderlyingAbstraction找出潜在的抽象
TheFurnaceExample熔炉示例
Conclusion结论
Bibliography参考文献
Chapter12:TheInterfaceSegregationPrinciple(ISP)ISP:接口隔离原则
InterfacePollution接口污染
SeparateClientsMeanSeparateInterfaces分离客户就是分离接口
ClassInterfacesversusObjectInterfaces类接口与对象接口
SeparationThroughDelegation使用委托分离接口
SeparationThroughMultipleInheritance使用多重继承分离接口
TheATMUserInterfaceExampleATM用户界面的例子
Conclusion结论
Bibliography参考文献
Chapter13:OverviewofUMLforC#ProgrammersC#程序员UML概观
ClassDiagrams类图
ObjectDiagrams对象图
SequenceDiagrams顺序图
CollaborationDiagrams协作图
StateDiagrams状态图
Conclusion结论
Bibliography参考文献
Chapter14:WorkingwithDiagrams使用UML
WhyModel?为什么建模
WhyBuildModelsofSoftware?为什么构建软件模型
ShouldWeBuildComprehensiveDesignsBeforeCoding?编码前应该构建面面俱到的设计吗
MakingEffectiveUseofUML有效使用UML
CommunicatingwithOthers与他人交流
RoadMaps脉络图
Back-EndDocumentation项目结束文档
WhattoKeepandWhattoThrowAway要保留的和要丢弃的
IterativeRefinement迭代式改进
BehaviorFirst行为优先
ChecktheStructure检查结构
EnvisioningtheCode想象代码
EvolutionofDiagrams图的演化
WhenandHowtoDrawDiagrams何时以及如何绘制图示
WhentoDrawDiagramsandWhentoStop何时要画图,何时不要画图
CASEToolsCASE工具
ButWhatAboutDocumentation?那么,文档呢
Conclusion结论
Chapter15StateDiagrams状态图
TheBasics基础知识
SpecialEvents特定事件
Superstates超状态
InitialandFinalPseudostates初始伪状态和结束伪状态
UsingFSMDiagrams使用FSM图示
Conclusion结论
Chapter16:ObjectDiagrams对象图
ASnapshotinTime即时快照
ActiveObjects主动对象
Conclusion结论
Chapter17:UseCases示例
WritingUseCases编写用例
AlternateCourses备选流程
WhatElse?其他东西呢
DiagrammingUseCases用例图
Conclusion结论
Bibliography参考文献
Chapter18:SequenceDiagrams顺序图
TheBasics基础知识
Objects,Lifelines,Messages,andOtherOddsandEnds对象、生命线、消息及其他
CreationandDestruction创建和析构
SimpleLoops简单循环
CasesandScenarios时机和场合
AdvancedConcepts高级概念
LoopsandConditions循环和条件
MessagesThatTakeTime耗费时间的消息
AsynchronousMessages异步消息
MultipleThreads多线程
ActiveObjects主动对象
SendingMessagestoInterfaces向接口发送消息
Conclusion结论
Chapter19:ClassDiagrams类图
TheBasics基础知识
Classes类
Association关联
Inheritance继承
AnExampleClassDiagram类图示例
TheDetails细节
ClassStereotypes类衍型
AbstractClasses抽象类
Properties属性
Aggregation聚集
Composition组合
Multiplicity多重性
AssociationStereotypes关联衍型
NestedClasses内嵌类
AssociationClasses关联类
AssociationQualifiers关联修饰符
Conclusion结论
Bibliography参考文献
Chapter20HeuristicsandC0ffee咖啡的启示
TheMarkIVSpecialCoffeeMakerMarkIV型专用咖啡机
Specification规格说明书260
ACommonbutHideousSolution常见的丑陋方案
ImaginaryAbstraction虚构的抽象
AnImprovedSolution改进方案
ImplementingtheAbstractModel实现抽象模型
TheBenefitsofThisDesign这个设计的好处
Ooverkill面向对象过度设计
Bibliography参考文献
SectionⅢThePayrollCaseStudy薪水支付案例研究
RudimentarySpecificationofthePayrollSystem薪水支付系统的初步规格说明
Exercise练习
UseCase1:AddNewEmployee用例1:增加新雇员
UseCase2:DeletinganEmployee用例2:删除雇员
UseCase3:PostaTimeCard用例3:登记考勤卡
UseCase4:PostingaSalesReceipt用例4:登记销售凭条
UseCase5:PostingaUnionServiceCharge用例5:登记工会服务费
UseCase6:ChangingEmployeeDetails用例6:更改雇员明细
UseCase7:RunthePayrollforToday用例7:现在运行薪水支付系统
Chapter21:CommandandActiveObject:VersatilityandMultitaskingCOMMAND模式和ACTlVEOBJECT模式:多功能与多任务
SimpleCommands简单的Command
Transactions事务
PhysicalandTemporalDecoupling实体上解耦和时间上解耦
TemporalDecoupling时间上解耦
UndoMethodUndo()方法
ActiveObjectACTIVEOBJECT模式
Conclusion结论
Bibliography参考文献
Chapter22:TemplateMethodandStrategy:InheritanceversusDeleg