Re: [討論] 怎麼樣才叫OO

看板Soft_Job作者 (Second Life)時間13年前 (2012/03/26 12:13), 編輯推噓0(0016)
留言16則, 3人參與, 最新討論串4/4 (看更多)
甚麼叫真的懂 OO? Hmm... 舉個例子好了... 幾年前我跟另外一家公司 phone interview, 被問過 OO 的觀念... 他的問題分為兩個部分: 1. OO 觀念. 2. 實作 OO.... 第一部分很簡單... 什麼是 OO 啦? 什麼是 Polymorphism? 什麼是 Abstract class? 什麼是 Interface? 什麼時候用哪一個? 迅速通過, 沒有問題, 皆大歡喜! 第二部分就麻煩啦... 面試官問說, 好的, 現在我們公司需要一付樸克牌... 這付樸克牌可以被用在算命... 可以被用在遊戲... 請問你要怎麼設計這個樸克牌的類別... 在他不斷的提示下, 我設計好了這個類別... 面試官說, 好的, 我們現在來使用你所設計的這個類別... 假設我們公司要設計一個 Black Jack 的遊戲... 請告訴我你要怎麼使用你剛剛設計的這個樸克牌... Interview 完了之後, 我發現我的觀念實在太不清楚了... 當你嘗試的實做了上面的第二個問題之後... 你會發現你的 OO 的觀念清楚很多... 我蠻感謝這個面試官的... :D ※ 引述《rosemary0401 (靠,為什麼沒考上榜首)》之銘言: : 常在板上看文章,對OO的觀念實在很混淆... : 1. 有人說去某公司面試要懂OO(真的懂), : 請問怎麼樣才叫真得懂OO ?? : 個人才疏學淺,對我來說OO就是封裝、繼承、多型... : 這樣算懂OO嗎?? : 2. 有人說"偽OO比偽娘更該死",或是有人說"你的程式不OO", : 請問怎麼樣的OO叫作"偽OO" ?? 怎麼樣的程式叫作"不OO" ?? : 可以給個具體"偽OO"或"不OO"例子嗎?? : 反過來問,那怎麼樣的程式才叫"真OO" ?? : 3. 常在網路上看到,有人說強者可以用C寫出有OO精神的程式, : 可以給個例子,怎麼樣才叫作"有OO精神"的C程式嗎?? : 這是意指用C實作出封裝、繼承、多型嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 98.247.19.9

03/26 12:59, , 1F
所以你通過了嗎?
03/26 12:59, 1F

03/26 13:06, , 2F
第一部分跟我通常會問的好像 XD
03/26 13:06, 2F

03/26 23:56, , 3F
interfacce與virtual base class(只有pure virtual func)
03/26 23:56, 3F

03/26 23:57, , 4F
virtual base class只有pure virtual function
03/26 23:57, 4F

03/26 23:57, , 5F
不能有data member的概念上是相近的..
03/26 23:57, 5F

03/26 23:58, , 6F
inferface 是composition by reference
03/26 23:58, 6F

03/26 23:59, , 7F
如果virtual basee class有data member那就不同了..
03/26 23:59, 7F

03/27 00:00, , 8F
因為繼承是composition by value的概念...
03/27 00:00, 8F

03/27 00:00, , 9F
繼承是is a的概念, interface是have a的概念..
03/27 00:00, 9F

03/27 00:01, , 10F
實作上virtual base class(沒有data member的base class)
03/27 00:01, 10F

03/27 00:04, , 11F
與inferface仍有空間上(vptr and size)的差別...
03/27 00:04, 11F

03/27 00:07, , 12F
不過virtual base class理論上最好只有pure virtual func
03/27 00:07, 12F

03/27 00:08, , 13F
最好不要有data member, 但實作上仍常常有data memeber
03/27 00:08, 13F

03/27 00:19, , 14F
簡而言之, 如果base class是virtual inheritance且
03/27 00:19, 14F

03/27 00:20, , 15F
base class只有pure virtual function...那就達到了
03/27 00:20, 15F

03/27 00:20, , 16F
interface的概念了...
03/27 00:20, 16F
文章代碼(AID): #1FR-ph2_ (Soft_Job)
文章代碼(AID): #1FR-ph2_ (Soft_Job)