精华区 [关闭][返回]

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

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

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


★ 所有要修改永久属性的服务均应是多态的。

    这个问题可能已经不是系统分析中的问题,可能已经涉及到设计甚至到
编码阶段的问题。但是,借用设计阶段或编码阶段的概念,可以解决分析中
出现的一些实际问题。分析时只是借用,并不是完全套用。

    所谓"多态",是指一个服务有多种算法或实现。就是说,一个相同的服
务名,可以具有不同的实际实现。

    在C++中,可以用静态编联的"重载",也可以用动态编联的"虚拟函
数",在PASCAL中,可以用"Override"。

    对于永久对象属性的录入性修改,重新设计录入画面,将属性录入并存
盘即可。比如上面所提到的"联系人"的"增加"服务和"区域联系人"的"增加"
服务,"联系人"的"增加"服务是针对联系人对象数据库的,而"区域联系人"
的"增加"服务是针对区域联系人对象数据库的,两者的录入画面不同,且区
域联系人的录入画面已经包括了联系人的资料录入。

    对于永久对象属性的程序触发性修改,如前面所提到的"开关"类的
ChangeState 服务,修改的服务必须是虚拟的,如果属性所在的实际数据库
与原服务所处理的数据库不同,必须针对这个实际的数据库另行设计算法,
即是实现虚拟。举例如:假定有一个"电流开关",其与"开关"是继承关系,
系统存在2个数据库,一个是一般类开关数据库,记录的"开关"对象的已有
实体,另一个是"电流开关"数据库,记录的是"电流开关"对象的已有实体,
电流开关数据库对父类的"开关状态"属性采用紧密组装,系统要求对所有的
开关初始化置"关"状态。在OO语言实现时,只需用一般开关(最层父类)
的ChangeState服务遍历所有开关(包括一般开关与电流开关)即可。这
样,就必须分别为一般开关设计一个ChangeState服务,这个服务是虚拟
的,修改是一般类开关的数据库,子类"电流开关"必须针对"电流开关"的
数据库结构重新编写ChangeState服务,当系统通过父类的ChangeState
遍历到电流开关(子类)的实体时,OO语言的编译系统将根据多态的原
则,认为子类(电流开关)的ChangeState是真正要调用的服务。


3、 实例连接

    实例连接的实现用数据库实现非常容易,实现的方法是将实例连接类
建库,将实例连接的属性组成数据库结构,同时将实例连接的连接两端也
加入到数据库结构中,使两个数据库通过实例连接数据库连接起来。

    如上面所说的操作员与工作站之间的"使用权"实例连接,使用权数据
库除了要有"使用权限"等属性外,还应加上:"操作员编号"及"工作站编号
"两个属性。

    值得注意的是,操作员编号及工作站编号并不是"使用权"类的属性,
就是说,在分析建模时,这些属性并不是"使用权"的类属性,但在"使用
权"的已实例化对象实体中,必须表明"谁用什么使用权使用哪台工作站的
关系,因此记录已实例化对象实体的数据库必须有"操作员编号"及"工作
站编号"两个属性。

至此,  数据库在面向对象数据库中的应用已经论述完毕,下面再将本文
的要点简述如下:

★ 正确认识类、对象、对象实体、已实例化对象实例的概念;
★ 必须为管理系统已实例化的对象实体建模
★ 管理已实例化的对象实例可用数据库手段;
★ 数据库仅保留已实例化对象实体之属性;
★ 数据库在面向对象的分析设计以至实现中都仅是一种辅助;
★ 永久对象属性的任何变化必须保留到数据库中;
★ 必须设计"取出"函数从数据库中恢复对象;
★ 整体-部分结构的已实例化对象实体可在整体对象模型中建立包容部分
   对象的属性,这个属性可以是部分对象的已实例化对象集合。
★ 一般-特殊结构可用组装代替继承,组装分为紧密组装与连接组装,要
   修改永久属性的服务均应是多态的。
★ 实例连接的已实例化对象实例必须要有被连接的两个对象。



    利用本文提出的方法,已经成功地实现了一个系统。这个方法成功地解
决了数据库在类的整体-部分关系、一般-特殊关系、实例连接中的应用。
数据库在面向对象的分析、设计中,定位清晰,结合紧密,可操作性强,且
容易实现。实现了数据库、面向对象中的相关概念的统一。同时,由于此方
法仅利用了数据库最基本、最简单的功能,因而适应性强,且可靠性很高。

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

[关闭][返回]