Programming 板


LINE

前文吃光光. 先簡單回一下. 首先是為什麼需要對系統做 decomposition ? 因為人的腦力有限, 無法同時對付整個系統. (換句話說, 如果人的腦力是現在的好幾倍, 那 code 應該會火星化好幾倍吧 XD) 被 decompose 的系統就形成了很多 module, 這些 module 必須被一一設計, 實作和維護, 而最後這些 module 必需能合作無間地達成原系統所需功能. 要做到這件事, 各 module 間的關聯 (中文不知說啥好, 英文叫 coupling) 必需要減到最小, 不然會太複雜以致於無法組合 (composability) 但單一 module 內部又需要緊密合作, 不能有些本質上複雜的事根本作不出來, 而且不好重用 (reusability). 現在大家熟知的 OO, 跟之前只用 function 的語言就是為了盡量達到這些要求, 將概念上完整獨立但又不會太龐大的一組東西(呃, 該怎麼稱呼XD) 放在一起, (英文就叫 concern) 一來不用擔心與別組較不相關的概念會起衝突 (所以可以比較放心地任意組合) 然後也可以較完整地拿到另一個系統重用 (因為可以較隨意組合). 就算要改 code, programmer 也可以專心地改這一個 module 這就叫 separation of concerns (的一種, 還有其它各類的 separation of concenrs) 很不幸地, 有些 concern 是無法單用 function set 或 class set 集合起來的, 註定會散落在系統各處 (或說是各個 module 內), 這情形就叫 crosscutting concerns (也就是說, 不管怎麼設計, 都不可能能模組化) 這時會改 code 就很痛了, 東改一塊, 西改一塊, 散在幾處就要做一樣的動作幾次. 等下次要再改時, 要又全部找到再一個一個改, 數量一多又會有漏的 XD 為了解決 crosscutting concerns, 目前比較有名的是 feature-oriented programming 和 aspect-oriented programming. 前一個是把該次的 refinement 集中在一處, 稱為 feature (好像有點倒果為因, 其實是為了加 feature, 把需要的 refinement 集中在一起 @@) 後一個是用類似 pattern matching 的方式把這種 concern 抓出來, 集中起來叫 aspect. 至於細節, 我也還在學. 不過可以確定的是, FOP 和 AOP 還是有不足的地方, 以後一定會有什麼 XOP, YOP, ZOP 的東西跑出來, 直到人腦也沒辦法處理這些東西為止 XD --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 71.136.247.250 ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:39) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:40) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:41) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:41) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:41) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:42) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:43) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:44) ※ 編輯: march20 來自: 71.136.247.250 (01/26 15:44)
1F:推 drkkimo:好文幫推 218.172.206.5 01/26 15:52
2F:推 softwind:如果code會火星化...那IDE應該也要火星化 140.129.36.82 01/26 15:55
3F:→ softwind:有3D的IDE嗎? code都是立體的... 140.129.36.82 01/26 15:56
4F:推 march20:忘了說, 這裡說的方法是程式語言上的, 71.136.247.250 01/26 16:04
5F:推 march20:有些人是從別的角度出發, 像 pattern, 71.136.247.250 01/26 16:04
6F:推 march20:domain-driven design 71.136.247.250 01/26 16:04
7F:推 march20:這些方法要你不要怕改 code, 但要改得合理 71.136.247.250 01/26 16:05
8F:推 drkkimo:coupling應該是指耦合度 應該越低越好 218.172.206.5 01/26 16:14
9F:→ drkkimo:還有一個是cohesion 是內聚力 內聚力要高 218.172.206.5 01/26 16:16
10F:推 march20:yep:P 71.136.247.250 01/26 16:33







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP