- 被隐藏的具体实现。
- 将程序开发人员按照角色分为类创建者和客户端程序员是大有裨益的。
- 类创建者: 那些创建新数据类型的程序员。
客户端程序员:那些在其应用中使用数据类型的类消费者。 - 客户端程序员的目标是收集各种用来实现快速应用开发的类。
类创建者的目标是构建类,这种类只向客户端程序员暴露必须的部分,而隐藏其他部分。因为如果加以隐藏,那么客户端程序员将不能访问它,这意味着类创建者可以任意修改被隐藏的部分,而不用担心对其他人造成影响。被隐藏的部分通常代表对象内部脆弱的部分,它们很容易被粗心的或不知内情的客户端程序员所毁坏,因此将实现隐藏起来可以减少程序bug. - 在任何相互关系中,具有关系所涉及的各方都遵守的边界是十分重要的事情。
- 当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,但是他们是使用你的类库来构建应用,或者构建更大的类库的程序员。如果所有的类成员对任何人都是可用的,那么客户端程序员就可以对类做任何事情,而不受任何约束。即使你希望客户端程序员不要直接操作你的类中的某些成员,但是如果没有任何访问控制,将无法阻止此事发生。
- 访问控制的第一个存在原因:让客户端程序员无法触及他们不应该触及的部分—这些部分对数据类型的内部操作来说是必需的,但并不是用户解决特定问题所需的接口的一部分。
访问控制的第二个存在原因: 允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。 - 访问指定词 (access specifier): public, private, protected.
public: 紧随其后的元素对任何人都是可用的。
private: 你与客户端程序员之间的一堵墙,如果有人试图访问private成员,就会在编译时得到错误信息。
protected: 与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。 - Java 还有一种默认的访问权限,当没有使用任何访问指定词时,它将发挥作用。这种权限通常被称为包访问权限,因为在这种权限下,类可以访问在同一个包(库构件)中的其他类的成员,但是在包之外,这些成员如同指定了private一样。
- 代码复用是面向对象程序设计语言所提供的最了不起的优点之一。
- 复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中。称其为“创建一个成员对象”。新的类可以由任意数量,任意类型的其他对象以任意可以实现新的类中想要的功能的方式组成。
- 组合(composition):使用现有的类合成新的类。组合经常被视为“has-a" (拥有) 关系,就像我们说的”汽车拥有引擎“一样。
- 聚合(aggregation): 组合是动态发生的。
- UML 图用实心菱形表明了组合关系。汽车<>--------引擎
- 组合带来了极大的灵活性。新类的成员对象通常都被声明为private,使得使用新类的客户端程序员不能访问它们。
- 继承不具备这样的灵活性,因为编译器必须对通过继承而创建的类施加编译时的限制。
- 实际上,在建立新类时,应该首先考虑组合,因为它更加简单灵活。如果采用这种方式,设计会变得更加清晰。
Java 学习笔记 -- 第一章 对象导论 (1.4 - 1.5)
最新推荐文章于 2020-08-10 06:24:10 发布