Re: [閒聊] OOP小評

看板Soft_Job作者 (飛狐)時間9年前 (2015/03/01 14:12), 9年前編輯推噓6(6015)
留言21則, 8人參與, 最新討論串4/43 (看更多)
OOP不只是從GUI的角度出發,我以OpenCV這個第三方lib做為例子 我個人從OpenCV1.0開始使用到現在 他去年有了3.0beta版 我看到他從最早1.0版幾乎是c code,沒有使用class/namespace..etc 好在只是DLL function呼叫,c code 其實也還好, 如果有去trace過JM1.6版的c code,那真的令人暈頭轉向 又沒有UML的圖,function這個call那個,回傳值全部用 pointer,到了另外一個地方又是另一個pointer名稱 但它是原先那個pointer傳過來的,這真的是純c code的痛苦。 OpenCV2.0版開始他就更有結構化,使用class/namespace進行封裝 也建立了線上document分類分好 想要找特徵學習還是影像處理,一目了然。 OOP絕對有他的缺點,比如看一個class發現他可能繼承於別人 然後就要再去看上層的class,有見樹不見林的感覺。 但如果document做的好,有類似Start UML的圖表,其實架構是很清楚的。 或者說過多的繼承會導致class十分龐大臃腫 或者說資料和程序難以分開 導致十分難trace 我也曾經在如何抽離介面和演算法之間徬徨 但其實這些問題不是不能克服的 微軟的Doc/View模式某種程度上就已經幫了你一點忙 甚至其實是coding習慣的問題,因為一開始架構就沒有寫清楚 或是時間不夠流程和資料就混成一堆,程式能動就好, 或是因為後續的需求變更使得class間的耦合性變得更複雜 所以當你程式越寫越大,你就越早面臨「重構」這件事情 上述的問題透過「重構」其實都可以得到解決, 只是大家應該都沒時間「重構」, 或者說因為「重構」不會讓你薪水變多,只是事情變多, 但我覺得應該要推廣一個觀念 如果一個軟體想要「永續經營」,「重構」這件事情是必要的 除非你寫了一隻程式,以後都不會去改動它, 都沒有維護/增加功能的問題。 ※ 引述《csfgsj (Lazy bone)》之銘言: : From護法兄 : 有些人愛用oop,或許真的有一些理由 : 從Gui的角度來出發,也許真的是一個蠻契合的Paradigm : 但一個Paradigm適用範圍畢竟有限 : 出了這個範圍,若還是要硬套,那就是自找麻煩 : 就我的觀點來看,OOP裡的確有不少討厭、自找麻煩的東西存在 : 什麼是理工學生的思維模式?以及 : 十數載在學校的學習,是在作什麼? : 能不能用幾個簡單的字來詮釋它? : 我的理解就這四個字: : 定性、定量 : 即對世間的事物,學習培養對其定性或定量之能力 : 什麼物理、化學、數學等理工學科都一樣,都是在作這樣的事,沒有例外 : 而且能否對事物作定性定量,也就成了評量對事務是否了解的普世標準 : 漸漸地,它成為所有理工學生的思維基礎 : 處理陌生事物前,要先對它作有效的定性定量 : 這樣的作法也就理所當然,成為標準程序 : 反過來說,一個遲遲無法定性定量的事物 : 就會成為理工科學生的困擾,甚至惡夢 : 尤其是在無法逃脫非要處理它的情況下 : 幾乎所有的軟體,都是由許多不同的軟體元件疊加起來的 : 一個軟體工程師很可能只作其中的一部分 : 其它的部分不是現成的,就是別人作的 : 有很大的一部分,工程師的工作只是在整合這些元件 : 我的問題是 : 工程師在整合這些元件之前,能對它們作有效的定性定量嗎? : 不管是C++還是JAVA以及其他的OOP程式語言 : 都有所謂Class的語法,並且大量的被使用 : Class就是資料加程序的集合體 : 有人說這是個好東西 : 以我的觀點,它確是個萬惡之源 : 資料是資料,程序是程序 : 兩者是性質完全不相同的東西 : 當你刻意將兩個性質完全不相同的東西併在一起成為一個東西之後 : 其結果就是 : 你創造了一個無法被有效定性定量的東西 : 大量的無法定性定量的東西被創造出來,並且存在於程式之中 : 程式會呈現什麼景象?亞馬遜叢林 : 在亞馬遜叢林,一切都變的隱誨,似明未明 : 基於本能,人在這時候往往採取保守小心的策略 : 以免不小心,那邊冒出一隻大蟒蛇,把你一口吃掉 : 隱誨、保守小心,也就是侷限的開始,愚化的淺勢開端 : 由其是經驗不夠的時候,很容易就此走不出來 : 因此 : "工程師的缺德行為:叫朋友去學C++" : → bibo9901: 不同意, 並不是把 data 和 function 分開就看得清楚 02/28 20:58 : → bibo9901: linus 指的 "substandard programmer" 應該就是這種吧 02/28 21:03 : → rodion: 是否搞錯OOP的正確用法? OOP不代表任何東西都要用OOP 02/28 21:23 : → lachtchlee: 笑話一則 02/28 21:41 : → csfgsj: rodion觀念正確,但很多人不是 02/28 21:50 : → csfgsj: 給lachtchlee:大家一起哈哈笑吧! 02/28 21:51 : ※ 編輯: csfgsj (61.228.26.58), 02/28/2015 21:58:49 : 推 typepeter: 只想問閣下成就如何...XD 我認識Googler也沒像你這樣說 02/28 23:02 : → typepeter: 看似說了什麼 卻全篇心得文 未有實際上作法 02/28 23:04 : → typepeter: 你說堆DomainKnowledge, so? 除了聽起來很酷,然後? 02/28 23:05 : → typepeter: 好像是發功程式就會出現一樣 有無具體作法? 02/28 23:06 : → typepeter: 所謂D.K.要如何精鍊 如何判斷要不要用框架 有無具體? 02/28 23:09 : 推 iceonly: 平平都是寫code,工作環境不同也有不同的心得,也許他的 03/01 01:20 : → iceonly: 業務是個與OO無緣的世界,那也沒啥好批評的;反對OO的論點 03/01 01:23 : → iceonly: 也很多,原PO說的也是常見的一種 03/01 01:24 : 推 iceonly: 只是OO/DP/各種framework都只是為了降低維護成本的一種工 03/01 01:40 : → iceonly: 具而已,不用那些或許達的到但是用了會簡單很多 03/01 01:41 : → iceonly: 某種功能在短時間內純手刻就能實作/新增是很厲害沒錯,但 03/01 01:42 : → iceonly: 使用上述工具就能在同樣時間內達到同樣效果時帶給老闆的 03/01 01:43 : → iceonly: 效益是一樣的話那好像也還好 03/01 01:44 : → iceonly: 感覺像是練過心算的在嘲笑用計算機的人一樣 03/01 01:46 : → anguso: 我認識的 Googler 似乎都懶得對這種文回應... 03/01 06:02 : → y3k: 我不相信沒有OOP能有效率地完成什麼大型專案 有些script工程 03/01 12:46 : → y3k: 師喜歡批評OOP 但是我覺得那是因為他們用不到.... 03/01 12:47 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.162.213 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1425190347.A.7AF.html

