第二周学习总结
前言
本周课程内容是关于框架设计的,课程中讲述了五种设计原则。通过对应的代码案例有了深入的了解,收获很多。好代码一定是遵循了合适的设计原则。理解设计原则以及设计模式才能写出不散发臭味的代码,学习开源框架的时候才能更快的理解设计思路,在日常开发工作中才能写出易扩展,易维护,高内聚低耦合的优秀代码。
知识点总结
面向对象编程
万物皆为对象
程序是对象的集合,它们通过发送消息来告知彼此所要做的。
每个对象都有自己的由其他对象所构成的存储。
每个对象都拥有其类型。
某一特定类型的所有对象都可以接收同样的消息。
面向对象编程三要素
封装性
隐藏实现细节(访问控制)
定义接口
继承性
IS-A关系
HAS-A关系(组合)
多态性
后期绑定(虚函数)
向上转形(Up Casting)
面向对象分析
面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程。
充血模型与贫血模型
领域驱动设计DDD
面向对象设计的目的和原则
目的:强内聚、低耦合,从而使系统
易扩展 - 易于增加新的功能
更强壮 - 不容易被粗心的程序员破坏
可移植 - 能够在多样的环境下运行
更简单 - 容易理解、容易维护
####设计模式
设计模式是用于解决某一种问题的通用的解决方案。
设计模式也是语言中立的。
设计模式贯彻了设计原则。
23种基本设计模式
创建模式
单例模式
工厂模式
建造者模式
原型模式
行为模式
观察者模式
模板模式
策略模式
职责链模式
迭代器模式
状态模式
访问者模式
备忘录模式
命令模式
解释权模式
中介模式
结构模式
代理模式
桥接模式
装饰者模式
适配器模式
门面模式
组合模式
享元模式
####设计原则
开闭原则(OCP)
对子扩展是开发的
对子更改是关闭的
依赖倒置原则
高层模块不依赖低层模块。高层模块和低层模块应该通过抽象来互相依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。
所谓高层模块和低层模块的划分,简单来说就是,在调用链上,调用者属于高层,被调用者属于低层。
里式替换原则
子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。
简言之:子类型(subtype)必须能够替换掉它们的基类型(base type)。
里式替换原则是用来指导,继承关系中子类该如何设计的一个原则。
单一职责原则
一个类只负责完成一个职责或者功能。
不要设计大而全的类,要设计粒度小、功能单一的类。
单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。
类中的代码行数、函数或者属性过多,一般不满足单一职责原则。
但也不宜拆分的过于细致,影响代码的可维护性。
接口隔离原则
不应该强迫客户程序依赖它们不需要的方法。
接口隔离原则提供了一种判断接口的职责是否单一的标准:通过调用者如何使用接口来间接地判定。如果调用者只使用部分接口或接口的部分功能,那接口的设计就不够职责单一。
何为接口
一组 API 接口集合
单个 API 接口或函数
OOP 中的接口概念
####框架
框架是用来实现某一类应用的结构性的程序, 是对某一类架构方案可复用的设计与实现
如同框架结构的大厦的框架
简化应用开发者的工作
实现了多种设计模式,使应用开发者不需要花太大的力气,就能设计出结构良好的程序来
####软件设计的臭味
僵硬 - 不易改变。
脆弱 - 只想改 A,结果 B 被意外破坏。
不可移植 - 不能适应环境的变化。
导致误用的陷阱 - 做错误的事比做正确的事更容易,引诱程序员破坏原有的设计。
晦涩 - 代码难以理解。
过度设计、copy-paste 代码。
###总结
学习完第二周的课程越发觉得自己的基础很不扎实,面向对象,设计模式,设计原则真的只是一知半解,具体场景的应用就不行了。也认识到一直以来写不出来令人满意令自己满意的代码都是基本太差,思维局限。只有这些基本功掌握扎实了才能写出可读性高,易维护,易拓展的代码,避免烂代码。掌握了设计原则,利用好设计模式能让复杂功能的设计的代码可复用性,可拓展性,可维护性,可读性更高。达到高内聚、低耦合的目的。
训练营的课程更像是一副药引,引导自己结合课程去学习思考去查缺补漏,发掘自身的弱点。讲真现在这些课程看起来还是有些吃力的,每天都看一节课程并做笔记感觉很充实,只有不告诫自己坚持下去终会有收获。
评论