登陆注册
2708800000006

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

同类推荐
  • 云计算、网络安全和网络盗窃:网络世界防盗初学指南

    云计算、网络安全和网络盗窃:网络世界防盗初学指南

    网络犯罪层出不穷,保护自己的安全,防止受到攻击,似乎是一个艰巨的任务。幸运的是,有一些人人都能采取的措施,可以降低成为网络袭击对象的风险。保证基于云计算程序的安全和降低被袭击的风险,关键在于理解云安全的共同责任。云提供商需要全力确保实施尽可能严格的安全策略。
  • 多媒体技术应用研究

    多媒体技术应用研究

    多媒体技术是以数字化为基础,能够对多种媒体信息进行采集、加工处理、存储、和传递,并能使各种媒体信息之间建立起有机的逻辑联系,集成为一个具有良好交互性的系统技术。
  • 互联网+时代听比尔·盖茨谈软件力

    互联网+时代听比尔·盖茨谈软件力

    微软以软件起家,身处互联网时代的你,也可以听听比尔盖茨是怎么谈软件的。
  • 不懂PowerPoint就当不好经理

    不懂PowerPoint就当不好经理

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

    黑客

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

    鸾凤错:袖手天下(全集)

    中原大陆,并存三国,谓之大周、大邺、大阪。朔漠古道,羌笛韵凉,聪慧的大周国公主傅筝因一道联姻圣旨,被迫踏上和亲之路,新婚前夜却莫名失身于神秘男子。新婚之夜,她遭到夫君大邺国恭亲王羞辱,被贬为妾。她坚毅乐观,忍辱负重,大邺皇帝对她一见倾心。与此同时,恭亲王对她由恨生爱,王府侧妃以及各宫妃嫔无不视她为眼中钉,将她卷入一场场阴谋中。怀野种、杀皇姐,神秘男人、怪异夫君,府邸阴谋、后宫杀戮,她面临的究竟是怎样的惊天秘密?隐藏大邺多年的大阪皇子间谍搅乱了天下局势,三国争雄,烽烟四起。她夹在中间,又扮演了怎样的角色?数年争斗,她被迫登上金銮殿。凤冠在身,却毅然诈死。
  • 孟子注疏

    孟子注疏

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。汇聚授权电子版权。
  • 宿罪

    宿罪

    【悬疑大神鼎力新作,引爆你的脑神经!】当身体里拥有了不同灵魂的时候,你到底是谁?当善良和邪恶纠缠在一起的时候,你如何区分?一个患有人格分裂的人,他要如何破案?一个时常迷茫痛苦的病人,他又怎样救赎?你是谁?而我,又是谁?
  • 末世斩魄刀

    末世斩魄刀

    其实我不想穿越,我就想宅在家里。而你居然让一个死宅去拯救世界!你确定不是要害死我么? 希望我能在这个危险的末世活的更久一点吧。
  • 封印师

    封印师

    本书是一本动漫幻想轻小说。新锐小说家两色风景,擅长描绘童话中的世界。他的新作《封印师》,以童话般的笔调构筑了一个融合了“蒸汽朋克”、“剑与魔法”和未来科技的世界,一个传奇的世界。喜欢变魔术的风趣少年卫矛,与古灵精怪的萝莉小玉一道在这个世界旅行,遭遇不同的人类和妖怪事件。卫矛的真实身份是传说的封印师一族,能够以操作空间的方式将妖怪封印,而小玉的身份是妖狐玉萝,二人相互依赖,亦敌亦友。相比起其他能力者对妖怪的赶尽杀绝,行走在乱世中的卫矛所秉承的是用“禁锢”这一相对温和的方式,来求得与妖怪的共处。他和玉萝就这样一面旅行,一面逃避族人及犀利妖怪的追杀,一面努力开创崭新的和平时代。
  • 鸦片:日本侵华毒品政策五十年(1895至1945)(谷臻小简·AI导读版)

    鸦片:日本侵华毒品政策五十年(1895至1945)(谷臻小简·AI导读版)

    以鸦片为武器,日本对中国进行的国家犯罪。本书揭露包括日本对台湾的鸦片“渐禁”政策、日本对伪满洲国的鸦片统制、日本对华北的鸦片统制等不为人知的日军在中国的毒品政策。
  • 九龙玄帝

    九龙玄帝

    新书已发《我为一世魔主》,求诸位支持。 “师父,长大了,我要娶你。”“嗯?”“我要每天陪师父说话,不让师父一个人。”“师徒,怎可相爱。”“我不管,我就要娶师父。”长大了,他似忘了对白洛水的誓言,为了‘姐姐’瑶止,踏宫抢亲,鏖战八方。可血战之中,救他的是师,害他的却是瑶止。十年后,铁血再归,凭谁问,卷土不能重来!?金戈铁马,踏九霄,万里江山,除瑶名!这一世称帝,我只为你这不该辜负之人!————通俗版:真圣强者重生归来,与一九首妖龙携手,碾压一切,再踏巅峰的故事。
  • 微型小说一千零一夜(第十卷)

    微型小说一千零一夜(第十卷)

    本书中的每一篇小说都是一个贴近生活的精彩故事,反映着当代生活的广阔图景。它们不仅能教会你如何理解生活,更能教会你如何热爱生活。开阔读者的视野、启迪读者的心智、使读者得到精神享受,是编者编选此书的最大愿望。
  • 阴人祭

    阴人祭

    妈怀胎七月被爸活活打死,未足月的我被从我妈的尸体中剖出,阴人生,命犯阴煞,是爷爷的“孽种”……
  • 追妻无门:女boss不好惹

    追妻无门:女boss不好惹

    青涩蜕变,如今她是能独当一面的女boss,爱了冷泽聿七年,也同样花了七年时间去忘记他。以为是陌路,他突然向他表白,扬言要娶她,她只当他是脑子抽风,他的殷勤她也全都无视。他帮她查她父母的死因,赶走身边情敌,解释当初拒绝她的告别,和故意对她冷漠都是无奈之举。突然爆出她父母的死居然和冷家有丝毫联系,还莫名跳出个公爵未婚夫,扬言要与她履行婚约。峰回路转,破镜还能重圆吗? PS:我又开新文了,每逢假期必书荒,新文《有你的世界遇到爱》,喜欢我的文的朋友可以来看看,这是重生类现言,对这个题材感兴趣的一定要收藏起来。