從標題來看,有些概念得先跟你理清,才能一句、二句的回答你的問題

本文內容已被 [ 多哥 ] 在 2014-12-10 18:58:58 編輯過。如有問題,請報告版主或論壇管理刪除.

在回答你的問題之前,有些東西還是有必要跟你進一步理清、明確,才能回答你。否側,公說公有理婆說婆有理的, 會有多種答案。

現在很多資料都把設計指導思想 (design methodologies ) 和具體設計及落實設計方法或手段 (approaches by implementation methodologies) ,混在了一起談論,有時候還把 software development lifecycle management 的一些軟件開發管理方法,放在一起討論,但又沒有明確說明它們之間的關係。這樣一來,就很容易給現在不少業內人士,在理論上,造成一定程度的困惑。對於你的問題,從這個角度來講,就會有多種答案。而你之所以這麽問,也具有同樣原因。

從你問題的表象來看,你問的是如何 approach,即,如何具體落實設計的思維方法。這個思維方法,也是要體現在 physical coding 裏頭的。所以 approach,就屬於指導思想了。這樣,我就先從設計指導思想、落實設計方法 (思想)、和軟件開發管理方法(思想)等 3 個方麵,簡單跟你介紹一下,希望借此能幫你理清這裏頭的關係,從而回答你的問題(我國內學的不是 computer science 或軟件工程,所以用詞可能和通行的不一樣):

1. 設計指導思想,應該說是種藝術,也不完全是種藝術,但絕對不像牛頓三定理是種科學。較為接近科學的且目前廣為流行的是 Object-Oriented Analysis (OOA)。說它接近科學,是因為這個設計指導思想, 要 think in objects。這樣,就要提煉共性解析個性定義屬性等等,運用抽象思維手段,來歸納確立某個 business domain 之內的 business entity 或 entities。這個 entity,在隨後的設計過程中,通常就用 object 來指代描述。 在 C++ 沒有產生之前,設計思想隻能從 structural analysis 的途徑出發,然後進行設計落實。C++ 的產生問世,使得指導思想 think in objects 得以在設計中,加以  physical (coding) 的落實。這樣,從八十年代中期,一直到九十年代末期,Object-Oriented Design 一直是軟件工程落實設計的思維方法的頭版頭條的提法。所以人們很多時候,也把 OOA 的指導思想,和它的落實方法,放在一起談論,即:Object-Oriented Analysis/Design (OOAD)。而 structural analysis (SA) 也依舊有它的一席之地,它的一個著名的設計落實方法叫 IDEF。IDEF - Integration DEFinition, 其實是一種設計落實語言,和落實 OOA/D 所用的 UML (Unified Modeling Language) 一樣, 可以用它們來 visually 展示設計思想和方案。這樣,structural 的指導思想和落實方法放在一起討論,也就叫做 Structured Analysis and Design Technique (SADT)。所以,軟件設計指導思想的方法,就基本是這倆了; OOAD 和 SADT, 或 OOA 和 SA。

2. 落實設計方法,其實上麵我已經給出了,即 OOD 和 IDEF。也許有人會用更“古老”的說法,來代表 SA 的設計落實方法,比如 Case Tools,等等。而 OOD 之下的 physical coding,或 coding practice,則又被叫做 Object-Oriented Programming - OOP。SA 之下的 coding practice, 就叫 procedural programming。除 OOD 和 IDEF 之外,還有很多提法或說法,也很難說它們到底是屬於落實管理方法的一種,還是落實設計方法的一種。這個是因為無論它們叫什麽,都脫離不了上頭介紹的 OOA 和 SA 這兩個指導思想範疇,比如 data-driven design, test-driven design, user-centric-driven design 等等五花八門的說法。因為它們不全是科學,所以任何人,都可以在 OOA 或 SA 的設計思想指導之下,通過宣傳途徑,創立自己的學說。五花八門的這些說法,都離不了 OOA 或 SA 的範疇,但也有很多人忽略 OOA 和 SA 的區別,把它們列在 development methodology 的門下。這也證明了,這些個花哩胡俏的玩意兒,很難說是科學。但說起 development methodology,就和下麵要談的第3個方麵,lifecycle management 或 “軟件開發管理方法”,發生了關係。

