登陆注册
2609200000006

第6章 面向对象编程

小A:“师兄,用任意一种面向对象语言实现,就是要用面向对象的编程方法去实现,对吗?”

大B:“一般编程初学者都会遇到这样的问题,碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。其实这是用计算机的方式去考虑它,就好比计算器这个程序,先输入两个数和运算符号,再根据运算符号判断选择如何运算,得出结果。这样是对的。但这样的想法却使得程序只为满足实现当前的需求,而程序就不容易维护,不容易扩展,也更不容易复用。也就达不到高质量代码的要求了。”

小A:“师兄,你这样一讲我又不懂了,那怎么程序才能容易维护,容易扩展,也容易复用哩?”

大B:“我再跟你讲细点吧!顺便也举些例子,理解一点。发广告邮件,广告邮件列表存在数据库里面。倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。然后考虑用Java来实现,既然是OOP,就不能什么代码都塞到main过程里面,于是就设计了三个类:一个类是负责读取数据库,取邮件地址,调用qmail的sendmail命令发送;一个类是读邮件内容,MIME编码成HTML格式的,再加上邮件头;一个主类负责从命令读参数,处理命令行参数,调用发email的类。把一件工作按照功能划分为3个模块分别处理,每个类完成一件模块任务。仔细的分析一下,你就会发现这样的设计完全是从程序员实现程序功能的角度来设计的,或者说,设计类的时候,是自底向上的,从机器的角度到现实世界的角度来分析问题的。因此在设计的时候,就已经把程序编程实现的细节都考虑进去了,企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。这样的分析方法其实是不适用于Java这样面向对象的编程语言。”

小A:“为什么?”

大B:“因为,如果改用C语言,封装两个C函数,都会比Java实现起来轻松得多,逻辑上也清楚得多。”

小A:“我倒觉得面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。”

大B:“这样吧,我再举一个非常简单的例子:假使现在需要写一个网页计数器,客户访问一次页面,网页计数器加1,计数器是这样来访问的如:http://hostname/count。cgi?id=xxx 后台有一个数据库表,保存每个id(一个id对应一个被统计访问次数的页面)的计数器当前值,请求页面一次,对应id的计数器的字段加1(这里我们忽略并发更新数据库表,出现的表锁定的问题)。”

大B:如果按照一般从程序实现的角度来分析,我们会这样考虑:首先是从HTTP GET请求取到id,然后按照id查数据库表,获得某id对应的访问计数值,然后加1,更新数据库,最后向页面显示访问计数。

小A:“现在假设一个没有程序设计经验的人,要怎样来思考这个问题的呢?会提出什么样的需求呢?”

大B:“你很可能会这样想:我需要有一个计数器,这个计数器应该有这样的功能,刷新一次页面,访问量就会加1,另外最好还有一个计数器清0的功能,当然计数器如果有一个可以设为任意值的功能的话,我就可以作弊了。做为一个没有程序设计经验的人来说,他完全不会想到对数据库应该如何操作,对于HTTP变量该如何传递,他考虑问题的角度就是我有什么需求,我的业务逻辑是什么,软件应该有什么功能。”

按照这样的思路需要有一个计数器类Counter,有一个必须的和两个可选的方法:

getCount()//取计数器值方法

resetCounter()//计数器清0方法

setCount()//设计数器为相应的值方法

把Counter类完整的定义如下:

public class Counter{

public int getCount(int id){}

public void resetCounter(int id){}

public void setCount(int id,int currentCount){}

}

解决问题的框架已经有了,来看一下如何使用Counter。在count。cgi里面调用Counter来计数,程序片断如下:

//这里从HTTP环境里面取id值

……

Counter myCounter=new Counter();//获得计数器

int currentCount=myCounter。getCount(id);//从计数器中取计数

//这里向客户浏览器输出

……

程序的框架全都写好了,剩下的就是实现Counter类方法里面具体的代码了,此时才去考虑具体的程序语言实现的细节。

面向对象的思维方法其实就是我们在现实生活中习惯的思维方式,是从人类考虑问题的角度出发,把人类解决问题的思维方式逐步翻译成程序能够理解的思维方式的过程,在这个翻译的过程中,软件也就逐步被设计好了。

