论坛首页 入门技术论坛

有一个问题请教一下高手。

浏览 2568 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-11-05  
在面向对象思想当中有关封装性的基本概念.
举个例子:
class Test{
private String one = "one";
private Test other;
public Test(){}
public void setOther(Test other){
  this.other = other;
}
public void print(){
  System.out.println(other.one);
}
}
当用以下程序段执行的时候
Test test1 = new Test();
Test test2 = new Test();
test1.setOther(test2);
test1.print();
结果是同一类型的不同对象,当在互相访问的时候,破坏了这种封装性。

我的疑问是这样对吗?请高手从面向对象的角度解释一下。
如果test1,test2,是domain对象的话,以这种方式访问完全可以破坏其对象内部数据的不变性。
   发表时间:2006-11-05  
这个还不算是“破坏了这种封装性”。
其一,TEST1和TEST2是自家兄弟,
其二,相关的操作,仍是在TEST类内完成的。

当然了,这不算是好的实践方法。
0 请登录后投票
   发表时间:2006-11-05  
rtdb 写道
这个还不算是“破坏了这种封装性”。
其一,TEST1和TEST2是自家兄弟,
其二,相关的操作,仍是在TEST类内完成的。

当然了,这不算是好的实践方法。

但自家兄弟也有各自的隐私啊。就像你会告诉你兄弟你偷偷的拿了他的信用卡去买东西吗?
0 请登录后投票
   发表时间:2006-11-05  
rtdb 写道
这个还不算是“破坏了这种封装性”。
当然了,这不算是好的实践方法。


这个倒不一定,装饰模式,树及链表的结点不都是这种情况吗?
0 请登录后投票
   发表时间:2006-11-05  
类封装性 vs 类实例封装性

类实例封装性被破坏了。
类封装性大致保证。

封装界限达到类定义级别,没有达到实例级别。

---------------------

另一个角度。

C++ 有 friend class 的概念,目的就是为了突破类封装性。
一个类天生就是自己的friend class。
0 请登录后投票
   发表时间:2006-11-05  
gamex 写道
rtdb 写道
这个还不算是“破坏了这种封装性”。
其一,TEST1和TEST2是自家兄弟,
其二,相关的操作,仍是在TEST类内完成的。

当然了,这不算是好的实践方法。

但自家兄弟也有各自的隐私啊。就像你会告诉你兄弟你偷偷的拿了他的信用卡去买东西吗?


那若是必需要兄弟合作才能完成的事,总不能在语言级不支持吧。
最终还是程序员的事。基于面向过程的思想的JAVA程序又不是没见过。
0 请登录后投票
   发表时间:2006-11-05  
rtdb 写道
gamex 写道
rtdb 写道
这个还不算是“破坏了这种封装性”。
其一,TEST1和TEST2是自家兄弟,
其二,相关的操作,仍是在TEST类内完成的。

当然了,这不算是好的实践方法。

但自家兄弟也有各自的隐私啊。就像你会告诉你兄弟你偷偷的拿了他的信用卡去买东西吗?


那若是必需要兄弟合作才能完成的事,总不能在语言级不支持吧。
最终还是程序员的事。基于面向过程的思想的JAVA程序又不是没见过。

首先合作是建立在你兄弟本身特点之上的(也就是个人能力之上的)。
对象内部信息就像你以生具来的特点。你兄弟不能改变你的个性和特点。
再举个例子如果是像这样的可以随时改变他的属性的话,当你从数据库当中load出这样的一个对象出来。
我就可以通过这种方法来篡改你的数据,结果将导致你说load出来的数据是条胀数据。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics