Topic: 讨论 面向对象 与 JAVA

  Print this page

1.讨论 面向对象 与 JAVA Copy to clipboard
Posted by: jameszhang
Posted on: 2005-06-29 22:17

现在很多刚学Java的人都急功近利开始就搞什么J2SE、J2EE,JSP,。。。等等,很少有人把面向对象真正学学。

2.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: why
Posted on: 2005-06-30 06:28

不過,在實際工作上,當自己的上司或所謂的Architect沒有真正的OO思維,到頭來也是無所發揮。
OO不是讀書讀出來,乃是在實踐中磨練出經驗來,否則只是似是而非的噱頭吧了。
搞J2EE(現在大概該"先進"地改說Java EE),沒有Java,系統,設計等基礎,根本不可能,但所謂Java EE developer到處都是,可歎啊。
至於學JSP,不算急功近利吧,到底學習歸學習,還是飯碗最要緊。

3.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: floater
Posted on: 2005-06-30 09:51

慢慢来,细细搞。很多概念是很花时间的,而且需要悟性。

没有足够的经验,空想瞎猜也不行。

多实践,多思考。

4.Re:讨论 面向对象 与 JAVA [Re: floater] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-06-30 20:30

floater wrote:
慢慢来,细细搞。很多概念是很花时间的,而且需要悟性。

没有足够的经验,空想瞎猜也不行。

多实践,多思考。

感动,floater 也用国语了!

最近听了OO课程,有豁然的感觉

为什么说学习Java之前应该学习OO,都知道C++ 不是完全OO的语言,而JAVA则是完全OO,所以不知道OO,还可以写写C++,但Java则是完全不行了,即使用java写了东西,也不知为何这样用或者就是糟蹋了Java。

举个例子: 我看到一个真实的Java系统按oo设计的,但理解有问题没有按照OOD中包的CCP原理分类,而是按照自己的经验把界面都打到一个包里,这样给以后的修改造成不方便。

5.Re:讨论 面向对象 与 JAVA [Re: why] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-06-30 20:50

why wrote:
不過,在實際工作上,當自己的上司或所謂的Architect沒有真正的OO思維,到頭來也是無所發揮。
OO不是讀書讀出來,乃是在實踐中磨練出經驗來,否則只是似是而非的噱頭吧了。
搞J2EE(現在大概該"先進"地改說Java EE),沒有Java,系統,設計等基礎,根本不可能,但所謂Java EE developer到處都是,可歎啊。
至於學JSP,不算急功近利吧,到底學習歸學習,還是飯碗最要緊。

Why 先生说的不无道理,但OO光靠磨练是不够的,一定要上升到理论层次,可不是噱头,想想如果牛顿不把物理界现象上升到理论层次上,只是自己有经验,那么就不会有近代物理科技重大发展了。这也使我想课上讲到中国人的思维方式,为什么拥有这么多美食中餐没有像KFC一样在全世界开花结果,因为它不可能象KFC那样。。。,想想中餐菜谱,肉丝8两,炒7、8分熟、放盐少许.......,这就是完全靠经验,小馆子还行。所以我们在设计软件系统时候一定要有强理论支持,这些理论就是已经被证实了的普遍规律,物理中如牛顿定律,OO中就是四项基本原理了,一点浅见,还望指教

6.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: leowu2000
Posted on: 2005-07-01 11:00

OO很多时候降低了系统各模块之间的偶合性,让你从系统的层次来考虑系统,而不是从系统具体实现去考虑系统.
当然,由于以前的经验,所以OO是一个循序渐进的过程,思考问题层次越高,有的时候你就会自觉地去OO(或者说不OO你会感觉很杂乱很不方便),而不是强迫自己思考什么都去OO.
实践一段时间后,还是要翻看翻看理论的书籍,会很有收获的.

7.Re:讨论 面向对象 与 JAVA [Re: leowu2000] Copy to clipboard
Posted by: floater
Posted on: 2005-07-01 20:49

leowu2000 wrote:
OO很多时候降低了系统各模块之间的偶合性,让你从系统的层次来考虑系统,而不是从系统具体实现去考虑系统.
当然,由于以前的经验,所以OO是一个循序渐进的过程,思考问题层次越高,有的时候你就会自觉地去OO(或者说不OO你会感觉很杂乱很不方便),而不是强迫自己思考什么都去OO.
实践一段时间后,还是要翻看翻看理论的书籍,会很有收获的.

