Java 如何处理好方法(函数)与类的关系? 回答全部奖励,谢谢!

2016-01-06 09:16:52 +08:00
 anonymoustian

是这样,我之前对面向对象的语言一直有这个疑惑。

比如我要开发一个计算器,那么我用 C 语言写的话那我就会定义 很多函数, 比如 add 、 sub 等等。

但是 java 的话因为引入了面向对象的机制,我 就不太懂什么时候应该用类、什么时候应该用方法,也就是我应该如何组织呢? 谢谢!

2644 次点击
所在节点    Java
10 条回复
xylophone21
2016-01-06 09:24:10 +08:00
基本上,最简单的方法

C header file ==> class
C api ==> public method
czheo
2016-01-06 09:28:25 +08:00
1F 的总结不错。怕 lz 理解不到那个份儿上。
BTW, Java 是非常偏激的语言,做什么事情都用 class 。
liuxey
2016-01-06 09:32:51 +08:00
Java 中任何对象和数据都要由类为载体,当然枚举其实也是类,了解这个后就可以开始了:
先写一个 Caculate 类,里面实现+-*/等计算逻辑,还有一些高级运算
再写一个 Caculator 类,作为计算器的主体,其中有一个私有变量 Caculate 的实例,
Caculator 的接受外部的各种输入,最后调用 Caculate 实例的计算方法,最后输出

这是简单的做法,想要很彻底的面向对象来实现,这还不够
thinkmore
2016-01-06 09:53:08 +08:00
java 写一个计算机只需要用到少量的数据结构知识,比如说 statck 或者说 tree,所以写一个方法就可以搞定。至于说使用类的话,一个类需要有什么属性,你觉得你的计算机哪些是共有的,提出来就好了,等你写好了优化就行
1000copy
2016-01-06 10:13:57 +08:00
类就是一个外套,把你原来的方法和全局变量外边套上就可以。比如
原来你写的计算器:
int lastvalue = 0
add()
dec()

现在要做的就是套上{},加个类名
class WOkao{

int lastvalue = 0
add()
dec()

}

这就是类了。

好处就是全局变量没有了,内部化了。

用的时候,稍微麻烦就是得实例化。要 new 。之后就一回事。

做到这步,你就是封装了。了解这个是了解继承,多态的基础。
asj
2016-01-06 10:18:37 +08:00
从需求开始,需求里的名词就是一个候选的类。然后把动作围绕名词放好,这些是候选的类的方法。
以你举的例子,名词计算器可能就是一个类,加减之类的动作是它的方法。
进一步引申的话,假设要实现的是一个实体的计算器,那种摆在桌上按按钮,有个液晶屏的那种。
你会发现因为有状态,比如按了按钮 2 以后,如果前面按的是 1 ,显示 12 。如果前面按的是 1 +,显示 2 。结果和前面按的按钮有关,这种情况下用 C 风格的代码写就会相当不自然。
如果用面向对象方式,“计算器”是一个类,“按按钮”是它的一个方法。“按钮”也是一个类,它会作为按按钮的参数传给计算器。每次方法操作后,计算器的状态变化,记录在它的内部。通过“显示”方法把当前状态输出出来。
进一步复杂化的话,比如要代码控制液晶屏上的灯,每个数字由 8 个灯组成。那么“液晶屏”是一个类,有“显示数字”方法。计算器调用这个方法把要显示的结果传入即可。
这样虽然整体的复杂度提高了。但是显示的逻辑并不会影响到计算器的逻辑,因为两个类担负了不同的职责。只要它们之间的接口没有改变,一方内部的复杂度不会传染到另一部分。
icegreen
2016-01-06 11:22:53 +08:00
我一般划分类的思路:
1. 从逻辑上,或者根据表结构把一类东西封装成一个类;
2. 如果一个类方法太多可以考虑是不是可以细化拆分,是不是类划分不合理;
3. 判断类划分是否合理还可以看方法传入的参数; 有时候方法是可以变成参数类的成员函数的;
Dwayne
2016-01-06 19:20:37 +08:00
是不是该建议楼主看设计模式
WispZhan
2016-01-06 23:34:57 +08:00
@Dwayne 看来楼主根本没到那个地步,应该先看,面向对象编程。推荐 《 Head First 面向对象分析与设计》
-----------------------------

另外别乱推荐新手来“设计模式”,基本上开始就是生搬硬套,估计到时候在你项目组里出现 你就哭吧。

首先要知道 OOP,然后才设计模式。连面向对象的几个设计法则都弄不明白,也是能硬套设计模式,到时候就是不伦不类。
wizardforcel
2016-01-07 06:39:09 +08:00
把你的 struct 变成类 struct 的配套函数 放头文件里的写成 public 静态的写成 private

另外没有必要为了 oo 而 oo ,功能性的函数直接写成静态的就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/248669

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX