ITPUB??ì3
ITPUB论坛 » Java入门与认证版 » 迪米特法则相关

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: 迪米特法则相关
离线 cayman811
高级会员



精华贴数 3
个人空间 0
技术积分 8305 (150)
社区积分 6 (14513)
注册日期 2006-8-9
论坛徽章:5
开发板块每日发贴之星开发板块每日发贴之星ITPUB新首页上线纪念徽章   
      

发表于 2008-6-2 08:28 
迪米特法则相关

最近重读朱天华的《java与模式》,感觉作者对于小国寡民以及使民无知等等与软件工程的联系,的确很有见地。
但作者说,java程序设计中,应该把成员私有化,然后提供公有的setget,但是这样不是还能够基本上没有限制地对他进行修改么?设计模式上,还是提供了违反迪米特法则的途径啊,恳请大家讨论


只看该作者    顶部
离线 duxiaochu1972
资深会员



精华贴数 0
个人空间 0
技术积分 6352 (208)
社区积分 4 (18488)
注册日期 2006-7-13
论坛徽章:14
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠

发表于 2008-6-2 08:28 
what did you say?


只看该作者    顶部
离线 lazycat001
高级会员



精华贴数 1
个人空间 0
技术积分 8837 (136)
社区积分 0 (1065450)
注册日期 2006-8-9
论坛徽章:6
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星ITPUB新首页上线纪念徽章 
      

发表于 2008-6-2 08:28 
应该把成员私有化,然后提供公有的setget,但是这样不是还能够基本上没有限制地对他进行修改么?

是有限制的(或者说可以有限制)
因为 成员public的时候 获取和设置完全是 一个等式在直接操作

封装成属性后 成员的 获取和设置 实际上是方法的调用
方法里可以包含自己的逻辑(比如在set时检查一个值是否超出范围)

而且属性和内部成员不一定是有映射的
比如 四边形对象有个面积属性 可能没有相应的包含面积值的成员 只是返回 属性[长]*属性[宽]


__________________
我不是大虾
只看该作者    顶部
离线 sinkeler
SCJP | SCWCD
Specialist


来自 北京
精华贴数 3
个人空间 0
技术积分 1015 (1798)
社区积分 1 (37469)
注册日期 2005-3-2
论坛徽章:1
生肖徽章2007版:牛     
      

发表于 2008-6-2 08:54 
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. --百度

在面向对象的设计领域,两个对象进行交互,互相知道对方越少越好。换句话说,只需要知道对方的行为就行,不需要去理解是怎么实现的。

至于是否有无限制进行修改的public方法,在于被操作对象所提供的public方法是否加了限制。

public setArgument(int x)  
{
      this.a = x;
}



public setArgument(int x)
{
      if ( x > 0 )
           this.a = x;
      else
           this.a = 0;
}

从这两个方法中可以看出,参数设置的主动权在被操作对象本身,作为主调用对象来说,只需要采用,不需要知道实现细节。

所以,相比直接赋值给被调用对象的属性来说,采用专有的设置方法更加安全。


__________________
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问