讨论对面向对象(OOA/D/P)的理解!300分不够再加! ( 积分: 300 )

D

dirtwo

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟学习OO编程有一段时间了,可是对于OO的理解只是冰山一角。希望大家交流。
我认为学习OO主要是其思想,但又不是学到后就能描述出来的,这是我们沟通的一大难题!
学OO如同悟道,只可领悟,而不可言传!但我还是希望大家能把自己能表示出来的心得,写
出来,大家一起研究,使其他人与自己的领悟相比较,看看是不是哪个地方有差别?
我举个例子:
在《侠客行》中领悟关于侠客岛上的武功,可以说是一个人一个看法,(除了主人公外)每一个都有自己对这个武功的理解,虽然理解的偏离了主干线,但每领悟一次,也可以使自己的武功大增。自己认为这样理解对,别人认为那样理解对,在一起讨论后,觉得对方的也对,但同时和自己领悟的一样,都有缺陷。始终是领悟不到100%的秘密。而主人公领悟到了100%,他是用的另一种方法领悟出来的。
我举的这个例子或许不准确!请大家原谅。我要表达的意思是:让大家互相学习,最好能够领悟到OO的主干线,而不是分支上。如果是到了分支上,那样我们永远也打不到100%的境界。
我不知道会不会来高手来这里给大家讲解!但我希望即使是我们都领悟在分支上,互相交流也是可以提高自己的编程水平的。如果有高手来,那我们将少走不少弯路。:)
期待大家的发言!
期待高手的指点!
小弟先奉献300,不够再开一个300,只是希望大家能够有个交流OO心得的地方!
 
小弟学习OO编程有一段时间了,可是对于OO的理解只是冰山一角。希望大家交流。
我认为学习OO主要是其思想,但又不是学到后就能描述出来的,这是我们沟通的一大难题!
学OO如同悟道,只可领悟,而不可言传!但我还是希望大家能把自己能表示出来的心得,写
出来,大家一起研究,使其他人与自己的领悟相比较,看看是不是哪个地方有差别?
我举个例子:
在《侠客行》中领悟关于侠客岛上的武功,可以说是一个人一个看法,(除了主人公外)每一个都有自己对这个武功的理解,虽然理解的偏离了主干线,但每领悟一次,也可以使自己的武功大增。自己认为这样理解对,别人认为那样理解对,在一起讨论后,觉得对方的也对,但同时和自己领悟的一样,都有缺陷。始终是领悟不到100%的秘密。而主人公领悟到了100%,他是用的另一种方法领悟出来的。
我举的这个例子或许不准确!请大家原谅。我要表达的意思是:让大家互相学习,最好能够领悟到OO的主干线,而不是分支上。如果是到了分支上,那样我们永远也打不到100%的境界。
我不知道会不会来高手来这里给大家讲解!但我希望即使是我们都领悟在分支上,互相交流也是可以提高自己的编程水平的。如果有高手来,那我们将少走不少弯路。:)
期待大家的发言!
期待高手的指点!
小弟先奉献300,不够再开一个300,只是希望大家能够有个交流OO心得的地方!
 
封装,继承,多态,还有接口。
建议去看一下《C++对象模型》,很有帮助。
 
我也在学习中,推荐两本书给楼主看下:
《面向对象系统设计循序渐进》、《Delphi高手突破》
 
在学习OO之中,书有一定的作用,但最重要的还是看自己能不能比别人多几分善于思考的能力。现在在校的学生,大多数学习C,或者学习C++老师在OO的阐述上总是没有实际的理论帮学生解开这些谜团,一直用C的总还脱离不了那种结构化编成模式的思维。OO其实不难也不复杂,初学者千万别滥用OO(不过好像也没法滥用)。
OO要讲的话就太多了,书本上说的只是一种工具,关键在于将问题抽象,这种抽象首先要跳出数学上的思路,那样又会让你陷入迷潭。OO就是让你简单的以生活的方式去接决具体问题。所以大可不必刨根问题,钻牛角尖。
 
我也在学习中,推荐两本书给楼主看下:
《面向对象系统设计循序渐进》、《面向对象程序设计》
其实用OO与否,主要还要看具体情况。若不用OO即可解决问题,又何必非要用OO呢
 
OO的面向对象的设计方法比较容易掌握,但是真正的要实现对象的封装和类的继承层次关系就不是那么容易的了。
 
面向对象的核心老代码调用新代码
实现老代码调用新代码用多态性
 
一切编程语言皆从人工智能思想中出生,掌握了人工智能中的基本理念,那些看似坚固的
城堡就不攻自破。
有了理论,就必须在实践中运用——观察一切,理解一切,贯通一切。
首先要明白到底要做什么,然后再考虑到底怎么做。即:系统所要达到的目标,达到目标
所需要的可能技术和技巧——不要被OO一叶障目。
 
程序员就是上帝
TObject就是镜子里面的上帝
OO就是上帝照着镜子创造世间万物的过程
 
