精華區beta Programming 關於我們 聯絡資訊
※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: > renderer 大大針對問題的回答大體是對的, 但沒有針對 gsj 問的為何 > 要把 code 與 data 擺在一起, 再深入比較. > 而 high level data structure 本身就有陷井, data type 本身就隱 > 涵了處理 bit 的規則程序(code), 只是一經過 abstraction 後, 使用 > 的感覺就當 data "object" 就行了. 傳統的命令式語言也是有 OO 這 > 個成份, 就是 abstraction data type 的宣告與處理. 但更高階地利 > 用到 structured data 的各個 function procedure 則沒有被要求要 > 把相關的 function 也擺在一起. OOP 會強迫程設員這樣做, 這樣思考 > 才能進一步有更高階的 abstraction , 同時比較不會因零散而出錯. > 讓 programmer 習而不察就是養成了好習慣. 另外針對其它地方再回一篇。 其實 C++ 這種 multi-paradigm 的語言, 它好的地方就在於沒有完全拘泥於 OOP, 適用於傳統 procedural programming 的部分, 仍然可以用 namespace 單獨實作成一個 module, 雖然說 OO 的 design pattern 會教人用 singleton, 不過在沒有需要用到 singleton 的好處時, 使用 namespace 是一個不錯的選擇。 另外也可以發現到 STL 有一個部分是 generic algorithm, 它們並沒有被分別設計在 container 裡面, 而是被單獨抽取出來實作成 template function, 若有針對某個 container 有較特別的設計, 才會另外把同名的 function 設計成 container 的 member function。 STL 的設計上和 OOP 並沒有什麼關聯性(它缺少了物件繼承和物件多型), 但是它在設計上帶給了人不同的思考角度(書上習慣分類成 generic programming), 徹底發揮所謂的參數化多型, 利用較大的 code size 來換取較高的執行期效率, 這點真的很發人深省, 另外也可以思考看看為什麼 STL 要把 generic algorithm 從 class 中抽出來。 不過對我來說 C++ 既然提供了 OO 機制, 那麼就不用白不用, 所以在設計輔助 OO 用的小組件時我會選用所謂的 generic programming, 但是整體的程式概念還是以 OOP 為主, 巧妙的運用 C++ 支援 multi-paradigm 的特性, 可以讓程式跑得比拘泥於非要 OO 不可而寫出來的程式快, 兼具效率與彈性,且容易維護和做變更。 這些主要是回應之前 gsj 所說的 OO 不用學那句話, 剛好看到你在這邊提到 OOP 會強迫 programmer 怎麼做, 就順邊提出來。 拘泥在某種 paradigm 在 C++ 來說都不好, 完全不用 OO 少了彈性, 只用 OO 則會受到很多限制。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Chung Cheng University Department: Computer Science and Information Engineering Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.16 > ╰─╮ ╚╦═╦╝ From:218-171-143-156.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