absolutely right. Hope the beginners copy this and print it on their desk.

8.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: why
Posted on: 2005-07-01 22:24

jameszhang wrote:
但OO光靠磨练是不够的,一定要上升到理论层次,可不是噱头,
所以我们在设计软件系统时候一定要有强理论支持,这些理论就是已经被证实了的普遍规律,物理中如牛顿定律,OO中就是四项基本原理了

What I meant was OO不是讀書可以讀出來,乃是在實踐中磨練出經驗來證成以至通逹理論

9.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: floater
Posted on: 2005-07-02 09:45

谈起牛顿定律,弊人可以从他用微积分推出太阳系的运行。但弊人毕生无法理解牛顿定律,实在不是能懂物理的。所以,能做是一回事,能懂是另一回事。我与leowu2000和why深有同感啊!

10.Re:讨论 面向对象 与 JAVA [Re: why] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-07-02 11:43

why wrote:
What I meant was OO不是讀書可以讀出來,乃是在實踐中磨練出經驗來證成以至通逹理論

人类科技的发展当然是从实践中总结的理论,但是科技的另一方面却是由理论来指导实践的,这样才能更快的发展,都说了设计开发过程中应该遵循OCP原理,就不用去实践不用ocp会怎样了,因为他已经是公理了

11.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: why
Posted on: 2005-07-02 12:26

jameszhang wrote:
人类科技的发展当然是从实践中总结的理论,但是科技的另一方面却是由理论来指导实践的,这样才能更快的发展,都说了设计开发过程中应该遵循OCP原理,就不用去实践不用ocp会怎样了,因为他已经是公理了

公理還是要經過親身深刻實踐才會成為運用自如的工具,認識(了解)和通逹是不同的層次.(未經鍛鍊的認識和受過考驗的證成中間的分別,閣下不會忽視吧)
除了OO,SD還有其他考慮的因素和限制.就說OCP,相信閣下會同意complete closure在現實中幾乎不存在,那麼我們就要選擇取捨,這就需要"慢慢来,细细搞"的經驗積累--理論是解決問題的基礎,懂得不代表做得好.
實踐是漫長的學習.

12.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-07-02 12:43

是的大的定理下面还有细细的定理公式来支持,进而形成体系,如[GOF95],但他肯定不能违背大的原理,oo是个新鲜事物,发展不过几十年,其中还有很大空间,我们可以通过自己的实践,来丰富它(很少人有这样的机会,我是不行了,只能做些应用了,呵呵),但我认为经验之说应该上升到理论概念,如果能把经验抽象成理论,不是更好吗?我可不是让每个人都有如此能力,只是说说感受,希望能看到大家摒弃中国菜谱思维,在行业上有更大发展

13.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: PrimeJava
Posted on: 2005-07-02 13:47

学而不思则惘 思而不学则殆

14.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: leowu2000
Posted on: 2005-07-02 13:53

说句老实话,我觉得软件这种东西还是属于工程体系的东西(就像建筑),并不是属于基础理论(数学、物理)那种体系。所以就软件来说,理论只会从不同的层面来丰富或者指导软件开发过程,但还起不到从整体层面来指导软件的作用。或者说,从整体层面来考虑软件的话可能是管理,而不是OO。

OO只是一种方法论,对软件整个体系来说还不能作为抽象的结果。当然,OO在设计层面、在其它具体层面起到的作用还是很重要的。

我觉得中国先人的很多思想,不是不抽象,而是太过于抽象了,就像道家、儒家一些思想。但是它们和具体的工程开发离得太远,所以感觉工程领域没有很多抽象理论。

啰里啰唆一堆,不知道自己在说些什么。见谅.Tongue

15.Re:讨论 面向对象 与 JAVA [Re: leowu2000] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-07-02 18:03

leowu2000 wrote:
说句老实话,我觉得软件这种东西还是属于工程体系的东西(就像建筑),并不是属于基础理论(数学、物理)那种体系。所以就软件来说,理论只会从不同的层面来丰富或者指导软件开发过程,但还起不到从整体层面来指导软件的作用。或者说,从整体层面来考虑软件的话可能是管理,而不是OO。

OO只是一种方法论,对软件整个体系来说还不能作为抽象的结果。当然,OO在设计层面、在其它具体层面起到的作用还是很重要的。



哈哈,其实OO并不重要,其实重要的是方法论,呵呵

