JAVA 中,为什么要封装?
补充:在什么时候封装?希望能具体说明,比如:Integersid=newInteger(jTextField1.getText());...
补充:在什么时候封装?
希望能具体说明,比如:Integer sid = new Integer(jTextField1.getText()); 展开
希望能具体说明,比如:Integer sid = new Integer(jTextField1.getText()); 展开
展开全部
封装是由Java是面向对象程序设计语言的性质决定的,因为面向对象程序设计语言的三大特性之一就是封装。
因为面向对象中所有的实体都是以对象为基本单位的,以宏观世界的实体来映射到计算机世界中,每个对象有它自己的属性和自己的行为,我们用类来将这些属性和行为封装到一起,当它实例化出来一个对象的时候,我们可以说这个对象具有这些属性和行为。
扩展资料:
封装的作用
1、 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
2、对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
参考资料来源:百度百科-封装 (计算机程序术语)
展开全部
所谓封装,就是将属性和方法捆绑到一起,封装到一个对象中去,简单的说,你是人,你有许多属性,比如说你的姓名,年龄,身高,体重,性别,性格,爱好等等,这是属性;而同时,你又会吃饭,睡觉,工作,学习,做事情,这些是方法,是你所具有的;同时将属性和方法封装到一个类中去,就能很完美的描述这个类的特征了,同时,它所具有的方法也就一起集成到类中,方便使用。这些是简单的描述了。
至于什么时候需要这个似乎不是讨论的重点了,既然是java号称完全面向对象的语言,那么,你就应该一直以封装方式去思考问题和设计类了。
下面摘篇文章,你可以看看~
========================================
隐藏复杂性,是我们人类处理更复杂问题的一种常用方法。这可能跟人的记忆力、计算力等是有限的这点有关,对这种方法背后原因的深度挖掘,要涉及人类认知学方面的知识,而显然它(认知学)的表现并不尽如人意,否则完全可以根据它造出会认知的机器来。
这里不讨论认知学与强人工智能,感兴趣的读者可以找些这方面的资料来读。我们只要知道,这种隐藏复杂性的方法很常用、很好用就可以了,比如操作电视,我们不需要知道电视内部的繁杂的布线,只通过几个电视按钮就可以实现调整音量、切换频道等等功能;软件中,面向对象中的封装,就是对这一基本方法的体现。
对象的封装,要分两个方面来考察,一个是怎么样封装才算对,一个是怎么样封装才算好。
达到了封装者对对象的职责预期就是对的,否则,就是错的。
比如,想得到的是一个狗对象,能狗叫,而封装的结果竟然是个猫,会猫叫。又比如,想得到的是一个狗对象,能狗叫,而封装的结果是一个狗对象,却能猫叫。这都是没有达到封装预期所致。但也有这种情况,有人先封装了一个对象后,接着说,这个对象就是我的预期,这样做就像打哪儿指哪儿的神枪手一样,预期永远与封装的对象相符合,那么我们只能考察它的另一项指标:好不好。
而评价封装的好不好,很难有一个客观的标准,不管从哪个角度说,,它都更属于设计美学范畴。当一种封装显得不怎么美的时候,就是不太好。怎么又算美呢?这真的很难说;一千个人可能会有一千种关于美的评价吧。我只能说一下我自己的审美倾向,简洁既是美。
简洁的追求会自然促使你让类的职责单一,比如一个狗对象,不但会狗叫,也能猫叫,那么猫叫就是很不和谐的音符,这就显得不美。狗对象只表现狗的行为则显得更为合适,表现的太多,反而会感觉很怪异。假如来了只猫对象,见到这只会猫叫的狗,一定感觉很不是滋味。程序是给程序员看的,职责明确而接口简单的对象,看起来会更舒服,可读性也一定会更好。职责模糊而接口复杂的对象,看起来总不那么舒服(虽然也能实现所有业务功能)。
我们还是看一段具体的程序吧。这是一个计数器程序。
这个类只有一个属性,对应到这个对象,则这个类属性代表着对象的状态,所有的方法,都是围绕着对象的基本属性或状态进行的操作,没有和基本属性无关的操作。这个对象的职责就是负责计数。很简洁。假如我们再添加一个方法,如下:
public int max(int a,int b){
if(a>b) return a;
else return b;
}
那么这个方法对于这个计数器对象来说,就是相当于狗对象中有了猫叫,就是不和谐的,就是不美的。这个方法和计数器的职责是无关的,它也没有涉及到类属性的任何操作,如果一个操作对它自身没有任何影响,这好像更应该是别的对象的方法。所以,把取得最大值这种方法放在这里是很累赘的。
既然是在进行封装和信息隐藏,就要区别于开放和信息暴露,那么在能完成特定职责的情况下,封的越严实越好,信息隐藏的越多越好,留的接口越少越好,这样的对象的功能才强大而接口又简洁。这种简洁的美感怎么表述呢,我总认为苹果公司的各种产品的界面设计最能体现出这种简洁美感。IPod的界面和操作设计,就有一种艺术般的简洁美感。而面向对象设计中的封装,也应该向iPod的封装效果学习。
比如两个同类型对象,如果它们的id属性相等,则认为这两个对象相等。有两种办法判断相等,一种是分别通过两个对象提供的接口取出对象id,再在对象外的程序中做id的比较逻辑判断(例如:if a.id=b.id then…);一种是对象本身提供是否相等的方法,在对象内部完成此判断,外人看不到(例如:if a.equal(b) then…)。这样,把实现细节隐藏在内部,显然这样的封装的更加合理,使用起来也更加的方便。这就像操作轿车,如果轿车的接口是这样:按一个按钮,弹出一根线,再按下另一个按钮,弹出另一根线,然后司机用手把两根线一碰,汽车发动了!虽然也能发动汽车,但未免太麻烦了;这种发动汽车的方式就像比较两个对象是否相等的例子中的前者,这样做肯定也是能发动着汽车的,就像很多封装的不好的对象一样能实现要求的功能一样(比如比较对象是否相等的第一个例子)。一拧钥匙,汽车就发动,明显优于手工碰线头的方式。
一想起封装与信息隐藏,我总是会不由自主的想起《自私的基因》一书的作者道金斯说的关于基因的一段话:
但在今日,别以为它们(基因)还会浮游于海洋之中了。很久以前,它们已经放弃了这种自由自在的生活方式了。在今天,它们群集相处,安稳地寄居在庞大的步履蹒跚的“机器”人体内,与外界隔开来,通过迂回曲折的间接途径与外部世界联系,并通过遥控操纵外部世界。它们存在于你和我的躯体内;它们创造了我们,创造了我们的肉体和心灵;而保存它们正是我们存在的终极理由。这些复制基因源远流长。今天,我们称它们为基因,而我们就是它们的生存机器。
他的这段话如此精彩,令我忍不住套用如下:
基本的变量已经不再浮游于一大段一大段的程序中了,它们已经放弃了(其实是程序员不用这种方式了)这种自由自在的存在方式,而是安稳的寄居于庞大而蹒跚的“对象”内部,与外界隔开来,通过迂回曲折的间接途径与外部世界联系和通信。而这些对象,就是它们这些基本变量的生存机器!
至于什么时候需要这个似乎不是讨论的重点了,既然是java号称完全面向对象的语言,那么,你就应该一直以封装方式去思考问题和设计类了。
下面摘篇文章,你可以看看~
========================================
隐藏复杂性,是我们人类处理更复杂问题的一种常用方法。这可能跟人的记忆力、计算力等是有限的这点有关,对这种方法背后原因的深度挖掘,要涉及人类认知学方面的知识,而显然它(认知学)的表现并不尽如人意,否则完全可以根据它造出会认知的机器来。
这里不讨论认知学与强人工智能,感兴趣的读者可以找些这方面的资料来读。我们只要知道,这种隐藏复杂性的方法很常用、很好用就可以了,比如操作电视,我们不需要知道电视内部的繁杂的布线,只通过几个电视按钮就可以实现调整音量、切换频道等等功能;软件中,面向对象中的封装,就是对这一基本方法的体现。
对象的封装,要分两个方面来考察,一个是怎么样封装才算对,一个是怎么样封装才算好。
达到了封装者对对象的职责预期就是对的,否则,就是错的。
比如,想得到的是一个狗对象,能狗叫,而封装的结果竟然是个猫,会猫叫。又比如,想得到的是一个狗对象,能狗叫,而封装的结果是一个狗对象,却能猫叫。这都是没有达到封装预期所致。但也有这种情况,有人先封装了一个对象后,接着说,这个对象就是我的预期,这样做就像打哪儿指哪儿的神枪手一样,预期永远与封装的对象相符合,那么我们只能考察它的另一项指标:好不好。
而评价封装的好不好,很难有一个客观的标准,不管从哪个角度说,,它都更属于设计美学范畴。当一种封装显得不怎么美的时候,就是不太好。怎么又算美呢?这真的很难说;一千个人可能会有一千种关于美的评价吧。我只能说一下我自己的审美倾向,简洁既是美。
简洁的追求会自然促使你让类的职责单一,比如一个狗对象,不但会狗叫,也能猫叫,那么猫叫就是很不和谐的音符,这就显得不美。狗对象只表现狗的行为则显得更为合适,表现的太多,反而会感觉很怪异。假如来了只猫对象,见到这只会猫叫的狗,一定感觉很不是滋味。程序是给程序员看的,职责明确而接口简单的对象,看起来会更舒服,可读性也一定会更好。职责模糊而接口复杂的对象,看起来总不那么舒服(虽然也能实现所有业务功能)。
我们还是看一段具体的程序吧。这是一个计数器程序。
这个类只有一个属性,对应到这个对象,则这个类属性代表着对象的状态,所有的方法,都是围绕着对象的基本属性或状态进行的操作,没有和基本属性无关的操作。这个对象的职责就是负责计数。很简洁。假如我们再添加一个方法,如下:
public int max(int a,int b){
if(a>b) return a;
else return b;
}
那么这个方法对于这个计数器对象来说,就是相当于狗对象中有了猫叫,就是不和谐的,就是不美的。这个方法和计数器的职责是无关的,它也没有涉及到类属性的任何操作,如果一个操作对它自身没有任何影响,这好像更应该是别的对象的方法。所以,把取得最大值这种方法放在这里是很累赘的。
既然是在进行封装和信息隐藏,就要区别于开放和信息暴露,那么在能完成特定职责的情况下,封的越严实越好,信息隐藏的越多越好,留的接口越少越好,这样的对象的功能才强大而接口又简洁。这种简洁的美感怎么表述呢,我总认为苹果公司的各种产品的界面设计最能体现出这种简洁美感。IPod的界面和操作设计,就有一种艺术般的简洁美感。而面向对象设计中的封装,也应该向iPod的封装效果学习。
比如两个同类型对象,如果它们的id属性相等,则认为这两个对象相等。有两种办法判断相等,一种是分别通过两个对象提供的接口取出对象id,再在对象外的程序中做id的比较逻辑判断(例如:if a.id=b.id then…);一种是对象本身提供是否相等的方法,在对象内部完成此判断,外人看不到(例如:if a.equal(b) then…)。这样,把实现细节隐藏在内部,显然这样的封装的更加合理,使用起来也更加的方便。这就像操作轿车,如果轿车的接口是这样:按一个按钮,弹出一根线,再按下另一个按钮,弹出另一根线,然后司机用手把两根线一碰,汽车发动了!虽然也能发动汽车,但未免太麻烦了;这种发动汽车的方式就像比较两个对象是否相等的例子中的前者,这样做肯定也是能发动着汽车的,就像很多封装的不好的对象一样能实现要求的功能一样(比如比较对象是否相等的第一个例子)。一拧钥匙,汽车就发动,明显优于手工碰线头的方式。
一想起封装与信息隐藏,我总是会不由自主的想起《自私的基因》一书的作者道金斯说的关于基因的一段话:
但在今日,别以为它们(基因)还会浮游于海洋之中了。很久以前,它们已经放弃了这种自由自在的生活方式了。在今天,它们群集相处,安稳地寄居在庞大的步履蹒跚的“机器”人体内,与外界隔开来,通过迂回曲折的间接途径与外部世界联系,并通过遥控操纵外部世界。它们存在于你和我的躯体内;它们创造了我们,创造了我们的肉体和心灵;而保存它们正是我们存在的终极理由。这些复制基因源远流长。今天,我们称它们为基因,而我们就是它们的生存机器。
他的这段话如此精彩,令我忍不住套用如下:
基本的变量已经不再浮游于一大段一大段的程序中了,它们已经放弃了(其实是程序员不用这种方式了)这种自由自在的存在方式,而是安稳的寄居于庞大而蹒跚的“对象”内部,与外界隔开来,通过迂回曲折的间接途径与外部世界联系和通信。而这些对象,就是它们这些基本变量的生存机器!
参考资料: http://hi.baidu.com/dapplehou/blog/item/76cc3af3620ea654342acc3e.html
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
封装是由Java是面向对象程序设计语言的性质决定的,因为面向对象程序设计语言的三大特性之一就是封装。
至于为什么需要封装,因为面向对象中所有的实体都是以对象为基本单位的,以宏观世界的实体来映射到计算机世界中,每个对象有它自己的属性和自己的行为,我们用类来将这些属性和行为封装到一起,当它实例化出来一个对象的时候,我们可以说这个对象具有这些属性和行为。不同类别的对象正是因为这些特性的不同,我们才可以将它们区分开,而这也正反映了我们现实生活中不同种类个体的不同。
至于为什么需要封装,因为面向对象中所有的实体都是以对象为基本单位的,以宏观世界的实体来映射到计算机世界中,每个对象有它自己的属性和自己的行为,我们用类来将这些属性和行为封装到一起,当它实例化出来一个对象的时候,我们可以说这个对象具有这些属性和行为。不同类别的对象正是因为这些特性的不同,我们才可以将它们区分开,而这也正反映了我们现实生活中不同种类个体的不同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那为什么不封装呢?
既然是面向对象的语言,可以实现多态,为什么不用这么好的功能呢?
在你觉得是一个类的时候,比如说:车可以封装,在细点:火车封装,汽车封装
多看点面向对象的例子就很容易就理解了,了解下多态是怎么一回事就知道为什么要用封装了
既然是面向对象的语言,可以实现多态,为什么不用这么好的功能呢?
在你觉得是一个类的时候,比如说:车可以封装,在细点:火车封装,汽车封装
多看点面向对象的例子就很容易就理解了,了解下多态是怎么一回事就知道为什么要用封装了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在JAVA中要把一些东西封装,我理解是方便安全,具体书上有很多,你自己学习一下吧,这些都是基础!
祝你好运!
祝你好运!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询