我学习编程时间也不短了,从 c 语言入门到现在已经两点多了吧。中间学过 Python , Java , Scala 。现在学习以 Java 为主。但是对面向对象还是不能有很好的理解。
例如,我需要完成一个任务,任务是: 将一个文件夹下的所有的 xlsx excel 文件转到 oracle 数据库中。 Java 中的 POI 包可以操作 excel 。 poi 里面有一个 workbook 类。可以操作 sheet , row , cell 等。我觉着抽象程度已经很高了。
在这个任务中,我还需要继续将 excel reader 这个任务继续抽象吗?如果继续抽象改完成什么样的功能设计呢?
虚心求教各位程序员大哥,希望能帮我解答一下疑惑。
另外,除了多写程序以外,还有什么书,网站,能够提高这方面的能力有帮助呢?
1
pyufftj 2016-07-24 19:52:17 +08:00
如果你接触一些比较大型的项目就会发现面向对象的优点,对于代码的修改及功能的扩展都要方便的很多。如果你用过程化的方式,就很容易乱作一团。。纯属个人见解。一些简单的任务,面向对象或者过程化是看不出来的。
|
2
HypoChen 2016-07-24 20:49:17 +08:00
首先,你需要一个对象(大雾
说正经的,对于设计方面的提高就算是看书什么的也是很难提高的,之前写的代码少,在看设计模式的时候,只知道他好并不知道为啥好,在什么时候能发挥最大的威力。软件设计也是一样,看书啊什么的不建立在大量实践的基础上是很难真正消化的。当你遇到过并实现很多场景,然后再去看那些美妙的设计,会让你有众里寻他千百度的感觉。 所以,现在要做的不是在纠结怎么设计,而是放手去实践吧。 |
3
tracymcladdy 2016-07-24 21:02:05 +08:00
面向对象就是个忽悠。
面向接口编程才是正解。 |
4
wizardforcel 2016-07-24 21:19:59 +08:00 via Android
思想和架构类的书。编程之美、编程珠玑、架构之美、开源软件架构。
另外对于你那个问题, poi 是读取通用 excel 的,但如果有业务上专用格式的 excel ,还可以继续封装。 |
5
cs419 2016-07-24 21:52:27 +08:00
|
6
jatesun 2016-07-24 22:11:20 +08:00 via iPhone
多敲代码多看书多看源码。。。
|
7
Srar 2016-07-25 02:37:09 +08:00 1
多重构
|
8
linux40 2016-07-25 06:53:03 +08:00 via Android
uml ?
|
12
hujianxin OP @wizardforcel 多谢推荐
|
13
russj 2016-07-25 08:56:15 +08:00
这个是用来忽悠老板的
|
14
cxh116 2016-07-25 09:09:39 +08:00 via Android 1
先写测试,这样写出的方法会考虑怎么供调用方使用才好。
|
15
zeroten 2016-07-25 09:10:42 +08:00
首先要有个对象
|
16
gdzdb 2016-07-25 10:18:10 +08:00
多做项目,
在开发中发现问题,自己尝试解决方案,在方案中再找到问题,再优化,形成总结。 看优秀的开源项目的代码,理解代码。 然后再找本关于设计模式的书看看。 |
17
eurry 2016-07-25 10:45:01 +08:00
不要迷信什么面向对象
|
18
nonesuccess 2016-07-25 10:49:45 +08:00
你的代码里面有重复的部分吗?作为一个有良好习惯的程序员,粘贴代码这样的毛病就当你没有了,那你程序思路上有重复的部分吗?
比如你的 xlsx 格式有若干种,如果你的考虑问题的思路是: 1 、将 xlsx1 中的数据, xx 列复制给表 1 中的 xx 列, xx 列复制给表 1 中的 xx 列, 2 、将 xlsx2 中的数据, xx 列复制给表 2 中的 xx 列……那就没什么重复的部分,就当搬砖继续干去吧。 但是如果你的思路转变为:将每个 xlsx 中的若干列以一定的规则复制到某张表中,那所有的转换逻辑都是重复的部分。你需要封装一个 Strategy 对象,用于表示 xlsx 和数据库表的对应规则,以及列的转换规则,然后外层调用的时候统一代码,不同的 xlsx 只需要传入不同的 strategy 就可以了。 第二就是,你的代码将要应对什么样的变化。 比如明天就可能把 oracle 换成 mysql 了,那就要封装一个 dbDriver 出来。当然这件事 jdbc 已经帮你做了,不过具体到你的业务场景中,很可能不同的数据库有不同的转换逻辑,比如日期类型的字段在 mysql 中要转换为 date ,在 oracle 中要转换成 datetime 之类的。这样的话,你再自己封装一层比较好。 |
19
techmoe 2016-07-25 11:52:12 +08:00 via Android
首先你要有对象()
|
21
goubenger 2016-07-25 12:17:30 +08:00
面向对象设计通过面向工资工作提高
|
22
neurobot 2016-07-25 13:51:13 +08:00
可以看一下<<Thinking in UML>>,不算太老,非常有启发
|
23
likai 2016-07-25 14:33:54 +08:00
面向组件编程
|
24
Raku 2016-07-25 17:58:34 +08:00 via iPhone
@tracymcladdy 同意~
|
25
everettjf 2016-07-26 00:16:33 +08:00
|
26
Balthild 2016-07-26 02:42:56 +08:00 via Android
@pyufftj 太弱了,用 while (1) 可以每天 new 几乎是无限个,一直 new 到内存受不了为止
|
27
sampeng 2016-07-26 11:34:00 +08:00
首先要有一个对象
|
28
sampeng 2016-07-26 11:35:23 +08:00
多写比多看书强无数倍。
把自己写的代码拆无数次,一直到优雅,扩展方便,理解方便。。自然水到渠成。 光看书?面试用用可以,实践差的不是一点半点 |