OO直接翻译过来就是“面向对象”,它作为一种编程思想可以说是划时代的进化。虽说可能不是传说中的“银弹”(解决软件太复杂的万能灵丹),但是却能使挣扎在“焦油坑”中,那些绝望而无助的受难者猛然间看到希望。写《人月神话》的时候OO
还没有出来,现在作者很可能对于这一项技术性的变革投以赞赏的目光。
有
人说,编程是门艺术。而我认为,更重要的思想认识是——软件工程是门哲学。事实上,面向对象最重要的思想我认为就是来源于哲学思想。具体来说,就是——抽
象化。这里我直接把百度百科里面关于哲学里的抽象引述一遍——“抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细
节,不考虑其他因素。
”通过抽象化,我们的软件系统就可以抓住事物的共性,从而抓住事物的本质。由于诸多因素,导致的结果是——软件需求在不断变化。而事物本质变化却不会像需
求变化那样大。这样,应付需求的变化,我们只需要在原来抽象化的软件模型的基础上做局部修改。举个例子:我们制造出汽车,放在普通公路上,我们的需求是安
全、便捷的行驶,放在赛道上则是需要尽可能跑得快。两者需求大不同,却不需要我们重复创造两个汽车类,而是只要在汽车类的基础上做局部的修改。从这个方面
来看,我认为,可以把“面向对象”理解为“面向类”。
另外,通过面向对象的方法建立的软件模型也符合人类认识事物的习惯,便于理解。这一点,对
于
一个软件团队来说,是高效沟通的有力保障,它所带来的益处完全可以提高到战略高度。因为一个清晰明了的设计模型,是团队成员相互沟通的有力保障。这一点,
在《人月神话》书中也花了大量篇幅介绍团队成员如何有效沟通,前辈们甚至用上了微型胶片来减少存档量。如今,一个简单明了的设计模型减少了很多这方面的投
入。
关于“面向对象”的认识,到了这一层,我们似乎可以用平静的心去实现陌生领域中的软件建模,而不是面对复杂多变的需求焦虑又不知所措,就像
“焦油坑”中绝望无助的怪兽,越挣扎下沉的越快,也不会面对当下层出不穷的新技术、新概念产生迷茫、踌躇不前。剩下的问题就是捕获需求,抽象化,寻找其中
的类……而那些设计模式
、持久化等概念便会自上而下的体会到。到那时,我们或许会因为与前辈在思想上产生共鸣而会心一笑。
光说不练假把式,这里拿一个例子来结尾。大学OO
教材有个电梯建模的习题,需求简单明了,就拿这个举例吧。
现
实生活中,坐电梯无非就是涉及到以下一些内容:电梯、人、楼层、信号灯、上、下、开门、关门……软件建模就是一种“思想实践”,这些内容都是在我们脑子
里,并不是要造出实体。所以,可以根据上面获得一些零散的信息,抽象的归纳客观事物的映射。比如,什么是电梯?电梯是能上能下将人送到预定的楼层。好了,
有了这个简单的定义(不一定要求很准确,只要在可容忍的范围就行,而这个范围是系统愿景确定的),我们大致归纳出电梯的属性有:楼层、信号灯、电梯门这
些。这个电梯类具有的行为可以有:上、下、停、开门、关门。这里为什么不把楼层和人单独归纳出一个类来?因为人其实是电梯的使用者,而楼层在坐电梯这个客
观事件中只是一个数字,并没有什么行为。
但是,坐电梯这个事件,光有个电梯似乎还是不行的。因为,还要符合将人送至他想到达的楼层的愿望。这就涉
及到人在哪个楼层,他是上还是下,他要上或者下到几楼。这里我们找不到客观实物来映射到软件模型,不像电梯类是客观现实中存在的实物。那么,这里我们就要
抽象归纳出客观世界中看不见,摸不着的东西来。回到现实中来看,例如电梯在1楼,5楼有人要下,那么电梯就上到5楼,停下来,人进去。电梯根据人的指令,
下到他想到的楼层。如果电梯在1楼上到5楼途中,2楼有人要上,电梯就会在2楼停下来。再如果,2楼的人要去10楼,电梯就不会在上的途中停在5楼,而是
上到10楼后停下来,再下到5楼停下来。这样我们就可以发现——电梯只管上和下,至于在哪里停,则是根据人发出的指令。而这些指令其实就是一串数字,一串
要求电梯在哪里停的数字,而且是随时可能变化的。比如,刚才说的那种情况,停车数字是1(电梯开始停的楼层)、2、10、5、1(5楼要下的楼层)。这
样,我们就可以抽象出一个类,一个客观现实中看不到,摸不着的类——电梯停队列类。这个类属性有最高层、最底层、需要停的楼层,行为有添加需要停的楼层,
移除需要停的楼层。
下面是对应的类图。
从这个例子中可以看出,电梯类很容易找到。但是电梯停队列则是我们对现实世界中的业务流程进行归纳、抽象得出来的。所以,我认为,软件建模的重心,其实是在对业务流程的抽象上。
上
述整个过程符合人们日常惯性思维,现实和模型映射起来很自然。可以将这个过程看成是一个“创建世界”的过程,是一件很愉悦的过程,最起码我是非常喜欢这种
“建造”软件模型的过程,这种抽象抽象再抽象的过程。这个例子需求简单明了,我们很容易就收集到了足够的素材来归纳、抽象。如果是在一个陌生的领域创建软
件模形,抽象素材从哪里来,怎样抽象?我们就要探索需求,而探索需求过程不仅限于OO
,但是OO
的思维方式却能更好的和问题域中的专家沟通,更好的理解需求。
分享到:
相关推荐
当我们面对抽象画作时,大脑会尝试寻找熟悉的形状和模式,即使在没有明显参照物的情况下,约四分之一的人仍然能在画中发现现实世界的影子。这个过程越复杂,大脑在成功解析时获得的满足感越强烈。这与大脑的神经活动...
在C#编程语言中,抽象类(abstract class)和抽象方法(abstract method)是面向对象设计中的关键概念,它们主要用于支持多态性。抽象类是一种特殊的类,它不能被实例化,只能作为其他类的基类。抽象方法则是没有...
Java作为一种广泛使用的编程语言,提供了多种机制来实现代码的复用性和灵活性,其中抽象类和抽象方法是关键特性之一。 ### 一、Java抽象类 #### 定义 抽象类在Java中是一种特殊类型的类,它不能被实例化,即无法...
在面向对象编程中,抽象类和抽象方法是实现多态性的重要手段之一。C#作为一种强大的面向对象编程语言,支持抽象类和抽象方法的概念。本文将详细介绍C#中的抽象类与抽象方法,包括它们的基本概念、特点以及如何在实际...
[千个精美PPT模版]一共包括:抽象1、抽象2、抽象3、抽象4、抽象5、抽象6、工业、混杂1、混杂2、混杂3、技术1、技术2、家庭、假日、教育、经济货币、科学、商业管理1、商业管理2、虚拟人物1、虚拟人物2、艺术音乐、...
近世代数是数学的瑰宝之一,它以抽象的代数结构及其性质作为研究对象,是现代数学不可或缺的重要组成部分。近世代数包括了群论、环与域等核心概念,它们是数学分析、代数几何以及数论等领域不可或缺的基础。本文将...
抽象类与抽象方法由abstract修饰 abstract的使用注意 抽象方法没有方法体 抽象成员只能存在于抽象类中 抽象类可以有非抽象成员(侧重族群的概念) 抽象类的子类必须实现抽象方法体 抽象类you构造函数 抽象类只能...
在面向对象编程中,抽象类和抽象方法是重要的概念,特别是在 Delphi 这样的编程语言中。抽象类是一种特殊的类,它不用于直接创建对象,而是作为其他具体类的父类,提供一种共享接口和通用行为的方式。抽象类通常用 `...
"C#中的抽象方法和抽象类" C#中的抽象方法和抽象类是面向对象编程的重要概念,它们可以帮助开发者设计更加灵活、可扩展和维护的软件系统。本文将详细介绍抽象方法和抽象类的概念、特征和使用场景。 一、抽象方法 ...
在C#编程语言中,类、接口、虚方法和抽象方法是面向对象设计的重要组成部分。这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有...
随着信息时代的到来,抽象代数的应用变得越来越广泛,成为了大学数学系的主要基础课程之一。 丘维声的《抽象代数基础》从信息时代的需求出发,精选了抽象代数课程的教学内容,重点讲解了最基本和应用最广泛的部分,...
精美ppt模板之抽象6:内含20多个精美的ppt模板;主题:抽象
"精美ppt模板之抽象2.rar"是一个压缩包文件,包含了20多个与“抽象”主题相关的PPT模板,为用户提供了丰富的设计选择。 首先,让我们了解一下“抽象”这一概念。在艺术和设计中,抽象通常指的是不直接模仿现实世界...
丘维声的抽象代数
中科大抽象代数讲义1 中科大抽象代数讲义1是中国科学技术大学(University of Science and Technology of China)的一门课程讲义,主要讲述抽象代数的基本概念和方法。该讲义涵盖了群论、环论、域论和 Galois 理论...
抽象工厂模式是软件设计模式中的一种,属于创建型模式,它提供了一种创建对象组族的接口,使得相同族的接口在不同的实现中可以产生不同的子类对象。这种模式允许客户端独立于产品族进行编程,而产品族可以独立地扩展...
[千个精美PPT模版]一共包括:抽象1、抽象2、抽象3、抽象4、抽象5、抽象6、工业、混杂1、混杂 2、混杂3、技术1、技术2、家庭、假日、教育、经济货币、科学、商业管理1、商业管理2、虚拟人 物1、虚拟人物2、艺术音乐...
简介:这是一份精美的抽象艺术PowerPoint模板,PPT模板封面采用彩色曲线和斜线作为PPT设计艺术,幻灯片内容页面使用黑白色作为PPT背景色,整个模板富有科技感,是一份好看的优秀PPT模板; 关键词:精美幻灯片模板...
在Java等面向对象编程语言中,我们可以利用抽象类和抽象方法来实现简单工厂模式。 首先,我们需要理解什么是抽象方法。在面向对象编程中,抽象方法是一种没有具体实现的方法,它只有声明,没有具体的操作。这样的...
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式