面向对象思想是什么(通俗易懂地解释面向对象思想)
面向对象 (Object Oriented,OO) 的思想对软件开发相当重要,它的概念和应用甚至已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD 技术、人工智能等领域。面向对象是一种 对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向过程 (Procedure Oriented) 是一种 以过程为中心 的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是 封装、继承、类。
无论是在软件开发还是在实际工作中,深入地理解软件开发的思想都非常有必要。

从一场比赛说起
在一个软件村里
有一名资深「面向过程」程序员——老过
和一名「面向对象」信徒——阿对
同时受雇于一家挨踢店
有一天老板突发奇想
决定让这两名程序员进行一次比赛
获胜者将获得一个限量的
360 度全自动按摩椅
编程比赛开始了

不一会,他俩都写出了几乎相同的代码


老过看到新需求,微微一笑


阿对决定让新的收银方式继承 Bill 类
先在 Bill 类中新增 discount 方法
并将其开放

普通的收费方式在 discount
函数中直接返回价格
七夕节的收费方式则继承此类
在 discount 函数中实现打 77折

当老过和阿对同时将程序交给老板时

老过已经开始幻想自己将来
坐在按摩椅上的舒服日子

听到新需求
老过一阵头大
不由在「面向过程天下第一群」中吐槽道

群友也附和说
可不是嘛
就是因为老板这么多需求
才会搞得面向过程的程序一团糟
吐槽归吐槽
老过在 getPrice 函数中
再次增加了条件判断

看着越来越复杂的
Bill 类和 getPrice 方法
老过眉头紧锁
他深知事情远没有结束
中秋和国庆一过
他还需要到这个复杂的类中
删掉打折的方法
天知道老板还会再提
什么天马行空的需求
无论是新增或删除代码,在这个过长的类里做修改都是件不太愉快的事。为了在一个很长的函数中找到需要修改的位置,「面向过程」使得老过不得不浏览大量与修改无关的代码,小心翼翼地修改后,又要反复确认不会影响到类的其他部分。
老过在心底里默默地祈祷
这个类不再需要修改
提交了自己的程序
阿对收到新需求时
先是新增了中秋节支付类

再增加了国庆节支付类

「面向对象」让阿对最喜欢的一点是

有一个好消息要告诉大家!
当老板兴高采烈地说出这句话时
老过和阿对都露出了心惊胆战的表情
这句话往往意味着要更改需求

老过反抗道
但他并没有说出心里另一个小九九
实在不想再去给 Bill 类添加代码了

这次修改老过花了较长的时间才完成

看着那个只属于七夕节的 gifts 变量
老过像看着自己白衬衫上的油渍一样难受
以后每次收费时都会生成一个
只有七夕节才会用到的变量
都是因为老板的需求太奇葩
才让这个程序看起来乱糟糟的
由于这个类做了修改
本来已经测试通过的代码又得重测一遍
阿对打开了 LoversDayBill 类
将其修改如下


当老板看完老过和阿对的代码后
再次兴奋地提出新需求时
老过顿时晕了过去......
比赛真是太焦灼了
最后赢得奖励的是?
第三个参赛者
老板的傻儿子
他完全不会写程序
但他使用 Ctrl+C,Ctrl+V
拷贝了阿对的代码

面试常见考点
在面试中,面向对象的常见考察点是三个基本特征:封装、继承、多态。
- 封装
- 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
- 继承
- 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。通过继承创建的新类称为「子类」或「派生类」,被继承的类称为「基类」、「父类」或「超类」。
- 要实现继承,可以通过 继承和组合 来实现。
- 多态性
- 多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单说就是一句话:允许将子类类型的指针赋值给父类类型的指针。
- 实现多态,有两种方式,覆盖和重载。两者的区别在于:覆盖在运行时决定,重载是在编译时决定。并且覆盖和重载的机制不同。例如在 Java 中,重载方法的签名必须不同于原先方法的,但对于覆盖签名必须相同。
我对面向对象的理解:面向对象的编程方式使得每一个类都只做一件事。面向过程会让一个类越来越全能,就像一个管家一样做了所有的事。而面向对象像是雇佣了一群职员,每个人做一件小事,各司其职,最终合作共赢!