方法论是笛卡儿在1637年出版的著名哲学论著,对西方人的思维方式,思想观念和科学研究方法有极大的影响,有人曾说:欧洲人在某种意义上都是笛卡儿主义者,就是指的受方法论的影响,而不是指笛卡儿的二元论哲学。

笛卡儿在方法论中指出,研究问题的方法分四个步骤:

永远不接受任何我自己不清楚的真理,这就是著名的“怀疑一切”理论。例如亚里士多德曾下结论说,女人比男人少两颗牙齿。但事实并非如此。
可以将要研究的复杂问题,尽量分解为多个比较简单的小问题,一个一个地分开解决。
将这些小问题从简单到复杂排列,先从容易解决的问题着手。
将所有问题解决后,再综合起来检验,看是否完全,是否将问题彻底解决了。

16.引自<< 计算机科学与技术方法论>> [Re: jameszhang] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-07-02 18:11

今天计算Computing技术作为现代技术的标志已成为世界各国许多经济增长的主要动力计算领域也已成为一个极其活跃的领域计算学科正以令人惊异的速度发展并大大延伸到传统的计算机科学的边界之外成为一门范围极为宽广的学科如何认知这个学科引发了长期以来激烈的争论并极大地影响着计算学科的发展和人才的培养
要解决学科的认知问题必须有一套科学的方法就哲学方法论而言学科方法论就是认知学科的方法和工具它有助于人们对学科认识的逻辑化程序化理性化和具体化一般来说学科方法论的建立也是学科成熟的标志之一
1984年7月美国计算机科学与工程博士单位评审部的领导们在犹他州召开的会议上对计算认知问题进行了讨论这一讨论以及其他类似讨论促使美国计算机协会Association for Computing Machinery简称ACM和美国电气和电子工程师学会计算机分会Institute of Electrical and Electronics Engineers-Computer Society简称IEEE-CS联手组成攻关组开始用新的思维方式来理解计算学科此后ACM和IEEE-CS以及不少学者在计算学科认知问题上做了大量富有成效的工作发表了一系列报告和论文现在人们对计算学科的认知已相当成熟从而使我们能够以一般科学技术方法论为指导科学地建立起计算学科自己的方法论计算机科学与技术方法论
本书所建立的计算机科学与技术方法论借鉴了数学的公理化思想来整理和总结计算学科因此它又可以作为计算学科中的一门严密而又能将学生引入学科各个富有挑战性领域的综述性导引课程显然这样的综述性导引课程现已自然地演变为计算学科方法论这样的课程了

17.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: IncredibleBoy
Posted on: 2005-07-04 11:27

没有必要死搬模式, 仔细看你的代码, refactor it , 好的设计自然会浮出水面

18.Re:讨论 面向对象 与 JAVA [Re: IncredibleBoy] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-07-04 22:26

IncredibleBoy wrote:
没有必要死搬模式, 仔细看你的代码, refactor it , 好的设计自然会浮出水面

谁也没说死搬,我一般是活搬,如果你要死搬那你就死搬好了,我的意思是如果连面向对象都不了解,是学不好JAVA的,举个最简单的例子:看看java.util.Observer 这个接口,如果不了解Observer模式又怎能用好这个Api,连最基本的jdk都用不好,光看代码,不成了闭门造车,井底之蛙,呵呵,还是那句话先看oo再学JAVA有水到渠成之感,如果直接学写程序,建议用Basic,不是VB,是QucikBasic,或者用Pure C

19.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: IncredibleBoy
Posted on: 2005-07-05 09:41

jameszhang wrote:
谁也没说死搬,我一般是活搬,如果你要死搬那你就死搬好了,我的意思是如果连面向对象都不了解,是学不好JAVA的,举个最简单的例子:看看java.util.Observer 这个接口,如果不了解Observer模式又怎能用好这个Api,连最基本的jdk都用不好,光看代码,不成了闭门造车,井底之蛙,呵呵,还是那句话先看oo再学JAVA有水到渠成之感,如果直接学写程序,建议用Basic,不是VB,是QucikBasic,或者用Pure C

