架构师训练营第二周总结
什么是面向对象编程
万物皆对象
程序是对象的集合,它们通过发送消息来告知彼此要做的
每个对象都有自己的有其他对象所构成的存储
每个对象都拥有其类型
某一特定类型的所有对象都可以接收同样的消息
利用多态特性进行编程
区别于面向对象分析
面向对象分析是将客观世界,即编程的业务领域进行对象分析(充血模型与贫血模型;领域驱动设计DDD)
什么是对象
状态:表明每个对象可以有自己的数据
行为:表明每个对象可以产生行为
标识:表明每个对象都区别于其他对象
面向对象编程三要素
封装:隐藏实现
继承:接口重用
多态:对象互换
面向对象设计的目的和原则
目的
强内聚、低耦合(易扩展、更强壮、可移植、易维护)
不好的设计
僵化:很难改动,改动成本高,涉及模块多
脆弱:对系统改动容易影响到其他模块
牢固:有些模块不易拆解,使之成为可重用组件
粘滞:做正确事情比错误事情困难
不必要的复杂性:包含没用的部分
不必要的重复性:有重复结构
晦涩:难理解
原则
为了达到设计目的,总结了多种指导原则
原则是独立于编程语言的,可以用于非面向对象的编程语言中
开、闭原则(OCP)
对扩展是开放的,对更改是封闭的,关键是抽象
抽象类/接口
策略模式
适配器模式
观察者模式
依赖倒置原则(DIP)
高层模块不能依赖低层模块,大家都依赖抽象
抽象不能依赖实现,而是实现依赖抽象
倒置:模块与包的依赖关系,开发顺序和职责
软件层次化:高层决定低层,高层被重用
里式替换原则(LSP,liskov替换)
子类型必须能替换掉它们的基类型
子类一定得拥有基类的整个接口
子类的访问控制不能比基类更严格
解决办法:提取共性到基类,改成组合
检测LSP:
通过客户程序体现
避免过于复杂或过度设计
只预测明显违反LSP的情况,推迟其他预测
单一职责原则(SRP)-内聚性相关
内聚性原则,一个模块组成元素之间的功能相关性
一个类,只能有一个引起它变化的原因
违反后果:
脆弱性、不可移植性
方法:分清职责
接口分离原则(ISP)-内聚性相关
不应该强迫客户程序依赖它们不需要的方法
版权声明: 本文为 InfoQ 作者【xs-geek】的原创文章。
原文链接:【http://xie.infoq.cn/article/db6f9e10be5e3aa73e57a4e65】。未经作者许可,禁止转载。
评论