|
描述: 图一
图片:

估计我们大多数软件开发人员都是从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公司,如果老张没有准确理解市场形势,他可能会设计一个错误的组织结构,导致公司亏损破产。
|
一共有 1 条评论