课程简介
本课程针对有项目经验的 C 程序员。课程的主要出发点是结合真实案例,让程序员理解高质量编程的特点,并修正平时编码中的一些误区,本课程包含低质量代码案例,并给出这些低质量代码的提高方法,以实例促进理解。
课程内容分为两部分,一是关于C语言本身的知识,例如内存管理、函数编写等。另一部分是如何运用C语言进行系统的设计,例如如何进行模块的划分、接口设计、构建灵活和高可扩展性的系统。
本课程让具有经验的软件开发人员提升对C语言进行软件设计的理解,掌握软件设计的原则和方法,并能够用这些原则和方法去指导设计实践。
目标收益
培训对象
C程序员、架构师
课程大纲
第一单元 c语言关键特性 |
内容一:C内存管理 【0.5小时】 1.长度明确 2.预估内存 3.防止栈溢出 4.避免在堆中频繁地申请、释放小块内存 5.多块内存尽量大小相同,互相靠近 6.了解系统数据结构的运作机制 7.考虑分配顺序 8.结构的内存分布 9.值对象的注意点(函数传参、临时变量、函数替代参数) 10.实例对象与指针对象的异同 内容三:C函数的设计【1.5小时】 1.函数的扇入与扇出 2.一个函数只做一件事,不要编写多种功能集于一身的函数 3.函数要小且容易测试 4.明确地定义函数的参数 5.避免布尔类型参数 6.编写函数使其在给定有效的输入情况下不会失败 7.函数不依赖于另一个函数的内部细节 8.函数内部代码块 9.多线程编程——线程安全与函数的可重入 内容四:防御性编程【0.5小时】 1.使用好的编码风格,形成编码规范 2.不要仓促的编写代码 3.不要相信任何人 4.编码的目标要清晰,而不是简洁 5.编译时打开所有警告开关 6.使用安全的数据结构 7.检查所有的返回值 8.审慎的处理内存 9.在声明位置初始化所有变量 10.避免运算越界 11.使用断言 内容五:代码重构【0.5小时】 1.代码重构的原则 2.代码命名-很重要,但是总被忽略的基本功 3.提炼函数 4.提炼判断条件 5.简化函数参数 6.全局变量的危害辨析 7.如何解除全局变量的危害 8.避免函数传递中的隐形 bug 9.调整函数位置 |
第二单元C语言模块及架构设计 |
内容一 模块划分及面向对象设计 【1.5小时】 1.组件设计中的开-闭原则 2.模块及组件的职责分配设计 3.面向对象设计与面向过程辨析 4.高内聚松耦合与单一职责 5.封装变化点 6.关于模块的创建及依赖倒置 7.控制模块设计,及过大组件/模块的分解原则 8.使用间接模式 9.隔离不同的关注面 内容二:C语言的面向对象及系统建模【1小时】 1.基于领域分析的建模方式 2.事务脚本与领域驱动 3.如何用c来组织面向的设计 4.封装、继承、多态 5.struct 模拟 class 6.案例分析 7.练习:用面向对象的思维对某项目进行建模 内容三:C语言架构设计【1.5小时】 1.软件分层与中间层的设计 2.接口设计要点与接口隔离原则(ISP) 3.使用发布-订阅模式构建松耦合的系统 4.使用IOC构建高可扩展的系统 5.提升系统效率时的注意点 6.练习:基于分层架构的c程序设计——某文件处理系统 内容四:单元测试【1小时】 1.从流程上控制代码质量 2.单元测试在质量控制流程中作用 3.单元测试的原则 4.选择合适的单元测试框架 5.测试用例设计原则 6.测试驱动开发(TDD) 7.代码覆盖率 8.性能分析与提升 |
第一单元 c语言关键特性 内容一:C内存管理 【0.5小时】 1.长度明确 2.预估内存 3.防止栈溢出 4.避免在堆中频繁地申请、释放小块内存 5.多块内存尽量大小相同,互相靠近 6.了解系统数据结构的运作机制 7.考虑分配顺序 8.结构的内存分布 9.值对象的注意点(函数传参、临时变量、函数替代参数) 10.实例对象与指针对象的异同 内容三:C函数的设计【1.5小时】 1.函数的扇入与扇出 2.一个函数只做一件事,不要编写多种功能集于一身的函数 3.函数要小且容易测试 4.明确地定义函数的参数 5.避免布尔类型参数 6.编写函数使其在给定有效的输入情况下不会失败 7.函数不依赖于另一个函数的内部细节 8.函数内部代码块 9.多线程编程——线程安全与函数的可重入 内容四:防御性编程【0.5小时】 1.使用好的编码风格,形成编码规范 2.不要仓促的编写代码 3.不要相信任何人 4.编码的目标要清晰,而不是简洁 5.编译时打开所有警告开关 6.使用安全的数据结构 7.检查所有的返回值 8.审慎的处理内存 9.在声明位置初始化所有变量 10.避免运算越界 11.使用断言 内容五:代码重构【0.5小时】 1.代码重构的原则 2.代码命名-很重要,但是总被忽略的基本功 3.提炼函数 4.提炼判断条件 5.简化函数参数 6.全局变量的危害辨析 7.如何解除全局变量的危害 8.避免函数传递中的隐形 bug 9.调整函数位置 |
第二单元C语言模块及架构设计 内容一 模块划分及面向对象设计 【1.5小时】 1.组件设计中的开-闭原则 2.模块及组件的职责分配设计 3.面向对象设计与面向过程辨析 4.高内聚松耦合与单一职责 5.封装变化点 6.关于模块的创建及依赖倒置 7.控制模块设计,及过大组件/模块的分解原则 8.使用间接模式 9.隔离不同的关注面 内容二:C语言的面向对象及系统建模【1小时】 1.基于领域分析的建模方式 2.事务脚本与领域驱动 3.如何用c来组织面向的设计 4.封装、继承、多态 5.struct 模拟 class 6.案例分析 7.练习:用面向对象的思维对某项目进行建模 内容三:C语言架构设计【1.5小时】 1.软件分层与中间层的设计 2.接口设计要点与接口隔离原则(ISP) 3.使用发布-订阅模式构建松耦合的系统 4.使用IOC构建高可扩展的系统 5.提升系统效率时的注意点 6.练习:基于分层架构的c程序设计——某文件处理系统 内容四:单元测试【1小时】 1.从流程上控制代码质量 2.单元测试在质量控制流程中作用 3.单元测试的原则 4.选择合适的单元测试框架 5.测试用例设计原则 6.测试驱动开发(TDD) 7.代码覆盖率 8.性能分析与提升 |