看板 Soft_Job 關於我們 聯絡資訊
※ 引述《csfgsj (Lazy bone)》之銘言: : ※ 引述《xtxml (赤木巧☠)》之銘言: : : 大哥,你到底懂不懂『繼承』這兩個字的意思啊? : 我對「繼承」的了解是: : 對既有源代碼的再利用 : 它很像API,卻不是API : 主其事又把它宣傳的像是API : 說穿了,就是將既有的源代碼,以所謂Class為單位 : 作全部的Copy & Paste : 這個動作你不用作,Compiling的時候Compiler會自動幫你作 我先不評論你的比喻了,直接用你的邏輯來跟你解釋就好了。 : 跟傳統Copy & Paste比起來,它的特性是: : 1, 只能Copy & Paste整個Class,不可分拆,不可減少 你該想的是,為什麼你會需要分拆或減少? 而既然有virtual function的存在,你又為什麼不能做到減少的效果呢? : 2, Copy & Paste 使用者不會知道,到底Copy 到了什麼 通常,一個好用的IDE,只要在繼承的名稱上面輕輕點下右鍵, 便可以從類似叫做Go To Definition的選項過去看看你到底複製了什麼。 再不行,總有全專案搜尋的功能了吧? 這也是我通篇最大的疑問,這個動作到底對你有多少難度? 你總是說base/father class不明確,令你痛苦萬分, 但怎麼看開發過OOP專案的普通人,都是一兩個按鈕可以找出來。 不就跟你trace function是同一回事? : 3, 只能對Class作業,單獨的Struct、Function等不接受「繼承」 多花20秒想想,你可以不用問『為什麼Function不接受「繼承」』這句話 struct這個各語言不同,甚至有些OOP語言根本沒有的字就不討論了, 附帶一提的就是C++的struct可以繼承,因為他就是預設public版的class 你如果要再C++中保有C struct的特性,你只要遵循POD的寫法即可。 : 4, 有一堆GGYY的規則要遵守,什麼覆蓋不覆蓋之類的..etc. 這種『不清楚』『不定性定量』的問法相當「隱晦」,不是嗎? 有沒有強制override就是看你是不是繼承abstract class而已 其他就是有需要你就override,沒需要就擺著,我怎麼覺得超直觀的? : 所以它比起傳統Copy & Paste死板、麻煩多了 當你傳統的Copy & Paste忽然需要小改的時候,卻已經成千上萬人copy走的時候, 你就會知道是誰麻煩多了不是嗎? : 也比較「隱晦」 : 傳統Copy & Paste強迫你去了解Copy & Paste的對象 強迫有好處嗎?如果那是一個你本來就不需要理解的事。 剛好拿前面輪子了例子,你買車會需要把輪子的結構圖翻過一次你才敢開嗎? 不要說軟體工程了,這根本常識上就很明顯的事情。 : 「繼承」刻意要你去當瞎子 當你call API的時候,你也是一個瞎子了不是嗎? 繼承也只不過移駕過去看,瞎子是完全看不到, 我相信你一直瞎子瞎子的肯定不是一個好的類比。 : 如果你不想當瞎子,想自己會往下挖 : 「OOP」會有很多地方等著來折磨你,讓你知難而退 我不是不喜歡人家批OOP,我自己其實也不是完全的OOP派。 然而你的文章就是這樣的感覺,你總是批評OOP,卻沒有想過是不是就算不OOP也有問題。 你說OOP很多地方折磨你,說來說去其實沒多嚴重,只是"比較隱晦"而已, 卻省了你很多被malloc free真正折磨個半死的部分。 不管是不是OOP,你要挖底層的code你就勢必很辛苦, 就算在寫C,call一個後面又錯綜複雜的function,你終究也是知難而退,不是嗎? OO的觀念我至少可以很快區隔出來我想看的部分, 你要說折磨我真的很難看出OO到底有多麼折磨。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.131.77 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1425348497.A.4D7.html ※ 編輯: xtxml (125.227.131.77), 03/03/2015 10:22:13
bibo9901: 同意啊. C 的繼承更為隱晦, 舉個常見的例子, 誰看得出 03/03 12:23
bibo9901: sockaddr最後附加的幾個byte是為了讓sockaddr_in繼承的? 03/03 12:24