来者有分!求教大家:有关对象的属性 VS 对象方法的参数

bluesage 2004-11-13 12:53:15
一个对象会和别的对象交互,我应该用对象的属性还是用方法的参数来进行数据交互呢?
例如:我有个做加法的对象,1、我可以赋值给属性A和B,然后调用运算方法ADD。2、我可以直接调用方法ADD(A,B)。
那种设计会比较好呢?例子也许不恰当,只是为了说明问题。希望大家不吝赐教!
...全文
190 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesage 2004-11-27
  • 打赏
  • 举报
回复
非常感谢Tasia(灯盏)!
其实就是对外提供地数据字段,都要用GET、SET方法来存取,从而保证自身数据地正确操作。
Tasia 2004-11-26
  • 打赏
  • 举报
回复
就是说一个类的field尽量不要定义成public的。
比如一个类Person里有一个field为name,这个name不应该定义为public,因为别的类应该不能够修改这个name,正如在现实中别人不能修改你的名字一样。Person中只需提供一个public String getname();来让别的类能够读取它的名字。而修改名字应该是private void setName(String name);
bluesage 2004-11-26
  • 打赏
  • 举报
回复
非常感谢大家!
大家说的非常有道理,给了我很大的启发。
我觉得:
对于工具类,只提供单纯的数据的运算,可以用参数的形式,用overload该方法来扩展。
对于提供某种功能的对象,还是封装成属性,比较好。
还有:
有位高人给了这么个答案,我太愚钝,不明白是什么意思,希望大家能帮忙理解:
“对象的属性是不应该被其他对象直接访问的,这是约定。”
onyxleo 2004-11-25
  • 打赏
  • 举报
回复
按你举的例子,我觉得应该选第一种。

add()方法应该是这个类特有的方法,代表了某个特定的动作,
而不是任何一个类都有的,
虽然它里面可能只是简单的A+B。

除非对于工具类,公共类,方法本身就是让别人调用的,
而不是自己专用。
或者,这个方法是类内部的公有方法,
add(a,b)这样的形式才比较合理。
ssDOn 2004-11-25
  • 打赏
  • 举报
回复
面对对象编程的关键在于对象,
如 对象Pig p ;
Dog d ;
你用 Add(p,d)求动物数量,显示你的思路是面向过程,不是面向对象的,试想一下,
当有 Chick c ; 加入来时你的Add(c,p)还能用吗? 需改动的程序有多少?
不如用 p+g来得明白,说明的是将对象 p加上对象g ,至于他们怎么实现相加,就不管了,这才面向对象吧!
所有观点都是个人看法,书上是没有的.
zyg158 2004-11-25
  • 打赏
  • 举报
回复
学习^_^
ukey235 2004-11-25
  • 打赏
  • 举报
回复
具体情况具体对待
liujinz 2004-11-25
  • 打赏
  • 举报
回复
如果像楼上几位所说的那样,在构造函数中赋值,如果是反复调用怎么办?如果一个类就是想为系统提供一个方法,那么最好用参数实现
chinaren_2001 2004-11-25
  • 打赏
  • 举报
回复
楼上都说了,哈哈。


那就接分吧,呵呵。
classjava 2004-11-24
  • 打赏
  • 举报
回复
感觉习惯用第二
zj_ok 2004-11-24
  • 打赏
  • 举报
回复
如果只在一个方法中用,当然用参数更好
fancard 2004-11-17
  • 打赏
  • 举报
回复
学习。。
showerXP 2004-11-16
  • 打赏
  • 举报
回复
可以看一下依赖和关联的区别
福瑞德孟 2004-11-16
  • 打赏
  • 举报
回复
对象的属性 - 与该对象有没有关系
方法的参数 - 与该对象有没有Message传递
tom2005 2004-11-16
  • 打赏
  • 举报
回复
占个位
jFresH_MaN 2004-11-16
  • 打赏
  • 举报
回复
这个问题挺有意思的,其实什么问题都是要看具体需求的嘛!呵呵
bluesage 2004-11-16
  • 打赏
  • 举报
回复
谢谢大家!
我觉得如suman(Suman)所说:要看具体需求。看类是针对于方法,还是针对于数据,侧重于方法,类的目的是实现ADD操作,那么选用第二种方法会更好。如果侧重于数据,那么用属性更方便以后对数据的操作。
我觉得OO在一定情况下会降低效率的,是牺牲了效率来保证对变化的扩展。用属性包装数据,肯定牺牲了效率,应该对数据操作的扩展有提高吧!
suman 2004-11-15
  • 打赏
  • 举报
回复
这其实要看你的要求了,实际上,对于你的例子,如果你是设置了属性,那么对于Add方法来说,A,B都相当与一个局部的全局变量(大概是这个意思)。如果A,B在其他的类方法中也被使用的话,那么你就用属性,相反,如果你只是需要一个数值,通过Add方法来计算结果,那么直接传递参数就可以。
Ennis_wan 2004-11-15
  • 打赏
  • 举报
回复
说对了,所以如果用第一种的方法,就要写构造器 class TestClass(a,b){}
okitgo 2004-11-15
  • 打赏
  • 举报
回复
选择第二种
加载更多回复(3)

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