精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 系统分析>>面向对象专题>>数据库系统在面向对象的分析设计中的

主题:数据库系统在面向对象的分析设计中的
发信人: 3871()
整理人: leeyg(2001-06-05 22:50:06), 站内信件

    你可以引用本文,但请注明作者,并请注明出自本论坛。 
                      请大家指正。 


三、 在数据库中体现类属性的相互关系

    如前所述,数据库中应该只记录对象的属性值,数据库不处理对象的服务,

对象的服务是交给面向对象的分析、设计以至最终实现中解决的问题。因此类
的关系中,数据库只需解决它们之间属性的关系。

    数据库是对象属性的永久保留,而对象所在的类可能存在继承关系,属性
可能是从其它类继承而来的,因此,类的继承关系必须在数据库中得到体现。
(根据本文的方法,类的继承关系的体现是必须解决的。一些面向对象的数据
库理论,从各自的理论出发,有的避开了这个问题;有的纯从数据库的概念出
发,另类解释继承的概念;有的只是其中的字段可以面向不同的对象而已)

    类之间不仅仅存在继承关系,还有其它的关系。同样,所有的这些关系,
在数据库设计中都是必须得到体现的。避开这些关系、另类解释这些关系的概
念,都将破坏面向对象分析设计或数据库理论的完整性、统一性,都不能正确
将面向对象的分析设计与数据库理论真正地结合起来。

    所以,在讨论解决数据库体现类属性的相互关系前,我们必须先讨论一下
类与类之间的关系。

    按邵维忠教授的理论:类与类之间的关系,可以分为四种:整体-部分结
构、一般-特殊结构、实例连接关系、消息连接关系。其中消息连接关系与属
性的关系不大,在此不予讨论。

    1、 整体-部分结构
            整体-部分结构的定义如下:如果对象A是对象B的一个组成部分,

        则称B为A的整体对象,A为B的部分对象,并把B和A之间的关系称作整
        体-部分关系。
            整体-部分结构表现的是"has a "的关系,如:客户与联系人、
        电脑与CPU、电话与按键等。

    2、 一般-特殊结构
            一般-特殊结构的定义如下:如果类A具有类B的全部属性和全部
        服务,而且具有自己特有的某些属性或服务,则A中心任务B的特殊类,

        B 叫A的一般类。
            一般-特殊结构表现的是"is a kind of "的关系,也就是我们
        所说的继承关系。如:MODEM与56KMODEM、窗户与铝合金窗、广场与
        天安门广场等。

    3、 实例连接
            实例连接用于表达对象之间的静态联系。所谓静态联系是指最终
        可通过对象属性来表示的一个对象对另一个对象的依赖关系。
            实例连接表达的两个对象之间依赖关系,如上级与下级间的领导
        关系,教师与学生的授课关系,显示卡与显示器的显示关系等等。

    值得指出的是,邵教授在整体-部分结构与一般-特殊结构的关系中,有
这么一段描述:"一般-特殊结构是使特殊类通过继承而拥有一般类的特征,
整体-部分结构是使整体对象通过组装而拥有部分对象的特征。尽管途径不同,

着眼点不同,结果却是一样的:一些对象拥有另一些对象的特征。正像我们所
说:'子女通过遗传(继承)而拥有父亲和母亲的血统',也可以说:'子女的血

统,是由父亲和母亲两种血统构成的'。说法不同,实质内容是一样的"。这就
是为什么"冷藏车"既可以是通过继承"汽车"与"制冷设备"中的属性与服务而形
成的新类,也可以是具有"制冷设备"的一种特殊的"汽车",是组装了"汽车"与
"制冷设备"中属性与服务而成的新类。

    为了更好地讲述数据库对类的关系的实现,先把在没有数据库的情况下,
邵教授介绍的实现以上的三种关系的方法介绍一下:

   1、 整体-部分结构
           有两种实现方式:一种方式是用部分对象的类作为数据类型,静
       态地声明整体对象中这个代表部分对象的属性变量,这样部分对象就
       被嵌入到整体对象的属性空间中,形成嵌套对象。另一种方式是把整
       体对象中的这个属性变量定义成指向部分对象的指针,或定义成部分
       对象的对象标识,运行时动态创建部分对象,并使整体对象中的指针
       或对象标识指向它。

    2、 一般-特殊结构
            利用OO语言的继承实现。
            或者将一般-特殊结构在建模时转化为整体-部分结构,用整体
        -部分结构的方法实现。

    3、 实例连接
            实例连接的概念相比之下比较难以理解。尤其是复杂的实例连接。

        比如:用户使用某台工作站的关系,可能要求附加表明"优先级","使

        用权限"等与这个关系密切相关的其它信息。
            OMT方法学引进一种新的概念来解决这个问题(又多了一把刀),

        叫"作为类的关联",认为关联是一种类,既有属性,又有操作。链(即

        实例连接)是关联的对象实体。
            邵教授认为:对象不仅可以用于表示有形的事物(如用户、工作
        站),也可以用于表示无形的事物(如使用权)。当两类对象之间的
        实例连接比较复杂时(带有一些属性或操作),说明在它们之间存在
        某种尚未用对象加以描述的事物。在上面的例子中,用户与工作站之
        间在建模时应建立一个"使用权"类,该类的属性有"优先级"等,每种
        使用权可以给多个用户,也可以给多个工作站。

    有了以上的基础,只要解决了上面上面的三种关系,将数据库理论应用于
