面向过程方法和面向对象方法
世界的本质是由对象组成的,平时看上去互相无关的独立对象在不同的驱动力和规则下体现出不同的运动过程,然后这些过程便展现出了我们这个生动的世界。
在面向过程的眼中,世界的一切都不是孤立的,它们相互紧密联系在一起,缺一不可,相互影响,互相作用,并形成一个个具有严格因果律的小系统;而更多的小系统组成了更大的系统,所有小系统之间的联系也是紧密和不可分割的。
面向过程
- 面向过程方法认为我们的世界是由一个个相互关联的小系统组成的。
- 面向过程的分析方法是找到过程的起点,然后顺藤摸瓜,分析每一个部分,知道达到过程的终点。
- DFD图在面向过程分析中广泛应用。
- 数据的正确性和完备性对系统成功与否至关重要。
- 在面向过程成为主要的软件方法之后,关系型数据库得到了极大的发展,针对数据的分析方法ER模型广泛使用。
- 随着需求越来越复杂,系统越来越庞大,功能点越来越多,多个过程对同一份数据的创建和读取要求越来越趋于复杂和多样,经常出现相矛盾的数据需求,因此分析和设计也变得越来越困难。
- 根据6的内容,IBM提出了UC矩阵方法来求解功能和数据之间的依赖问题。
- 面对过程有一个前提假设,过程是稳定的。
- 工作成果依赖于过程的步步分析,每一步之间有着严谨的因果关系。
- 无法应付世界的复杂性和频繁变革。
面向对象
- 面向对象方法将时间看做一个个相互独立的对象,相互之间并无因果关系。只有在某个外部力量的驱动下,对象之间才会依据某种规律相互传递信息。
- 面向对象的特性:封装,聚合,继承,接口,多态。
- 对象与对象之间联系起来称为依赖(一个类依赖于另一个类的定义),对象间保持信息交流称为耦合。
- 依赖
- 聚合
- 组合
- 耦合
- 每个对象都只与有限的其他对象有关系。
- 面向对象非常重要的特性:抽象层次
- 对象是怎么来的?符合规则的标准对象是如何设计和制造出来的?
- 对象的组合结构是单一的吗?这个结构到底是怎样实现那个特定功能的?
- 随意组合的结构表达了什么功能呢?
- 对象是怎么被抽象出来的?现实世界和对象世界看上去差别是那么大,为什么要这么抽象而不是那么抽象呢?
- 对象世界由于其灵活性,可以任意组合,可是我们怎么知道某个组合就正好满足了现实世界的需求呢?什么样的组合是好的?什么样的组合是差的呢?
- 抛开现实世界,对象世界是如此的难以理解。如果只给我一个对象组合,我怎么才能理解它表达了怎样的含义呢?
结论
由于面向过程的方法已经无法应付世界的复杂性和频繁变革,所以我们选择面向对象的方法。然而面向对象中,抽象是精髓所在,也是困难所在。我们需要一种更好的抽象方法。这个方法需要:
- 一种把现实世界映射到对象世界的方法
- 一种从对象世界描述现实世界的方法
- 一种验证对象世界行为是否正确反映了现实世界的方法
而UML可以满足上述3个要求,因此我们需要uml
UML是如何进行抽象的
- 统一语言,避免沟通导致的细节丢失。
- 可视化,通过元模型和表示法。
- 人驱动系统,事体现过程,物记录结果,规则是控制。
- 参与者(actor)的元模型作为信息来源提供者,作为人
- 用例(use case)的元模型来表示驱动者的业务目标,作为事
- 业务场景(business scenario)和用例场景(use case scenario)的视图来说明规则
- 业务对象模型(business object model)的视图来说明涉及到的物
现实模型->业务模型->概念模型->设计模型
UML和RUP的关系
UML(Unified Modeling Language)是一种语言
RUP(Rational Unified Process)是一种方法
建模公式
- 问题领域 = ∑抽象角度
- 抽象角度 = 问题领域便捷之外的参与者的业务目标 = 业务用例
- 业务用例 = ∑特定场景
- 特定场景 = 静态的事物 + 特定的条件 + 特定的动作
- 特定的事 = 特定的事物 + 特定的规则 + 特定的人的行为
用例驱动
用例驱动是统一过程的重要概念。
对象分析方法
- 万物皆对象
- 对象都是独立的
- 对象都具有原子性
- 对象都是可抽象的
- 对象都有层次性
- 对象分析方法总结