娱乐星闻
积木视频
积木小说
BT下载联盟
积木搜索
高清晰素材
积木笑话
积木首页
|
500多种网页特效
|
函数手册
|
广播电台
|
高清晰图片素材
|
服务器合租
|
万年历
|
网友最新浏览记录
程序开发
网页设计
搜索引擎
特效代码
操作系统
防范病毒
黑客技术
图形图象
电脑硬件
网络技术
服 务 器
数 据 库
网文精粹
专题推荐:
php正则表达式
c#.net
Javascript实例教程
JSP新手上路
JSP技巧
JSP应用
JSP数据库
XML
MySQL
SYBASE
CSS基础教程
Flash基础知识
Flash制作技巧
Flash实例教学
Flash action技术
配色技巧
WIN2003安装
Linux安装配置
脚本编程
WIN 编程
*NIX编程
FLASH 入门
FLASH 教程
FLASH 技巧
Win服务器
Linux服务器
网官技术
路由技术
交换技术
Apache
您的位置:
积木首页
>>
黑客技术频道
>>
黑客编程
>> 正文:
标题:面向对象的思维方法
时间:2006-1-1 来源:不详 浏览数:次
文章作者:范凯
robbin_fan@yahoo.com.cn
我是从学习Java编程开始接触OOP (面向对象编程),刚开始使用Java编写程序的时候感觉很别扭,因为我早以习惯用C来编写程序,很欣赏C的简洁性和高效性,喜欢C简练而表达能力丰富的风格,特别忍受不了Java运行起来慢吞吞的速度,相对冗长的代码,而且一个很简单的事情,要写好多类,一个类调用一个类,心里的抵触情绪很强。
我对Java的面向对象的特性琢磨良久,自认为有所领悟,也开始有意识的运用OOP风格来写程序,然而还是经常会觉得不知道应该怎样提炼类,面对一个具体的问题的时候,会觉得脑子里千头万绪的,不知道怎么下手,一不小心,又会回到原来的思路上去。
举个例子,要发广告邮件,广告邮件列表存在数据库里面。倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。
然后考虑用Java来实现,既然是OOP,就不能什么代码都塞到main过程里面,于是就设计了三个类:
一个类是负责读取数据库,取邮件地址,调用qmail的sendmail命令发送;
一个类是读邮件内容,MIME编码成HTML格式的,再加上邮件头;
一个主类负责从命令读参数,处理命令行参数,调用发email的类。
把一件工作按照功能划分为3个模块分别处理,每个类完成一件模块任务。
仔细的分析一下,就会发现这样的设计完全是从程序员实现程序功能的角度来设计的,或者说,设计类的时候,是自低向上的,从机器的角度到现实世界的角度来分析问题的。因此在设计的时候,就已经把程序编程实现的细节都考虑进去了,企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。
这样的分析方法其实是不适用于Java这样面向对象的编程语言,因为,如果改用C语言,封装两个C函数,都会比Java实现起来轻松的多,逻辑上也清楚的多。
我觉得面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。
举一个非常简单的例子:假使现在需要写一个网页计数器,客户访问一次页面,网页计数器加1,计数器是这样来访问的
http://hostname/count.cgi?id=xxx
后台有一个数据库表,保存每个id(一个id对应一个被统计访问次数的页面)的计数器当前值,请求页面一次,对应id的计数器的字段加1(这里我们忽略并发更新数据库表,出现的表锁定的问题)。
如果按照一般从程序实现的角度来分析,我们会这样考虑:首先是从HTTP GET请求取到id,然后按照id查数据库表,获得某id对应的访问计数值,然后加1,更新数据库,最后向页面显示访问计数。
现在假设一个没有程序设计经验的人,他会怎样来思考这个问题的呢?他会提出什么样的需求呢?他很可能会这样想:
我需要有一个计数器,这个计数器应该有这样的功能,刷新一次页面,访问量就会加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类方法里面具体的代码了,此时才去考虑具体的程序语言实现的细节,比如,在getCount()方法里面访问数据库,更新计数值。
从上面的例子中看到,面向对象的思维方法其实就是我们在现实生活中习惯的思维方式,是从人类考虑问题的角度出发,把人类解决问题的思维方式逐步翻译成程序能够理解的思维方式的过程,在这个翻译的过程中,软件也就逐步被设计好了。
在运用面向对象的思维方法进行软件设计的过程中,最容易犯的错误就是开始分析的时候,就想到了程序代码实现的细节,因此封装的类完全是基于程序实现逻辑,而不是基于解决问题的业务逻辑。
学习JDBC编程的经典错误问法是:“我怎样封装对数据库的select操作?”
面向对象的设计是基于解决业务问题的设计,而不是基于具体编程技术的设计。我不会去封装select语句的,我只封装解决问题的业务逻辑,对数据库的读取是在业务逻辑的编码实现阶段才去考虑的问题。
(责任编辑:欣欣裴)
其他文章
上一篇文章:
ASP远程数据获取程序的入门教程
下一篇文章:
VB6 中发送邮件的新方法
相关文章
黑客至爱心得:拿Goolge找对象最方便!
黑客至爱心得:拿Goolge找对象最方便
C语言的面向对象技术
php和asp对象的等价关系
adodb.stream对象的方法/属性
最近更新
Windows 2003 Enterprise
教你架设一台流媒体服务器
服务器磁盘资源合理分配经
《三国群英传5》超级秘籍大
《侠盗飞车罪恶都市》垃圾
最新代理列表
《新世界海盗》海战必胜法
在SQL中删除重复记录(多种
鬼武者3攻略综合研究 - 游
关于桌面右键菜单的修改及
今日推荐
制作免杀木马实战教程〔图
远程控制服务器的简捷方法
向大家推荐几款非常好的工
MS04031漏洞漏洞程序演示版
脚本的故事
对江苏黑客联盟的安全小析
网络程序漏洞攻击完全手册
Webmail攻防实战
热点文章
代码加密解密
视频:ADSL宽带共享上网(
制作免杀木马实战教程〔图
黑客必备命令-FTP命令
啊拉QQ大盗脱壳记
用net start 可以启动肉鸡
利用google伪装你的木马地
嘿嘿:几个危险文件
关于本站
|
广告服务
|
联系我们
|
版权申明
|
强强联盟
|
投稿热线
|
网站地图
|
申请链接
Copyright ©2005-2006
Gimoo.net
All rights reserved. 积木网 版权所有
E-mail:gimoohr@gmail.com
京ICP备05050695号