面向对象思想之使类和成员的可访问性最小化

简介: 讨论面向对象思想中的类和成员的可访问性,以及最小化的必要性

由于现在JAVA生态的壮大,我们可以使用的库和框架很多,他们都帮我们做了很好的封装,使得我们只要引入调用就可以完成业务代码的编写。自己写的业务代码也更倾向于数据的处理,数据关系的设计,而不是代码本身的设计。那面向对象思想中对类和成员的可访问性控制对我们来讲意义还有多大呢?如果你要封装一个sdk的jar包给别人使用,对类和成员的可访问性控制相当重要。

众所周知,暴露给外界使用组件或者API的规则是做到信息隐藏和使得被访问的类和方法的可访问级别最小化。JAVA中对于成员的访问级别有四种:

私有的(private):只有在声明该成员的顶层类内部才可以访问这个成员。

包级私有的(package):声明该成员的包内部的任何类都可以访问这个成员。

受保护的(protected):声明该成员的类的子类可以访问这个成员,并且声明该成员的包内部的任何类也可以访问这个成员。

公有的(public):在任何地方都可以访问该成员。

对于我们设计sdk,希望对暴露被访问的方法或者类都是public,而内部的大多数是private的,内部之间的按照包的层级和父子类之间的关系进行约束。这样可以提高代码的可维护性和可扩展性。如果所有的属性和方法都是公开的,那么对这些属性和方法的任何修改都可能会导致代码的不稳定性和不可预测性。通过最小化可访问性,我们可以更好地控制代码的状态和行为,并且更容易进行重构和修改。可以让我们设计的类中的数据部分得到很好的保护,不会被随意更改,提高了安全性。

但是,很多人都在想JAVA的反射机制可以操作类中任何属性和方法,定义可访问级别还有意义吗?答案是肯定的。即使使用反射可以访问类的任何属性和方法,但是这种方式通常会导致代码的复杂性和可读性下降。如果类和成员的可访问性被设计为最小化,那么程序员可以更清晰地理解代码的意图和结构,从而更容易编写和维护高质量的代码。如果为了预防抱着恶意的态度去破坏代码的安全性,那需要引入其他的安全措施比如防止反编译,加密的方法去保护代码。跟我们设计良好的类和方法是相辅相成的关系。使用反射的目的不是为了破坏我们所做的设计,而是做一些代码复用和可扩展性。


目录
相关文章
|
6月前
|
存储 Serverless 数据安全/隐私保护
C++ 类的成员函数和数据成员的技术性探讨
C++ 类的成员函数和数据成员的技术性探讨
73 0
|
算法 C++ 容器
关系类算法函数
关系类算法函数
【C++之多层继承】成员在各类的范围内的访问属性
【C++之多层继承】成员在各类的范围内的访问属性
|
机器学习/深度学习 算法 开发者
违背基本假设5| 学习笔记
快速学习违背基本假设5。
违背基本假设5| 学习笔记
|
机器学习/深度学习 算法 开发者
违背基本假设-4| 学习笔记
快速学习违背基本假设-4。
违背基本假设-4| 学习笔记
|
机器学习/深度学习 算法 开发者
违背基本假设-2| 学习笔记
快速学习违背基本假设-2。
违背基本假设-2| 学习笔记
|
机器学习/深度学习 供应链 算法
违背基本假设-3| 学习笔记
快速学习违背基本假设-3。
违背基本假设-3| 学习笔记
|
编译器 C++
C++中如何避免覆盖由继承而来的成员
C++中如何避免覆盖由继承而来的成员
169 0
【自然框架】内部类库、控件的引用关系(最新整理,基本稳定)
  和以前相比,减少了一个项目,把Control_Interface合并到CommonFunction里面。这样引用关系就简单多了。   基本上分为三个层次:类库、自定义控件、页面基类。其中的 MetaData 负责元数据的定义和加载。
647 0