引申阅读
最后,我们谈谈面向对象有什么好处?
《大话设计模式》中大鸟给小菜讲的故事非常经典:
“话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟道:‘喝酒唱歌,人生真爽……’众文武齐呼:‘丞相好诗!’于是一臣子速命印刷工匠刻版印刷,以便流传天下。”
“样张出来给曹操一看,曹操感觉不妥,说道:‘喝与唱,此话过俗,应改为‘对酒当歌’较好!’于是此臣就命工匠重新来过。工匠眼看连夜刻版之工,彻底白费,心中叫苦不迭。只得照办。”
“样张再次出来请曹操过目,曹操细细一品,觉得还是不好,说:‘人生真爽‘太过直接,应改问语才够意境,因此应改为‘对酒当歌,人生几何……’当臣子转告工匠之时,工匠晕倒……”
大鸟:“小菜你说,这里面问题出在哪里?”
小菜:“是不是因为三国时期活字印刷还未发明,所以要改字的时候,就必须要整个刻板全部重新刻。”
大鸟:“说得好!如果是有了活字印刷,则只需更改四个字就可,其余工作都未白做。岂不妙哉。
一、要改,只需更改要改之字,此为可维护;
二、这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;
三、此诗若要加字,只需另刻字加入即可,这是可扩展;
四、字的排列其实可能是竖排可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好。”
“而在活字印刷术出现之前,上面的四种特性都无法满足,要修改,必须重刻,要加字,必须重刻,要重新排列,必须重刻,印完这本书后,此版已无任何可再利用价值。”
小菜:“是的,小时候我一直奇怪,为何火药、指南针、造纸术都是从无到有,从未知到发现的伟大发明,而活字印刷仅仅是从刻版印刷到活字印刷的一次技术上的进步,为何不是评印刷术为四大发明之一呢?原来活字印刷是思想的成功,面向对象的胜利。”
-
装修大计,水电先行,电路作为隐蔽工程,一旦发生事故,轻则全屋短路,重则引发事故。可见做好电线布局十分重要,电线不能直接埋进墙体或者地面,应该进行穿线,防止电线绝缘层受损。因此,一款好的电工套管显得十分重要。然而,市面上的电工套管琳琅满目,如何选择一款性价比高、质量过硬的电工套管成了摆在业主面前的一道[详细]
-
爱养花的朋友来自各个领域,商人也是其中之一。大部分花店都为很多商务场所和家庭提供了各种花卉盆栽。他们对花卉的挑选和摆放都有很高的要求。今天这几种很受商业人士喜爱的花,不仅好看还有好寓意!白掌白掌,也被称为“一帆风顺”,代表着万事顺利。它四季常青,不会掉叶,适合在酸性泥炭土中生长,喜欢半阴半阳的环境,[详细]
-
小叶紫檀的“变色魔法”让玩家又爱又恨——有人盘出帝王紫,有人却盘成黑煤球!今天从科学原理到实操避坑,手把手教你掌控变色节奏,告别“盘毁”焦虑!一、小叶紫檀颜色进化全阶段新料阶段(0-3个月)橘红色:新切面如新鲜胡萝卜,阳光下泛金属光泽避坑点:警惕染色做旧!真新料颜色鲜活,假货发暗发灰氧化初期(3-6[详细]
-
地毯是酒店行业普遍使用到的一种软装材料,由于地毯的投入和维护成本较高并随着多种地面材料的出现,如强化地板、同质地垫以及地砖工艺的提高,酒店逐步减少了地毯的使用量,但地毯不可替代的优势,依然无法撼动地毯在酒店行业的应用。地毯有哪些优势呢?美化环境、阻隔灰尘、降低噪音、保温、提升档次等诸多优点,是别的地[详细]
-
作为一种新型的绿色肥料,稀土元素肥料在这几年的农业生产中变得越来越受众人关注。因为这类肥料可以提升作物的生长水平,那么都有哪些肥料呢?用这些肥料种出来的作物又有哪些优势呢?稀土元素肥料。稀土元素肥料是应用了以稀土元素为主的新的化学成分配比合成研制开发出的一种新型绿色肥料。这种肥料是以稀土元素的化合物[详细]