登陆注册
15296300000006

第6章 5 面向对象编程

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

同类推荐
  • 中文版3dsMax2010实例与操作

    中文版3dsMax2010实例与操作

    本书结合3dsMax2010的实际用途,按照系统、实用、易学、易用的原则,通过大量案例介绍了3dsMax2010的各项功能,内容涵盖3dsMax入门、创建和编辑二维图形、创建基本三维模型、使用修改器、网格建模、多边形建模、面片建模、复合建模、材质和贴图、灯光和摄影机、渲染、动画制作、粒子系统、空间扭曲和动力学等。
  • 如何选购电脑

    如何选购电脑

    本书以问答的形式介绍了选购电脑的基本知识。内容包括:电脑的组成、选购电脑的技巧、主机的部件构成、主板的主要类型、CPU的性能指标等。
  • 我看电商

    我看电商

    本书是作者近30年从事零售及电子商务管理的总结和分享。近年来电商行业在中国迅猛发展,2012年网络零售市场规模达到13,000亿人民币,诞生了淘宝、天猫、京东、当当、凡客、唯品会……等一大批全新的网络公司,电子商务正在日益深入的影响着越来越多人的生活。如今这位自称跨界老兵的电商操盘手第一次全方位剖析电商风云,细说中美电子商务发展的不同路径,评点国内各大电商企业的是是非非,详解其中的融资、模式、运营、效率……个中经验,毫无保留的娓娓道来,笔触至深,让人不禁掩卷沉思。
  • 天下一家:网络联通世界(科学新导向丛书)

    天下一家:网络联通世界(科学新导向丛书)

    《天下一家:网络联通世界》一书从网络的基本知识出发,详细地介绍了网络科技的发展与用途,还包括校园网络对普及教育的重大作用。本书内容翔实、结构清晰、图文并茂,是一本实用性极强的网上冲浪参考书。
  • Delphi程序设计教程

    Delphi程序设计教程

    本书为适应不同层次读者的需要,从Delphi的基本知识讲起,由浅入深,全面讲述了Delphi的集成开发环境、Delphi的编程语言——ObjectPascal、常用组件的使用、窗体的设计、菜单的设计、对话框的设计、多文档界面程序的设计、多媒体编程和数据库应用程序设计等内容。