03/01 14:24, , 1F
我之前在爬Valgrind,也是純C,它用Macro兜出namespace
03/01 14:24, 1F

03/01 14:24, , 2F
和半成品的class。但沒有文件,整個看得超痛苦
03/01 14:24, 2F

03/01 15:16, , 3F
從他的字裡行間可以感覺到他有自信能夠在短時間內增加一
03/01 15:16, 3F

03/01 15:17, , 4F
個新功能而不需要花太大的成本,那OO還是啥的對他就沒啥
03/01 15:17, 4F

03/01 15:17, , 5F
用處沒錯
03/01 15:17, 5F

03/01 15:23, , 6F
OO強調的一直不是開發功能而是再利用和後續維護的時間成本吧
03/01 15:23, 6F
我是覺得他一直說OO不好,卻沒有給出解決的辦法,所以我舉了不用OO使得程式碼閱讀困 難的例子以及承認OO哪些不好,但是可以使用重構的方式解決。 ※ 編輯: flyfoxy (36.225.162.213), 03/01/2015 15:36:34

03/01 16:03, , 7F
cs大哪會管你那麼多 他愛死c了 又成天暗指演算法最高 可
03/01 16:03, 7F

03/01 16:04, , 8F
是兩個又不衝突 不知道cs大是何方高手...不說了 等等他又
03/01 16:04, 8F

03/01 16:04, , 9F
跑出來
03/01 16:04, 9F

03/01 16:39, , 10F
樓上大大說的情況其實回四個字就好 人各有志
03/01 16:39, 10F

03/01 16:40, , 11F
當有些觀念根深蒂固以後 講再多也沒辦法改變的
03/01 16:40, 11F

03/01 16:41, , 12F
對於高手當然無所謂 但對新手來說 還是不要先入為主
03/01 16:41, 12F

03/01 16:42, , 13F
覺得什麼才是好的 而是多看多學就對了
03/01 16:42, 13F

03/01 16:46, , 14F
n年前 我只會C 後來出了一堆用Java寫的資料結構課本
03/01 16:46, 14F

03/01 16:51, , 15F
這些對我而言毫無意義 我一慨視而不見 多少年後 才驚
03/01 16:51, 15F

03/01 16:55, , 16F
覺好像哪有點不對勁 我一直被教導成C粉絲 C天下無敵
03/01 16:55, 16F

03/01 17:01, , 17F
有一天 信手拈來 Java 的 Hello World想用C的基礎去把
03/01 17:01, 17F

03/01 17:07, , 18F
玩一番 結果一事無成 並不容易 因為學 Java 是這樣的
03/01 17:07, 18F

03/01 17:08, , 19F
one must know a lot, just to do a little.
03/01 17:08, 19F

03/01 17:30, , 20F
人家cs大說不能講 然後提了一個微軟的DK 沒了
03/01 17:30, 20F

03/02 13:17, , 21F
有點耐性好嗎?給點時間,我也要吃飯睡覺
03/02 13:17, 21F
文章代碼(AID): #1KygtBUl (Soft_Job)
討論串 (同標題文章)
本文引述了以下文章的的內容:
閒聊
3
26
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 4 之 43 篇):
閒聊
3
26
文章代碼(AID): #1KygtBUl (Soft_Job)