Re: [请益] 我这样解释OOP对吗?

楼主: aoksc (重出江湖)   2017-11-15 22:24:07
面试的时候也常被问这问题
后来自己整理过后大概有自己的解释方式
还好没面试官听到睡着
也有被称赞过解释的不错
所以分享给各位参考看看
如果有错也希望各位纠正一下
OOP的三大精神分别为封装、继承、多型
封装的目的是要隐藏私有成员
让外部使用者透过公开的接口去使用
这好处是可以规范限制外部使用者
避免任意存取发生意料之外的行为
继承的目的是要让子类别扩充父类别所有的公开或限定子类别可见的成员
多型的功能是可以让你对一个物件使用不同的型别去操作
这好处是可以让不同类别但是继承或是实做相同接口(interface)用同一个型别去操作
你只需要注意物件是否有共通的型别而不须注意物件本身怎么实作
继承跟接口(interface)使用上的差别?
继承在使用上子类别跟父类别一定有is a的关系(虽然说我看过的code这根本就是屁…)
但是接口不一定有is a的关系
相反的
某些行为或属性是某些类别有但其他类别又没有的话
那么就适合把这些东西抽离出来
让有需要的类别去实作
又能不破坏类别继承的关系
※ 引述《goooeooo (ge)》之铭言:
: 以前面试遇到的问题
: 面试官问我什么是OOP
: 当时我觉得我回答不好
: 我想请问以下 这样解释可以吗?
: OOP观念 运用得宜可以将开发时间缩至最短 且观念正确下 也可让将来维护人员好维护
: 在大型系统下效果尤其显著
: 譬如今天开发仓库系统(我随意举例实际没有碰过这种系统)
: 由上往下分类 譬如有电子类、玩具类 此两类都还有很多继续向下的分类...
: 将电子类、玩具类 设计制作成大致物件
: 就是让此两类的向下分类几乎都是以此两物件做为变化继续修正或增加差异的部份来开发
: 譬如:电子类 再向下有手机类、电脑类
: 那将手机类、电脑类会共通的方法、逻辑再加上变量 制作成电子类物件
: 用电子类物件来小幅修正 完成向下的手机类跟电脑类两个小差异的部份就行了
: 照这样的规则一直向下 就是说 也将手机类跟电脑类 继续做成物件 供向下分类使用
: 也就是说你必须在规划开始时就已经思考好整个系统架构 会由几个最上层的物件开始向下
: 一直向下创造物件 让程式码进而达到最简化 但又能完成繁琐的任务
: 让开发人员可以快速开发 将来维护人员也可快速理解维护
: 所以最上层的物件设置规划非常重要 关系到整个系统开发的过程
: 这是我所理解的 请问这样可以解释OOP观念吗?
作者: APTON (玮玮)   2017-11-17 13:06:00
父子骑驴写太少会被说 没有懂精髓 写太多被说在写作文 XDDD
作者: loveflames (咕啾咕啾魔法阵)   2017-11-15 23:05:00
接口也是要满足is-a接口可以看成一种特殊的class
作者: sunsamy   2017-11-16 00:26:00
这样解释看得出来原po有懂没有通(内化)
楼主: aoksc (重出江湖)   2017-11-16 00:55:00
不晓得哪里还可以加强呢?
作者: newton2009 (好瘦唷QQ)   2017-11-16 07:50:00
能举得出一个简单、清楚的实例,就会通个七、八成唷。
作者: meowyih (meowyih)   2017-11-16 08:10:00
说真的. 这标题可以有这么多回文, 然后每个回文下还都有人在吐槽别人的答案, 真是不可思议 = =a 如果是我的话只会问你写过完成什么东西, 其中利用OO的好处和坏处是什么如果没用OO理由又是什么, 真的做出什么东西, 又不是清朝科举, 大家纸上谈兵写八股比高下 :p
作者: pttuser (pttuser)   2017-11-16 09:36:00
推楼上真枪实弹就是问如何用C表现出OO精神,然后内存优化程度,问完程度如何就知道了,结果一堆回文都在比作文
作者: gn01838335 (寂静的生存者)   2017-11-16 11:42:00
又不是每个人都是底层@@我比较在意内存回收和什么时候会收的问题。
作者: Sidney0503 (Sidney0503)   2017-11-16 12:43:00
推meowyih 问写过什么比较一下就好 前面几篇根本课文
作者: VanDeLord (HelloWorld)   2017-11-16 13:22:00
强人领导下,领导者每一个细节都会反映在企业文化上orz,推错
作者: Argos (Big doge is watching u)   2017-11-16 17:26:00
又不是知道底层原理 OOP设计就能设计得好...= =
作者: pttuser (pttuser)   2017-11-16 18:46:00
楼上你说的没错阿,但知道OO在底层大概是怎样的面貌,至少在原始设计上会多些考量,是说原始设计上喔
作者: bibo9901 (function(){})()   2017-11-17 01:14:00
为何不能? 知道底层是如何实现, OOP只剩语法问题而已,可以直接思考最好的抽象方法很多人讲到OOP就喜欢写鸡汤文, 一讲到实作就说"我不需要知道, 知道了也没好处" 跟本是码农思想的极致
作者: Argos (Big doge is watching u)   2017-11-17 09:58:00
楼上大概是万中选一的绝世天才吧 只懂底层原理 OOP其它概念与模式都不用看了就能自成一派 受小弟一拜

Links booklink

Contact Us: admin [ a t ] ucptt.com