大B:“在运用面向对象的思维方法进行软件设计的过程中,最容易犯的错误就是开始分析的时候,就想到了程序代码实现的细节,因此封装的类完全是基于程序实现逻辑,而不是基于解决问题的业务逻辑。”

同类推荐
  • 黑客

    黑客

    本书描述了近代历史上的一个萌芽时期,追述了计算机革命中初期黑客的丰功伟绩,描述了黑客用默默无闻的行动为当今的数字世界照亮了一条道路,描述了那些打破陈规的MIT的学生,也描述了缔造出Altair和Apple Ⅱ电脑这些伟大产品的DIY文化。这些黑客勇于承担风险,勇于挑战规则,发现了计算机工程问题的巧妙解决方案。他们都有一个共同的价值观,那就是至今仍然长盛不衰的“黑客道德”。
  • 一本书读懂大数据

    一本书读懂大数据

    本书是深入研究互联网思维的经典之作,从互联网思维的定义到互联网思维应用的具体案例表现。作者深入浅出、条分缕析,全面阐述互联网思维的内核与精神,逐一点评当前关于互联网思维的各种观点。本书从最初级的互联网思维应用到高端的粉丝经济,平台建设,自媒体营销的方法都有详细讲解介绍。让读者了解什么是互联网思维的同时还能学会把互联网思维运用到自己的工作学习已经生活中。
  • 产品经理入门攻略

    产品经理入门攻略

    《产品经理入门攻略》深入浅出地告诉大家什么是产品经理,结合了多位作者的亲身经历,解答了常见的工作问题。《产品经理入门攻略》集合了数十位优秀的作者,作为移动互联网时代一本难得的图书,适合产品经理和运营阅读,大家阅读时可以找到不少实用的工作方法。我们希望本书能成为移动互联网时代中学习产品的经典之作。
  • 不懂PowerPoint就当不好经理

    不懂PowerPoint就当不好经理

    经理人如何用PowerPoint,来规划部门的发展,如何用PowerPoint来表达自己的经营主张?本书为各类经理人提供了从入门到提高,从原理到实战的一系列知识,相信本书将让演示文稿为经理人的管理效能加分!
  • 通信十年:拥抱互联网

    通信十年:拥抱互联网

    本书从人才、资源、创新三个维度,通过多年的连续新闻报道,试图阐释此前中国电信运营商在供给侧改革中所做的尝试、带来的改变以及难以解决的掣肘,同时收录部分对国外电信运营商的观察报道,以他山之石,寻找殊途同归的方向。在以本书对此前十年通信业梳理之后,愿通信产业能迎来下一个“黄金十年”,而我能继续执笔记录。
