目录
1.导入
2.三大特征
3.六大原则
4.总结
一、 导入
过年了,锣鼓喧天,鞭炮齐鸣,欢天喜地~
七大姑八大姨:代文,有对象了吗?
我:那肯定的。
她们:什么时候交的啊?家哪里的?身高?长相。。。。
我:刚new出来的,你们想要什么样的,我按需再new一个。
妈:文文天天new对象,也不知道new的咋样了。
我:哈哈哈哈哈。。快了,快了。。。。。
1.1什么是面向过程?什么是面向对象?
是按硬盘&U盘的区别
A.面向过程编写:把关键代码写在一起。 就好比给一个安装好的主机箱安装硬盘。打开主机箱,将装机时为了美观扎好的数据线进行拆解,选择数据线插在硬盘上,再把剩下的线重新扎好,最后封装好主机箱,费时费力。
这个就是面向过程,所有的事情,是一步步完成的,整个过程像一个流水线。A->B->C->D…
B.面向对象:是上帝式思想。在上帝眼中:万物皆对象 。
某天,同事看我桌面有个录屏软件还不错,让我拷一个安装包给他。悻悻地拿出他的U盘,此时,我将U盘插入USB接口,奈何,U盘容量太小,不足以存储该安装包。
我: 这128M的U盘容量太小,换个大容量的来!
他: 给,这32G的,拿去拷!
等待1,2,3s…拷贝完毕~
那么,只需要将准备好的U盘对准USB接口接入就可以了,在整个过程中主机原本内部构造并没有任何变化。如果想对 U 盘进行扩容或者修改,只需要操作 U 盘甚至是替换 U 盘,而不是想办法改变主机内部来适应U盘,这就是面向对象。
那么,将上述思想运用在代码中,将后期可能发生改变的因素放在外部,将确定不会改变的因素作为底层,这样后期代码的修改和扩展效率就高很多。这种将代码拆分,避免牵一发而动全身的思想,就是封装。
二、三大特征
1.封装:分而治之,变则疏之,高内聚、低耦合
2.继承:隔离变化、代码复用
3.多态:调用父类,不同的子类执行,实现不同的效果
2.1.1分而治之,变则疏之 面向对象首先要做的是分,将需要改变的代码分离出去,将不需要改变的代码整合到一起。
比如,多功能数据线。
2.1.2高内聚、低耦合
- 高内聚:在一个类中,尽量做到多个方法围绕一个功能展开,紧紧围绕,每个方法实现不同的板块,组合形成一个功能。
- 低耦合:类与类之间,尽量不要有关联,否则,容易引起牵一发而动全身。比如:插座一般为两孔或者三孔,倘若厂家突然有一天想取消两孔设计,换为更稳定的四孔,那么,与之对应用所有两孔插头的商品,将处于瘫痪状态,只能对应设计四孔插头,得不偿失,所以,降低类之间的耦合度尤为重要。
2.2继承:隔离变化、代码复用
先陈述代码复用
2.2.1代码复用为了避免后期代码的变化导致工程量的增加,首先要做的是将不会变化的代码变成一个大的框架,给它们一个统一的类型,也就是统一继承。
比如:狗(父类,会叫,会爬),金毛(子类1,特征:搬东西),泰迪(子类2,特征:表演),哈士奇(子类3,特征:拆家)。。。狗类不止金毛,泰迪,哈士奇三类,还有很多其它种类,但不管什么种类,都属于狗这个父类,他们都拥有狗(父类)的性质,此时,子类就可以继承父类。
# 举个栗子:python实现
class Dog:
def fun_yad(self):
print("我是狗,汪汪~")
def fun_run(self):
print("我是狗!我会爬")
class glogdog(Dog):
def __init__(self,name):
self.name=name
def special(self):
print("我是%s,我会搬东西"%(self.name))
dog01 = Dog()
dog01.fun_yad()
dog01.fun_run()
gloddog01 = glogdog("花花")
gloddog01.special()
gloddog01.fun_run()
gloddog01.fun_yad()
2.2.2&2.3继承的隔离变化与多态一起说明:用一张图来说明。
如上图所示,小王要搬行李,面对众多的行李,易碎类需格外小心,书籍类很沉…首先,我们想到的是,必须按照不同的的类别分装(封装),然后,这些所有的类别拥有共性,需把它们都从寝室搬到楼下,需要装进行李,装进行李箱等,将些共性抽出来,形成行李这个类别(继承)。小王搬(调用)行李(父类),实则是通过行李(父类)访问具体的类别(子类),不同的子类执行效果不同,即:多态
三、六大原则
- 开闭原则: 对扩展开放,对修改关闭。
- 依赖倒置: 调用父类,不同子类实现不同效果。
- 单一原则: 一个类紧密围绕某个功能模块,应只有一个改变他的原因。
- 组合复用: 在一个类中,需要调用另一个类的方法,通过过类名.方法()来实现,降低耦合度。
-
里氏替换: 继承优良传承,改革发扬光大。只要父类可以被调用,子类就一定要代替父类被调用。要求父类尽可能
不要存在太具体的功能,能抽象就尽量抽象,任何的修改都完全依靠子类来补充和修改,从而进一步实现开闭原则(父类对修改关闭,子类对修改开放。
- 迪米特原则: 类与类之间做到:各人自扫门前雪,莫管他人瓦上霜。即低耦合。
四、总结
不论是三大特征还是六个原则,说白了,其本意均为在现有的代码结构上,让我们后续的维护尽可能变得轻松。
于是,就有才有了前辈们总结出的条条款款。这些定律可以帮助我们后来者更轻松、高效的工作。
但在一定程度上,这些条款太过于抽象,不太好理解,可能读完第一遍,你发现每个字你都认识,但组合起来就不知道是什么意思了,所以,需要花时间、精力细细体会,当你恍然大悟的那一天,你会发现,每个字都恰到好处,可谓字字珠玑。
切记:定律虽好,但不能为了靠定律而写代码,而应改在你的需求上,尽可能使用,以此来简化开发,提高效率,合理使用,你写的代码就会像”诗“一样。
哈哈,奋斗吧,少年!