社区
Java
帖子详情
来者有分!求教大家:有关对象的属性 VS 对象方法的参数
bluesage
2004-11-13 12:53:15
一个对象会和别的对象交互,我应该用对象的属性还是用方法的参数来进行数据交互呢?
例如:我有个做加法的对象,1、我可以赋值给属性A和B,然后调用运算方法ADD。2、我可以直接调用方法ADD(A,B)。
那种设计会比较好呢?例子也许不恰当,只是为了说明问题。希望大家不吝赐教!
...全文
190
24
打赏
收藏
来者有分!求教大家:有关对象的属性 VS 对象方法的参数
一个对象会和别的对象交互,我应该用对象的属性还是用方法的参数来进行数据交互呢? 例如:我有个做加法的对象,1、我可以赋值给属性A和B,然后调用运算方法ADD。2、我可以直接调用方法ADD(A,B)。 那种设计会比较好呢?例子也许不恰当,只是为了说明问题。希望大家不吝赐教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分? 2:100分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望高手帮忙! 5:呵呵,来推荐...
CSDN回帖得分大全(近两年)
√
vs
2005调用dll的时候Initialize()函数返回错误 [VC/MFC 基础类] 40 ylongwu 05-21 20:486 ylongwu06-28 13:42管理√为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作! [VC/MFC 界面] 40 ...
WEB开发文档2 总结
关于在 Windows .NET 中创建 ASP .NET 出错相关问题 管理多人共同开发的项目 关于大规模数据的选择功能 服务器“拒绝访问错误” 错误信息:“System.Web.UI.Control”并不包含对“DataItem...
MS-SQL Server 基础类 - SQL语句
请教SQL语句或其它
方法
:一个含TEXT字段的表,我无意间用了两次BCP重复导入数据,之后表中有... 请问怎样编写SQL语句:在成绩列输入数据,然后对其进行排序,并把结果存入排名列. sqlserver中如何选取查询结果的中间某...
安卓选择器类库,包括日期及时间选择器(可用于出生日期、营业时间等)
安卓选择器类库,包括日期及时间选择器(可用于出生日期、营业时间等)、单项选择器(可用于性别、民族、职业、学历、星座等)、二三级联动选择器(可用于车牌号、基金定投日期等)、城市地址选择器(分省级、地市级及区县级)、数字选择器(可用于年龄、身高、体重、温度等)、日历选日期择器(….zip
Java
50,528
社区成员
85,607
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章