封装既是把具体实现隐藏起来。以下引用“JAVA编程思想“一书,我们将程序员分为主程序员(即创建JAVA语言的程序员)和客户程序员(即那些使用JAVA语言进行编程的程序员),主程序员的目标是收集各种用来实现快速开发应用程序的类。这种类只向客户程序员暴露必需的部分,而隐藏其他的部分,这意味着主程序员可以任意修改被隐藏的部分,而不用担心会对其他任何人造成影响。被隐藏的部分通常代表对象内部比较脆弱的部分,它们很容易被不知内情的客户程序员修改而造成程序BUG。通过封装可以使主程序员轻松的对语言进行版本升级。 如果不进行封装,那么主程序员每次进行版本升级时客户程序员都必需对在旧版本的代码进行修改,这将增加很大的工作量甚至使原来代码不可用。 举个例子:比如你按下电脑的“开机键”就能把电脑打开,这里“开机键”相当于一个接口,你只需要知道“开机键”是用来打开电脑的即可,而不需要知道开机时是如何调用操作系统如何驱动硬件的(因为这些都不是你要关心的),也许有一天此电脑的操作系统由原来的WINDOWS变为UNIX,但并不影响“开机键”的功能。下面我用JAVA代码举个隐藏的简单例子: public class Aaa{ private int x; private int y=2; private int s; public void f(){ x=5; } public void g(){ f(); s=y/x; }public class Bbb{
普通应用编码当中应该注意良好的封装
比如学生管理系统的主要业务对象学生就应该良好的封装,该提炼抽象类、接口的就提炼出来。
框架设计、开发当中亦然,该抽取的通用上层功能就抽取出来、编码测试后提供编码人员使用!
如果不进行封装,那么主程序员每次进行版本升级时客户程序员都必需对在旧版本的代码进行修改,这将增加很大的工作量甚至使原来代码不可用。
举个例子:比如你按下电脑的“开机键”就能把电脑打开,这里“开机键”相当于一个接口,你只需要知道“开机键”是用来打开电脑的即可,而不需要知道开机时是如何调用操作系统如何驱动硬件的(因为这些都不是你要关心的),也许有一天此电脑的操作系统由原来的WINDOWS变为UNIX,但并不影响“开机键”的功能。下面我用JAVA代码举个隐藏的简单例子:
public class Aaa{
private int x;
private int y=2;
private int s;
public void f(){
x=5;
}
public void g(){
f();
s=y/x;
}public class Bbb{
public static void main(String[] args){
Aaa a=new Aaa();
a.g();
}
}
在这段程序中变量X是被定义为私有的,除了它的包含类外其它任何类都不能访问它,在这里我们提供了一个接口(即f()方法)也只能通过此接口来访问变量X,通过f()方法对x 进行正确的初始化以确保使用方法g()时x不为零;
为了控制开发人员对你开发的程序的内部数据进行破坏,你把你的类成员变量和某些特殊的方法声明为private,并提供必须的方法给开发人员调用,比如你用String的时候,用它的length()方法,但是你并不知道如何得到长度的,只知道length()方法可以得到,其实里面有个变量来获取它的长度然后返回给你,但是如果你可以随便访问那个变量的话,那你知道会有什么后果吧