熟悉中国企业的需求管理,经历过多种文化氛围与组织形态,对大型项目、系统工程管理有着深入的实践与体会。最难能可贵的是康老师现在一直工作在实际项目的大型软件开发、系统架构设计的一线,拥有几十项专利技术。在国内外曾主持过各级政府、教育部、中国石化、美国外包项目、国税总局金税工程、中国军队(总参)信息化、金融信息化项目、2008年北京奥运会首都机场奥运福娃机器人项目、某分布式电子图书系统等很多大型复杂信息化项目的架构设计,在实际项目工作中积累了丰富的项目实际工作经验和丰富的系统架构设计分析经验。
课程介绍
在众多软件编程语言中,C++已成为高效率、高难度的代名词。C++的优势在于它的通用和全面,不足之处在在于学习门槛高,特别是在用C++构筑的大型软件中,对软件开发人员的技术水平要求是非常严苛的。
在通晓了C++常规语法的后,软件开发人员下一步需要掌握的是用C++进行软件设计的能力。事实上,C++的语法繁杂而庞大,一线的工程师们们无力、也无需都全部掌握,大家掌握的常规C++语法在工程实践中已经够用了,且C++的语法虽复杂,却是固定不变的,偶尔有不知道的地方,上网一搜便知。相对而言,对一线的工程师更实用的是利用语法进行软件系统设计的能力。如果将C++语法称为硬件的话,使用语法进行设计可称为软实力——我们值得把精力投入其中。本课程为学员们进行深入的软件设计能力学习和提升,基于面向对象及C++面向对象的集大成者《C++设计模式》,在软件设计模式的领域中,GoF写就的《设计模式》(Design Patterns: Elements of ReusableObject-Oriented Software),被公认为设计模式的开山之作,第一次将设计模式提升到理论高度,并将之规范化。该著作也是软件设计领域内为数不多的“里程碑式的著作”。对于很多人来说,设计模式已经成为开发标准词典的一部分.15年来,设计模式思想影响了整整一代软件从业者.而且可以预料,它的影响还将继续下去。
遗憾的是,除了这部经典著作选用了C++作为贯穿全书的语言,后期陆续出版的,关于设计模式的书籍中,绝大多数使用了java、C#等相对容易理解的语言作为辅助语言。包括对软件架构设计的讨论,众多的资料都是从J2ee / .Net的角度进行分析。对使用c++的软件企业,看这些资料总有隔靴搔痒的感觉,如何在能从底层的角度,构建一个灵活而高效的软件系统,是众多使用c++的软件企业头痛的事。本课程从底层语言的角度,讲解各种软件设计原则、模式在c++程序中的具体运用,在使软件企业解决获得可重用的架构设计的完整方案。
此外,目前国内的大部分程序员学习设计模式和原则之后,往往是不知道如何使用模式,或者滥用模式(言必称模式),最终放弃不用模式,这样三个阶段,最终导致设计模式思想还远没有真正广泛应用,更没有起到应有的作用,因而导致很多对设计模式的误解(学习设计模式无用论).该课程就是针对学习设计模式这3个经典错误问题而开设的.
作为为一门高级课程,若内容缺乏实务便易流于抽象与空泛。本课程除了深入剖析各种典型的设计模式之原理与结构外, 同时会抽取大量知名程序库中的设计模式,利用其源码辅助并加强原理讲解。并且结合讲师大量实际项目案例进行分析. 这种方式对于设计模式的学习有着极大效果。与其它的仍然沿用传统模式目录方式逐一讲述每一模式的意图,结构,适应性等的培训和图书完全不同.
课程1/3的时间介绍设计模式思想和原理,1/3时间案例,并且要求学员组合成小组进行现场设计. 最后1/3时间再介绍该案例的设计过程,讲师带领大家一起对设计结果进行分析,指出不”和谐”的地方,通过逐步运用模式,改善设计. 而不是把最完美的答案一下子放到学员的面前,让你佩服.并且分析为什么使用模式,而不是过度设计,为什么又要放弃模式. 因为了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程之中蕴藏着大智慧.培训时根据实际情况,可以安排学员自己的项目代码或者设计作为课程案例进行分析和设计.
此外,本课程对软件模块划分,及如何为模块划分职责进行了详尽的讲解及分析,揭示了软件设计原理及设计过程;帮助架构师掌握架构设计方法与架构设计的模式;本课还帮助设计人员掌握领域分析与建模的正确方法;帮助设计人员进行IT数据结构设计及实例等。
以下原则和模式最好预先了解
项目案例涉及的软件原则和C++模式 |
面向对象设计原则 单一职责原则 (SRP) 变化分离 “开-闭”原则(OCP)对可变性封装 里氏替换原则(LSP) 如何进行继承 接口隔离原则(ISP)恰当的划分角色和接口 依赖倒转原则(DIP)针对接口编程 |
GOF设计模式 Singleton模式/Builder模式/Simple Factory模式 Factory Method模式/ Strategy/Observer/Chain of Responsibility/Command/Template Method/Adapter/Proxy/Façade/Bridge/Decorator/Composite/Visitor 课程案例主要涉及15种GOF常用设计模式,也重点学习这些模式 |
其它设计模式 Object Pool模式/Dependency Injection依赖注入/Null Object模式/Plug-In模式/Active Object模式/Abstract Server模式 虽然不属于GOF,但是经常在软件设计时使用.案例也涉及 |
课程大纲
第一单元:C++设计模式思想与困惑 |
内容一:C++软件设计模式---模式到底是什么?价值在哪里? 1. 什么是C++模式 2. 为什么需要设计模式? 难道就为了面试吗? 3. 设计模式能够给我们带来什么? 4. 设计模式学习面临的困难和解决思路 5. 从了解模式到正确应用模式 1. 案例分析---某数据传输系统,在使用模式前解决方案和使用模式后的对比 内容二:软件设计模式本质—你真的知道模式背后的原理吗? 1. 发现变化进行封装变化 2. 把变化与不变必须分离 3. 针对接口的编程,而不是针对实现 4. 组合优于继承 1. 案例分析—某数据采集系统设计分析,分析模式背后的本质 内容三:什么是好的设计 1. 什么是好的设计? 2. 难道不使用设计模式就是坏的设计吗? 3. 为什么需求变化总是使你痛苦? 和你的设计有关系吗? 4. 好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性。 5. 设计模式可以使你的设计更灵活,更易复用,更具可扩展性 1. 案例分析—某政府目4种设计方案的对比, 那种更合适?多种方案的对比 |
第二单元:从C到C++的转换:面向对象思维 |
内容一:面向对象思维是模式基础 1. 面向对象分析与设计的本质 2. 面向对象设计思维与面向过程设计思维—职责驱动设计 3. 抽象对象模型 4. 封装对象模型 5. 继承对象模型 6. 多态对象模型 7. 面向对象常见的错误认识—思考OO带来的价值 8. 为什么学习设计模式需要面向对象思维 9. 从面向对象到模式到再到真正的面向对象 10. 案例分析—某税务项目, 使用面向对象设计和过程化设计 PK,,难道面向对象就一定是最优的? 你真正理解面向对象吗? 面向对象到底真正有哪些好处, 不要人云亦云 ! 内容二:面向对象设计原则(principles) 1. 依赖倒置原则(DIP) 2. 控制反转原则(IOC) 3. 开放封闭原则(OCP) 4. 单一职责原则(SRP) 5. Liskov 替换原则(LSP) 6. 接口隔离原则(ISP) 7. 对象组合优于类继承 8. 封装变化点 9. 面向接口编程 10. 案例分析—每组原则,分别通过案例进行分析,为什么需要使用原则进行考虑 C++是面向对象的运用,它建立在对面向对象技术的基础上。要用好C++,需要深刻理解面向对象,本节深入讲解面向对象设计,几大经典的面向对象设计原则,OO对象模型。 |
第三单元:C++设计模式应用策略2—知道模式 即使知道设计模式不一定成为一个优秀的设计师,但是不了解设计模式绝对不会成为优秀的设计师 |
内容一:知道模式 –你连设计模式都不了解, 还算是设计师吗? 1. 了解模式-需要知道自己不知道 2. 研读模式的关键4要素 3. 创建型模式 4. 行为型模式 5. 结构型模式 6. 该阶段经常遇到的应用问题和对策 7. 案例分析—设计模式连连看, 你知道模式吗? 某公司设计模式考试题 内容二:模式案例– 多功能文件处理系统设计 1. 介绍项目背景情况,如何应对将来的各种变化 2. 学员分组进行设计 3. 应用设计模式,如何改善设计 4. 分析设计模式是否带来软件的可维护性 5. 学习(Factory Method/Adapter/Proxy/Observer/Strategy等几种设计模式和设计原则) 本节深入阐述GOF 23种经典设计模式(包括创建型模式、结构型模式、行为型模式),深入解析它们的意图、动因、原理、实现与应用实践。 |
第四单元:C++设计模式应用策略3—临摹大师 看看大师们怎样使用设计模式的 ,他们也是在滥用设计模式吗? |
内容一:研读经典系统—学习大师如何使用C++设计模式 1. 学习设计模式后,可是无法使用在真实项目的症状 2. 分析经典作品,重新思考设计模式的威力 3. 研读设计模式的关键要素 内容二:模式案例–薪酬管理系统设计模式应用分析 1. Robort C Martion 是如何考虑问题的 2. 架构思路 3. 设计中的博弈点,哪些值得我们学习 4. Martion设计的过程中是怎样应用设计模式的。 5. 学习设计模式(strategy / /Template Method/ Adapter/ Command) |
第五单元:设计模式应用策略4—你知道如何用模式去思考吗 有时放弃模式更值得学习 |
内容一:用模式思考系统设计 1. 基于模式的设计系统 2. 用模式思考的过程 3. 模式的应用层次和组合应用模式 4. 基于模式的方法和步骤 内容二:放弃设计模式的智能—只要遵循原则,保持简单 1. 放弃模式更需要智能, 2. 设计需要的原则 a) 重用原则 b) 扩展原则 c) 隔离原则 d) 转接原则 e) 保变原则 3. 案例分析---怎样去除设计模式, 不用设计模式 内容三:模式案例–电子文件系统 1. 项目系统背景和需求 2. 典型的场景下,如何考虑使用模式。 3. Bridge / strategy / class explosion的博弈。 4. 系统的设计的本质– 不是为了模式! 5. 如何支持第3方接入的运用 - Template Method VS. IOC 6. 系统的设计思考过程 7. 展示如何用模式,进行设计 8. 学习设计模式() 内容四:用模式思考系统设计 5. 基于模式的设计系统 6. 用模式思考的过程 7. 模式的应用层次和组合应用模式 8. 基于模式的方法和步骤 内容五:放弃设计模式的智能—只要遵循原则,保持简单 4. 放弃模式更需要智能, 5. 设计需要的原则 a) 重用原则 b) 扩展原则 c) 隔离原则 d) 转接原则 e) 保变原则 6. 案例分析---怎样去除设计模式, 不用设计模式 内容六:模式案例–电子文件系统 9. 项目系统背景和需求 10. 典型的场景下,如何考虑使用模式。 11. Bridge / strategy / class explosion的博弈。 12. 系统的设计的本质– 不是为了模式! 13. 如何支持第3方接入的运用 - Template Method VS. IOC 14. 系统的设计思考过程 15. 展示如何用模式,进行设计 |
第六单元:设计模式应用策略5—重构到模式 通过重构实现模式改善既有的设计,往往优于在新的设计早期使用模式。 |
内容一:重构已有的系统 1. 设计坏味道概述 2. 重构思想 3. 理解如何结合重构和模式; 4. 用模式导向的重构(pattern-directed refactoring)改善既有代码的设计; 5. 找出需要进行模式导向重构的代码段; 6. 了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。 7. 一组坏味(也就是问题),表示需要进行模式导向的重构; 8. 实现同一模式的不同方式的示例; 9. 什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。 10. 常见设计模式的重构演化的过程 内容二:案例- 某网络数据分析系统的设计 1. 介绍项目需求情况,进行设计 2. 通过重构逐步实现设计模式 3. Framework 设计思想—好莱坞原则 4. 学习设计模式(Factory Method, Template Method, Composite, Chain of Responsibility ) “软件的演化,很多时间是利用重构从而得到模式”是有效应用设计模式的实践准则。本节以一些重构技巧来展示如何通过演化的方式来步步达至设计模式,从而帮助学员更好地掌握如何在软件设计中运用设计模式,发现更多设计模式。 |
第七单元:C++设计模式对比大讨论 |
内容一:模式大PK, 通过对比了解设计模式的细节 1. 创建型模式讨论 a) 简单工场 工厂方法 抽象工场 b) Abstract Factory,builder,Prototype 模式 c) 单例模式 2. 行为型模式 a) Adapter与Bridge b) Composite、Decorator与Proxy c) Façade模式与 Adapter模式 /Proxy模式 d) Composite 与Iterator模式 3. 结构型模式 a) 封装变化-Strategy/State/Iterator模式 b) 封装结构---Mediator模式与Facade模式 c) 对象作为参数--Visitor/Command/Mementor d) 通信应该被封装还是被分布-Mediator和Observer e) 对发送者和接收者解耦-Command模式与职责链模式 将实践中常容易混淆或常常联合使用的几个模式放在一组讨论,对比分析,讲解思想。如何发现、应用更多模式。通过对“相似或相关的设计模式”的对比分析,加深理解,是避免“模式误用”的好方法。 |