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