精華區beta Programming 關於我們 聯絡資訊
※ 引述《UNARY.bbs@bbs.cse.ttu.edu.tw (跑步)》之銘言: > ※ 引述《StubbornLin.bbs@ptt.cc (Victor)》之銘言: > > C++物件導向語法不用學= =?浪費時間? > > 我可不這麼認為 ...至少我認為還蠻有用的 > > 用起來還蠻順手的... > 你第一次看他文章啊?? > 其實我覺得會出現物件導向無用那句.....實在非常正常XD 我也看得蠻久了,不過我還是覺得這種東西是看人看團隊看公司。 以常見的繪圖範例:Shape、Line、Circle、... 來說, 用非物件導向來寫會這樣用: struct Shape { enum ShapeType type; union { ... } u; }; 由 type 欄位來決定取用 u 的哪個欄位, 一般判斷它的時候會輔以 switch case 敘述。 用基礎的物件導向技術, 上述的 type 欄位會消失, 然後會多出了好幾個 struct/class 繼承 base class Shape, 而 base class Shape 可能提供一些 virtual function 像是 Draw(), 讓這系列 classes 的「使用端」免除用 switch case 或 if else 判斷型別的麻煩, 但是在某些時候還是難以免除 switch case 或 if else 的使用, 這和物件導向當初的精神相違,算是個跛腳的物件導向設計方法。 用上 design pattern 的高級物件導向技術, 會利用 factory + singleton 的 patterns 解決這個問題, 增加了 class 登記機制,把登記責任歸在設計 class 的人身上, 使用端再也不需要去寫那些難以維護的 switch case 或 if else 敘述, 在繼承樹上加入新 class 的人再也不需要看遍所有程式碼中的 switch case, 然後花時間在那邊一個一個修改。 三種方法中,依據現實環境的不同, 可能會被強迫性的選擇某種方式, 雖然知道這三種方法的人都知道第三種方法比較好, 但是有時候你是在修改別人寫好的程式, 有時候上頭交代你修改的軟體根本就是用 C 寫的, 有時候你待的團隊懂得 design pattern 的人就是很少... 有時候你的專案很小規格很固定,軟體的生命很短,也能選第一種。 堅持哪種最好並沒有意義, 而是要能正確選擇應付目前要解決的問題最適當的方法。 -- 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-138-13.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 -- * Modify: tinlans 05/08/07 0:46:11 <218-171-138-13.dynamic.hinet.net>