首页 | 手机 | 笔记本 | 电脑硬件 | MP3 | 数码相机 | DV | 品牌机 | 办公 | 网络 | 服务器 | 投影机 | 新闻 | 游戏 | 学院 | 下载
面向对象的思维方式
2006-1-4 9:19:00 文/ 出处:Matrix

  用Java来表示:

  public class JunkMail {
   private String head;
   private String body;
   private String address;
   public JunkMain() { // 默认的类构造器
   // 从外部配置文件读邮件头和邮件体
   this.head=...;
   this.body=...;
   }

   public static boolean sendMail(String address) {
   // 调用qmail,发送email
   }

   public static Collection listAllMail() {
   // 访问数据库,返回一个邮件地址集合
   }
  }

   当把JunkMail设计好了以后,再调用JunkMail类完成邮件的发送,将是非常轻松的事情。

   如果说传统的面向过程的编程是符合机器运行指令的流程的话,那么面向对象的思维方法就是符合现实生活中人类解决问题的思维过程。

   在面向对象的软件分析和设计的时候,要提醒自己,不要一上来就去想程序代码的实现,应该抛开具体编程语言的束缚,集中精力分析我们要实现的软件的业务逻辑,分析软件的业务流程,思考应该如何去描述和实现软件的业务。毕竟软件只是一个载体,业务才是我们真正要实现的目标。

   但是在设计过程中,心里却往往在担心,如果我完全不去考虑程序代码的实现的话,那么我怎么知道我的设计一定合理呢?我怎么知道我设计的类、接口一定可以实现呢?所以经常可以看到的现象就是:

   在设计过程中,虽然知道不能过早考虑代码实现,但是每设计一个类,一个接口,心里都要不知不觉的用自己熟悉的编程语言大概的评估一下,看看能否编出来,因此,一不小心,就会又回到按照程序功能实现的思路进行设计的老路上去了。

   举个例子来说明,在做Web程序设计的时候,经常要遇到分页显示数据的情况。比如说需要把系统中所有的用户都列出来这样的功能。假设使用User类来表示用户,增加用户addUser(),删除用户deleteUser(),查询所有用户listUsers()方法。而数据库中有一个user表,一条记录是

  一个用户的信息。下面考虑一下User类的方法的实现:

   addUser()和deleteUser()方法都好实现,就是对数据库增加记录和删除记录。对于listUsers()方法,其实就是对user表的select,取出一个记录集。但是该怎么从listUsers()方法中得到所有用户的列表呢?

   一个方法调用的返回值只有一个,没有多个,所以很多情况下采用的办法就是返回值定义为集合类型,比如Vector。这样就可以在listUsers()方法的具体代码实现的时候,从数据库依次取出一个个记录,插入到Vector里面来。在主程序里面,调用listUsers()方法可以返回一个Vector,然后再对Vector遍历操作,就可以得到用户列表了。

  public class User {

   public static void addUser(...) {
   // 数据库insert一条记录
   }

   public static void deleteUser(...) {
   // 数据库delete一条记录
   }

   public Vector listUsers(...) {
   // 数据库select结果放到一个集合里面
   }
  }

   这样的设计基本合理,但是仍然有点小问题。因为在设计的时候,就考虑到了用Java的集合类Vector来实现对不定长数据集的存放,因而违反了面向对象设计的一个原则:在设计的时候不应过早的考虑具体程序语言的实现。所以必须用抽象的方法,和具体实现无关的方法来表达业务逻辑。

   我们知道,通常对具有集合特征的数据结构进行遍历通常可以使用next和hasNext方法,next实现取下一个用户,hasNext判断是否还有元素。 因此我们定义一个接口Iterator,这个接口中定义两个方法next和hasNext:

  public interface Iterator {
   public boolean hasNext() {}
   public Object next() {}
  }

  而User类的listUses方法返回值改为Iterator接口的实现类:

  public class User {
   ...
   public Iterator listUsers() {
   }
   ...
  }

   这样就把User类的设计和具体的实现方法分离开了,因为此时任何实现了next()和hasNext()方法的类都可以做为listUsers的返回值,都可以被用来表达“用户列表”,而不仅仅可以使用Vector而已。比如,我可以用ArrayList来表达用户列表,因为ArrayList也实现了Iterator,当然我也可以自己专门写一个类来存放用户列表,只要实现next()和hasNext()方法就行了。

   这样在具体的编写代码的时候,程序员具有了最大的灵活性,可以根据具体的情况,采用不同的编程方法来存放用户列表。特别是降低了程序的耦合度,提高了程序的可移植性。对于上面那个JunkMail的listAllMail()方法也同样应该改为接口类型。

  然后,在主程序里面就这样来使用User类的listUsers方法:

  User myUser = new User();
  Iterator iterator = myUser.listUsers();
  while (iterator.hasNext()) {
   iterator.next();
  }

   这样就可以完全不用考虑程序代码实现了,从高层次上把功能抽象出来,定义成为接口,同时又可以把系统设计的很合理,完全根据业务的需求来进行设计。

  结语

   通过上面的几个例子的设计说明,使用面向对象的思维方法,其实是一个把业务逻辑从具体的编程技术当中抽象出来的过程,而这个抽象的过程是自上而下的,非常符合人类的思维习惯,也就是先不考虑问题解决的细节,把问题的最主要的方面抽象成为一个简单的框架,集中精力思考如何解决主要矛盾,然后在解决问题的过程中,再把问题的细节分割成一个一个小问题,再专门去解决细节问题。

   因而一旦牢牢的抓住了这一点,你就会发现在软件设计和开发过程中,你自己总是会不知不觉的运用面向对象的思维方法来设计和编写程序,并且程序的设计和开发也变得不再那么枯燥,而一个合理运用面向对象技术进行设计和架构的软件,更是具备了思维的艺术美感。

  
  
  


