博主资料

留言 加为好友 收藏

用户名:  arronxiao
来自:  上海 黄浦

个人统计

用户名: arronxiao
等级: 初来乍到
威望: 90
积分: 236
在线时间: 14 小时
日志总数: 18
评论数量: 178
访问次数: 102933
建立时间: 2006-05-06
RSS订阅       手机访问

最新评论

文章搜索

文章列表

友情链接

最近访问的人:

您我携手共创未来
2008-06-24 09:27:30
快乐的生活,快乐..
2008-06-14 20:50:19
天空
2008-06-06 09:24:40
兵,器
2008-06-03 13:44:59
任甲林
2008-05-23 07:27:28
2008-04-28 23:29:28
2008-04-25 19:00:39
天地你我
2008-02-05 23:32:45
电子商务研究(B2C)
2008-02-02 09:07:53
逆风飞扬
2008-01-31 23:02:22

日志文章

2006年05月22日 21:07:39

面向对象(OO)思想

描述: 图一
图片:



估计我们大多数软件开发人员都是从C++、Java之类的面向对象编程语言开始接触面向对象思想的,而且一定有不少人感觉面向对象思想很抽象,难于理解,更难应用。确实面向对象思想起源于编程语言,但是,面向对象思想更是一种软件分析和设计思想,不是编程思想。如果从编程语言来理解面向对象思想,那实在是走错了路,就好比钻到象肚子里去研究象长的什么样子,这是几年也研究不出结果的。如果跑到象群中研究象长得什么样,那这个问题就非常简单了。这里我们先在现实世界中寻找面向对象思想,而后把该思想应用到软件开发中。
一.     ABC公司
ABC公司是一家装修公司,老张十年前成立了该公司。最初只有老张一个人。老张自己联系业务,自己找工程队施工,自己买装修材料。后来装修市场越来越热,业务越来越多,外面找来的工程队越来越忙不过来,有时还找不着工程队而错失良机,为了适应市场情况,老张组建了工程部,负责装修施工。为了承接更多业务,老张又组建了市场部,负责售前和签合同事宜。再后来,由于市场越来越成熟,客户对质量要求越来越高,对价格却一压再压,老张又成立了设计部,通过设计提高整体装修品味;成立了材料部,材料部负责询价,集中采购,建立长期供应商关系,降低成本;成立了客户服务部,客服部负责售后服务,提高客户满意度。部门和人员一下子增加了很多,互相扯皮现象突现出来了,工作效率越来越低。为了解决扯皮问题,老张制定了各部门的部门职责,设定了各部门的岗位及岗位职责。如图一所示(图中省略了岗位):

各部门职责:
     市场部的职责是:扩大公司影响,做好售前服务,签订合同。市场部的岗位有业务员,合同审核员,公关人员等。
     设计部的职责是:根据客户的房型结构及兴趣爱好,为客户设计装修图纸。设计部的岗位有效果图制作人员,装修设计人员,用料计算人员等。
     材料部的职责是:材料采购,降低成本。岗位有询价人员,采购人员,质检人员等。
     工程部的职责是:根据设计图纸进行装修施工。岗位有水电工,木工,泥水工等。
     客户服务部的职责是:售后服务,提高客户满意度。
     总经理室负责制订公司的战略目标及管理协调各部门。

