谈论面向对象设计
我看了刘艺的<面向对象思想>这本书.
可是我还是不知道要怎样运用到数据库系统当中去.
一直感觉每个表就是一个类吗?
所以望高手指点.
问题点数:50、回复次数:55Top
1 楼yeeyee(我要换工作!)回复于 2005-05-11 16:48:24 得分 1
1
有空看看他那本设计模式,
你会觉得写几个类,真太爽了。
代码的重用,设计的重用。
RAD 与 OOP 是相对立的Top
2 楼chenminghong(cmh)回复于 2005-05-11 16:59:35 得分 0
<设计模式>我刚买,过几天可能就到货.一定抽空看一下.我也买了李唯的那本新书,不知道怎样.
我现在对面向对象还是很薄弱.
我公司一个人说:窗体继承就是面向对象设计了.可是我认为.窗体继承是面向对象.可是真正面向对象应该没有那么简单吧.应该把每个业务都写成类.这样应该算面向对象吧Top
3 楼phaler(笑传醉梦)回复于 2005-05-11 17:01:03 得分 1
一个表对应一个类.那是OR/Map
面向对象.只是为了解决代码重用.方法维护.具体情况具体分析,不一定全部照搬.
平时尝试着用其中的几种常用的设计模式体验一下.就有感觉了Top
4 楼chijingde(AD)回复于 2005-05-11 17:03:20 得分 1
如果一个表就是一个类的话
那你的表一变
类不就全废了?Top
5 楼phaler(笑传醉梦)回复于 2005-05-11 17:03:48 得分 2
窗体继承,只是用到了面向对象中的一个特性.即子类继承了父类的全部特性.以致于你在更改基类社会窗体时子类窗体都会发生变化.这也是为了好维护.具体的面向对象.因个人理解不同.设计出的结构也很大不同.MIS系统方面.有不少成熟的框架,可以借鉴一下.详细的.要看具体的业务流程了.不能一概而论吧...Top
6 楼chenminghong(cmh)回复于 2005-05-11 17:12:26 得分 0
MIS系统方面.有不少成熟的框架,可以借鉴一下
phaler(笑传醉梦):哪里有,能不能提供一下.谢谢.
只是为了解决代码重用.方法维护.
这样我写个公共模块,写个公共函数.不也可以吗?
Top
7 楼phaler(笑传醉梦)回复于 2005-05-11 17:25:40 得分 2
面向对象的三个特色,封装,继承,多态.
封装是为了把数据和访问方法分离.达到对数据的隔离保护.
继承和多态的运用才能达到代码重用.也是最需要技巧的地方.
面向对象编程和过程编程的优缺点,就不要多讨论了吧...Top
8 楼wuqvei(▇▇▇coder没tear▇▇▇)回复于 2005-05-11 17:35:43 得分 1
很大范围的问题 谈起来有点空Top
9 楼chenminghong(cmh)回复于 2005-05-12 10:38:11 得分 0
这些理论我好象都懂,可是就用不进去.
谁有这种例子,可以借我参考一下吗?Top
10 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2005-05-12 11:08:33 得分 1
买李维那本新书吧,<<面向对象实践>>
虽然没多说数据库的,才也是相关的Top
11 楼chenminghong(cmh)回复于 2005-05-12 14:40:11 得分 0
,<<面向对象实践>>过几天就到货了,正准备看
里面不知有没有实际的例子Top
12 楼yeeyee(我要换工作!)回复于 2005-05-12 14:49:01 得分 1
楼主真款,
一下在买了这么多的书。
羡慕ing。
不过买书,我也用了 1 K 多了。
Delphi 模式编程,里面的例子用得上的。Top
13 楼chenminghong(cmh)回复于 2005-05-12 15:34:47 得分 0
yeeyee(易 一 想找 M*M) ( ) :
你都用了1K了
我才用200多
不过要学知识,这些钱发的值.
我也是挤出来的.没有办法.Top
14 楼onemonth(CSDN真烦)回复于 2005-05-12 16:18:09 得分 1
oo是很简单的东西,一句话就概括了:一个对象表达一个概念。Top
15 楼chenminghong(cmh)回复于 2005-05-12 16:55:56 得分 0
对概念我是知道的,可是对实际应用我还是不太清楚Top
16 楼julong88((无锋之刃))回复于 2005-05-13 08:28:02 得分 1
感觉刘的那本书不是很好
还没有我在c#高级编程的附录里看的过瘾Top
17 楼web700(*FS*的小狗腿子)回复于 2005-05-13 08:42:02 得分 1
书非借不能读,大部分都是. 我也是.Top
18 楼ihihonline(潇潇->戒烟)回复于 2005-05-13 09:01:24 得分 1
严重同意
phaler(笑传醉梦) ( ) 信誉:100 2005-5-11 17:01:04 得分: 0
一个表对应一个类.那是OR/Map
面向对象.只是为了解决代码重用.方法维护.具体情况具体分析,不一定全部照搬.
平时尝试着用其中的几种常用的设计模式体验一下.就有感觉了
都什么时候了,delphi落伍了Top
19 楼chenminghong(cmh)回复于 2005-05-13 09:58:16 得分 0
都什么时候了,delphi落伍了
那现在什么算没有落伍.
语言每个都会落伍的
就是思想不会落伍.面向对象设计方法不会落伍.
所以要加快学.可是还是不明白.
只有等<设计模式>和<对象实践>书到了,再学.
Top
20 楼fj218(双元)回复于 2005-05-13 17:26:11 得分 1
思想不会落伍.面向对象设计方法不会落伍.
Top
21 楼chenminghong(cmh)回复于 2005-05-13 19:10:13 得分 0
大家多进来谈论
分不够在放Top
22 楼liubcb(萧萧)回复于 2005-05-13 19:31:40 得分 1
谁看到一阵黑风过后,
昏黄的北方一声长啸:
“我终于彻底的面向对象了!!”
随后一个类似足球场裸奔的姿势,
树上的乌鸦吓走了一片。
-------题记面向对象之路
他曾在深夜里思索很久,
窗帘上天伦叙乐的字迹已经模糊,
他曾在在篮球场上拼命奔波,
球场留下一串串类的喝声;
他去耕田,田野里片片青绿被他涂上字段;
他去飞行,高空中朵朵白云被他封装成圆;
他去旅游,山川上圈点下接口无数;
他去潜水,海底下描绘了深刻的属性万千;
一天他累了坐在草地上沉睡,
阳光静静的搭在双肩,
梦里禽兽终于从一条狗里脱颖而出,
他沉默的眼睛闪过一丝光线!
谁看到一阵黑风过后,
昏黄的北方一声长啸:
“我终于彻底的面向对象了!!”
随后一个类似足球场裸奔的姿势,
树上的乌鸦吓走了一片。
Top
23 楼g961681(技术庸人(情商太低))回复于 2005-05-13 20:00:44 得分 1
等待<<面向对象实践>>ing....................Top
24 楼delphfan(A_MU)回复于 2005-05-14 02:56:29 得分 1
我看了李维的那本,PFM的实例,感觉还是把握不住设计需要到什么样的深度Top
25 楼DebugXP(NULL)回复于 2005-05-14 04:56:55 得分 1
你说ORM??Top
26 楼DebugXP(NULL)回复于 2005-05-14 04:58:17 得分 1
还是看PEAA好了。Top
27 楼chenminghong(cmh)回复于 2005-05-14 08:20:40 得分 0
PEAA:是什么东西Top
28 楼jasengod2003(孤单的我飞得好累!!!)回复于 2005-05-14 14:49:00 得分 1
向大家推荐一本好書,
<<delphi高手突破>>
感覺還不錯,著重講面向對象這部分.Top
29 楼liangyu8281(丁丁)回复于 2005-05-14 16:27:11 得分 1
关系数据库以二维表来表示数据实体及其相互关系,是现在大多数商用
关系型数据库所采用的。传统的关系数据库缺乏对于多媒体数据的有力支持,但是
可以通过适当的手段进行扩展后用于多媒体数据的建模。
面向对象数据库的基本思想是将代码和数据封装在一个称为“对象”的单元内,
封装在对象内部的代码定义了作用于内部数据之上的操作,对象与系统其他部分之间的
接口以一组消息来定义。Top
30 楼liangyu8281(丁丁)回复于 2005-05-14 16:29:01 得分 8
所谓OOP,指的是一种编程方法,或者说是一种编程思想。OOP有
三大特点,即数据封装、派生和多态。如果某种编程语言符合这
三种特性,就可以说它是支持OOP的。VC是完全支持OOP的。VB只
支持数据封装,不支持派生和继承,因此它不是完全的OOP语言。
虽然它号称通过多重 ActiveX 接口来支持多态,但大家都知道,
连派生都不支持,是不可能真正支持多态的。所以VB被称之为
“伪OOP语言”。很多人以为数据封装就是OOP,这是不对的。数
据封装只是OOP的一个特性,一些非OOP语言也支持数据封装。这一
点非常重要!
而DELPHI也支持上述三个特性,所以它也是完全支持OOP
的。虽然它不支持多重继承,但只能说它对OOP的支持没有C++强
大,不能说它对OOP的支持不完全。多重继承并不是OOP的必要特性。
有很多人把面向控件的编程与面向对象的编程混为一谈。
事实上,控件只是封装好了的数据结构,与OOP在很大程度上是两回
事。如上所述,VB就是面向控件的编程工具,而不是真正面向对象
的编程工具。VB中的类和对象,只是一些数据结构和数据结构的实例
化而已。因此你使用控件编程,并不等于使用OOP。一些DOS下的开发
工具,象BC++,完全支持OOP的三个特性,但不支持控件,你不能说
它不支持OOP。
Delphi对VB最主要的优势,就是它是完全的OOP语言。(这也
是我不喜欢VB而喜欢Delphi的原因之一。)这一点CJ兄说得很对,但
他对VB的评论小弟并不赞同,而创建一个类也并不等于就掌握了OOP。
那么OOP到底有什么好处?同时支持OOP的三个特性,为什么
就比仅仅支持数据封装要强?这话很难一下子讲清楚。事实上,很多
功能不用OOP一样可以完成。这主要在于编程者的思想,其实OOP本身
也只是一种编程思想而已,所以即使编程工具本身支持OOP,使用者
也完全可以编出很不OOP的程序。编程并不仅仅是写出一些代码来实
现某个功能,我倒觉得,很大程度在于写代码前的规划。在一个OOP
程序员眼中,需要处理的问题可以被分解为若干“对象”的互动,只
需实现这些对象的类并将其实例化,编程的任务便完成了最主要的部
分。这些类之间的派生继承关系可以让其实现极其复杂的现实世界的
抽象,再加上多态的特性,使得OOP编程更象是一种哲学思考。诚然,
不使用OOP而只用结构化的编程方法,也能实现之,但二者的水平相去
天渊。
这就是所谓的“不OOP”和“很OOP”之间的区别。打个不适
当的例子,如果要你编程去做一套家具,OOP程序员是这样做的:首先
实现一个“椅子”的类,再从这个“椅子”类中派生出“高背皮椅”
这一子类,然后调用create将其实例化(啊,这个程序员是用Delphi的
;-)),再调用“摆放”方法将其放置于某一位置。以此类推,实现
“桌子”、“床”、“书柜”等等家具,这样就创建了一个家具世界。
而一个结构化程序员,走到房中,觉得需要一只椅子,他不去管“椅
子”或“高背皮椅”这些概念,而是立刻找来锤子、凿子等“全局函数”
工具,建造他心目中的某一只具体的椅子。走得两步,他觉得需要另一
只椅子,于是又如泡制,做成另一个椅子,既无图纸,也不知道与前一
只椅子有何相同及不同之处。这样下去,固然同样能做出一套家具。但
当家具需要加以改进,或是有某种特殊要求,又或是需要更换位置,OOP
程序员只需对类进行修改,或是派生一个,重载若干函数,或是重新调
用一次“摆放”方法即可。非OOP的程序员却只有将所有的家具都拆了,
重新做上一遍。
这样说不知说清楚了没有。其实,并非故弄玄虚,其中真意,
难以尽用语言表述,只有自己去亲身体会。
小弟对OOP的爱好,倒并非由于它在代码维护等方面的优势。我
是学文科出身,现在的工作与计算机也全无关系,之所以对编程痴迷,
完全是因为编程语言本身。在刚从C转向C++时,我被它精妙无比的结构
所深深震撼,不能自己。我写的东西都是凭兴趣,因此常常不惜把已经
实现的代码重写多遍,为的是更加“OOP”。痛快淋漓使用OOP时,已经
不是在编程,而是在运用自己的思想。
我坚持认为,OOP是划时代的伟大变革,在这个时代编程,离开
OOP是不可想象的。
最后还要补充一点,就是“支持面向对象编程”和“纯面向对
象编程”的区别。象C++、Delphi都是支持面向对象编程的语言,而Java、
SmallTalk等是纯面向对象编程的语言。纯面向对象编程语言的一个重要
特点就是,不支持全局函数,因为OOP中是没有全局函数的。对于习惯于
结构化编程的程序员来说,这似乎不可思议,其实很容易理解,因为在
现实中,你只见过“椅子”、“桌子”这一个个的“对象”以及依附于对
象的“方法”,从没有见过游离于对象之外的“函数”!在需要使用全局
函数时,应该使用类方法来代替。也就是说,在纯面向对象编程语言中,
是没有函数的,有的只是方法。CAkk老兄的反问:“写什么程序不需要函
数?”这话似乎还停留在结构化编程阶段。
诚然,在Windows编程中,常常需要使用WINAPI函数,而直接使
用这些函数是不OOP的。但按照OOP的规范,的确如此,Delphi应该直接将
所有的API都封装在VCL中,作为对象方法或类方法提供。当然,这不太现
实,也没有必要。不过在一个OOP程序员眼里,不妨将整个WINAPI看成一
个对象,将一个个的函数看成是它的方法,聊以自慰,呵呵。
Top
31 楼chenminghong(cmh)回复于 2005-05-16 11:54:19 得分 0
这些都是理论的,
谁能提供一下实例Top
32 楼xiaoyaozgc()回复于 2005-05-16 12:35:45 得分 1
有刘艺的<面向对象思想>这本书的电子版吗,发给我吧。很早以前就想看,可总是找不到电子版的
zgczgc2008@126.com
谢谢Top
33 楼Mrkang(谁比我菜我不愿意)回复于 2005-05-16 13:09:27 得分 1
up
Top
34 楼linzhengqun(风。我回来了)回复于 2005-05-16 13:48:28 得分 1
《设计模式》 《OOD启思录》《敏捷软件开发》《重构》
经典Top
35 楼chenminghong(cmh)回复于 2005-05-16 14:28:15 得分 0
有刘艺的<面向对象思想>这本书的电子版吗
这个好象没有Top
36 楼yeeyee(我要换工作!)回复于 2005-05-16 14:53:08 得分 2
www.2ccc.com 有框架下载。
搜索 【框架】 或 【Frame】
但是没有文档,看不懂。可以稍微研究下,理会里面的设计思想。
http://www.2ccc.com/search.asp?keyword=框架&keyrange=0&catalog=0&subcatalog=&pageid=1
http://www.2ccc.com/article.asp?articleid=2144
Simple Application Framework for VCL
SmallStruct V2.2 (C/S应用框架)
Top
37 楼zhujainf(Z.J.F)回复于 2005-05-16 15:03:26 得分 2
面向对象的设计实用的话就写写uml吧,装个together就行了,面向对象本来就只是一种思想,解决实际问题的时候,也会遇到不如其他想法或不必面向对象的情况,所以不必强求面向对象的Top
38 楼baseyueliang(baseyueliang)回复于 2005-05-16 16:30:27 得分 2
面向对象一种是建立在公共函数上的更能实现减少重复Coding的细想,而Delphi是一直能很好体现这种思想的好工具。Top
39 楼chenminghong(cmh)回复于 2005-05-16 16:56:54 得分 0
UP一下Top
40 楼chenminghong(cmh)回复于 2005-05-17 11:02:20 得分 0
在UP一下Top
41 楼LouisCool(迷惘)回复于 2005-05-17 11:41:12 得分 1
对,《DELPHI高手突破》是本不错的书。里面的理论性很强。也有例子。不过,看了之后得好好想想。
我现在也是在学习面向对象的编程思想。
你最开始说的,每一个表是一个类,我不知道为什么?就我的理解,一个表应该是一个对象。如果要写类的话,应该是为所有的表写一个类。你用这个类创建一个对象,就是创建了一个表。
我也是糊里糊涂的,不是很清醒。欢迎+我QQ讨论7473174Top
42 楼baseyueliang(baseyueliang)回复于 2005-05-17 12:19:03 得分 1
当然可以为所有的表写一个类,因为所有的表都有字段列表属性,插入、更新、查询等方法。但是这只是跟业务无关的基础操作,就如同VCL的TObject,我们同样可以象TObject一样在所有表的基础类上进行继承拓展业务功能,而怎样找到继承的主线是让人头痛的一件事,业务的多样性、操作的不可预见性、流程的易改变性,都是将来导致已经设计好的继承体系的彻底崩溃的潜在可能。Top
43 楼truexf(fey)回复于 2005-05-17 16:02:46 得分 1
“而怎样找到继承的主线是让人头痛的一件事”
---------------------------------------
顶Top
44 楼chenminghong(cmh)回复于 2005-05-19 11:14:09 得分 0
upTop
45 楼wlbfeihu(下辈子不写程序)回复于 2005-05-19 11:51:47 得分 1
《Delphi高手突破》很好
理论比较丰富很值一看
Top
46 楼sxqwhxq(步青云)回复于 2005-05-19 17:04:28 得分 1
把表当成类纯粹是为OOP而OOP,在维护和设计上根本没有简化利何工作。
Top
47 楼yuwenge(活得痛快)回复于 2005-05-19 17:11:32 得分 1
书我都看了,思想也理解了,但是苦于没有实践。自己写的东西还是那么垃圾。瓶井中Top
48 楼chenminghong(cmh)回复于 2005-05-19 17:38:03 得分 0
yuwenge(问个问题) 我就是跟你差不多的问题
就是不是要怎样实践Top
49 楼chenminghong(cmh)回复于 2005-05-21 15:08:04 得分 0
UPTop
50 楼baseyueliang(baseyueliang)回复于 2005-05-22 09:03:29 得分 2
要面向对象,并不是非要通过看书从别人那里学来。只要在平常的实践中牢记:不要ctrl c/v,千万不要ctrl c/v,自然而然,逐渐就会走向把代码变成自己的(写自己的函数(面向过程)--》写自己的对象模板/类(面向对象)。看了无数的书,不管是烂书,还是某某著名书,还不如自己写一句Hello World,而不是从他光盘例子中ctrl c/v过来运行。Top
51 楼xx_adam(一无所有)回复于 2005-05-22 11:12:53 得分 1
有些哥们对OOP理解的比较深,向你们学习。。。Top
52 楼chenminghong(cmh)回复于 2005-05-25 21:05:08 得分 0
很多地方调用应该用ctrl c/v吧
最近在看李维的<面向对象实践>和刘艺的<模式>
但是里面都没有比较实用的例子
很难搞懂Top
53 楼yeeyee(我要换工作!)回复于 2005-05-26 15:18:18 得分 2
看了 Inside VCL 吗?
结合一起看,你就会发现,
单例称模式,观查着模式,
工厂模式,门面模式。
都在 VCL 中用到了。
我还打算买到这本书
<面向对象实践>
回学校看看,看完学生生活就永远 886 。
模式也是人们实践出来的,不要刻意用。
怎样做简单,可维护性好,就怎样做。Top
54 楼chenminghong(cmh)回复于 2005-05-28 16:00:41 得分 0
upTop
55 楼chenminghong(cmh)回复于 2005-05-29 19:11:31 得分 0
upTop




