※ 引述《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>