例如:我有个做加法的对象,1、我可以赋值给属性A和B,然后调用运算方法ADD。2、我可以直接调用方法ADD(A,B)。
那种设计会比较好呢?例子也许不恰当,只是为了说明问题。希望大家不吝赐教!
24 个解决方案
#1
这其实要看你的要求了,实际上,对于你的例子,如果你是设置了属性,那么对于Add方法来说,A,B都相当与一个局部的全局变量(大概是这个意思)。如果A,B在其他的类方法中也被使用的话,那么你就用属性,相反,如果你只是需要一个数值,通过Add方法来计算结果,那么直接传递参数就可以。
#2
1、我可以赋值给属性A和B,然后调用运算方法ADD。
那么你最好在实例化这个类的时候把A、B就付值,如:TestClass tclass = new TestClass(a,b);
否则调用ADD方法的时候,可能出现a,b还没有付值的情况。
像你上面的例子,明显就是第二种方法好。
如何设计,一般就要看A、B是不是这个类的重要(一般不可缺少)属性,是否有实在意义。
比如,定义一个“人”的对象,就可以用第一种:
PeopleClass people = new PeopleClass(name,age,sex,....);
那么你最好在实例化这个类的时候把A、B就付值,如:TestClass tclass = new TestClass(a,b);
否则调用ADD方法的时候,可能出现a,b还没有付值的情况。
像你上面的例子,明显就是第二种方法好。
如何设计,一般就要看A、B是不是这个类的重要(一般不可缺少)属性,是否有实在意义。
比如,定义一个“人”的对象,就可以用第一种:
PeopleClass people = new PeopleClass(name,age,sex,....);
#3
如楼上所说,第二种更安全,否则你怎么保证client调用你的add之前一定会把A和B赋值?
#4
判断一个方法的好坏,一条重要标准是,看他的运行时间或空间,试试吧
#5
选择第二种
#6
说对了,所以如果用第一种的方法,就要写构造器 class TestClass(a,b){}
#7
谢谢大家!
我觉得如suman(Suman)所说:要看具体需求。看类是针对于方法,还是针对于数据,侧重于方法,类的目的是实现ADD操作,那么选用第二种方法会更好。如果侧重于数据,那么用属性更方便以后对数据的操作。
我觉得OO在一定情况下会降低效率的,是牺牲了效率来保证对变化的扩展。用属性包装数据,肯定牺牲了效率,应该对数据操作的扩展有提高吧!
我觉得如suman(Suman)所说:要看具体需求。看类是针对于方法,还是针对于数据,侧重于方法,类的目的是实现ADD操作,那么选用第二种方法会更好。如果侧重于数据,那么用属性更方便以后对数据的操作。
我觉得OO在一定情况下会降低效率的,是牺牲了效率来保证对变化的扩展。用属性包装数据,肯定牺牲了效率,应该对数据操作的扩展有提高吧!
#8
这个问题挺有意思的,其实什么问题都是要看具体需求的嘛!呵呵
#9
占个位
#10
对象的属性 - 与该对象有没有关系
方法的参数 - 与该对象有没有Message传递
方法的参数 - 与该对象有没有Message传递
#11
可以看一下依赖和关联的区别
#12
学习。。
#13
感觉习惯用第二
#14
如果只在一个方法中用,当然用参数更好
#15
楼上都说了,哈哈。
那就接分吧,呵呵。
那就接分吧,呵呵。
#16
如果像楼上几位所说的那样,在构造函数中赋值,如果是反复调用怎么办?如果一个类就是想为系统提供一个方法,那么最好用参数实现
#17
具体情况具体对待
#18
学习^_^
#19
面对对象编程的关键在于对象,
如 对象Pig p ;
Dog d ;
你用 Add(p,d)求动物数量,显示你的思路是面向过程,不是面向对象的,试想一下,
当有 Chick c ; 加入来时你的Add(c,p)还能用吗? 需改动的程序有多少?
不如用 p+g来得明白,说明的是将对象 p加上对象g ,至于他们怎么实现相加,就不管了,这才面向对象吧!
所有观点都是个人看法,书上是没有的.
如 对象Pig p ;
Dog d ;
你用 Add(p,d)求动物数量,显示你的思路是面向过程,不是面向对象的,试想一下,
当有 Chick c ; 加入来时你的Add(c,p)还能用吗? 需改动的程序有多少?
不如用 p+g来得明白,说明的是将对象 p加上对象g ,至于他们怎么实现相加,就不管了,这才面向对象吧!
所有观点都是个人看法,书上是没有的.
#20
按你举的例子,我觉得应该选第一种。
add()方法应该是这个类特有的方法,代表了某个特定的动作,
而不是任何一个类都有的,
虽然它里面可能只是简单的A+B。
除非对于工具类,公共类,方法本身就是让别人调用的,
而不是自己专用。
或者,这个方法是类内部的公有方法,
add(a,b)这样的形式才比较合理。
add()方法应该是这个类特有的方法,代表了某个特定的动作,
而不是任何一个类都有的,
虽然它里面可能只是简单的A+B。
除非对于工具类,公共类,方法本身就是让别人调用的,
而不是自己专用。
或者,这个方法是类内部的公有方法,
add(a,b)这样的形式才比较合理。
#21
非常感谢大家!
大家说的非常有道理,给了我很大的启发。
我觉得:
对于工具类,只提供单纯的数据的运算,可以用参数的形式,用overload该方法来扩展。
对于提供某种功能的对象,还是封装成属性,比较好。
还有:
有位高人给了这么个答案,我太愚钝,不明白是什么意思,希望大家能帮忙理解:
“对象的属性是不应该被其他对象直接访问的,这是约定。”
大家说的非常有道理,给了我很大的启发。
我觉得:
对于工具类,只提供单纯的数据的运算,可以用参数的形式,用overload该方法来扩展。
对于提供某种功能的对象,还是封装成属性,比较好。
还有:
有位高人给了这么个答案,我太愚钝,不明白是什么意思,希望大家能帮忙理解:
“对象的属性是不应该被其他对象直接访问的,这是约定。”
#22
就是说一个类的field尽量不要定义成public的。
比如一个类Person里有一个field为name,这个name不应该定义为public,因为别的类应该不能够修改这个name,正如在现实中别人不能修改你的名字一样。Person中只需提供一个public String getname();来让别的类能够读取它的名字。而修改名字应该是private void setName(String name);
比如一个类Person里有一个field为name,这个name不应该定义为public,因为别的类应该不能够修改这个name,正如在现实中别人不能修改你的名字一样。Person中只需提供一个public String getname();来让别的类能够读取它的名字。而修改名字应该是private void setName(String name);
#23
非常感谢Tasia(灯盏)!
其实就是对外提供地数据字段,都要用GET、SET方法来存取,从而保证自身数据地正确操作。
其实就是对外提供地数据字段,都要用GET、SET方法来存取,从而保证自身数据地正确操作。
#1
这其实要看你的要求了,实际上,对于你的例子,如果你是设置了属性,那么对于Add方法来说,A,B都相当与一个局部的全局变量(大概是这个意思)。如果A,B在其他的类方法中也被使用的话,那么你就用属性,相反,如果你只是需要一个数值,通过Add方法来计算结果,那么直接传递参数就可以。
#2
1、我可以赋值给属性A和B,然后调用运算方法ADD。
那么你最好在实例化这个类的时候把A、B就付值,如:TestClass tclass = new TestClass(a,b);
否则调用ADD方法的时候,可能出现a,b还没有付值的情况。
像你上面的例子,明显就是第二种方法好。
如何设计,一般就要看A、B是不是这个类的重要(一般不可缺少)属性,是否有实在意义。
比如,定义一个“人”的对象,就可以用第一种:
PeopleClass people = new PeopleClass(name,age,sex,....);
那么你最好在实例化这个类的时候把A、B就付值,如:TestClass tclass = new TestClass(a,b);
否则调用ADD方法的时候,可能出现a,b还没有付值的情况。
像你上面的例子,明显就是第二种方法好。
如何设计,一般就要看A、B是不是这个类的重要(一般不可缺少)属性,是否有实在意义。
比如,定义一个“人”的对象,就可以用第一种:
PeopleClass people = new PeopleClass(name,age,sex,....);
#3
如楼上所说,第二种更安全,否则你怎么保证client调用你的add之前一定会把A和B赋值?
#4
判断一个方法的好坏,一条重要标准是,看他的运行时间或空间,试试吧
#5
选择第二种
#6
说对了,所以如果用第一种的方法,就要写构造器 class TestClass(a,b){}
#7
谢谢大家!
我觉得如suman(Suman)所说:要看具体需求。看类是针对于方法,还是针对于数据,侧重于方法,类的目的是实现ADD操作,那么选用第二种方法会更好。如果侧重于数据,那么用属性更方便以后对数据的操作。
我觉得OO在一定情况下会降低效率的,是牺牲了效率来保证对变化的扩展。用属性包装数据,肯定牺牲了效率,应该对数据操作的扩展有提高吧!
我觉得如suman(Suman)所说:要看具体需求。看类是针对于方法,还是针对于数据,侧重于方法,类的目的是实现ADD操作,那么选用第二种方法会更好。如果侧重于数据,那么用属性更方便以后对数据的操作。
我觉得OO在一定情况下会降低效率的,是牺牲了效率来保证对变化的扩展。用属性包装数据,肯定牺牲了效率,应该对数据操作的扩展有提高吧!
#8
这个问题挺有意思的,其实什么问题都是要看具体需求的嘛!呵呵
#9
占个位
#10
对象的属性 - 与该对象有没有关系
方法的参数 - 与该对象有没有Message传递
方法的参数 - 与该对象有没有Message传递
#11
可以看一下依赖和关联的区别
#12
学习。。
#13
感觉习惯用第二
#14
如果只在一个方法中用,当然用参数更好
#15
楼上都说了,哈哈。
那就接分吧,呵呵。
那就接分吧,呵呵。
#16
如果像楼上几位所说的那样,在构造函数中赋值,如果是反复调用怎么办?如果一个类就是想为系统提供一个方法,那么最好用参数实现
#17
具体情况具体对待
#18
学习^_^
#19
面对对象编程的关键在于对象,
如 对象Pig p ;
Dog d ;
你用 Add(p,d)求动物数量,显示你的思路是面向过程,不是面向对象的,试想一下,
当有 Chick c ; 加入来时你的Add(c,p)还能用吗? 需改动的程序有多少?
不如用 p+g来得明白,说明的是将对象 p加上对象g ,至于他们怎么实现相加,就不管了,这才面向对象吧!
所有观点都是个人看法,书上是没有的.
如 对象Pig p ;
Dog d ;
你用 Add(p,d)求动物数量,显示你的思路是面向过程,不是面向对象的,试想一下,
当有 Chick c ; 加入来时你的Add(c,p)还能用吗? 需改动的程序有多少?
不如用 p+g来得明白,说明的是将对象 p加上对象g ,至于他们怎么实现相加,就不管了,这才面向对象吧!
所有观点都是个人看法,书上是没有的.
#20
按你举的例子,我觉得应该选第一种。
add()方法应该是这个类特有的方法,代表了某个特定的动作,
而不是任何一个类都有的,
虽然它里面可能只是简单的A+B。
除非对于工具类,公共类,方法本身就是让别人调用的,
而不是自己专用。
或者,这个方法是类内部的公有方法,
add(a,b)这样的形式才比较合理。
add()方法应该是这个类特有的方法,代表了某个特定的动作,
而不是任何一个类都有的,
虽然它里面可能只是简单的A+B。
除非对于工具类,公共类,方法本身就是让别人调用的,
而不是自己专用。
或者,这个方法是类内部的公有方法,
add(a,b)这样的形式才比较合理。
#21
非常感谢大家!
大家说的非常有道理,给了我很大的启发。
我觉得:
对于工具类,只提供单纯的数据的运算,可以用参数的形式,用overload该方法来扩展。
对于提供某种功能的对象,还是封装成属性,比较好。
还有:
有位高人给了这么个答案,我太愚钝,不明白是什么意思,希望大家能帮忙理解:
“对象的属性是不应该被其他对象直接访问的,这是约定。”
大家说的非常有道理,给了我很大的启发。
我觉得:
对于工具类,只提供单纯的数据的运算,可以用参数的形式,用overload该方法来扩展。
对于提供某种功能的对象,还是封装成属性,比较好。
还有:
有位高人给了这么个答案,我太愚钝,不明白是什么意思,希望大家能帮忙理解:
“对象的属性是不应该被其他对象直接访问的,这是约定。”
#22
就是说一个类的field尽量不要定义成public的。
比如一个类Person里有一个field为name,这个name不应该定义为public,因为别的类应该不能够修改这个name,正如在现实中别人不能修改你的名字一样。Person中只需提供一个public String getname();来让别的类能够读取它的名字。而修改名字应该是private void setName(String name);
比如一个类Person里有一个field为name,这个name不应该定义为public,因为别的类应该不能够修改这个name,正如在现实中别人不能修改你的名字一样。Person中只需提供一个public String getname();来让别的类能够读取它的名字。而修改名字应该是private void setName(String name);
#23
非常感谢Tasia(灯盏)!
其实就是对外提供地数据字段,都要用GET、SET方法来存取,从而保证自身数据地正确操作。
其实就是对外提供地数据字段,都要用GET、SET方法来存取,从而保证自身数据地正确操作。