一般模式的讨论我都觉得没有什么太大的作用,因此也很少参与。不过看你
们长篇大幅的讨论,我觉得实在很浪费时间.为什么,模式只是前人经验
的总结,拿出来大讨论,作为经典,实在没必要.理解了面向对象的四大
特性,你也可以写出来.
我不反对oo,也不反对模式,不过
你说先看oo(或是面向对象)再学java,我就觉得很无稽.java 作为一门语言,
它用自己的语法规范实现了面向对象的四大特性,如果撇去具体的语言而先去
空看oo,我不知道如何做好程序,如何学好java,又如何深入理解他对面向
对象的实现 ,除非你已经学了一门面向对象语言作基础了,譬如c++,否则
初学者从面向对象的模式理论入手,将是多么难以上手,这不是很误人子弟.

再者,光看代码,闭门造车,井底之蛙,实在不敢当, 我指的“光看代码”,
是不断用四大特性去修正代码,解除耦合性,提高可读性等。"光看代码“
实在是很激进的定言.

总之 ,面向对象不等于模式,模式也不是面向对象的全部,也不是
java 的全部. 模式是四大特性的综合应用,他不是教科书.也代替不了
java入门教材.

20.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-07-06 00:22

Post is deleted

21.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: jameszhang
Posted on: 2005-07-06 00:22

你说的很好啊! 但如果学点语法就叫作会写Java,那也没啥说的了,争这个也无用,说道C++ ,如果有了面向对象的知识,当年我就不会那么费劲了,呵呵,面对你那些 “如何” 的问题,那是门6000~8000¥课程,只需要点UML基础,撇开语言也可以给你讲的很清楚,我就不细说了!!另外谁也没说OO就是Patterns,说什么用OO的四大基本原理来修饰代码,多空洞啊,就像前面说的,典型”中国菜谱思维i“,全靠经验,Pattern正是那种符合四大基本原理的可操作规则,不说了,呵呵,睡觉 啊~~~

22.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: xhxasdf
Posted on: 2005-07-26 09:19

我都不知道说什么好
进来看看高手的发言,是一种提高
公司同事有一个去华为勒
我好羡慕!未华为奋斗
这立华为的高手有没有啊 ?

23.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: Jwing
Posted on: 2005-10-23 16:18

jameszhang wrote:
感动,floater 也用国语了!

最近听了OO课程,有豁然的感觉

为什么说学习Java之前应该学习OO,都知道C++ 不是完全OO的语言,而JAVA则是完全OO,所以不知道OO,还可以写写C++,但Java则是完全不行了,即使用java写了东西,也不知为何这样用或者就是糟蹋了Java。

举个例子: 我看到一个真实的Java系统按oo设计的,但理解有问题没有按照OOD中包的CCP原理分类,而是按照自己的经验把界面都打到一个包里,这样给以后的修改造成不方便。


java 也不是完全的 OO

24.Re:讨论 面向对象 与 JAVA [Re: Jwing] Copy to clipboard
Posted by: ranchgirl
Posted on: 2005-12-18 12:34

Jwing wrote:
java 也不是完全的 OO


Agreed!!!! Believe me or not. I saw totally C-like Java code in several companies.

linux_china gave you a "perfect" example here, haha
http://www.cjsdn.net/post/view?bid=1&id=163021&sty=3&keywords=main

25.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: ranchgirl
Posted on: 2005-12-18 12:38

My answer on this topic:

Q. Is Java a pure OO language?
A: No, it is not.

neither are C++/C#/etc.

SmallTalk is general considered as a pure OO language. In SmallTalk, everything is an object, including int or even + sign. Java is one step more close to SmallTalk than C++, but it is still not pure OO language.

Why bother to discuss this? Language is just a tool to get the job done. Choose one is better for your job/business. If speed is absolutely critical to your application, use FORTRAN, c or assembly. Burn your algorithm into the semiconductor chips would be a good choice too, of course, if it is necessary!

In some cases, OO is an obstacle. SmallTalk never becomes a main stream programming language since it is too slow.

26.Re:讨论 面向对象 与 JAVA [Re: jameszhang] Copy to clipboard
Posted by: ranchgirl
Posted on: 2005-12-18 12:50

On speed wise, no high level language beats FORTRAN yet, NOT even C. Maybe never!!!!

If the running speed is a life or death situation, which high language you choose? OO/Java or FORTRAN/C?

My answer: Not OO for sure!!!!

OO is not always the best!

Please don't even compare OO with Newton's Laws. They are not even close on the same theoretical level...

We usually say "don't compare Orange with Apple!", however, at least orange and apple are both fruits.

Sorry! Compare OO with Newton's Laws don't even qualify "compare Orange with Apple".


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923