到底什么是OO思想那?(求指导)

各位前辈,各位大神

大家好,在此java菜鸟向大家请教一些问题。

工作一年多了,说点什么那?呵呵,任务来了,分析需求,自己也会做,可是最近慢慢的开始想:“知其然,也要知其所以然”,发觉自己不懂得地方那么多,深入学习jvm,学习collection,学习java基础,,学习java设计模式,说深入,其实就是在系统的过一遍,再认真的学一遍,感觉自己就是空中楼阁,感觉有些东西自己懂了,可是仔细想想,却又不懂,说不懂,可是自己却又懂了点东西,是自己会了点东西,没有结合起来,说到现在 自己做了一年多的java,什么是面向对象,面向类 面向接口,就是为了解决实际问题,实际问题就是一种抽象的存在,面向对象 基本特征就是 抽象 集成 多态 封装 为什么要实用接口,接口就是为了抽象,抽象就是为了解决实际中的那些实际问题,也就是所谓的抽象问题, 这些是面向对象吗? 面向对象的思想是这些吗? 我不想几年之后还是一个只会写代码的程序员,所以这些我要懂得,或许我很笨,需要你们的指导,才能去明白什么是面向对象,或许更需要自己的实践,更需要自己的努力,写这些就是希望在这里得到各位前辈的指导,指点迷津。

在此拜谢各位大神。



java菜鸟

是啊,你所接触的这些都是面向对象,所谓大象无形。

为什么你觉得还是迷迷糊糊,经验使然,时间一到,会有忽然开朗一天,经常上Jdon是一个办法,很多道友都谈了自己看Jdon帖子开窍的那种感觉。

2楼说得一点都没错,做吧。

可能是自己一直站在做的角度,没有好好的去思考,去想,什么是面向对象,感觉东西自己会做就行了,就像banq老师说的,我一直都有接触着面向对象,可是自己却依然不知所谓,应该就是自己没有好好的去想,去思考,缺乏思考,而且缺乏代码量,这个帖子是我在看一个collection引起的,那我就以这个例子来向包括banq在内的各位大神请教了。

Set set new TreeSet();
Set接口的句柄指向TreeSet的实例,用这样的方式来实现多态,及面向接口编程,可是我不懂的地方,也是我发这个帖子的根源,TreeSet有个descendingIterator()方法,返回Iterator迭代器,可是set句柄却无法访问到这个方法,只能使用Set接口自己的方法iterator()方法来返回迭代器,这个地方不懂,为什么要这样做,为了达到所谓的面向接口,而把实例自己的方法丢失了? set是 Set的句柄,所以只能拿着自己的东西使用,而不能去使用实现类的方法,多态? 多态实现其中一种方式就是这样的形式,相同的行为,返回不同的结果,我在想,set句柄本身没有这样的行为,而它的实现类却有这样的行为,但是句柄是Set接口,所以子类的方法对它是不可见的。

由于没有做过大型项目,而且对于接口没有过多的使用,接触也不多,所以对接口的了解仅仅是理论的,没有实践,也就谈不上很深的体会了,我想问为什么要使用接口?为了扩展? 为了定义类型? 为了一种规范?为了去填补java单继承的缺陷? 还是什么?

所谓的“面向对象” 思想,也就是大家经常所说的OO思想,我的理解就是 抽象,实际问题都是抽象的,编程是为了什么?就是为了解决实际问题,所以一切都是围绕着“抽象”二字,不知道自己的这一点理解是否有误差。

感觉自己有那么点懂了,可是就是懂不了,是一层纸的距离,还是自己错了很多很多,还希望得到各位大神的指导,在此膜拜。


java菜鸟
[该贴被xiaoli4840于2011-06-29 18:14修改过]

2011年06月29日 17:59 "@xiaoli4840"的内容
感觉自己有那么点懂了,可是就是懂不了,是一层纸的距离,还是自己错了很多很多,还希望得到各位大神的指导,在此膜拜。 ...

每个人的捅破这层膜的点不一样,高潮点不一样,哈哈,只能自己摸索,多实践多学习多思考。到时再看看我们网站上的任何一个帖子都可能捅破这层纸,时候未到,不能太急。

嗯,还是感觉自己缺乏自己缺乏代码量,我会努力的,以后我要找到这个高潮点哈哈哈。。。

嗯 是的 感觉还是自己实践的不够,还需要自己不断的努力,谢谢banq老师了,我会继续努力的。。。

2011年06月29日 17:59 "@xiaoli4840"的内容
Set接口的句柄指向TreeSet的实例,用这样的方式来实现多态,及面向接口编程,可是我不懂的地方,也是我发这个帖子的根源,TreeSet有个descendingIterator()方法,返回Iterator迭代器,可是set句柄却无法访问 ...

Set接口的iterator()返回的迭代器是Set接口的,而实现类TreeSet.descendingIterator()返回迭代器是属于TreeSet自己的。即便他们返回的是同一结果,也表明他们问题域中概念上有所不同。
这里有个问题,我们总是在谈论抽象,抽象。似乎面向对象就剩下抽象了。其实不然,谈论抽象多一些是因为这方面理解不够。当我们抽象完现实世界,获取软件模型的时候,还需要实现它——实例化。就好像,有了斯皮尔伯格这号人物,而不让他去拍电影,那么我们永远就看不到这些经典的大片了。抽象化就是塑造人物,实例化就是人物构建情节。实例化过程我认为又是一个具象化过程,表明软件具体怎样运行(抽象化——死皮会拍电影;实例化——死皮拍电影过程)。可以理解面向对象为面向“类”,表明关注重点在抽象,在建模。也可以理解面向对象为面向“对象”,表明关注重点在具象,在实现。
回到你举得这个例子,你可以仔细研读设计的软件模型和它实例化过程,能看出这样实现的利弊就可以了。可以从解决实际问题上的概念去衡量利弊,也可以从代码量、系统资源占用去衡量。从代码量上看,如果返回同样的迭代器,那么这种设计多此一举;从系统资源上看,肯定这种设计更耗资源(具体多多少,就要另行分析量化了);从建模概念上看,重点就是是否符合用户需求。