对象导论系列---被隐藏的具体实现
程序员文章站
2022-04-16 08:43:39
对象导论系列 被隐藏的具体实现 将程序员按角色分为类创建者和客户端程序员。 客户端程序员的目标是收集各种用来快速实现应用开发的类。 类创建者的目标是构建类,这种类必须向客户端暴露必须的服务,而隐藏其她部分。为什么呢?因为加以隐藏,那么客户端程序员将不能访问她,意味着类创建者可以任意修改被隐藏的部分, ......
对象导论系列---被隐藏的具体实现
将程序员按角色分为类创建者和客户端程序员。
客户端程序员的目标是收集各种用来快速实现应用开发的类。
类创建者的目标是构建类,这种类必须向客户端暴露必须的服务,而隐藏其她部分。为什么呢?因为加以隐藏,那么客户端程序员将不能访问她,意味着类创建者可以任意修改被隐藏的部分,而不用担心对其她人造成影响。被隐藏的部分通常代表类内部脆弱的部分,她们很容易被粗心的或不知内情的客户端所毁坏,因此将实现隐藏起来可以减少bug。
在任何相互关系中,具有关系所涉及的各方都遵守的边界是什分重要的。当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,他们是使用你的类库来构建应用、或者构建更大类库的程序员。如果所有类成员对任何人是可用的,那么客户端程序员就可以对类做任何事情,而不受任何约束。即使你希望客户端程序员不要直接操作你的类中的某些成员,但如果没有访问控制,将无法阻止些事发生。口说无用,只能用代码来约束。
访问控制第一个存在的原因:让客户端程序员无法触及她们不应触及的部分-----这些部分对数据类型内部操作是必须的,但并不是用户解决特定问题所必须的接口一部分。迪米特法则其中一个思想就是让客户端只使用必须的接口,即最少能解决问题的接口。
访问控制每二个存在的原因:允许类库设计者可以改变类内部的工作方式而不用担心会影响客户端程序。
java用三个关键字定义访问边界:
- private:表示除类型创建者和类型内部方法之外任何人都不能访问的元素;
- public:表示对任何人都可以访问;
- protected:表示父类的导出类或同包内成员可以访问;默认即是包访问权限;