我感觉 刘 艺 在《Delphi面向对象编程思想》中的 面向对象编程思想和大道无形之气
讲的很有道理,引一下,可能大家都看过了,见笑了![:D]
老子曰“无名天地之始,有名万物之母”,无名是无以名状,无法定义的意思。所谓面向对象的思维方式,最奥妙之处在于如何从“无名”中识别和定义对象、如何从“有名”中构造和使用对象。
对于软件开发人员来说,认识客观实体的过程、对用户需求进行分析和设计的过程,就是发现和界定对象的过程,是从无名到有名的过程。然而这里的对象又不同于面向过程中的变量或函数,对象是由类创建的,类是概念的抽象,是可以定义的“有名”,是对象之母。
于是乎,太极生两仪,两仪生八卦,通过类的继承和派生,万物始生,系统构成。
从软件开发的角度来理解,面向对象的编程工具虽然提供了构建无穷种软件系统的可能性,但这种无限性却是建立在自身类库的有限框架之中。无论是Delphi的VCL,还是Java的类库,或是.net框架,无一不是建立在这样一个类似于周易八卦的架构之中。“易有太极,太极生两仪,两仪生四象,四象生八卦” ,这样的结构完美无瑕,有着无穷的创造力。
太极是Delphi中的TObject,它是构建系统的原子,它是所有类的祖先,它具有所有类的基本特征。在Delphi的编程世界中,根类TObject生持久对象类TPersistent,持久对象类TPersistent生组件对象类TComponent,进而为开发应用程序提供了丰富的控件和强大的功能。
然而类库的结构框架不仅仅是给我们可以作为“器用”的组件,更重要的是这种结构通过类之间的关系和相关作用,实现了“气”的构造和变化,体现出面向对象编程思想的精髓。为我们创建自己的系统提供了绝好的示范。
气的奥妙其次在于它的“生于无形”。无形意味着它的自由性、开放性、适应性。在面向对象编程思想中处处充满着 “气”的这种大道无形的智慧。
比如,面向编程对象中的多态性可以使程序员撰写更加通用的、更加开放的程序。程序员可以为Vehicle对象编写一个纯虚抽象方法Stop(),这样的通用Stop()方法与驾驶什么车无关。程序员可以让派生类去操心如何完成stop()方法,而继续在更高的抽象级别上编写自己的通用过程。即使Car对象的stop()方法与Bicycle对象的stop()方法完全不一样,程序员可以也可以使用Vehicle.stop(),多态性可以让创建的对象自动知道哪一个合适的方法将被调用。这就使程序具备了“气”的开放性和适应性。
练气功中讲究“上德无为,不以察求。下德为之,其用不休。”(《周易参同契》)
在面向对象编程思想中,“上德”是晚绑定的纯虚抽象方法、是以不变应万变的对象接口,它是对事物的高度抽象、是形而上学。“上德无为”是说在抽象层次,通过无为来体现编程“虚”的一面,因为这时还无法确定实际使用的真正对象(可能是Car对象也可能是Bicycle对象,更可能是以后发明的新交通工具对象),“不以察求”要求我们跳出具体需求的约束,不去考虑具体的实现代码。所以纯虚抽象方法或对象接口中是没有任何代码实现的。
在面向对象编程思想中,“下德”是对纯虚抽象方法的覆盖、是对对象接口的实现。“下德为之”,提供了真正的代码实现。“其用不休”,满足了不断变化的需求。
多态性使得程序员在以后不费多大力气就可以派生对象,实现程序。假设程序员在为Car和Bicycle构建应用程序,并不知道还存在Truck,但这并不要紧。程序员可以为继承Vehicle类的Car和Bicycle类撰写覆盖stop()的方法。这样,在程序中只要把创建的Car和Bicycle对象转型为Vehicle的类型,使用Vehicle的stop()方法,就可以让Car和Bicycle对象动态绑定符合自己要求的stop()方法。即使后来新增了Truck对象,仍然是调用Vehicle的stop()方法,并不需要进一步改动程序。
虽然客观事物是复杂,用户需求是变化的,但是其中也有一定的内在规律。
近而不可见者,只看眼前的具体功能实现,不察事物的一般发展规律,心中只有孤立的数据和机械的流程,一旦“事有合离”,则措手不及,难以应对。这样的编程是静态的、机械的、难以维护和扩展的。
远而可知者,善于发现规律,重视代码重用,眼中尽是有机的对象和和谐的关系,即使需求改变,也能从容应对,游刃有余。这样的编程是动态的、灵活的、可维护和可扩展的。
Paul Kimmel在《Delphi6应用开发指南》中说“以非面向对象的方法去使用面向对象工具是一个错误。使用Delphi编写结构化程序可以很快地到达beta版……你的程序可能永远脱离不了beta版。迅速得到错误的答案,仍然是错误的。”
同样是使用Delphi,如果没有面向对象的编程思想,好比“不察其辞”,最终仍然是“近而不可见”,难以开发出优秀的系统。唯有潜心苦练,悉心总结,掌握面向对象编程思想的博大精深,才能运“气”自如,“反往以验来也”,最终达到“远而可知”的境界。
 
小弟学OO不长时间,不敢妄加评论,不过近来收集了一篇文章也许对学OO的有点用处,我已经加到了笔记里,各位可以看看:
http://www.delphibbs.com/keylife/iblog_show.asp?xid=13765
 
OO的实质
封装
是编译器的约束,是把程序和数据分开的手段,调用时带上数据的SELF指针。
继承
是拷贝和组装,每一部分都存在,不会覆盖,只是有些不能直接访问。
多态和接口
预定一个指针表(VMT),以后动态更改指向。(每一部分都存在,只是覆盖VMT)
OO的应用
丰富广泛,就像艺术,同样的手法,可以作出不同的效果。从头做起你可以编织出一个美丽的天堂。但大多数应用,都是在人家的基础(VCL、MFC)上添砖加瓦,除非做底层的,像操作系统、数据库等。
 
先站个位置交流学习
 
看来来的人不多啊!
我多么希望借这个机会,和大家一起讨论编程中的“道”啊!
 
刘艺的书
《Delphi面向对象编程思想》、《Delphi模式编程》
 
《Object Pascal中文参考手册》
刘艺:
《Delphi面向对象编程思想》、《Delphi模式编程》
李维:
《面向对象开发实践之路——Delphi版》这是李维的新书
爱不到要偷:
《搞个对象来开发》
 
上德无为,不察其用,下德为之,其用不休
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=13813
 
顶部