原文(adiag于2001/04/01 10:08粘贴)
关于用ROSE设计数据库软件的问题
--------------------------------------------------------------------------------
1,在画顺序图的时候,是否把窗口做为一个类?
2,那“实体类”的消息呢?例如某个窗口向某个“实体类”发消息,那这个实体类是否要有这个消息的“方法”来跟消息对应?
3,如果实体类有方法,那以后映射成关系数据库后,方法放在那里?在窗口?
4,窗口类是“接口类”吗?
===
原文(Ms.OO于2001/04/01 12:17粘贴)
我的理解
--------------------------------------------------------------------------------
1,在画顺序图的时候,是否把窗口做为一个类?
窗口是界面类
2,那“实体类”的消息呢?例如某个窗口向某个“实体类”发消息,那这个实体类是否要有这个消息的“方法”来跟消息对应?
那当然得有了,否则发消息干吗?
3,如果实体类有方法,那以后映射成关系数据库后,方法放在那里?在窗口?
方法当然在类里呀,数据库是存储手段
4,窗口类是“接口类”吗?
窗口是Boundary,接口是Interface
===
原文(adiag于2001/04/01 16:51粘贴)
回复: 我的理解
--------------------------------------------------------------------------------
我还是有疑问:“方法当然在类里呀,数据库是存储手段 ”
现在我把ENTITY CLASS都变成了关系数据库的二维表格,那这些实体类的方法怎么放啊?是做为数据库的“存储过程”吗?但很多都没有必要的,因为都很简单。例如:在某窗口类向某个实体类发消息“读取”,那对应的工作很简单,如果用SQL语句,就是SELECT了,没必要写成“存储过程”,那究竟该怎么写呢?
====
原文(liuzhiming于2001/04/01 20:30粘贴)
我的理解
--------------------------------------------------------------------------------
数据库里的表纪录应该理解为某个类的实例(instance)的属性数据,数据库只是永久存储类实例的属性的地方,从数据库读取数据的过程应该理解为恢复类实例的属性的过程,对应于每个表在程序中应该创建相应类(定义类方法及属性),并用数据库里的表纪录恢复实例属性,RUP也提到了数据库表同类的映射关系(Guidelines: Reverse-engineering Relational Databases),但这里也有问题因为许多数据引擎实现了表到类的转换工作,但他们并不知道你需要的类有哪些具体方法,因此他们提供给你的类只是数据类,比如ado的recordset类,BDE的ttable类,所以要实现你的具体应用,一般都是自己再定义一些类同数据库引擎提供的类协作完成工作(使用聚合关系等)
====
原文(adiag于2001/04/01 22:34粘贴)
感谢liuzhiming的回答
--------------------------------------------------------------------------------
经过你的解析,我也有点眉目了。
照你这么说,那就是实体类也应该是个类,而且也有方法的。对吗?
那就是说:我们在数据库内的“二维表格”都不是属于类来的,而他们的子模式才是类,我们在实际中,是先设计出他们的子模式,然后用传统的方法(规范化),设计成数据库表,所以由模型内得到的实体类都是有方法的。对吗?
====
原文(adiag于2001/04/02 20:47粘贴)
回复: 感谢liuzhiming的回答
--------------------------------------------------------------------------------
我的疑问还是那样,究竟数据库表是“类”吗
1:把数据库表当做类,而且用存储过程做方法
2:把数据库表的子模式做类,而数据库表只是子模式的综合(规范化),不做为类,
2种说法那个正确?
如果2种都不矛盾,那是为什么?
======
原文(liaofan于2001/04/02 21:45粘贴)
关系数据库与面向对象
--------------------------------------------------------------------------------
我们现在用的数据库是关系数据库,非面向对象的数据库。类的方法要在程序代码中实现,数据库表也不是类。只是类的存储采用关系数据库,表现为类定义转变为表定义,类属性转变为表字段,但两者的映射也可以有一些其他方式,存储过程与类方法没有必然联系。
等面向对象的数据库实现后,才能把类的属性和方法同时存储到数据库中。
===
原文(mrshiwei于2001/04/03 14:05粘贴)
回复: 关系数据库与面向对象
--------------------------------------------------------------------------------
关系数据库的存在,本质上说为了解决持久数据的存贮。而持久数据的存储访问的方法很多,基于关系型理论的方式,也就是关系型数据库,是其中解决的比较好的。其实我们不必坐等真正的面向对象的数据库的出现和广泛应用,EJB中的持久性对象模型EntityBean给我们提供了关系世界和面向对象的桥梁。Rose2001中可以很方便地将一个类转换成持久性类--EntityBean。只可惜EJB的支撑环境比较昂贵,限制了它的广泛使用。
=====
原文(lgjut于2001/04/02 22:06粘贴)
回复: 感谢liuzhiming的回答
--------------------------------------------------------------------------------
2可能更正确一些吧
《Mapping Objects To Relational Databases》中的
The Persistence Modeling process pattern指出
Object-Oriented Model->Logical Persistence Model->Persistence Physical Model
===
原文(adiag于2001/04/03 12:58粘贴)
回复: 感谢liuzhiming的回答
--------------------------------------------------------------------------------
非常感谢各位的回答,以后有什么要帮忙的,尽管MAIL给我,我也会尽力的
===
原文(liuzhiming于2001/04/02 22:31粘贴)
回复: 感谢liuzhiming的回答
--------------------------------------------------------------------------------
首先数据库表可以作为一个类,但这个类只负责数据的存储,而定义另外的类实现具体的功能,就设计的顺序来说,应该是根据完成的功能设计出类,然后考虑类所处理的信息,确定如何在数据库中存储这些信息(设计数据库表),为了将数据由数据库中提取出来,需要定义一个类负责数据的存储,:
考虑下面的纸牌类:
class Card {
public:
void FaceUp();
void FaceDown();
Card(Rank r,Suit s);
private:
Rank int;
Suit int;
Color int;
};
为了将每张牌的Rank,Suit,Color信息存入数据库表,可在数据库表中建立表Card(column : rank,suit,color),现在需根据数据库表Card的数据创建52张牌(假设数据库表以输入了52条纪录),定义tablecard类,负责读取rank,suit,color信息,然后card类根据这些信息创建52个对象
from umlchina.com.cn
其余请看
http://www.umlchina.com/Article/BestIndex1.htm
many thanks