架构分析引起的笔记



同时在看两本书,《道法自然:面向对象实践指南》和《Software design in practice》。突然发现对RUP、OOAD、Archecture Design、Design Pattern等观念傻傻分不清楚。经过一阵google,终于算是明白了一点,现记录如下。

软件生命周期主要包括瀑布型和迭代型,迭代型开发过程是Unified Process的主要特征,Rational Unified Process(RUP)是Rational对UP的一个customized版本,极限编程(XP)是另一个。

软件生命周期主要决定做几遍的问题(把前面十七掌重打一遍就是降龙十八掌?),而在每一遍的内部怎么做?这个其实是选用设计方法的问题。

设计方法主要包括面向对象的设计方法和面向过程的设计方法。面向对象的设计方法以模拟现实世界为基础,比较能贴近需要解决的问题(Problem Domain?);面向过程以功能分解为主(Program Domain?)。试想,以面向过程的思想和客户谈需求简直是一场灾难。除非客户是科学家!

面向对象的设计方法主要包括分析和设计这两个阶段,即所谓的OOAD是也。OOA的阶段以理解系统的需求为主,需要确定项目干系人和系统边界(不同的人有不同的需求),功能和非功能性需求,为了确认我们真的理解了用户需求,通常会用多种图形(View)来展示(UML的顺序图、用例图);OOD关心系统的实现,我们经常见到的设计模式(Design Pattern)就是这方面的知识。

软件好坏有两种重要的判断标准:耦合度和内聚度。OOA做完直接OOD软件应该也能跑,但是没有经过系统规划的东西必定是一团糟,因为OOA和OOD之间存在一条沟需要填上。这就是Architecture Design的用武之地。Architecture Design该属于哪个阶段?OOA还是OOD呢?wikipedia的词条里说,该属于OOD。
“Important topics during OOD also include the design of software architectures by applying architectural patterns and design patterns with object-oriented design principles.”


“使用面向对象技术的软件开发过程大体包括面向对象分析、架构分析、面向对象设计、编码和测试等主要阶段。” 摘自《道法自然:面向对象实践指南》P58

最后,八卦下OOA和OOD阶段划分的问题。首先OOA和OOD的概念比较难区分,我的理解是从出发点来考虑。注意力在理解需求上的是OOA,关注实现细节的是OOD。可以参考文末链接的analysis.pdf,Martin Fowler有很好的分析。

Reference:
http://en.wikipedia.org/wiki/Object-oriented_analysis_and_design
http://en.wikipedia.org/wiki/Unified_Process
http://en.wikipedia.org/wiki/IBM_Rational_Unified_Process
http://martinfowler.com/distributedComputing/analysis.pdf
《道法自然:面向对象实践指南》 第三章
《Software design in practice》2nd edition

你可能感兴趣的:(UP,arc,RUP,OOAD,架构分析)