面向对象的分析、设计与实现是完全可能的。下面,我将我的实现方法提出如
下:


待续....


--
※ 修改:.3871 于 Sep 26 14:14:58 修改本文.[FROM: 202.104.35.86]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.35.86]
发信人: boeny (boen), 信区: SystemAnalysis
标  题: Re: 数据库系统在面向对象的分析设计中的应用(三)
发信站: 网易虚拟社区 (Mon Sep 27 09:38:59 1999), 站内信件

【 在 3871 (3871) 的大作中提到: 】

:     你可以引用本文,但请注明作者,并请注明出自本论坛。 
:                       请大家指正。 

:    .......

数据库系统的关键还是在于如何处理数据和加强对数据的管理吧,
反映数据已经是很有发挥的了,当然,引进其他方法可能会有突破的,
期待着您的大作 ;-)

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.183.41]
发信人: johnnyxu (johnny), 信区: SystemAnalysis
标  题: Re: 数据库系统在面向对象的分析设计中的应用(三)
发信站: 网易虚拟社区 (Mon Sep 27 17:22:58 1999), 站内信件

【 在 3871 (3871) 的大作中提到: 】

:     你可以引用本文,但请注明作者,并请注明出自本论坛。 
:                       请大家指正。 

:    .......

严格说,数据库不能“直接"保存“用户定义的对象”,但可以保存系统对象,

保存了系统对象的整体(属性和服务)。如数据库、表、字段、存储过程、规则、

权限、任务等等非常多的对象。
从编程语言的角度看,对象是可以"持久”的,即当应用程序结束运行后,对象

的属性和服务依然存在,如VB中的PropertyBag方法将属性和服务保存到文件,

这种保存对象的整体的方法,从本质上看,这数据库保存系统对象没有区别,
都是保存到磁盘文件。

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.109.23.81]
发信人: 3871 (3871), 信区: SystemAnalysis
标  题: Re: 数据库系统在面向对象的分析设计中的应用(三)
发信站: 网易虚拟社区 (Tue Sep 28 08:50:20 1999), 站内信件

【 在 johnnyxu (johnny) 的大作中提到: 】
: 【 在 3871 (3871) 的大作中提到: 】
: : 
: :     你可以引用本文,但请注明作者,并请注明出自本论坛。 
: :                       请大家指正。 
:    .......

有人讨论太好了。

    我用的是DELPHI,在DELPHI的Design阶段,可以设计各种Form,
设定Form的各种属性,以及该Form的方法,这个Form显然是一个
TForm类的对象,当设计时存盘后,该对象永久地保留在.frm文件中。

    但是保留在.frm 中的资料主要的是属性。两个Form的方法的数
量及方法名是固定的,不同之处只是在于方法的实现。

    所以我觉得.frm中只需保留属性值,编译系统从.frm后缀知道这
是一个TForm类,于是套用TForm类的固定的方法(服务),再从.pas
中找出该方法的具体实现。

    从文件可以保留对象属性来看,数据库的确只应作为另一种辅助,
而不应本未倒置,只不过有了数据库,对对象的管理更方便而已。

    我的下一篇文章将讲到这个问题。请指正。

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.35.86]
发信人: haotongzhi (Haotongzhi), 信区: SystemAnalysis
标  题: Re: 数据库系统在面向对象的分析设计中的应用(三)
发信站: 网易虚拟社区 (Tue Sep 28 13:21:23 1999), 站内信件

【 在 3871 (3871) 的大作中提到: 】

我一直在注视你的文章,用数据库的一条记录,冻结一个对象的实例,
延伸到真正的数据库应用(而不仅是利用数据库作为象INI, FRM文件那
样程序的附属品,或开发阶段的辅助手段),这是我一直“珍藏”的一
些想法,也曾试图尝试。而且这个思路对于系统规划、架构,是非常实
用的,我一直在基于它们构思快速开发应用体系。希望早日读完你的大
作,与你交流。



--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.160.171]
发信人: johnnyxu (johnny), 信区: SystemAnalysis
标  题: Re: 数据库系统在面向对象的分析设计中的应用(三)
发信站: 网易虚拟社区 (Tue Sep 28 15:22:57 1999), 站内信件

【 在 3871 (3871) 的大作中提到: 】
: 【 在 johnnyxu (johnny) 的大作中提到: 】
: : 【 在 3871 (3871) 的大作中提到: 】
: :    .......

:    .......

我觉得VB中的PropertyBag和您所提到的Dephi保存Form好象还是有区别。
Form是可视元素,可以在设计时编辑;PropertyBag可以保存运行时的非
可视对象,如一个类的实例,虽然VB在设计时把Form保存为.frm文件,
把Class Module保存为.cls文件,但PropertyBag是另一回事,它在运行
时把对象(类的实例)的属性方法事件保存到文件。

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.109.23.81]

[关闭][返回]