网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.applet的参数化--对数组进行初始.
.灵活使用EJB的本地和远程接口(二).
.直接用 java 命令行动态生成jpg文.
.Web App struts框架里实现Filter.
.CLR和JRE的运行机制的初步总结.
.Java 虚拟机类装载:原理、实现与.
.getMinutes 方法.
.Vector,ArrayList哪一个更好.
.Java开发框架:关于SSH架构的简单.
.课程介绍(5):SL-314 用Java开发W.
.利用Java Swing设计标准对话框.
.在基于MIDP的应用程序上使用JDBC.
.Java Learning Path(四) 方法篇.
.使用JDBC创建数据库对象.
.Java技巧:在清单里设置主类.
.开天劈地:开发 JAVA 程序的新武.
.Job Scheduler 1.2.5&.
.《Java极限编程》(Java Tool fo.
.CORBA 是什么.
.初学者如何开发出一个高质量的J2.

面向对象的思维方法

发表日期:2008-1-5



  我是从学习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,更新数据库,最后向页面显示访问计数。
QQ病毒 腾讯QQ空间代码专题 PPT教程专题 ADSL应用面面俱到 Fireworks教程专题 计算机和网络技术基础知识 校园网专题 网吧技术专题


  现在假设一个没有程序设计经验的人,他会怎样来思考这个问题的呢?他会提出什么样的需求呢?他很可能会这样想:

  我需要有一个计数器,这个计数器应该有这样的功能,刷新一次页面,访问量就会加1,另外最好还有一个计数器清0的功能,当然计数器假如有一个可以设为任意值的功能的话,我就可以作弊了。

  做为一个没有程序设计经验的人来说,他完全不会想到对数据库应该如何操作,对于HTTP变量该如何传递,他考虑问题的角度就是我有什么需求,我的业务逻辑是什么,软件应该有什么功能。

  按照这样的思路(请注重,他的思路其实就是我们平时在生活中习惯的思维方式),我们知道需要有一个计数器类 Counter,有一个必须的和两个可选的方法:

getCount() // 取计数器值方法
resetCounter() // 计数器清0方法
setCount() // 设计数器为相应的值方法
  把Counter类完整的定义如下:


上一篇:JavaThread应该注意的问题 人气:454
下一篇:百分之百纯Java(TM)--名词解释 人气:667
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