看板 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
※ 同主題文章:
[請益] 我這樣解釋OOP對嗎?
11-12 19:50 goooeooo.
※ 編輯: goooeooo (220.133.173.252), 11/12/2017 19:50:53
→ guest0079: 完全不行 三句沒講出重點就下一個問題了 誰會聽你廢話你的回答是PM or Sales常用的表答方式 一整個嘴炮而已1F 11/12 19:53
→ pttworld: 這只有繼承。描述特性的意義最後再舉例就好了。3F 11/12 19:56
→ guest0079: 誰理你屁話一堆 講重點好不好 你到底懂不懂啊
OOP就封裝繼承多型 重點在多型 你的回答充份反應你不懂4F 11/12 19:56
→ steven11329: 開發時間縮至"最"短,我不是很認同,如果是相對
容易維護我比較能接受。6F 11/12 20:00
→ vi000246: 就封裝繼承多型 解釋一下就好了8F 11/12 20:00
→ hidog: 你還不如把繼承 override等等講一遍
最重要的不是那些屁話,而是怎麼實現OOP的概念9F 11/12 20:02
→ 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的專案來解釋他的繼承關係XD
記得重點是如何應用OOP的概念開發
例如繼承一個Image class,衍生出PNG,JPG等等class
共通介面可能是save,load等等,而實作各自不同
盡量往實作面去解釋,舉一些具體的例子14F 11/12 20:42
推 linkidd2: 多形的簡單解釋應該是一個型別物件會在runtime決定behavior20F 11/12 20:51
→ jen1121: 封裝繼承多型講一講,鬆散耦合依賴反轉講一講,大概就特性跟設計思維都講了22F 11/12 20:54
→ 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
推 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 XDD
其實應該要看問題是什麼 問題是「什麼是OOP」
還是「OOP有什麼好處」 還有「OOP好的設計跟不好的差在?」如果單單只是問什麼是OOP 就封裝繼承多型大概就可以了
順便再講一點好處 就是提高程式複用性 和系統分割
最後再深入提 好與不好的設計 就是SOLID和設計模式架構模式33F 11/13 01:41
→ dnabossking: 看吧,其實一堆人都不知到,事實就是,搞不好面試官自己也沒法說的很好39F 11/13 01:57
推 ChoDino: reuse是基本核心,為了reuse才有封裝繼承多型41F 11/13 02:41
謝謝你!
不過也好在我有上來問
不然我可能每次都會回答最上面的說法 那我可能被打槍打到死~
因為我非本科生 所以這種答非所問的情況很常發生
考驗面試官的能力 跟我的能力...
※ 編輯: 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與抽象化(用途),SOLID與DP(設計原則)
講DP就會一併帶到decoupling了
is-a、has-a、uses-a也要理解,才能決定繼承、組合何時用46F 11/13 11:10
推 Rachelmas: 我會想跟原po當同事 絕對不會想跟1樓當同事哈哈
我倒是覺得深入淺出的回答才最好 舉例沒錯啊 你覺得
OOP包含多型封裝繼承我Wiki不到嗎?但如果你能舉出
實例 不就代表你已經成功內化這個知識了 好奇難道51F 11/13 13:10
推 Sidney0503: OO是抽象概念 很明顯你沒有這個"抽象概念"55F 11/13 13:15
→ Rachelmas: 面試官會覺得能背出課本內容會好過舉出比喻...56F 11/13 13:15
→ loveflames: 親自設計一個簡單範例是最好方法
當然,範例設計成只用來解釋繼承、封裝、多型是不夠的57F 11/13 13:28
推 Argos: 重點是在面試這極短時間裡要完整解釋OOP不太可能阿
OOP這題目範圍也是很大的59F 11/13 14:56
推 luke72: 課文背得很熟 但你的答案套上agile就死掉了
OO就是想辦法reuse而已 封裝繼承多型全部都是reuse的方法"你必須在規劃開始時就已經思考好整個系統架構"<-- 不可能綜觀全局 依現狀建立出物件結構 盡可能適應未來的改變舉例好了 蚵仔煎 客戶可能隨時要換成蝦仁煎 花枝煎
然後店越開越大 可能會變成米其林蚵仔煎 或者 大阪燒61F 11/13 16:31
推 hungyanbin: 一樓真的不知道在兇啥,我覺的OOP不是一開始就能完全理解的,要反覆的實作跟思考,樓主也不用在意有人說你背課文,誰不是這樣過來的呢?建議你可以多看看幾本書,像最近出的Clean Architecture就很不錯(推坑)67F 11/13 20:01
推 xczh: 這個沒有絕對的答案,請不要否決他人的熱心回答71F 11/14 01:00
→ yzfr6: 兩三句話就能講完的,你在這長篇大論72F 11/14 07:54
推 APTON: 看了整串討論串 都沒人可以說出版眾都滿意的解答74F 11/14 11:14
噓 THEWORLDS: 這根本送分題.......................................75F 11/15 03:28
--