Skip to content
LiuJiawei4132 edited this page Mar 31, 2019 · 6 revisions

对象导论

1.1 抽象过程

  1. 万物皆为对象
  2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的
  3. 每个对象都有自己的由其他对象所构成的存储
  4. 每个对象都拥有其类型
  5. 某一特定类型的所有对象都可以接收同样的消息

1.2 每个对象都有一个接口

  • 创建抽象数据类型(类)是面向对象程序设计的基本概念之一
  • 每个类的数据成员都具有某种共性:每个账户都有结余金额
  • 每个类的成员都有其自身的状态:每个账户都有不同的结余金额
  • 因为类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
  • 通过面向对象,程序员通过定义类来适应问题,而不再被迫只能使用现有的用来表示机器中对应功能的数据类型,可以根据需求,通过添加新的数据类型来拓展。
  • 如何创建一个有用的类呢?必须有某种方式产生对对象的请求,使对象完成各种任务,这样的请求由接口定义。

可以向Light对象发出的请求是:打开它、关闭它、将它调亮、将他调暗。

1.3 每个对象都提供服务

  • 当试图开发或理解一个程序设计时,最好的方法之一就是将对象想象成“服务提供者”
  • 你的目标就是创建(或者最好时在现有代码库中寻找)能够提供理想的服务来解决问题的一系列对象
  • 将对象看作是服务提供者还有一个附带的好处:它有助于提高对象的内聚性,高内聚是软件设计的基本质量要求之一,人们在设计对象时面临一个将太多功能都塞在一个对象中。

1.4 被隐藏的具体实现

  • 程序开发人员按照角色分为类创建者(创建新数据类型的程序员)和客户端程序员(在其应用中使用数据类型的程序员)是大有脾益的

    • 客户端程序员的目标是收集各种用来实现快速应用开发的类。
    • 类创建者的目标是构建类,这种类只向客户端程序员暴露必需的部分,而隐藏其他部分,不用担心内部脆弱的部分被破坏

1.5 复用具体实现

  • 代码复用是面向对象程序设计最了不起的优点之一
  • 使用现有的类合成新的类,这种概念被称为组合(composition),视为"has-a"关系,就像"汽车拥有引擎"一样
  • 继承并不具备这样的灵活性,因为编译器必须对通过继承而创建的类施加编译时的限制
  • 在建立新类时,应该先考虑组合,因为它更加简单灵活。如果采用这种方式,设计会更加清晰。有了一些经验后,就能看出必须使用继承的场合了

1.6 继承

  • 通过继承,能以现有类为基础,复制它,然后通过添加和修改这个副本来创建新类
  • 当父类发出变动时,被修改的副本(子类)也会反映出这些变动
  • 可以创建一个基类来表示系统中某些对象的核心概念,从基类中导出其他类型,表示此核心可以被实现的各种不同方式
  • 所有可以发送给基类对象的消息同时也可以发送给导出类对象
  • 有两种方法可以让导出类产生差异
    1. 直接在导出类添加新的方法
    2. 覆盖基类原有的方法

1.7 伴随多态的可互换对象