顯示廣告
隱藏 ✕
※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2017-12-03 20:52:39
看板 Soft_Job
作者 goooeooo (ge)
標題 [請益] 我這樣解釋OOP對嗎?
時間 Sun Nov 12 19:50:22 2017




以前面試遇到的問題

面試官問我什麼是OOP

當時我覺得我回答不好

我想請問以下 這樣解釋可以嗎?


OOP觀念 運用得宜可以將開發時間縮至最短 且觀念正確下 也可讓將來維護人員好維護

在大型系統下效果尤其顯著

譬如今天開發倉庫系統(我隨意舉例實際沒有碰過這種系統)

由上往下分類 譬如有電子類、玩具類 此兩類都還有很多繼續向下的分類...

將電子類、玩具類 設計製作成大致物件

就是讓此兩類的向下分類幾乎都是以此兩物件做為變化繼續修正或增加差異的部份來開發

譬如:電子類 再向下有手機類、電腦類


那將手機類、電腦類會共通的方法、邏輯再加上變數 制作成電子類物件

用電子類物件來小幅修正 完成向下的手機類跟電腦類兩個小差異的部份就行了

照這樣的規則一直向下 就是說 也將手機類跟電腦類 繼續做成物件 供向下分類使用

也就是說你必須在規劃開始時就已經思考好整個系統架構 會由幾個最上層的物件開始向下

一直向下創造物件 讓程式碼進而達到最簡化 但又能完成繁瑣的任務


讓開發人員可以快速開發 將來維護人員也可快速理解維護

所以最上層的物件設置規劃非常重要 關係到整個系統開發的過程



這是我所理解的 請問這樣可以解釋OOP觀念嗎?

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.173.252
※ 文章代碼(AID): #1Q23M1Nq (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1510487425.A.5F4.html
※ 編輯: goooeooo (220.133.173.252), 11/12/2017 19:50:53
guest0079: 完全不行 三句沒講出重點就下一個問題了 誰會聽你廢話1F 11/12 19:53
guest0079: 你的回答是PM or Sales常用的表答方式 一整個嘴炮而已
pttworld: 這只有繼承。描述特性的意義最後再舉例就好了。3F 11/12 19:56
guest0079: 誰理你屁話一堆 講重點好不好 你到底懂不懂啊4F 11/12 19:56
guest0079: OOP就封裝繼承多型 重點在多型 你的回答充份反應你不懂
steven11329: 開發時間縮至"最"短,我不是很認同,如果是相對6F 11/12 20:00
steven11329: 容易維護我比較能接受。
vi000246: 就封裝繼承多型 解釋一下就好了8F 11/12 20:00
hidog: 你還不如把繼承 override等等講一遍9F 11/12 20:02
hidog: 最重要的不是那些屁話,而是怎麼實現OOP的概念
martylin: 你在背課文喔,挖哩!!!!!11F 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
jj0321: 如果要最快的話 應該是學設計模式 把OOP用到極致12F 11/12 20:28
hsnuyi: OOP就是資源再利用 一種回收的概念13F 11/12 20:34
hidog: 我會隨便挑一個open source的專案來解釋他的繼承關係XD14F 11/12 20:42
hidog: 記得重點是如何應用OOP的概念開發
hidog: 例如繼承一個Image class,衍生出PNG,JPG等等class
hidog: 共通介面可能是save,load等等,而實作各自不同
hidog: 盡量往實作面去解釋,舉一些具體的例子
quickey: reuse19F 11/12 20:46
linkidd2: 多形的簡單解釋應該是一個型別物件會在runtime決定behav20F 11/12 20:51
linkidd2: ior
jen1121: 封裝繼承多型講一講,鬆散耦合依賴反轉講一講,大概就特22F 11/12 20:54
jen1121: 性跟設計思維都講了
diabloevagto: 縮短工作時間,讓公司減少成本賺更多錢。結束24F 11/12 20:56
x000032001: OOP特性誰都會背 最好是提個SOLID原則如何應用的25F 11/12 21:00
TAKADO: 用蚵仔煎 蝦仁煎 大阪燒來解釋如何?26F 11/12 21:21

封裝:

我只需要知道 先地瓜水 再蛋 再蚵仔 再蔡 翻面 好了 不用去了解他們的化學變化過程

繼承:

用地瓜水物件+蚵仔 或 蝦仁

所以不用分開準備蚵仔專用地瓜水 或蝦仁專用地瓜水

直接一大鍋地瓜水通用

多型:

綜合煎+雙蛋的客製化細部要求

這樣解釋對嗎?

chuegou: 我們用湯圓 麻糬 糰子 大福 元宵 來解釋看看27F 11/12 21:40
※ 編輯: goooeooo (220.133.173.252), 11/12/2017 22:19:11
qrtt1: https://goo.gl/sxpRte 可以參考 java 版同串討論啊xd28F 11/12 23:00
Re: [問題] 以父類別宣告然後以子類別的建構子new - 看板 java - 批踢踢實業坊
 忍者 n = new 自來也(); 忍者 m = new 綱手(); n.招喚術(); // 文太出現了 m.招喚術(); // 蝸蝓出現了 ==============================
 
