作者goooeooo (ge)
看板Soft_Job
标题[请益] 我这样解释OOP对吗?
时间Sun Nov 12 19:50:22 2017
以前面试遇到的问题
面试官问我什麽是OOP
当时我觉得我回答不好
我想请问以下 这样解释可以吗?
OOP观念 运用得宜可以将开发时间缩至最短 且观念正确下 也可让将来维护人员好维护
在大型系统下效果尤其显着
譬如今天开发仓库系统(我随意举例实际没有碰过这种系统)
由上往下分类 譬如有电子类、玩具类 此两类都还有很多继续向下的分类...
将电子类、玩具类 设计制作成大致物件
就是让此两类的向下分类几乎都是以此两物件做为变化继续修正或增加差异的部份来开发
譬如:电子类 再向下有手机类、电脑类
那将手机类、电脑类会共通的方法、逻辑再加上变数 制作成电子类物件
用电子类物件来小幅修正 完成向下的手机类跟电脑类两个小差异的部份就行了
照这样的规则一直向下 就是说 也将手机类跟电脑类 继续做成物件 供向下分类使用
也就是说你必须在规划开始时就已经思考好整个系统架构 会由几个最上层的物件开始向下
一直向下创造物件 让程式码进而达到最简化 但又能完成繁琐的任务
让开发人员可以快速开发 将来维护人员也可快速理解维护
所以最上层的物件设置规划非常重要 关系到整个系统开发的过程
这是我所理解的 请问这样可以解释OOP观念吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.173.252
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1510487425.A.5F4.html
※ 编辑: goooeooo (220.133.173.252), 11/12/2017 19:50:53
1F:→ guest0079: 完全不行 三句没讲出重点就下一个问题了 谁会听你废话 11/12 19:53
2F:→ guest0079: 你的回答是PM or Sales常用的表答方式 一整个嘴炮而已 11/12 19:55
3F:→ pttworld: 这只有继承。描述特性的意义最後再举例就好了。 11/12 19:56
4F:→ guest0079: 谁理你屁话一堆 讲重点好不好 你到底懂不懂啊 11/12 19:56
5F:→ guest0079: OOP就封装继承多型 重点在多型 你的回答充份反应你不懂 11/12 19:59
6F:→ steven11329: 开发时间缩至"最"短,我不是很认同,如果是相对 11/12 20:00
7F:→ steven11329: 容易维护我比较能接受。 11/12 20:00
8F:→ vi000246: 就封装继承多型 解释一下就好了 11/12 20:00
9F:→ hidog: 你还不如把继承 override等等讲一遍 11/12 20:02
10F:→ hidog: 最重要的不是那些屁话,而是怎麽实现OOP的概念 11/12 20:03
11F:→ martylin: 你在背课文喔,挖哩!!!!! 11/12 20:08
了解
我换个简短方式
封装:
譬如计算直角三角形 我只需要知道 我输入长跟宽长度 会得出斜边长度
不需要去了解内部公式是怎麽算的(长平方+宽平方=斜边平方)
继承:
譬如A物件 定义了100个变数 B物件需要这100个变数再加1个新的变数
B物件去继承A物件再加上1个新的变数 就完成了 不用再定义一次这100个变数
多型:
就有点类似
Select Case
传入不同的参数,会执行不同的Case
所以这样解释比较好对吗?
※ 编辑: goooeooo (220.133.173.252), 11/12/2017 20:32:38
12F:→ jj0321: 如果要最快的话 应该是学设计模式 把OOP用到极致 11/12 20:28
13F:→ hsnuyi: OOP就是资源再利用 一种回收的概念 11/12 20:34
14F:推 hidog: 我会随便挑一个open source的专案来解释他的继承关系XD 11/12 20:42
15F:→ hidog: 记得重点是如何应用OOP的概念开发 11/12 20:42
16F:→ hidog: 例如继承一个Image class,衍生出PNG,JPG等等class 11/12 20:43
17F:→ hidog: 共通介面可能是save,load等等,而实作各自不同 11/12 20:43
18F:→ hidog: 尽量往实作面去解释,举一些具体的例子 11/12 20:44
19F:推 quickey: reuse 11/12 20:46
20F:推 linkidd2: 多形的简单解释应该是一个型别物件会在runtime决定behav 11/12 20:51
21F:→ linkidd2: ior 11/12 20:51
22F:→ jen1121: 封装继承多型讲一讲,松散耦合依赖反转讲一讲,大概就特 11/12 20:54
23F:→ jen1121: 性跟设计思维都讲了 11/12 20:54
24F:→ diabloevagto: 缩短工作时间,让公司减少成本赚更多钱。结束 11/12 20:56
25F:→ x000032001: OOP特性谁都会背 最好是提个SOLID原则如何应用的 11/12 21:00
26F:推 TAKADO: 用蚵仔煎 虾仁煎 大阪烧来解释如何? 11/12 21:21
封装:
我只需要知道 先地瓜水 再蛋 再蚵仔 再蔡 翻面 好了 不用去了解他们的化学变化过程
继承:
用地瓜水物件+蚵仔 或 虾仁
所以不用分开准备蚵仔专用地瓜水 或虾仁专用地瓜水
直接一大锅地瓜水通用
多型:
综合煎+双蛋的客制化细部要求
这样解释对吗?
27F:推 chuegou: 我们用汤圆 麻糬 团子 大福 元宵 来解释看看 11/12 21:40
※ 编辑: goooeooo (220.133.173.252), 11/12/2017 22:19:11
29F:推 A90812345: 我觉得这些白话文解释不错欸 比课本上好懂多了 11/12 23:00
30F:推 vi000246: 既然半夜了 我们用鸡排、鸡排饭、鸡排汉堡来解释看看 11/12 23:31
31F:→ y3k: 蛋、蛋包饭、蛋包<食物> <=大概这样 11/12 23:50
32F:推 gundam00: OOP不就是现实世界所有物品缩影的程式化观念吗 11/13 00:16
33F:→ Argos: Bob大叔才吐嘈过用现实物件解释OOP是一种buzz word XDD 11/13 01:41
34F:推 Argos: 其实应该要看问题是什麽 问题是「什麽是OOP」 11/13 01:43
35F:→ Argos: 还是「OOP有什麽好处」 还有「OOP好的设计跟不好的差在?」 11/13 01:43
36F:→ Argos: 如果单单只是问什麽是OOP 就封装继承多型大概就可以了 11/13 01:44
37F:→ Argos: 顺便再讲一点好处 就是提高程式复用性 和系统分割 11/13 01:44
38F:→ Argos: 最後再深入提 好与不好的设计 就是SOLID和设计模式架构模式 11/13 01:45
39F:→ dnabossking: 看吧,其实一堆人都不知到,事实就是,搞不好面试官 11/13 01:57
40F:→ dnabossking: 自己也没法说的很好 11/13 01:57
41F:推 ChoDino: reuse是基本核心,为了reuse才有封装继承多型 11/13 02:41
42F:推 goodnight4Tw: 别人就是不懂才上来问,一楼不知道在凶三小 11/13 03:57
谢谢你!
不过也好在我有上来问
不然我可能每次都会回答最上面的说法 那我可能被打枪打到死~
因为我非本科生 所以这种答非所问的情况很常发生
考验面试官的能力 跟我的能力...
※ 编辑: goooeooo (220.133.173.252), 11/13/2017 08:36:41
43F:推 rexyeah: 原po真是有好学的精神,你一定会越来越强 11/13 08:51
44F:推 legendmtg: 我倒觉得基本核心是decoupling 11/13 09:13
45F:推 sss81521: 封装 ADT 解释清楚就可以了吧 11/13 10:28
46F:→ loveflames: 封装继承多型(基础概念),reuse与抽象化(用途),SOLID 11/13 11:10
47F:→ loveflames: 与DP(设计原则) 11/13 11:12
48F:→ loveflames: 讲DP就会一并带到decoupling了 11/13 11:15
49F:→ loveflames: is-a、has-a、uses-a也要理解,才能决定继承、组合何 11/13 11:26
50F:→ loveflames: 时用 11/13 11:26
51F:推 Rachelmas: 我会想跟原po当同事 绝对不会想跟1楼当同事哈哈 11/13 13:10
52F:推 Rachelmas: 我倒是觉得深入浅出的回答才最好 举例没错啊 你觉得 11/13 13:13
53F:→ Rachelmas: OOP包含多型封装继承我Wiki不到吗?但如果你能举出 11/13 13:14
54F:→ Rachelmas: 实例 不就代表你已经成功内化这个知识了 好奇难道 11/13 13:15
55F:推 Sidney0503: OO是抽象概念 很明显你没有这个"抽象概念" 11/13 13:15
56F:→ Rachelmas: 面试官会觉得能背出课本内容会好过举出比喻... 11/13 13:15
57F:→ loveflames: 亲自设计一个简单范例是最好方法 11/13 13:28
58F:→ loveflames: 当然,范例设计成只用来解释继承、封装、多型是不够的 11/13 13:28
59F:推 Argos: 重点是在面试这极短时间里要完整解释OOP不太可能阿 11/13 14:56
60F:→ Argos: OOP这题目范围也是很大的 11/13 14:56
61F:推 luke72: 课文背得很熟 但你的答案套上agile就死掉了 11/13 16:31
62F:→ luke72: OO就是想办法reuse而已 封装继承多型全部都是reuse的方法 11/13 16:33
63F:→ luke72: "你必须在规划开始时就已经思考好整个系统架构"<-- 不可能 11/13 16:35
64F:→ luke72: 综观全局 依现状建立出物件结构 尽可能适应未来的改变 11/13 16:37
65F:推 luke72: 举例好了 蚵仔煎 客户可能随时要换成虾仁煎 花枝煎 11/13 16:41
66F:→ luke72: 然後店越开越大 可能会变成米其林蚵仔煎 或者 大阪烧 11/13 16:46
67F:推 hungyanbin: 一楼真的不知道在凶啥,我觉的OOP不是一开始就能完全 11/13 20:01
68F:→ hungyanbin: 理解的,要反覆的实作跟思考,楼主也不用在意有人说你 11/13 20:01
69F:→ hungyanbin: 背课文,谁不是这样过来的呢?建议你可以多看看几本书 11/13 20:01
70F:→ hungyanbin: ,像最近出的Clean Architecture就很不错(推坑) 11/13 20:01
71F:推 xczh: 这个没有绝对的答案,请不要否决他人的热心回答 11/14 01:00
72F:→ yzfr6: 两三句话就能讲完的,你在这长篇大论 11/14 07:54
73F:→ loveflames: 有人跩到说别人的回答都不及格,就他最厉害 11/14 08:33
74F:推 APTON: 看了整串讨论串 都没人可以说出版众都满意的解答 11/14 11:14
75F:嘘 THEWORLDS: 这根本送分题....................................... 11/15 03:28
76F:→ Sidney0503: 楼楼上 #1Q2cj6n9 众人都推 11/21 12:38