- Grady Booch关于面向对象编程的讨论:“我对面向对象编程的目标从来就不是复用,相反,对我来说,对象提供了一种处理复杂性问题的方式,这个问题可以追溯到亚里士多德:您把这个世界视为过程还是对象?在面向对象兴起运动之前,编程以过程为中心,例如结构化设计方法。然而,系统已经到达了超越其处理能力的复杂性极点。有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统——我认为,这才是面向对象编程运动的真正胜利”。
- 面向过程方法认为我们的世界是由一个个相互关联的小系统组成,每个小系统都有明确的开始和明确的结束,开始和结束之间有着严谨的因果关系。只要我们将这些小系统中的每一个步骤和影响这个小系统走向的所有因素都分析出来,我们就能完整定义这个系统的行为。
- 我们要分析这个世界,并用计算机来模拟它,首要的工作是将这个过程描绘出来,把它们的因果关系都定义出来;再通过结构化的设计方法,将这些过程进行细化,形成可以控制的、范围较小的部分。通常,面向过程的分析方法是找到过程的起点,然后顺藤摸瓜,分析每一个部分,直至到达过程的终点。这个过程汇总的每一个部分都是过程链上不可分割的一环。
- 面向过程方法在实际应用中存在的困难是它将世界看做是过程化的,一个个紧密相连的小系统,构成这个系统的各个部分之间有着密不可分的因果关系。这种分析方法在需求复杂度较低时非常有用,但是我们实际中模拟的系统都是非常复杂和不可捉摸的,构成一个系统的因素太多,要把所有可能的因素都考虑到,把所有的因果关系都分析清楚,再把这个过程模拟出来,就不太困难了。
- 面向对象方法将世界看作是一个个相互独立的对象,相互之间并无因果关系,它们平时是“鸡犬之声相闻,老死不相往来”的,只有在某个外部力量的驱使下,对象之间才会依据某种规律相互传递信息。这些交互构成了这个生动世界的一个“过程”。在没有外力的情况下,对象则保持着“静止”的状态。
- 面向对象方法和面向过程方法根本的不同,在于不把世界看做是一个紧密关联的系统,而是看成一些相互独立的小零件,这些零件依据某种规则组织起来,完成一个特定的功能。过程并非这个世界的本源,过程是由通过特定规则组织起来的一些对象“表现”出来的。
- 面向对象方法存在的困难:1. 对象是怎么被抽象出来的?现实世界和对象世界看上去差别很大,为什么要这么抽象而不是那么抽象呢?2. 对象世界由于其灵活性,可以任意组合,可是我们怎么知道某个组合就正好满足了现实世界的需求呢?什么样的组合是好的,什么样的组合是差的呢?3. 抛开现实世界,对象世界是如此难以理解。如果只给我一个对象组合,我怎么才能理解它表达了怎样的含义呢?
- 现实世界和对象世界存在一条被称作是 抽象 的鸿沟,要跨过这条沟,我们需要:1. 一种把现实世界映射到对象世界的方法。2. 一种从对象世界描述现实世界的方法。3. 一种验证对象世界行为是否正确反映了现实世界的方法。
- 如果我们站在一个很高的抽象层次,以高度归纳的视角来看这个世界的运作,就会发现现实世界无论多么复杂,无论哪个行业,无论做什么业务,其本质都是由人、事、物和规则组成。人是一切的中心,人要做事,做事就会使用一些物,并产生另外一些物,同时做事需要遵循一定的规则。人驱动系统,事体现过程,物记录结果,规则是控制。建立模型的关键就是弄明白有什么人,什么人做什么事,什么事产生什么物,中间有什么规则,再把人、事、物之间的关系定义出来,一个模型也就基本成型了。
- 建模的过程:从现实世界到业务模型,从业务模型到概念模型,从概念模型到设计模型。