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

同类推荐
  • 一本书读懂大数据

    一本书读懂大数据

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

    产品经理入门攻略

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

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

    微软以软件起家,身处互联网时代的你,也可以听听比尔盖茨是怎么谈软件的。
热门推荐
  • 大唐修仙记

    大唐修仙记

    大唐边境的风在不停的飘荡的吹着,吹着的大唐边境的泥土带着一股芬芳的香气。一队西域吐蕃的人的马队正在朝大唐的方向驶来。马队上几个穿着吐蕃彩色条纹的衣服的吐蕃人,他们带着一封吐蕃王写给女皇武则天的信。信的内容是关于太平公主的……苏月明在大唐的治愈系修仙
  • 超级零售商

    超级零售商

    这是一个在各个平行世界兜售各类商品的苦逼销售员的故事。
  • 凤逆天下:皇上,我要废了你

    凤逆天下:皇上,我要废了你

    【玄幻女强】【速更】她身为头牌特工,竟遭遇穿越?不过没关系,换个世界,她照样可以玩的风生水起。身份卑微的替嫁丫鬟?呵呵,她会让所有人悔恨终生。浩云国皇帝,为安抚蓄谋篡位的三王爷与之女和亲。不料,三王爷却让府上丫鬟替嫁。但怎知,这丫鬟后天得力,光耀朝野。挟天子,令诸侯,废皇帝,创新朝,成天下奇谈。然而,龙吟国国王的出现,打乱了她所有的计划。到底是前世挚爱,还是今世死敌,且看她如何应对。
  • 洪荒天子(9)

    洪荒天子(9)

    洪荒中,毒虫遍地,异兽出没,危机无处不在,这便是始前的死亡之地。然而人类以天生的本能存于天地间,而他们之中的强者以神自居,用智慧与力量瓜分洪荒,分别统治着这片危机四伏的土地,从而形成了洪荒万国。而就在这血腥与杀劫之间,一位在蛇腹中、沼泽内、神剑下、陷阱里生存下来的少年,就在这野蛮与文明、毁灭与建设的洪流中崛起。他得到了苍天的眷恋,与神龙之丹融为一体,在广成洞府内开启心灵之门,悟透了天地的玄机,看遍了人世的杀戮争斗,孕育出无穷的智慧和能量,终铸就其不死之身,超越了凡尘的一切,游历于洪荒万国之间,组成“龙之旅”,横扫八荒,一统万国,创下了神州大地的千秋功业。他就是战神轩辕——洪荒天子!
  • 江湖踏剑饮

    江湖踏剑饮

    这个天下没有天子,没有朝廷,没有官兵,只有江湖,天下即江湖,江湖即天下。门派林立,群雄于世,只有一个天下第一,也只爱一个人!
  • 灯台

    灯台

    灯台的目标出现了。老慢和往常一样,七点半,慢吞吞走进办公室,进了办公室的第一眼,也总是瞟向灯台的办公桌。那眼神从老慢的眼皮下漫不经心地飘过来,像一丝微风,除非用心,一般觉察不到。单位里,灯台和老慢算是三朝元老,且都是副处,在这个处处暗战的年代,性别特征在副处级这个区域很明显地消失了。灯台早在五六年前就已经没有穿过长裙,但灯台喜欢买长裙,衣橱里挂一大堆。今年流行波西米亚风,街上到处是细腰长裙地飘着的女孩子和女人们,说飘,是因为那雪纺的柔美,将女性走路的婀娜衬托到极致,偏偏又全是花团锦簇的图案打底,让灯台看了眼馋得厉害。
  • 曾有一人,爱我如生命

    曾有一人,爱我如生命

    三年后,我见到当初逼我离开的男人。他问我:“恨我吗?”我说:“恨。”他抿唇浅笑,“好过你忘了我。”当我拨开当年离开迷雾,才发现不过是一个画地为牢的圈套。他抵着我的下巴,狠戾道:“容颜,我又何尝不在此牢中。”后来,我拖着一副破败的身子,望着阁楼铁栏外的阳光。“三万两千一百五十。”他出现了,他抱起我,对我说:“阿颜,不会了。”我看着这个男人,低低地笑了:“容越,我真的不会忘记你了。”因为恨永远比爱更深刻。
  • 万道龙皇

    万道龙皇

    〔暴爽玄幻,最热爽文〕少年陆鸣,血脉被夺,沦为废人,受尽屈辱。幸得至尊神殿,重生无上血脉,从此脚踏天才,一路逆袭,踏上热血辉煌之路。噬无尽生灵,融诸天血脉,跨千山万水,闯九天十地,败尽天下英豪,修战龙真诀,成就万道龙皇。精品群号:570274770(需要验证粉丝值)Vip群598630364(付费群) 普通交流群:1039264198
  • The Wonderful Wizard of Oz

    The Wonderful Wizard of Oz

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

    浩瀚时光与你有染

    不追求好的生活品质的人,大体都是还在自我催眠中,我很好,甚至是我已满足当下的生活!曾经的自己也是其中一员,有酒有肉偶尔下个馆子,买一套属于自己的房子,哪怕只是首付就已经很满足!每天坐着地铁上下班,偶尔打个滴,撸个串,感觉人生已经达到了巅峰!可当选择重新摆在你面前时,夏染迷茫了!是按照原来的步伐去走,还是努力去赢得更多的光辉与荣耀呢!?