radius变量private,虽然不能用test.radius修改radius,但还不是得留下setRadius方法给用户修改radius变量。
本来自己伸手就可以开门,非得设计一个机器人帮忙开门。 这个程序太短小体我会不到好处,请问大型程序是否就很有必要?
因为接口一般不会轻易改变,而细节容易改变,封装就相当于划了一条分界线,防止牵一发而动全身
举个例子,把radius改为string类型,如果封装了,那么直接改一下set和get方法即可,如果没有封装,每个用到的地方都得转换一下
话说java可能真是最喜欢封装的了
封装是java 程序的特色,个人理解封装后可以在set get中添加校验,而不像直接赋值可能会产生逻辑错误。还可以对方隐藏赋值的计算过程既提高安全性,又增加耦合性。 这个是java 的基本特性,实在不懂百度一下吧。
安全也是一方面,go简化了面向对象,它默认程序员应当自己保证安全性,所以没那么喜欢封装,java见类就封
你的这个例子里,set 方法只是简单的赋值,所以你体会不大出来
你可以设想这样一个场景:
每一次改变 radius 值时,需要同时更新对一些和它相关的其它属性的值,
那么如果你没有 set 方法,而是都是直接赋值的
那么你在你所有对 radius 的地方,都要加上大量的更新其它相关属性的代码
但是如果你写了 set 方法,其它地方也都是通过 set 方法来赋值的
那么,如果你有需要更新的其它相关属性,只要在 set 方法中加上就行了
用set,可以在赋值前判断参数是否有效,做一些相关check(比如你直接伸手开门,门外是个杀手,你就直接挂了,如果用机器人,可以抵挡甚至把杀手ko掉)
另外,多线程时,有时需要考虑线程安全,可以方便加上同步
如果你单独的调用属性赋值,上面所有的这些你都要在每次赋值时都做一遍,代码冗余,也容易遗漏出错
所以适当的封装是有一定的意义的
谢谢。你这个例子很形象,一两个门无所谓,100个门就挺麻烦。
封装的好处挺好理解的。
就拿电视机举例嘛,拿个箱子包装起来,你只需要会开电视,会调声音,会转台就好了。里面的一系列操作你不需要懂,只要知道按开关键,会开机,这样是方便用户使用。封装好的方法知道传什么参数,返回什么就能够使用了。
第二个呢,封装好,不让你直接操作里面的东西,免得不懂得人弄坏了。
第三个呢,当电视机坏了,那么就有专业人士打开箱子,维修里面得东西。就像我们的程序有需求能重写方法,但是你的程序用户不能够修改你的东西。
几行代码你是体会不到封装的好处的
项目越大,代码量就越多,有的几千几万行lrc代码都是正常
在代码变多的基础上,使用封装,才能够提高一些代码的复用性,像一些功能型的和通用配置型的代码最好采用封装,不仅提高了代码的可读性,还能在下次使用这些功能和配置的时候直接复用,方便简洁
10几个文件中,共几十处出现setRadius,
10几个文件中,共几十处出现circle.radius = radius ;
有一天,你客户说这个赋值要打个折,应该是 circle.radius = 80% * radius ;
封装了改个设置函数就可以了,没封装得改几十处。
其实写程序没有定式,并不能说circle.radius = radius 是错的,主要它符合使用场景
只是说改成setRadius函数可维护性更强一些
来源:CSDN
作者:liuji0517
链接:https://blog.csdn.net/liuji0517/article/details/104400197