编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

对象导论:每个对象都提供服务

将对象想象为“服务提供者”是程序员在试图开发或理解一个程序设计时最好的方法之一。程序本身向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建(或在现有的代码库中寻找)能够提供理想的服务来解决问题的一系列对象。

着手从事这件事的一种方式就是问一下自己:“如果我可以将问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题呢?”例如,假设你正在开发一个薄记系统,在开发前你应该设计出系统应该具有哪些对象?

1、包括了预定义的薄记输入屏幕的对象,

2、一个执行薄记计算的对象集合,

3、一个处理在不同的打印机上打印支票和开发票的对象。

也许上述对象中的某些已经存在了,但对于那些并不存在的对象,它们看起来什么样子?它们能够提供哪些服务?它们需要哪些对象才能履行它们的义务?如果持续这样做,那么最终你会说“那个对象看起来很简单,可以坐下来写代码了”,或者会说“我肯定那个对象已经存在了”。这是将问题分解为对象集合的一种合理方式。

将对象看作是服务提供者还有一个附带的好处:它有助于提高对象的内聚性。高内聚是软件设计的基本质量要求之一:这意味着一个软件构件(例如一个对象,当然它也有可能是指一个方法或者一个对象库)的各方面“组合”得很好。人们在设计对象时所面临的一个问题是,将过多的功能都塞在一个对象中。

例如,在检查打印模式的模块中,你可以这样设计一个对象,让它了解所有的格式和打印技术。你可能会发觉,这些功能对于一个对象来说太多了,你需要的是三个甚至更多个对象,其中,一个对象可以是所有可能的支票排版的目录,它可以被用来查询有关如何打印一张支票的信息;另一个对象(或对象集合)可以是一个通用的打印接口,它知道有关所有不同类型的打印机信息(但是不包含任何有关薄记的内容,它更应该是一个需要购买而不是自己编写的对象);第三个对象通过调用另外两个对象的服务来完成打印任务。这样,每个对象都有一个它所能提供服务的内聚集合。在良好的面向对象设计中,每个对象都可以很好的完成一项任务,但是它并不试图做更多的事。就像在这里看到的,不仅允许通过购买获得某些对象(打印机接口对象),而且还可以创建能够在别处复用的新对象(支票排版目录对象)。

将对象作为服务提供者看待是一件伟大的简化工具,这不仅在设计过程中非常有用,而且当其他人试图理解你的代码或者重用某个对象时,如果他们看出了这个对象所能提供的服务的价值,它会使调整对象以适应设计的过程变得简单的多。


未经允许不得转载: 技术文章 » Java编程 » 对象导论:每个对象都提供服务