[第一页] [上一页] 1 2 [最后一页]
-
相关文章
-

更多相关:
在百度中更多内容:

- -
精彩推荐
IT产品热门报价
 手机 更多>>
 笔记本 更多>>
 数码产品 更多>>
 电脑硬件 更多>>
·注册淘宝会员购买便宜数码
IT世界下载频道 装机常用软件包  
泛泰超薄PG3500评测
笔记本电池真实性能全面调查
小巧高像素DC横评
3400元的6600GT游戏配置
·诺基亚 7610
·索尼爱立信 K750c
·摩托罗拉 E398
·索尼 VGN-Y18C
·戴尔 Insprion 2200
·明基 Joybook S52-101
·佳能 PowerShot A510
·索尼 DSC-T7
·索尼 DSC-T5 HOT
·佳能 PowerShot A610
·佳能 PowerShot A520
·联想 家悦C1066E
·千里走单骑
·如果爱 HOT
·无极
·千千静听
·暴风影音
·泡泡堂
·动漫音乐合集 HOT
·Firefox 1.5中文正式版
·Vagaa哇嘎 V2.6.2.8
·QQ视频录像机 V18.0
·Skype简体中文版
·完美卸载 2006
人物 男孩 女孩 白领 明星 杂志 部落 PARTY  
心随舞动 青春飞扬 Vivian
温柔乖乖女 番茄妹妹
书生意气 国学迷孟逸
精灵可爱并重任燕珊
·论坛专业解答:编辑在线四点半
·别再上当了!揭穿八大手机陷阱
·CPU经常是100%工作是什么故障?
·办公话题:兼容耗材犯不犯法?
·两天前配电脑,JS黑了多少?
·买手机惨遭毒打?深圳暴力(图)
·PS高招:让模糊照片清亮起来
·隐私:华为员工待遇全面揭秘
·围观----到底是谁麻木了???
·心理战!二战德军的色情传单图
·国产美女,不看是人生一大遗憾
·IT人生存状态:我不是IT精英
IT下载中心,2G带宽,绝无仅有
.............【IT下载中心隆重推出装机常用软件包】

重点推荐:手机 | 笔记本 | MP4 | 数码摄像机 | 电脑硬件 | 显示器 | 投影机 | 服务器 | 游戏 | 数码相机 | 诺基亚 | 摩托罗拉 | 三星 | 索尼爱立信 | 联想 | 戴尔
关于我们 - 联系方式 - 频道共建 - 招聘信息 - 网站大事记 - 网站地图 - 广告服务 - 我要投稿 - 颐高集团 - 编辑部的故事 - 报案中心
IT.com.cn 力倡IT文化,崇尚互联共享,欢迎各种媒体转载我们的原创作品[转载请注明出处]。
客服热线:020-61081800 EMAIL:webmaster@it.com.cn 经营许可证编号:浙B2-20040150
带宽支持:佛山电信 服务器支持:五舟
关注IT,关注IT.com.cn,请向你的5个QQ好友宣传IT.com.cn,多谢支持!
 [设为首页]


做中国最好的IT网站