食之无味,弃之可惜,面向对象设计在Delphi中不过是一块鸡肋。 (100分)

  • 主题发起人 主题发起人 lncd
  • 开始时间 开始时间
[:)]
我来学习。
从某种程度上说,是理想与现实的大碰撞。
 
我认为oop就是武林上说的超级秘籍,不是一般人都能学的会的,这需要天份和机遇。
 
http://objects.nease.net/persistenceLayer_ch.pdf
 
在分析阶段用OO方法,设计阶段要抛开OO?这是没有理解OO。如果你真的理解了OO,你才能在开发中使用OO编写代码,而且开发出的代码绝对比struct方式好懂得多。
张无忌代码我看了一下,其实还是过程性的,只是使用OO的语言封装了一下,并没有体现OO的精神。代码是能重用,但是仅仅是业务代码的重用,如果换一个的软件,这些代码就没有价值了。重用有两种,代码重用和结构重用。代码重用的意思是指具体业务代码重用,结构重用是对象关系重用(我得理解)。结构重用实际要重要得多。比如这段代码,通心面似的,从头到脚,都是为了解决一个问题。但是结构重用是解决不同类型间的关系。
我觉得OO就是解决结构的关系问题。如果在学习过程中,反复几次觉得自己懂了OO,随后又否定自己,那么就真的能理解OO了。针对楼主的问题,如果你真的是用OO,你第一次肯定会写更多的代码,但是以后你的代码就少了,两三个软件下来,Struct方式和OO方式开发的效率就会天差地别的。当然,这必须是在你的构架搭建很好的基础上。
还有一点,很多人说,Delphi已经提供了构架,难道抛开它自己写?这两者没有矛盾。Delphi提供的是和计算机打交道的构架,但是我们是和企业逻辑打交道,我们应该以我们的逻辑为主,写代码要清晰得多,而且也不用和这么都的TDataSet的事件搏斗,出BUG的机会少很多。我们需要以我们的企业逻辑为基准,对Delphi提供给我们的工具进行重构,这样才能提高软件的质量。
 
补充几句:我以前甚少进大富翁的,现在多些。我看了楼上提供的一个链接,是左轻侯的,"不过在一个OOP程序员眼里,不妨将整个WINAPI看成一个对象,将一个个的函数看成是它的方法,聊以自慰,呵呵。"呵呵,典型的过程性的思考方式。看了时间,99年的。99年?我对OO还是懵懂的,不太明白。真正懂了OO,还是看的设计模式。不过以前的基础没有白费,我看了两三个模式之后,才顿悟的。说远了。前段时间看到左轻侯对Borland开发工具前景的描述,觉得这几年没有什么进步:一个对语言不了解的人,对建立在这个工具上的技术是没有发言的资格的。对象间的关系,必须是通过语言的特性表现出来的。对比C++来说,大家都说C++灵活得多,但是论坛内多少人能指出这个“灵活”具体是指哪些方面。Delphi,Java肯定比不上C++得灵活,主要是指类别的。C++的编译期类型识别比D,J要强大得太多了,用用模板就知道了。我觉得大家应该多提出自己得意见,不要被名不副实的帖子困住手脚,即使很粗浅的意见,但是也是有价值的,能够让大家多思考,自然就提高了。花了些时间看了看设计模式板块,真的很失望。我下了离线资料,也找很多解决方法,但是全部都是一些查找文档就知道答案的东西,一个人不可能什么都知道。没有提倡使用OO的时候,高手都是知识点很多,知道一些很有用的技巧的人。现在不同了,我们需要的是结构设计高手了。是到了我们真的需要好好的建设我们的园地了。
 
楼主,Delphi的窗体本身就是窗体类,你在窗体上加控件写代码本身就是 利用了面向对象的设计框架,至于接下来的功夫那就要看你的功力了。别急,多看些经典的书,等你经验丰富了,再回来看你这帖子就会有另一番感受的。
 
感谢ww20000309提供的文档,
非常好,
我一口气读完,
让我见识了什么是真正的OO设计。
也让我更加认识到了OO设计的难度。
让我感叹OO之路真的很漫长。
一般人没有10年以上功力是做不出来的。
 
这是一编什么样的文章?!是用翻译软件翻出来的吧,一般人没有10年以上功力是做不出来的。 [:)]
开始的一段:
> 在这篇是异法了很久的常困难中,我读出了一个在面者开拼多又中方面的持久层的,
>我最一些。我好只又不心的语错买现了这个一些的现部成者部分,而而错出,这个一些好
>只只和了买不的自己。
作者在说什么??
 
