在回答你的问题之前,有些东西还是有必要跟你进一步理清、明确,才能回答你。否侧,公说公有理婆说婆有理的, 会有多种答案。
现在很多资料都把设计指导思想 (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-
♀
(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-
♀
(65 bytes)
()
12/10/2014 postreply
17:58:57
•
你们不这么说么?那你们那边怎么形容自己入道就学这科的呢?
-慧惠-
♀
(322 bytes)
()
12/11/2014 postreply
06:21:33
•
在学校里我碰到的基本都是根正苗红的。
-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-
♀
(0 bytes)
()
12/11/2014 postreply
10:57:50
•
至少我们可年青漂亮许多,不是吗?哈哈。
-arcsigh-
♀
(0 bytes)
()
12/11/2014 postreply
11:03:53