三大核心:封装,继承,多态
三大核心无处不在,不管是php传统的面向过程化编程,还是后来加入的oop面向对象编程,都一直贯穿整个php的发展进步史。
面向对象,面向接口五大原则:单一职责,封闭-开放,接口隔离,依赖倒置,替换原则
看到书中对于五大原则的讲解非常详细,但是不易于记忆,个人自我总结下:
单一职责:想到单一职责,我脑子里会想到这不就是核心概念里面的封装吗?打个比方就是吃饭这个动作,可以比喻成人的一个职责。那么吃饭就不应该有其他动作,就像小时候爸妈常教育我们一样,吃饭的时候不要说话,吃饭的时候不要玩手机,这就是单一职责,吃饭可能由很多动作组成,但是它最终的目的就是把饭放入嘴里。就像封装一个类一样,类里面的接口eat(),吃饭可能用到嘴,手,碗,筷子。。这些属性,但是绝对不会用到电视。
封闭-开放: 封闭可以和上面的单一职责串联起来,就是我这个类产生的对象,是封闭的我只做输出固定的方法,做固定的事,你不能要求我做别的。这样感觉我们是冲突的封闭和开放就是一对反义词,但是不然,封闭是对这个类,这个对象的功能的封装,开放是对这个对象的成长开放。例如说模块的拓展,就像我刚开始封装一个人的类,我可以创建出工人这个对象,工人这个对象的固定职责就是工作干活,我再生成一个老师这样一个对象,职责就是教书育人。这样就封装好了,,,但是后来我又想再封装一个老板或者封装一个程序猿这样的一个对象,,,那么就用到了我们的核心开放,针对我们写的类这个对象的生成模板,不是一成不变的。我们封闭的意义是给一个对象定义单一的一个职责,而开放是为了让这个类具有更多的创造能力,可以创造更多具有单一职责的对象。
接口隔离:这个可能就是对一个类里面的接口做一个封闭,或者理一下关系,一个类然后是很多个对象然后是很多的方法(接口),接口的隔离其实也很想单一职责里面说的。但是接口更像是更细分,更小。我们说单一职责,是对象老师负责教书育人这是他的职责,但是教书育人怎么教呢,,,那么问题来了。这就涉及对象后的接口,我理解是方法。也就是对象生成后调用的接口应该是隔离的。。。如对象是老师,职责教书育人,调用的接口很多,如讲课,备课,管理班级,批改试卷。。。而接口隔离,就像是我在备课,但是你不能让我备课的时候再去批改试卷,这就是接口隔离的意义吧!当然理论上说,老师这个对象一遍备课,一遍批改是试卷是可以的,但是我们设计类,设计对象,设计接口的时候不能这么做,这就是接口隔离。
依赖倒置:这个依赖倒置我感觉更像是人为判断和固定思维。。。举一个应用场景哈, 我和我老婆去商场买化妆品,然后到化妆品柜台去了,问有没有xxx洗脚水(开玩笑哈!!!),然后柜台服务员像我们介绍洗脚水,我们买完然后结账。 这是正常流程,而依i赖倒置原则我理解是,你可以这样走正常流程去买洗脚水。然后调用各种对象去处理这个流程中涉及的动作,但是你也必须可以反着来,,,反过来就是站在化妆品柜台的角度,柜台服务员看到我和我老婆过来了,然后这个化妆品柜台比较奇葩它只买洗脚水,然后直接就想我们介绍洗脚水,然后买完结账。这就像是一个固定思维,当我走到洗脚水化妆品店门口的时候就,判断出我是买洗脚水的。然后直接走接下来的流程。。。而不是我选择了要买洗脚水然后选择去化妆品店门口。就像是倒着来的,化妆品洗脚水并不依赖于察言观色,反正来了就是买洗脚水的,
替换原则:这个就设计到了核心中的继承了,当创建一个基类,然后再写一个派生类也就是子类的时候,子类必须可以替代父类在任何一个地方出现,也就是子类必须能实现父类所能实现的功能,当然这是在特定的场景下,因为派生类本来就是为了应对不同的场景,然后根据细微的区别而产生的。
其实上面的总结我也是一知半解,不太理解多态去哪了,多态可能更多的设计到业务场景,就像在人这个类中,给出一些特征(也就是参数)来生成一个对象,这就像是多态,在不同的参数下会生成不一样的对象,就像我们确定一个人是做什么工作的,如果给你说特征,,,比如教书,然后公务员,工作地点在学校,那么你应该可以确定这个对象是一个老师,如在工地干活,干体力活,晒得有点黑,身体强壮,你也应该可以判断他是一个工人对象。这应该就是多态的定义吧!我们上面说到面向对象设计五大原则基本都设计到了封装,继承和多态。很灵活,也很容易被绕晕,我到现在都不敢说自己能完全理解这三大核心和五大原则,但是这三核五大确实是编程的开始和经典。
原文地址:https://www.cnblogs.com/yangtaog/p/10887956.html