热门推荐
  • 绝宠完颜,腹黑邪帝

    绝宠完颜,腹黑邪帝

    是穿越异世,还是魂归故里。为了保护把她送走,再次归来,是她,也不是她,身世慢慢揭晓,她又是谁,
  • 进化的抉择

    进化的抉择

    在变动中,一切都发生了改变。非生命物质性质的改变,或许是对人类文明的一次重大挫折。可是,在生命体发生了某种变化后,早已站在地球生命的顶峰的人类,霸主的地位只会更加坚固。“旧人类”留给“新人类”的东西大部分都已经失去了作用,但仍坚固地保存下来的“美德”新人类如何取舍?或者说对于那些“失去作用的旧人类”,新人类,又该做出怎样的抉择?
  • 小男孩的梦幻王国之旅

    小男孩的梦幻王国之旅

    讲述一个现实世界中的小男孩,在一个偶然的机会中,穿越到了神奇的梦幻王国,在这里他的一切都改变了,似乎是在做梦一样,他成为了自己心目中的王子,本以为一切很顺,但是他的身上肩负着重大使命,他不得不去拯救这个美丽的王国,就这样,一场惊心动魄的冒险之旅开始。
  • 尘染异世

    尘染异世

    常言"三十年河东,三十年河西”她一时是废材不代表一世是废材"凤千染"这个名字总有一天她会让人闻风丧胆,她不为别的只为自己的家人,她甘愿为他们扫清一切障碍。神兽算什么?在她而言还没有钱来的值"又多了两个,唉这一家子"凤千染望着眼前的一群兽兽身上"唉,还是小银好,懂得为姐姐省钱你看看你们,送上门来的也不打劫""姐姐我们是超神兽啦,打劫神马的太丢脸了"某妞听了双手叉腰一副泼妇模样"超神兽怎么了,钱才是最重要的,没钱怎么养活你们"……
  • 镜后

    镜后

    你的初中是什么样子?是到处风生水起,八卦漫天乱飞,动不动就火烧赤壁大战一场?还是好好学生,尊师爱幼,为了成绩,为了学习,不惜牺牲一切?或者是为了父母的抱怨,迎头而上,勉强读个初中就出去混生活?。。。。。。。现在,我向你们讲述一下现在的初中,现在小城镇里的初中!
  • 心有篮球梦

    心有篮球梦

    想了很久,还是提起笔写了,也算是给自己一个交代吧。青春校园篮球故事,毕竟小说非现实,可以yy,可以把许多不肯能变成可能...至于宗旨还是那句:致篮球,致老友,致青春。本人非常喜欢井上的《灌篮高手》和大秦的《校园篮球风云》,可能会出现一些里面的影子,可以说我是因为《灌篮》爱上篮球,因为《校园》爱上写篮球小说。至于主人公的名字叫林夕,哈哈著名作词人,很喜欢这个名字,“梦”字的分解体,所以小说名定为《心有篮球梦》,林夕与篮球还有他的小伙伴们的故事。爱篮球的希多支持!
  • 大唐圣骑士

    大唐圣骑士

    绝大部分的架空历史都是从现代穿越到古代,那么,如果异世界的圣骑士高手穿越到大唐又会是何种情形。斗气?魔法?还有科技,他会带给大唐时代怎样的变化?面对各色性格不一的美女他却又该如何选择?纯情还是11?假才子却是真丈夫,沙场花丛齐纵横。才子们说:他是个怪才。少女们说:他真男人。李世民说:他是一条金龙,一条让人忧心的金龙。敌人说:他是地狱里爬出来的冷血恶魔。大隋余孽说:他是我们复隋的龙之魁首。阴谋?人生就是一场阴谋,我们每个人正苦苦挣扎着。开头拉开端,有点慢,不喜欢的话跳过一二十章再看。另外求收藏还有推荐,杨丽华会告诉你:其实我就喜欢你这样的男人。杨天会说:哈哈,美女过来吧,哥哥不是大灰狼哦。为很久没更新向大家道歉了,现实中的问题很难说清楚,另一本书《神仙制造商》喜欢的也可以去看看。
  • 琉歌

    琉歌

    她是神族后裔,他是人间皇子,一场人间之行,彼此相遇。夷越大陆,自万年前,一场神魔之战后,天下三分,华菱,冥川,人间,神秘的暗黑力量在蠢蠢欲动中苏醒
  • 都市之模拟人生

    都市之模拟人生

    懦弱胆小的高鹏得到了改变一生的契机,一盒5d版模拟人生的光盘。当模拟人生变成了现实人生,钓鱼、跑步、照镜子都能增加自身属性时,高鹏从一个普通的大学生一跃而成了大学里的风云人物,被灵异社团破格录取、有女鬼loli当侍从、与死神mm玩暧昧、和异能世家大小姐称姐弟、再养一只猫耳娘当宠物,这才是高鹏所追求的人生,而为了让自己的梦想实现,他只有不断地变强。高鹏:我想吃的东西要吃的上,想去的地方能去的了,想杀的人能杀得了,想泡的mm必须泡到手。————————————小蜜人品担保,新书上传期间,一日两更,书友群一:84172137,书友群二:44203564。
  • 冰雪公主的腹黑未婚夫

    冰雪公主的腹黑未婚夫

    沐紫嫣,堂堂沐家大小姐,才貌双全,家室显赫,居然被被逼婚?说出来都没人信!而且,结婚对象居然是一个连面都没见过的陌生人?好吧,在这个未婚夫面前,沐紫嫣承认自己输的很惨:打又打不过,还动不动玩儿扑倒,骂也骂不过,还动不动玩儿各种咚,床咚,壁咚,地咚,样样在行,天呐,还有没有天理了?