A90812345: 我覺得這些白話文解釋不錯欸  比課本上好懂多了29F 11/12 23:00
vi000246: 既然半夜了 我們用雞排、雞排飯、雞排漢堡來解釋看看30F 11/12 23:31
y3k: 蛋、蛋包飯、蛋包<食物> <=大概這樣31F 11/12 23:50
gundam00: OOP不就是現實世界所有物品縮影的程式化觀念嗎32F 11/13 00:16
Argos: Bob大叔才吐嘈過用現實物件解釋OOP是一種buzz word XDD33F 11/13 01:41
Argos: 其實應該要看問題是什麼 問題是「什麼是OOP」
Argos: 還是「OOP有什麼好處」 還有「OOP好的設計跟不好的差在?」
Argos: 如果單單只是問什麼是OOP 就封裝繼承多型大概就可以了
Argos: 順便再講一點好處 就是提高程式複用性 和系統分割
Argos: 最後再深入提 好與不好的設計 就是SOLID和設計模式架構模式
dnabossking: 看吧,其實一堆人都不知到,事實就是,搞不好面試官39F 11/13 01:57
dnabossking: 自己也沒法說的很好
ChoDino: reuse是基本核心,為了reuse才有封裝繼承多型41F 11/13 02:41
goodnight4Tw: 別人就是不懂才上來問,一樓不知道在兇三小42F 11/13 03:57

謝謝你!

不過也好在我有上來問

不然我可能每次都會回答最上面的說法 那我可能被打槍打到死~

因為我非本科生 所以這種答非所問的情況很常發生

考驗面試官的能力 跟我的能力...
※ 編輯: goooeooo (220.133.173.252), 11/13/2017 08:36:41
rexyeah: 原po真是有好學的精神,你一定會越來越強43F 11/13 08:51
legendmtg: 我倒覺得基本核心是decoupling44F 11/13 09:13
sss81521: 封裝 ADT 解釋清楚就可以了吧45F 11/13 10:28
loveflames: 封裝繼承多型(基礎概念),reuse與抽象化(用途),SOLID46F 11/13 11:10
loveflames: 與DP(設計原則)
loveflames: 講DP就會一併帶到decoupling了
loveflames: is-a、has-a、uses-a也要理解,才能決定繼承、組合何
loveflames: 時用
Rachelmas: 我會想跟原po當同事 絕對不會想跟1樓當同事哈哈51F 11/13 13:10
Rachelmas: 我倒是覺得深入淺出的回答才最好 舉例沒錯啊 你覺得
Rachelmas: OOP包含多型封裝繼承我Wiki不到嗎?但如果你能舉出
Rachelmas: 實例 不就代表你已經成功內化這個知識了 好奇難道
Sidney0503: OO是抽象概念   很明顯你沒有這個"抽象概念"55F 11/13 13:15
Rachelmas: 面試官會覺得能背出課本內容會好過舉出比喻...56F 11/13 13:15
loveflames: 親自設計一個簡單範例是最好方法57F 11/13 13:28
loveflames: 當然,範例設計成只用來解釋繼承、封裝、多型是不夠的
Argos: 重點是在面試這極短時間裡要完整解釋OOP不太可能阿59F 11/13 14:56
Argos: OOP這題目範圍也是很大的
luke72: 課文背得很熟  但你的答案套上agile就死掉了61F 11/13 16:31
luke72: OO就是想辦法reuse而已  封裝繼承多型全部都是reuse的方法
luke72: "你必須在規劃開始時就已經思考好整個系統架構"<-- 不可能
luke72: 綜觀全局  依現狀建立出物件結構  盡可能適應未來的改變
luke72: 舉例好了  蚵仔煎  客戶可能隨時要換成蝦仁煎 花枝煎
luke72: 然後店越開越大  可能會變成米其林蚵仔煎 或者 大阪燒
hungyanbin: 一樓真的不知道在兇啥,我覺的OOP不是一開始就能完全67F 11/13 20:01
hungyanbin: 理解的,要反覆的實作跟思考,樓主也不用在意有人說你
hungyanbin: 背課文,誰不是這樣過來的呢?建議你可以多看看幾本書
hungyanbin: ,像最近出的Clean Architecture就很不錯(推坑)
xczh: 這個沒有絕對的答案,請不要否決他人的熱心回答71F 11/14 01:00
yzfr6: 兩三句話就能講完的,你在這長篇大論72F 11/14 07:54
loveflames: 有人跩到說別人的回答都不及格,就他最厲害73F 11/14 08:33
APTON: 看了整串討論串 都沒人可以說出版眾都滿意的解答74F 11/14 11:14
THEWORLDS: 這根本送分題.......................................75F 11/15 03:28
Sidney0503: 樓樓上 #1Q2cj6n9  眾人都推76F 11/21 12:38

--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 309 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