※ 引述《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"的狂狷不馴;屬於年少的輕狂色彩 ◎