自认在OOP方面有造诣的请进,回答得了再给100分 ( 积分: 10 )

  • 主题发起人 主题发起人 publicnews
  • 开始时间 开始时间
呵呵,图书馆项目是搁置了,主要是自己太忙了,正经的工作都忙不过来,很难抽时间去搞开源的东西。算是欠了笔债吧。
 
to 沙隆巴斯的主人:

很感谢你的意见,不过你所说的我感觉更多是倾向于理论的抽象的理想化的东西,你所说所的其实顺便拿一本面向对象的书都有说的。正如你所说的使用了继承特性,并不代表程序的OO特性。事实上我认为是为了实现程序的OO特性而采用继承特性。

采用继承特性实现OO特性是为了什么?我觉得是为了提高效率,保证质量,再用商业一点的话来说还是为了降低成本。
当然,我说针对的是管理软件的开发。很久之前,我就曾经考虑过类似你所说的方式,把各种逻辑对象抽象成对象在程序中实现,但是我发现很难很辛苦。首先对底层架构的设计太高了,这也许是因为我所针对的管理软件涉及领域太多的缘故;其次是对开发人员的要求也太高了,管理软件的功能太多太复杂,一个系统往往需要很多的开发人员和经过很长的时间,想要找很多能力高的程序员势必会增加开发成本。而且事实上也很难找这样的人,而且程序员流动性也很大,如果自己培养,往往等他能力差不多的时候又跑了(哎,管理软件的开发是很枯燥的)。所以,既要提高效率,保证质量,又要降低开发难度是比较现实的。

我们Delphi的开发架构其实是比较大的东西,除了前面提到的一些全局功能类之外,还有一大堆自己定义开发的控件和对象。总体就是充分利用继承特性,提高开发效率和降低开发难度。底层的架构由高程负责,一般一个项目除了设计之外,具体的编码由一般开发人员严格按照我们的规则进行开发。除了保证程序的开发效率和质量之外,最重要的是降低开发难度。
说实话,我很向往工厂流水线那样的生产,对工人的要求很低,也许能力不怎么,只要能够熟悉操作机器就行。而事实上,可以说在某种程度上我们已经达到这样的效果,刚来的程序员可能连Delphi都不会,但是我们只要求他们熟悉我们那一套东西就可以了,以至于最后当他们已经可以很熟练的进行开发,但是对于Delphi的很多东西都还不会,基本的原理还不懂。但这样就不是我们关心的了,其实Delphi做到现在这样的程度,又何尝不是这样。
Delphi的整个对象架构是基于OOP的,开发的程序自动生成的编码也是基于OOP的,但是平常很多的开发根本就不需要了解它这些东西,使用Delphi的IDE环境拖东鼠标在写一些简单的代码,完全能够实现很强大的软件。像现在大多数Delphi的书籍,都是介绍怎么操作,而很少有系统介绍基础框架的。
Delphi这样做的目的也就是为了提高效率,也就是为什么Delphi那么受欢迎,被称为最快的开发工具的原因。继承特性不过是他达到目的的一个手段而已。
我们的架构也是基于这样一个理念,只不过更适合我们所针对的领域而已。或者说限制于我们的风格而已。

正如你所说的我做的不过是全局方法库而已(事实上这只是一个方面),但是本身我这个库的确是采用了继承特性,也是OO的,因为不能说面向具体逻辑对象的OO才是OO,不说别的,就这个全局方法库,所面对的是不同架构下(ADO C/S、BDE C/S、Midas等)作为系统整个底层架构这个对象,是就工程而言的。因为我之前也提过,限于我的能力和所涉及的领域,我做不到逻辑对象的OO,确切的说是一个比较通用的底层对象(因为涉及很多领域),只能从功能开发OO做起。达到我们的目的就行了。

至于楼主所提的东西,也的确和我说的又不同,那也是我很向往的一个东西,也许有一天我也可以达到那样的程度,但是现在我只能很现实的这样做。而我现在所说的也仅是一个参考。
 
沙隆巴斯的主人 讲得好,我也来听课
 
从程序来看,读数据时: DataModule -> Control -> Form 写数据则: Form -> Control -> DataModule

FControl1 := TDFControl.Create(Form1, DataModule1)中的DataModule部分是指 数据部分,也相当于所使用的数据库的问题,不过通常只使用一个的话,可以定义为全局变量。
使用Control类的话,DataModule 即使换了数据库类型,Form换控件类型也不影响太大,Control类甚至不用重写,我的方法是在 Control建立 数据类型 <-> 控件 的配对链接。算不算 OO 我就不知道了。
constructor TBaseControl.Create(AForm: TForm);
begin
FForm := AForm;
AddDataLink
//virtual
Base Empty
在这里配对
ConvertToPorperty

end;

