初心

何期自性,本自具足

如何以对象方式思考(一)

| Comments

  OO设计的基本单元是类。OO设计所期望的最终结果是一个健壮、功能完备的对象模型,换句话说,也就是一个完备的系统。

  解决一个问题没有纯粹的对与错,同一个问题往往可能有多种不同的处理方法。所以识图设计一个OO解决方案时,不要想着一上来就完成一个完美的设计(总会有需要改进的地方)。真正需要的是进行头脑风暴,让你能从不同方向展开你的思维过程。尝试解决一个问题时,不要试图遵照任何标准或约定,因为关键就是要有创造性。

  实际上,这个过程开始时,甚至不要考虑特定的编程语言。首要的是找出并解决业务问题。首先完成概念分析和设计。只有当特定技术对于解决业务问题至关重要时采取考虑它,例如,如果脱离无线技术可能无法设计一个无线网络。不过,通常有多种软件解决方案可以考虑。

  要培养善于完成OO思维过程的敏锐判断力,要注意3个重要的方面

  1. 了解接口和实现之间的区别;

  2. 以更抽象的方式思考;

  3. 尽可能为用户提供最小接口。

了解接口与实现之间的区别

  构建强大的OO设计时,关键是理解接口与实现之间的区别。因此,在设计类时,必须了解用户需要知道什么以及用户不需要知道什么,这些是至关重要的。可以利用封装所固有的数据隐藏机制将不重要的数据对用户隐藏。

用户看什么:

接口也与类直接相关。最终用户通常不会看任何类,他们只看GUI或命令行界面。不过,程序员会看类接口。类重用意味着已经有人编写了一个类。因此程序员要使用一个类,就必须知道如何让这个类正确地工作。这个程序员要结合多个类来创造一个系统,他需要理解类的接口。因此,这一张谈到用户时,我们主要是指设计人员和开发人员,而不一定是最终用户。因此,在这个上下文中讨论接口时,也会死指类接口,而不是GUI。

接口

  为最终用户提供的服务构成了接口。最理想的情况下,应当只为最终用户提供他们所需要的服务。

明确用户:

设计一个类时,也许最重要的就是要明确受众或用户。

实现

  实现细节对用户是隐藏的。一定要记住实现的一个目标:改变实现不需要同时改变用户的代码。这可能让人有些不太明白,不过,这个目标正是设计的核心问题。如果接口得到了正确的设计,对实现的改变就不会导致用户代码的改变。要记住,接口包含调用一个方法以及返回一个值的语法。如果这个接口没有改变,用户就不关心实现是否发生了改变。只要程序员可以使用同样的语法获取同样的值,怎样实现都无所谓。

  用户和实现都必须遵循接口规范。

对象持久性:

对象持久性(Objiect persistence)是指保存对象的状态,从而可以在以后恢复并使用,没有持久存储的对象一旦出了作用域实际上就已经“死亡”。例如,可以把对象的状态保存在数据库中。

设计接口时使用抽象思维

  OO程序设计的主要优点之一是类可以重用。一般地,可重用类的接口往往更抽象而不是更具体。具体接口通常非常特定,而抽象接口更为一般。不过,如果说一个高度抽象的接口比一个想到具体的接口更有用,则不尽然(尽管通常都是如此)。

  我们的目标是设计抽象、高度可重用的类,为此,我们要设计高度抽象的用户接口。

尽可能为用户提供最小接口

  设计类时,一般经验是总是为用户尽可能少地提供类的内部知识。为做到这一点,要遵循以下简单规则。

  • 只为用户提供他们确实需要的东西。实际上,这意味着类的接口要尽可能少。开始设计一个类时,首先只应有最小接口。类的设计是迭代性的,所以你很快会发现最小接口可能不能满足需求。这很正常。

  • 最好是当用户确实需要时才增加接口,而不要为用户提供他们不需要的接口。在很多情况下,为用户提供某些接口会带来问题。

  • 公共接口定义用户能访问的信息。如果开始时将接口置为私有,使整个类对用户隐藏,那么当程序员开始使用这个类时,会要求你将某些方法置为公共,这些方法就会成为公共接口。

摘自《写给大家看的面向对象编程书》

Comments