[討論] 做OO是不是要有美感?

看板C_and_CPP作者 (麵T)時間9年前 (2016/04/01 16:00), 9年前編輯推噓8(8014)
留言22則, 10人參與, 最新討論串1/1
第一道問題是 要選擇繼承,還是組合? 例如: 汽車要繼承引擎, 還是汽車要包含一個引擎成員? 汽車繼承引擎的話, 自然的就擁有發動、加油等功能, 跟日常看到的一樣。 但它們之間並沒有 is a 的關係… 又例如: 物件計數器 template 〈class T〉 class counter {建構加一,解構減一} 如果要統計汽車物件數量, 要繼承好,還是包含好? 第二個問題: 以生產線模擬來說, 一台機台完成動作後 要通知下一台「輪到你了」 所以機台要「認識」其他機台。 class machine{ machine *other; } 但這樣一來, machine 裡有machine, 如果有個人想搞怪, 一直 new 下去, 這樣是不是就變成 machine = 生產線 ? 我可以接受一些 tree 結構採取 自己裡面有自己的指標設計, 但就很難接受一個 活生生的、現實的例子這樣作… 是我太欠缺美感, 還是太鑽牛角尖所致嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.28.215.7 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1459497626.A.AEB.html

04/01 16:06, , 1F
找些 object-oriented design 的書來看,會有幫助
04/01 16:06, 1F

04/01 16:07, , 2F
04/01 16:07, 2F

04/01 16:08, , 3F
雖然是用 Ruby,不過這本評價蠻好的
04/01 16:08, 3F

04/01 16:14, , 4F
說美感太抽象 我以為OO只是達成高內聚低耦合的方法之一
04/01 16:14, 4F

04/01 16:15, , 5F
應該思考的是如何寫 才能更容易擴充與維護
04/01 16:15, 5F

04/01 16:17, , 6F
我也想高維護性,但老闆總是說能動就好
04/01 16:17, 6F

04/01 16:19, , 7F
還是較希望是 c++ 中文版好
04/01 16:19, 7F

04/01 17:14, , 8F
嗯 那你應該先說服你老闆 不然他會覺得你浪費時間又
04/01 17:14, 8F

04/01 17:14, , 9F
沒產出
04/01 17:14, 9F
是不是傳統產業都比較偏向於 程式能動就好? ※ 編輯: noodleT (110.28.215.7), 04/01/2016 17:55:26

04/01 17:56, , 10F
通常老闆都會覺得會動就好XD
04/01 17:56, 10F

04/01 18:17, , 11F
應該是大部分人都覺得 程式能動就好,不是只有你老闆
04/01 18:17, 11F

04/01 19:53, , 12F
那你可以接受將通知下一台的邏輯移到新的類別嗎?
04/01 19:53, 12F

04/01 19:55, , 13F
例如生產線類別,裡面很多機台,就負責把產出餵給下一台
04/01 19:55, 13F
多一個生產線類別來控管 感覺挺不錯的

04/01 19:58, , 14F
或許你可以參考 Domain Driven Design 的思路
04/01 19:58, 14F

04/01 20:09, , 15F
OO不是要你模擬現實 也不用什麼美感
04/01 20:09, 15F

04/01 20:10, , 16F
只要考慮內聚力 耦合性 職責這堆東西就好了
04/01 20:10, 16F
OO不是把現實的屬性、 功能轉成類別嗎? ※ 編輯: noodleT (110.28.215.7), 04/01/2016 23:27:26

04/02 00:09, , 17F
不是 很多類別會是抽象的概念 而不是現實的"東西"
04/02 00:09, 17F

04/02 00:19, , 18F
04/02 00:19, 18F

04/02 00:34, , 19F
設計類別如果能對應到現實的概念,能幫助理解
04/02 00:34, 19F

04/02 00:48, , 20F
但如果不適合還硬套的話就只有反效果
04/02 00:48, 20F

04/02 07:37, , 21F
謝謝
04/02 07:37, 21F

04/21 19:33, , 22F
C++ 是藝術.前二題比較簡單.第三題.每一機台要認識幾台?
04/21 19:33, 22F
文章代碼(AID): #1M_YgQhh (C_and_CPP)