FDataLink 是一个自定义容器类。例如在雇员控制类,可以这样写:
TCtrlEmploye = class(TBaseControl) ...
procedure TCtrlEmploy.AddDataLink
//override;
begin
FDataLink.Add('ID','EditID',True,False);
// 对应数据库内字段、Form里的名称、是否读、是否写;自己可根据情况定义,如权限,控件是否显示等
FDataLink.Add('Name','EditName',True,False);
...
end;

而procedure ConvertToPorperty 则是将 名称String 改为 字段Field,控件Component,可以起到检查数据和提高运行效率。

TCtrlEmploy类可以定义 LoadData(FCondition: String)
SaveData(FCondition: String)等操作,通过 自己的判定 和 FDataLink的数据 和 DataModule 的数据生成 SQL 并操作。

这样,可以简单的使用 TCtrlEmploye 类就可以进行数据库操作,不需要复杂的交互工作。即使日后修改界面、添加数据字段等,也可以通过配置 或 继承类等的方法进行小修改即可。

说得比较模糊,不过思想还是比较容易明白的吧。希望能看懂。
 
plenilune168的方法更趋于实用开发多一些
jeffrey_s,沙隆巴斯的主人更符合于真正意义上的OO,但个人感觉实际应用的时候会花费更多的成本,就像jeffrey_s的那段代码,开发起来好像有些繁锁,(可能我还没完全体会到jeffrey_s的代码妙用,不知jeffrey_s能不能发给我发点你应用的实例代码)
 
看来楼主对别人所谓的那些OOP方法,只是看到了表面。对于界面与业务分离的最优秀模式非MVC莫属了。其中对于数据一层,不是你想的简单的把业务操作放到数据窗体中就OK了,那只是做了一个比较简单的分离,还是会有比较紧的藕合。
像现在的数据一层,一般是通过一个叫做数据持久层的中间层来实现的,把业务层与数据的提取完全隔离了,你甚至可以不用理它是用ORACEL或MS SQL或者DB2数据库等,你可以彻底的从在程序中编写SQL的恶梦中摆脱出来,所有的关于业务的调用,都可以通过一个XML
类似的配置文件来改变,不需要因数据库结构变化而导致程序的重写
 
如果把OO思想一步步的深化下去,最后就走到了J2EE的EJB去了,而EJB又太庞大、复杂了、门槛太高了,这是个矛盾。
 
OO 的核心是封装和多态

当然,设计的目标按照软件工程学,是高内具,低耦合,易扩展,可重用
 
不了解MVC,各位请评价一下MVC具体的作用及使用价值
如何去学习MVC,谢了
 
没人回答就请各位到以下地址领分吧,没有去的只有平分这里的10分了:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3281488
 
建议不要早结贴,还可以再讨论、讨论!
 
赞成 plenilune168 提高效率快速开发,简单明了
 
MVC是模型-视图-控制器模式的简写,其中模型指的是我们所关心的核心数据,视图就是展现这些数据的方式,可以是表格或者图表或者其他任何形式,你甚至能对先对核心数据进行过转换(通过调用模型的方法)后再以某种形式展现出来,而控制器就是处理在视图上的键盘或鼠标的一些动作实现与核心数据的交互。通过这样一种方式,把业务与界面完全隔离开来,做到低耦合,使程序的维护与扩展做到尽可能的小。
另外,对于上面各位所说的使用继承方式进行开法是否属于OO,这个没有个具体答案,但是在面象对象开发方法标准里面有一条是:组合优先于继承,由继承引起的开发及维护开销远大于组合方式,要合理的使用继承。
 
再顶最后一次,快去领分了,本星期结贴
 
帮顶

--------签名档---------------------------

惊爆开源站

http://www.source520.com

80G源码电子书免费免注册下载,大量精辟技术文档库随时更新
 
oop的好处?你用的每一个delphi控件不是继承下来的?
你现在自制一个控件难道从tobject写起吗?呵呵
《delphi 面向对象编程思想》刘艺 机械工业出版社
里面有一个业务与界面分离的例子,或许能解答你的困惑。
 
好,帮顶



--------签名档---------------------------

比肩国内顶尖源码下载站点 -> 源码我爱你

http://www.source520.com
http://www.source520.net

80G源码电子书免费免注册下载,大量精辟技术文档库随时更新
******************************************************************
附:为了站点持续发展,现有本站近年来收藏的大量大型商业源码低价出售,
详情请进入以下链接查看:
http://www.source520.com/building_delphi.htm

浏览商业代码请从如下URL进入查看实物:
1.商业源码库1: ftp://source520see3:browse@61.152.199.245/
2.商业源码库2: ftp://source520see2:browse@61.152.199.245/
 
有一些朋友没去领分,如果还想要的话就联系我吧
publicnews@163.com
 
多人接受答案了。
 
后退
顶部