是这样,我之前对面向对象的语言一直有这个疑惑。
比如我要开发一个计算器,那么我用 C 语言写的话那我就会定义 很多函数, 比如 add 、 sub 等等。
但是 java 的话因为引入了面向对象的机制,我 就不太懂什么时候应该用类、什么时候应该用方法,也就是我应该如何组织呢? 谢谢!
1
xylophone21 2016-01-06 09:24:10 +08:00 3
基本上,最简单的方法
C header file ==> class C api ==> public method |
2
czheo 2016-01-06 09:28:25 +08:00 1
1F 的总结不错。怕 lz 理解不到那个份儿上。
BTW, Java 是非常偏激的语言,做什么事情都用 class 。 |
3
liuxey 2016-01-06 09:32:51 +08:00 1
Java 中任何对象和数据都要由类为载体,当然枚举其实也是类,了解这个后就可以开始了:
先写一个 Caculate 类,里面实现+-*/等计算逻辑,还有一些高级运算 再写一个 Caculator 类,作为计算器的主体,其中有一个私有变量 Caculate 的实例, Caculator 的接受外部的各种输入,最后调用 Caculate 实例的计算方法,最后输出 这是简单的做法,想要很彻底的面向对象来实现,这还不够 |
4
thinkmore 2016-01-06 09:53:08 +08:00 1
java 写一个计算机只需要用到少量的数据结构知识,比如说 statck 或者说 tree,所以写一个方法就可以搞定。至于说使用类的话,一个类需要有什么属性,你觉得你的计算机哪些是共有的,提出来就好了,等你写好了优化就行
|
5
1000copy 2016-01-06 10:13:57 +08:00 1
类就是一个外套,把你原来的方法和全局变量外边套上就可以。比如
原来你写的计算器: int lastvalue = 0 add() dec() 现在要做的就是套上{},加个类名 class WOkao{ int lastvalue = 0 add() dec() } 这就是类了。 好处就是全局变量没有了,内部化了。 用的时候,稍微麻烦就是得实例化。要 new 。之后就一回事。 做到这步,你就是封装了。了解这个是了解继承,多态的基础。 |
6
asj 2016-01-06 10:18:37 +08:00 2
从需求开始,需求里的名词就是一个候选的类。然后把动作围绕名词放好,这些是候选的类的方法。
以你举的例子,名词计算器可能就是一个类,加减之类的动作是它的方法。 进一步引申的话,假设要实现的是一个实体的计算器,那种摆在桌上按按钮,有个液晶屏的那种。 你会发现因为有状态,比如按了按钮 2 以后,如果前面按的是 1 ,显示 12 。如果前面按的是 1 +,显示 2 。结果和前面按的按钮有关,这种情况下用 C 风格的代码写就会相当不自然。 如果用面向对象方式,“计算器”是一个类,“按按钮”是它的一个方法。“按钮”也是一个类,它会作为按按钮的参数传给计算器。每次方法操作后,计算器的状态变化,记录在它的内部。通过“显示”方法把当前状态输出出来。 进一步复杂化的话,比如要代码控制液晶屏上的灯,每个数字由 8 个灯组成。那么“液晶屏”是一个类,有“显示数字”方法。计算器调用这个方法把要显示的结果传入即可。 这样虽然整体的复杂度提高了。但是显示的逻辑并不会影响到计算器的逻辑,因为两个类担负了不同的职责。只要它们之间的接口没有改变,一方内部的复杂度不会传染到另一部分。 |
7
icegreen 2016-01-06 11:22:53 +08:00 1
我一般划分类的思路:
1. 从逻辑上,或者根据表结构把一类东西封装成一个类; 2. 如果一个类方法太多可以考虑是不是可以细化拆分,是不是类划分不合理; 3. 判断类划分是否合理还可以看方法传入的参数; 有时候方法是可以变成参数类的成员函数的; |
8
Dwayne 2016-01-06 19:20:37 +08:00 1
是不是该建议楼主看设计模式
|
9
WispZhan 2016-01-06 23:34:57 +08:00 1
@Dwayne 看来楼主根本没到那个地步,应该先看,面向对象编程。推荐 《 Head First 面向对象分析与设计》
----------------------------- 另外别乱推荐新手来“设计模式”,基本上开始就是生搬硬套,估计到时候在你项目组里出现 你就哭吧。 首先要知道 OOP,然后才设计模式。连面向对象的几个设计法则都弄不明白,也是能硬套设计模式,到时候就是不伦不类。 |
10
wizardforcel 2016-01-07 06:39:09 +08:00 via Android 1
把你的 struct 变成类 struct 的配套函数 放头文件里的写成 public 静态的写成 private
另外没有必要为了 oo 而 oo ,功能性的函数直接写成静态的就好了 |