热门推荐
  • 照着做,你就能战胜拖延

    照着做,你就能战胜拖延

    拖延带给人们的是一种极其痛苦的精神折磨,因此超过95%的拖延者都望自己能够摒弃这种习性,重新回归正常而规律的生活和工作。尽管人们有心不拖延,但具体实施起来却是困难重重。为了帮助广大拖延者成就更精彩的人生,本书《照着做,你就能战胜拖延》紧扣拖延者的特点,有针对性地提出了不少战胜拖延的方式和方法,希望为广大拖延者提供帮助。
  • 穆先生别来无恙

    穆先生别来无恙

    “我喜欢你,好喜欢你。”他抓住她的手,深情道。“可我不喜欢你。”她淡淡的说,把她的手从他的手里抽出来,转身离开。 身后的少年诡异一笑,低声说道:“你逃不掉的,你只能是我的。” ……
  • 一曲定江山

    一曲定江山

    金戈铁马,锦绣江山,王权更替的背后,永远是数不尽的白骨……它所影响的不仅仅是男人的天下,还有女人的一生……冰冷,只因看惯生死;狠绝,只因想与他做更久的夫妻;孩子的出生,至亲之人的逝去,身世的揭开……所有这一切,皆离不开一个斗字,她注定要一世争斗,永无休止!且看一介丫环出身的弱质女流,如何成为大昭王朝最尊贵的女人!
  • 夜鸦主宰

    夜鸦主宰

    【无限流】【系统模板流】正在虚拟游戏中厮杀的青年,带着游戏职业“乌鸦法师”,重生在另一个世界。熟悉的中世纪,陌生的中世纪,超凡的中世纪。夜鸦们的主宰,迈开了步伐。(我虽然没有抖M倾向,但这书也不是爽文。)大脑袋书友群:795399871
  • 穿越之天后进化论

    穿越之天后进化论

    素有“东方夜莺”之称的民国歌女白疏影,死后借尸还魂,成为21世纪的一个三流明星。谁知这三流明星还是个重生之身,前一世寄希望于影帝男友,到头来却被人抛弃,成为整个娱乐圈的笑话,最终想不开寻了短见。重活一世,白疏影决定好好经营她的人生。影帝?她可没兴趣,她的目标是凭借自己的努力成为天后!
  • 大地·生灵(一)

    大地·生灵(一)

    喜鹊与老鹰、猞猁的恩恩怨怨大千世界中,野生动物是一个自成体系的王国。在它们的国度里,王者们高高在上,君临天下,威风八面,自不待言。但这个王国中的小民百姓们,也有它们的喜怒哀乐,悲欢离合。每一个生命都绚丽多彩,富有智慧和勇气,神秘玄奇,生生不息,万年如斯。喜鹊是中国人的吉祥神鸟。“喜鹊叫,喜事到”。这种说法,有数千年的渊源。青海柳湾出土绘有喜鹊纹饰的陶罐一件,这是件祭祀用的礼器。说明四千年前,先民们已把喜鹊作为神物或图腾;“鹊桥相会”,在这个无比壮美的爱情神话中,喜鹊崇高的形象令人敬佩。
  • 倘若西南不遇

    倘若西南不遇

    爱情来临时,或许真的没有千万次幻想中的好,但不要拒绝,自然才是真的美。希望每个女孩儿,都可以如李乔西一般,遇见自己的江城南。
  • 大学教师的工资条(2005-2006)

    大学教师的工资条(2005-2006)

    最近,网上攻讦很多,因为俺在凤凰《一虎一席谈》里表述了一个观点——“人类社会分出阶层并不可怕,分出阶层利于激励勤勉,鞭策后进,这是资源不足的情况下分配制度的基础,这并不可怕,可怕的是,高阶层对低阶层没有关爱。”——这意思一出,一帮希(稀)奇古怪的网名便炸了营,纷纷断章取义,说阿忆讲了,要把财富全给精英,让劳动人民饿着,因此这个叫“阿忆”的人,应该是北大最无耻的副教授。
  • 每天读一点大师投资学

    每天读一点大师投资学

    随着中国资本市场的壮大,“穷者越穷、富者越富”的马太效应日益彰显,投资技巧已经成为致富的基本功。但西方投资大师的著作繁多,且晦涩难懂,让广大中国投资者望而生畏,《每天读一点大师投资学》深入浅出,让大家只读一本书就掌握本杰明·格雷厄姆、沃伦.巴菲特、乔治·索罗斯、吉姆·罗杰斯、詹姆斯·P·奥肖内西、范·K·撒普、罗伯特·希勒、阿瑟·莱维特八位投资大师的投资经验,轻轻松松掌握投资精髓。中国投资者还面临一个问题,那就是中国资本市场起步晚,制度不完善,运用西方投资大师的理论需要结合中国实际,作者在这方面也给出了操作建议。衷心希望《每天读一点大师投资学》能成为您运用大师投资智慧的起点。
  • 居里夫人:伟大的女科学家

    居里夫人:伟大的女科学家

    《图说世界名人:居里夫人(伟大的女科学家)》讲述了,玛丽·居里,波兰裔法国籍女物理学家、放射化学家,1903年和丈夫皮埃尔·居里及亨利·贝克勒尔共同获得了诺贝尔物理学奖,1911年又因放射化学方面的成就获得诺贝尔化学奖。玛丽·居里是第一个荣获诺贝尔科学奖的女性科学家,也是第一位两次荣获诺贝尔科学奖的伟大科学家。