3. 軟件開發管理方法,基本上可以說就是 software development lifecycle management,其方式方法也是花樣百出目不遐接。對此,時間有限,就不多講了。我將一些主要的,列在下麵:
     a. Agile Software Development
     b. Crystal Methods
     c. Dynamic Systems Development Model (DSDM)
     d. Extreme Programming (XP)
     c. Feature Driven Development (FDD)
     d. Joint Application Development (JAD)
     e. Lean Development (LD)
     f.  Rapid Application Development (RAD)
     g. Rational Unified Process (RUP)
     h. Scrum
     I. Spiral
     j. Waterfall (Traditional)

以上花哩胡俏林林種種這些軟件開發管理方法,其根本,還都是最後一種, Waterfall 的變種。其中著名的還僅隻是 RUP, Agile, XP, 還有就是廣為人知的 Scrum。Spiral,在某些官僚主義嚴重的企事業,也很流行。

綜上所述,對你的問題,答案就是,除了 OOD, 還有就隻是 SA 之下的 structural design 的方法。另外要指出的是,SA 設計指導思想之下的設計方案,在具體 coding 落實的時候,也可以用 OOD 的思維方法;而這個時候,如我所述,OOD 就通常被叫作 Object-Oriented Programming - OOP。

希望以上論述能對你有用。另外,由於目前軟件半成品的廣泛應用,諸如 SAP,OOAD 或 SADT 都不常有人提了;但這一點,並不具備 OOAD 或 SADT 麵臨消亡的意思。畢竟,SAP 這種玩意兒,也是 OOAD 或 SADT 的產物。而工業領域內的係統工程設計,則還是 SADT 在獨擋一麵。

最後,再問一句,OOD 或 OOP 更底層的,比如 IUnknown 或 IDispatch 這兩個 terms,兄弟您是否聽說過啊?

如果沒聽說過但很感興趣的話,以後有機會再聊。

有不清楚的地方,請回帖提問啊。。。網友們有不同理解的,也別憋嘴裏罵俺是在瞎扯,spell it out!


所有跟帖: 

水平很高 -lelele- 給 lelele 發送悄悄話 (0 bytes) () 12/10/2014 postreply 06:23:33

謝謝鼓勵。我修改了多次,覺得還是沒有很好地說清。 -多哥- 給 多哥 發送悄悄話 多哥 的博客首頁 (0 bytes) () 12/10/2014 postreply 06:36:45

我以後再不說自己科班出身了。。。 -慧惠- 給 慧惠 發送悄悄話 慧惠 的博客首頁 (0 bytes) () 12/10/2014 postreply 09:38:30

小慧不是科班出身,是進士出身,科班出身是唱戲的。 -arcsigh- 給 arcsigh 發送悄悄話 (65 bytes) () 12/10/2014 postreply 17:58:57

你們不這麽說麽?那你們那邊怎麽形容自己入道就學這科的呢? -慧惠- 給 慧惠 發送悄悄話 慧惠 的博客首頁 (322 bytes) () 12/11/2014 postreply 06:21:33

在學校裏我碰到的基本都是根正苗紅的。 -arcsigh- 給 arcsigh 發送悄悄話 (57 bytes) () 12/11/2014 postreply 08:14:32

不能用科班非科班的去衡量。我說的那些內容都不是 academic 的,很多屬於學校之外的東西。 -多哥- 給 多哥 發送悄悄話 多哥 的博客首頁 (0 bytes) () 12/11/2014 postreply 09:21:15

是這麽回事。而且說實話,學校隻是把一個人引進門 -慧惠- 給 慧惠 發送悄悄話 慧惠 的博客首頁 (87 bytes) () 12/11/2014 postreply 10:53:12

學校可以解散了哈 -arcsigh- 給 arcsigh 發送悄悄話 (0 bytes) () 12/11/2014 postreply 10:57:50

至少我們可年青漂亮許多,不是嗎?哈哈。 -arcsigh- 給 arcsigh 發送悄悄話 (0 bytes) () 12/11/2014 postreply 11:03:53

請您先登陸,再發跟帖!