我觉得,这个题目问得不是很贴切,从而也引来了delphilai那样的回答,谁都知道作为VCL的一部分的窗体类是面向对象的,但我们这里讨论的是对数据的抽象!
而当我们用TDatSet, TDataSource, TField来构造我们的程序的时候, 也是面向对象的,绝对面向对象!只是抽象程度与架构好坏值得探讨。对,这种架构对数据的抽象的程度(注意这里,说的是对数据的抽象!),并没有达到我们需要的是抽象程度。我们需要的是,抽像出来的类尽可能的接近现实中的对象。打个比方,一个订单类(TOrder),它有自己独有的属性和方法,它表示和处理与且只与订单相关的一切。
^ ^(注意!)
然后我们的UI部分的代码访问这个TOrder的实例或集合打交道的时候,就像(起码是尽可能的接近)实现中对订单的操作一样。
要实现这种架构,引发的问题主要是O/R Mapping和对像的保存,现在流行的架构是做一个object persistence layer(对象持久框架)与DB隔开。与在delphi环境下,borland通过delphi 7 architecture版提供了bold,这是一个很优秀的framework,同时提供了类似data aware controls的bold aware controls,也就解决了对象显示的快速解决方案。
ww20000309介绍的pdf文档值得一读,很多object persistence layer都参考这个白皮书。
另外还有一个建议,是论坛上另一位网友提出的(忘记了名字,不好意思)。因为对支持数据库程序的开发,delphi开始主要的目的是RAD,而TDataSet-TField-TdataSource就是实现RAD的主要部件,一直以来,整个delphi community都盛行这种架构,而开发者靠着对OOP/OOD慢慢的觉悟,想跳出这种框架,就自己写框架(也许称不上框架),但要设计出优秀的框架,谈何容易!像本贴这样的问题可能就是在这种觉悟过程中提出的,我想。但如果我们跳出delphi看看,就会发现其实世界上还有J2ee,JDO这样优秀的技术!学习了它们,再回头看看这个问题,你就会再清晰不过了!话说回来,其实delphi的bold也是很优秀的框架,最主要是它用我们同时拥有OO(注意!这里说的是对数据的尽可能接近现实的抽象!)与RAD!但可惜的是它资料不多,所以我才建议大家同时学习java中的思想。
 
上面的有些提法就不对!
这个贴子讨论的不是面向对象和面向过程的对立!
而是TDataset与可持久化业务对象的对立!
 
对!我的意思与shingingplus一样!
 
黑猫白猫,只要能抓到老鼠就是好猫,
至于是面向对象和面向过程,这并不重要,
面向过程未必就不利于维护,
面想对象也未必就利于维护,
从实践中总结的一套项目组织方法和经验,
才是最重要的,
 
DELPHI封装的控件太多了!你用VC试试看!
 
MIS中的用户界面和与业务逻辑的面向对象的典型例子不是没有,不知道楼上的有没有国税的信息中心的人员,现在我们浙江用的国家税务总局下发的由神州数码开发的中国税务征管信息系统CTAIS就很好地做到这一点,我有它的源码(比较早,200208版本,可惜是用PB写的),他的界面设计完全是OOP的。基本上能做到用户界面和数据操作分离(因为对PB不是很熟悉,看起来很累,但是里面的对象确实设计得很好)。有精通PB的高手确实可以研究研究。
 
请问:
面向对象的最强大的功能是什么?……面向对象的设计方案经过一番长期的讨论后
为什么他能确立下来?为什么你在使用Delphi的控件时他总是从其他类中继承来,
为什么你不自己写刚一开始的二进制或汇编代码?
???????????????????????????????
 
OOP是一种信仰,你信则灵,不信不灵
我就不喜欢VB。
 
to dtwind兄:灼见也,PB太强了,在查询分析显示方面的优点是Delphi没法比的。
能否将你的pb CTAIS源码发我一个,想研究一下PB,谢谢了。
cy.chang@163.com
再次感谢,只是想学习下pb(事实上我现在只能用PB做几个toy sample)决不做其它用。
 
这个问题比较普遍的。
其实我想OOP也没有那么夸张啊,如果你要用的话,你肯定可以用得上的。
整个系统做成OOP的形式还是比较难的,但是我们可以从模块做起,一个模块的
OOP化,要是每个模块都OOP了,那么整个系统就OOP了。我写的一个生成ID
类,我想这就是把一个结构化函数getNextKey这个函数OOP化了,还引入了缓存的机制,
用了多例模式。其实如果做了DELPHI之后你学学JAVA,你会有不同的感受的。
 
做mis的时候你觉得那个工具可以帮你很好的OO呢,请你找出来!!?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部