各部门各司其职,互相协作,共同实现公司盈利。各部门的各岗位人员也各司其职,互相协作,共同完成部门职责。市场部通过各种方法树立良好的公司形象,积累客户关系,接洽客户,签订合同。签合同过程中,根据市场部要求,设计部提供效果图、装修方案等协助。合同签订后,工作转给设计部,设计部按客户要求设计图纸,制作材料清单等,在这过程中市场部协助处理客户关系。之后工作转给工程部和材料部。材料部采购材料,工程部施工。工程完工后,工作转给客服部。这样在各部门工作和协作下,以及各部门员工工作和协作下,共同完成一项工程,为公司创造利润。
如果把公司,部门,人员等都抽象成物件,或者说对象,那么关于ABC公司的上述运作可以描述为:
1.     每个对象都是由更小的对象构成。公司这个大对象由若干名为“部门”的对象构成,部门对象由若干人员对象构成。
2.     每个对象都有一定的职责。公司对象的职责是创造利润,各部门对象的职责如前所示,各人员的职责是他相应的岗位职责。
3.     每个对象的职责通过它的下属对象的工作和协作来实现。公司对象的利润通过各部门的工作和协作来创造,各部门对象的职责通过部门的员工对象的工作和协作来完成。
4.     对象的职责决定对象的构成。ABC公司最初由老张一个人构成,后来为了完成更多工程,应付更激烈的市场挑战,ABC公司的构成改成了老张,工程部,市场部。再后来,为了提供更好的品质,更低的价格,更好的满意度,ABC公司的构成改成了总经理室,工程部,市场部,设计部,材料部,客服部。随着公司对象职责变强增多,构成公司的对象也在增多变强。各部门对象的人员构成显然也是由部门职责决定的,所谓“因事定岗”。
二.     对象无所不在
如果进一步,把一切东西都抽象为对象,我们会发现一个神奇的“对象世界”:
1.     世界由对象构成。
2.     对象由更小的对象构成。
3.     每个对象有其职责。
4.     对象职责通过它的下属对象的职责实现和下属对象互相协作来实现。
5.     对象职责决定对象构成。
例如“世界”这个大对象,由许多名为“国家”的对象构成。每个国家都在忙忙碌碌:人在生产消费,动植物在生长呼吸,水和空气在流动,等等,这是各个国家在实现自己的“职责”。各国之间无时无刻不在发生这样那样的关系:政治对话,经济合作,贸易摩擦;这国的寒流到了那国引起降温下雨;那国的飞鸟到了这国带来了禽流感,等等,这是各国“互相协作”,实现世界的“职责”。又如“人”这个对象由头、手、脚和身体构成。但是最初,人和猴子一样没有手,只有四肢。后来因为劳动的需要,直立起来了,前肢变成了手。也就是说,“劳动”这个职责决定了“手”这个构成。后来,人要应付越来越复杂的社会,手变得更灵活,头变得更聪明,这也是“职责决定构成”。
由此看来,对象思想在客观世界中早就存在,象前述的ABC公司一样,在人类社会中更是普遍存在!
但是,不同的装修公司会设置不同的部门,不同的部门职责定义,各部门的岗位更可能不同。有些装修公司组织结构差别很大,但都运作得很好,工作效率很高。也有些装修公司,部门设置不合理,或者职责分配不清,互相扯皮,工作效率极低,客户满意度极差。这就是说:
1.     对象由更小的对象构成,但构成方式有许多种。也就是说可以选择这样一些对象来构成,也可以选择那样一些对象来构成。
2.     即使选定了一种构成方式,构成对象的下属对象间的职责分配可以有很多种方式。
3.     对于某一对象,选择不同的对象构成,选择不同的职责分配方式,对象职责实现效果差别很大。
三.     面向对象软件开发
把前面的对象思想应用到软件开发中就是面向对象软件开发。根据对象思想,“一切都是对象”,软件系统自然也是对象,该对象由更小的对象构成,更小的对象由更更小的对象构成,整个软件系统就是一个分层的对象结构,就象ABC公司的组织结构图一样。软件对象的职责是软件系统要实现的功能,该职责通过构成软件的下属对象的职责及下属对象间的协作来实现。这样一来,开发软件系统就变成求解两个问题:
1.     选择构成软件系统的对象。
2.     给各对象分配职责。
这好比老张经营他的ABC公司,他设计了ABC公司的部门结构和部门职责,各部门的岗位和岗位职责,这样,ABC公司顺利运行起来了。
最极端的设计方法是整个软件系统由一个对象构成,该对象有很多方法,这些方法提供了软件系统的所有功能。这也是一种方法,好比某家装修公司,它的所有员工只有老板一个人。如果装修工程很小,业务量较少,那么,一个人的公司可能是效率最高的办法。但是,如果工程大,业务量多,这种办法肯定不可行。同样,只有极端简单的软件,才可以由一个对象来实现。
根据对象思想,“对象职责决定对象构成”,由此,得出面向对象软件开发的基本思路:从软件的功能导出软件的一级对象构成,再把软件功能恰当分配给各一级对象。对每一对象,根据分配给它的职责,导出二级对象构成,再把职责分配给二级对象。如此循环,直到导出所有对象。这个思路的前提是理清软件的功能,即理解需求。这好比老张经营ABC公司,如果老张没有准确理解市场形势,他可能会设计一个错误的组织结构,导致公司亏损破产。

Tags: 面向对象  

类别: 软件设计 |  评论(1) |  浏览(3774) |  收藏
1楼 [匿名]guest 2006年05月29日 22:20:17 Says:
太好了啊!比喻非常形象,使我对面向对象有了更深的了解!
发表评论