C++语言高级运用与实战课程
课程天数:2天
课程介绍
在众多软件编程语言中,C++已成为高效率、高难度的代名词。C++的优势在于它的通用和全面,不足之处在在于学习门槛高,特别是在用C++构筑的大型软件中,对软件开发人员的技术水平要求是非常严苛的。
作为为一门语言类的课程,若内容缺乏实务便易流于抽象与空泛。 本课程会从大量实际项目中抽取典型的案例,利用其源码辅助并加强原理讲解。并且结合讲师大的项目案例进行分析。 这种方式对于语言类的学习有着极大效果。与其它的仍然沿用传统模式目录方式逐一讲述每一个语法点的培训和图书完全不同。
此外,在使用C++上进行面向对象程序设计方面,本课程也进行了相当深入的探讨和讲解。事实上,C++的语法繁杂而庞大,一线的工程师们们无力、也无需都全部掌握。并且C++的语法虽复杂,却是相对固定的,在网络和资源如此发达的今天,很多语法问题可以借助于网络得到解答。相对而言,对一线的工程师更渴望在有了C++语法后,还能掌握软件系统设计的能力。如果将C++语法称为硬件的话,使用语法进行设计可称为软实力。
课程收益
本课程涉及大量使用C++进行软件设计的内容,可使学员在掌握了C++语法的同时,还能在软件设计方面得到长足的进步。
培训对象
使用C++语言开发Windows应用软件的软件工程师,或者相关项目的测试工程师、项目带头人和技术经理。
课程大纲
第一单元:什么是优秀设计—认识你的设计目标-灵活性与可扩展性
内容一:C++程序编译、调试及运行中的常见问题处理
• 对象的赋值与对象的复制
• 引起循环依赖的问题
• 析构函数引起的问题
• 如何正确地初始化对象
• 小心内存越界
• 正确地释放内存
• 临时对象的陷阱
• 降低系统间模块的耦合度
内容二:C++的继承与派生编程技术
• 虚函数与虚表的原理
• 派生类及成员定义语法
• 虚函数与多态性的编程技术
• 虚函数、纯虚函数和抽象类
内容三:C/C++内存管理
• C++内存分配方式
• 长度明确
• 预估内存
• 防止栈溢出
• 避免在堆中频繁地申请、释放小块内存
• 多块内存尽量大小相同,互相靠近
• 了解系统数据结构的运作机制
• 考虑分配顺序
• C++对象中内存的分布
• 值对象的注意点(函数传参、临时变量、函数替代参数)
• 实例对象与指针对象的异同
内容四:stl标准库简介
• Stl与泛型编程
• 常用容器
• 迭代器
第二单元 :C++面向对象程序设计
内容一:C++中函数写法及注意点
• 高扇入与低扇出
• 函数书写的要点
• 函数参数个数
• 函数参数的设计要点
• 函数名称的重要性
• 对分支语句的讨论
内容二:类设计的原则的具体运用
• 封装:利用类的特征将数据和函数隐藏。
• 派生继承结构中需要注意的问题
• 隔离不同的因素,策略和实现分离的必要性
• 对复杂行为及多种情况组合的处理的处理。
• 用间接增强系统的灵活性
• 设计稳定结构的要点
• 对已存在的模块,如何动态改变其行为
• C++中进行抽象的技巧
第三单元:系统设计中的重要原则及可扩展系统的达成实践
内容一:系统设计中隔离变化的原则
• 面向对象设计思维与面向过程设计思维—职责驱动设计
• 策略封装原则——数据要封装,策略也要封装
• 开放封闭原则(OCP)
• 单一职责原则(SRP)
• Divergent Change——发散的变化
• Shotgun Surgery——散弹枪式的修改
• Liskov 替换原则(LSP)
• 面向对象常见的错误认识—思考OO带来的价值
内容二:系统接口设计及IOC原理运用
• 接口隔离原则
• 组件及子系统接口的设计
• 理解IOC的本质
• IOC及DIP原则的运用
第四单元:系统设计中常用技巧实践
内容一:对象与封装的技巧
• 将过程化设计转化为对象设计,并讨论过程化设计与对象化设计的特点及历史博弈;并给出过程式设计及及对象设计的模式——合适的就是好的!
• 封装值域/自封装值域的重构
• 以数据类取代记录的策略
• 以对象取代数组的策略
• 封装群集
• Data Class——纯粹的数据类
• 以State/Strategy取代型别码
• 通过案例介绍函数的重构
内容二:复杂条件的处理技巧
• 常见问题的求助
• 复杂条件表达式重构
• IF/Else语句的危害
• Switch语句的危害
• 分解/合并条件式
• 移除控制标记
• 高级技巧——IOC思想在简化复杂表达式方面的运用
• 通过案例介绍如何重构面向过程代码到面向对象
内容三:去除“大泥球”式的设计
• 过大的函数、模块、子系统
• 从系统设计的角度分析混乱产生的原因
• 重要但易被忽略的基本功
• Feature Envy——依恋情结
• Data Clumps——数据泥团
• Message Chains——过度耦合的消息链
• 介绍实用,但经常被忽略的高级技巧!
• 通过案例介绍如何分解系统
内容四:构建合理的继承体系,辨析继承 VS 组合
• 提炼继承体系——Extract Hierarchy
• 塑造模板函数
• 在多态体系中,如何处理子条件不一致的情况——继承体系中的高级技巧
• 塑造模板函数
• 以委托取代继承、以继承取代委托,父子关系与兄弟关系的辨析
内容五:多种情况的复杂组合
• 梳理并分解继承体系
• 如何处理让人疯狂的复杂分类?
• 如何处理动态变化的组合?——复杂组合设计的高级技巧
内容六:系统模块设计
• 领域模型建模
• 业务对象封装内在的业务逻辑,而应用服务封装外在于业务对象的业务逻辑。
• 系统模块设计的职责分配考虑及技巧
第五单元:编写优质无错的代码
内容一:养成良好的编程习惯
• 努力避免错误而不是发现改进错误
• 程序的易读性,程序编写风格的一致性
• 学习阅读别人的代码(优秀的开源代码),但不要盲目跟在别人后面,
• 进行防错性程序设计,但不要隐瞒错误
• 功能单一,名符其实
• 设计并加入调试代码
内容二:程序编码
• 精确地实现设计,不要近似地实现
• 利用Log/TRACE发现和调试错误
• 使用断言(ASSERT)发现错误
• 如果对要使用的函数不了解,请先仔细阅读说明,而不是抄别人的调用方法
• C++程序的一些调试方法
内容三:测试与优化
• 测试只能证明缺陷存在,而不能证明缺陷不存在。
• 软件的高质量是设计出来的,而不是靠测试修补出来的
• 代码运行效率的优化