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