OOP已经成为主流编程方法,UML2.0的提交标志着一种能精确表达面向对象思想的语言的成熟,但如何使用UML进行OOP?在此开一帖,请各位大侠进来讨论. (10

  • 主题发起人 主题发起人 testnet
  • 开始时间 开始时间
T

testnet

Unregistered / Unconfirmed
GUEST, unregistred user!
OOP已经成为主流编程方法,UML2.0的提交标志着一种能精确表达面向对象思想的语言的成熟,但如何使用UML进行OOP?在此开一帖,请各位大侠进来讨论. (100分)<br />世界上不存在能从一个角度可以观察全部面貌的物件,当我们面向对象时,
物件导向的思考方式将引导我们从各个方面分析问题,传统表达方法过于
集中在一个角度,UML的出现,能使我们从各个方面去描述一个问题,
并支持流行的OOP。但如何使用UML进行OOP,市面上的资料过于理论化,
所以在此请大家来讨论一下使用方法。

我先发第一帖。使用不当的地方,请指正。
http://freehost20.websamba.com/testnet/c24.htm
 
in your case
个人觉得UML在于
描述问题

自动化生产
但觉不是所有的问题都适合使用UML方法来做
 
物件导向系的观念架构

大叶资管所
包冬意

由于观念架构下的物件具有永续(Persistence)
的性质,观念架构的建立相当于应用系统所需的永续资料实体
的静态构面分析。如何操纵观念架构下的物件以反映系统的一连串处理过程
则是Martin/Odell物件导向系统发展哲学的精神所在。本文
介绍物件型别﹑物件组合﹑父子型别与物件结合
的观念来建立系统的观念架构。


前言
Martin/Odell的物件导向分析方法是利用建立的系统观念架构(Conceptual Framework)﹐再利用操纵观念架构下的物件来反映系统的一连串处理过程。
观念架构在其它的物件导向方法论常以不同名称命名﹐例如﹕物件模型(Object Model)﹑资讯模型(Information Model)﹐类别图(Class Diagram)﹐…等等。
Martin/Odell利用几个简单的观念如物件型别(Object Type)﹑物件组合(Object Composition)﹑父子型别(Supertype/Subtype)与物件结合(Object Association)等协助建立物件导向的观念架构。
由于观念架构下的物件具有永续(Persistence)的性质﹐观念架构的建立相当于应用系统所需的永续资料实体的静态构面分析。Martin/Odell提供的「如何建立物件导向的观念架构」 与资料库里谈到的资料分析方法非常接近﹐而且赋予更富有语意的诠释﹐从资料分析到Martin/Odell的方法﹐在资料的静态构面上是大家容易接受的。
如何操纵观念架构下的物件以反映系统的一连串处理过程则是Martin/Odell物件导向系统发展哲学的精神所在﹐这些在一般传统分析方法或资料库书籍里是咸少谈到的﹐将在未来另撰写一文陈述。
以下依物件型别﹑物件组合﹑父子型别﹑
物件结合与总结说明等五个主题进行说明。

物件型别
每一物件都是唯一的。抽象化(Abstraction)让我们剔除它们之间的差异﹑使我们看到其共同处﹐如此我们能够把问题领域或复杂系统内的物件分类成不同的物件型别。 例如﹕图书馆的馆藏图书是一物件型别﹐任一册具有图书财产编号的图书都是馆藏图书此物件型别的一物件。
物件型别抽象化是有其原则的。Martin/Odell认为﹕物件型别即是观念(Concept)﹑物件型别即是集合(Set)﹑物件型别具有属性(Attribute)。首先要说明的是物件型别就是一般大家所说的类别(Class)﹐Martin/Odell认为在分析时以物件型别命名较为适宜﹐类别是物件型别在应用系统建置时的实作机制(Implementation Mechanism)。
各学派的物件导向方法论大多尝试归纳出一些通用的分类﹐例如﹕人﹑组织﹑地﹑物﹑角色﹑事件﹑规格﹑结构﹑系统﹑…等等﹐这些有助于我们进行系统分析时寻找物件型别或类别。事实上﹐归纳通用的分类并不一定能够涵盖所有的可能情况。Martin/Odell并没有给予任何明确的分类﹐而是告诉我们物件型别就是被分析的系统中的观念﹐观念就是物件型别﹐物件型别就是观念。观念是物件型别的内涵(Intension)定义。例如﹕在图书流通作业﹐「读者」物件型别的可能定义之一是「拥有借书权利的一群人﹐可能是教师﹑职员﹑研究生﹑大学生或校外友好人士」。
观念的形成是认知物件的方法﹐符合某一观念的一个案例即是一物件。符合某一观念的所有案例形成一个集合﹐集合是观念的外延(Extension)定义。当物件型别视为集合时﹐我们可利用典型的集合运算如子集合﹑交集﹑联集与补集合等来衍生其它的物件型别。例如﹕由「女生」物件型别与「学生」物件型别经过联集运算可得出「女学生」物件型别。
物件型别内的物件拥有相同的个数属性﹐每一属性代表这些物件的一个特征。例如﹕「借书」物件型别具有流水号﹑借书日﹑到期日与还书日等属性﹐如图1所示。

其中的基数限制(Cardinality Constraint)的图形意义如表1所示。基数限制可存在于物件型别与其属性之间﹐或物件型别与物件型别之间。图1的物件型别其图形意义如下﹕

惯用图形符号
意 义


A一直有一个B与它关联。


A一直至少有一个B与它关联。


A一直有至少N个﹐至多M个B与它关联。


A可以没有B与它关联﹐且至多一个B与它关联。


A可以没有B与它关联﹐也可以有很多个B与它关联。

表1 基数限制的图形意义

一借书物件具有流水号﹐借书日﹐到期日与还书日等四个属性﹔一借书物件一直有一个流水号﹐一个借书日与一个到期日与它关联﹐代表借书物件诞生时必须设定这些属性的初值。
一借书物件可以没有还书日与它关联﹐且至多一个还书日与它关联﹐此由于读者借书诞生一借书物件时﹐尚未知晓还书日﹔一流水号属性一直有一借书物件与它关联﹐代表流水号属性是借书物件的键(Key)﹐可唯一界定借书物件。
一借书日属性一直至少有一借书物件与它关联﹐此表示图书馆开放的日子﹐一旦有读者来借书时设定借书日﹐当天可能有好多读者来借书﹐于是设定的借书日将有一至多个对应的借书物件。



图2 电脑可视为物件组合


物件组合
某些型别的物件可视为好几种其它型别的物件的组合。后者称为组成物件(Component Object)﹔前者称为复合物件(Composite Object)或复杂物件(Complex Object)。Martin/Odell称此种物件间的关系为汇总关系(Aggregate Relationship)﹐其图形符号是 。
图2是物件组合的一个范例﹕一部电脑由一个主机﹑一个萤幕与一台键盘组合而成﹔其中主机又由一个外壳﹐一块主机板与数块介面卡组合而成。
事实上﹐在一物件组合中﹐若有某一组成物件特别重要﹐由它决定或识别其复合物件时﹐则称此组成物件与复合物件间具有不可改变的组合(Immutable Composition)的关系。例如﹕在一部电脑中﹐主机板可能是最重要的﹔在一部汽车中﹐引擎可能是最重要的。汽车经销与监理业务中﹐引擎是特别重要的。一部汽车换了轮胎﹐仍是原来的一部汽车﹔但换了引擎可能是另一部汽车了。
图2中并未以任何不同的图形符号来区别不可改变的组合。物件组合的观念让我们能够界定自然的﹑具较高层次的复杂物件﹔设计应用系统时便于利用实作机制适当处理这些物件内的物件。

父子型别
分析系统时﹐除了利用物件型别将问题领域内的物件加以分类﹐宜再进一步界定型别间的关系---父子型别﹐使我们更清楚与精确地描述问题领域。父子型别的关系可由集合观念做解释﹕若乙集合内的任一元素都是甲集合内的元素﹐但甲集合内的元素并非都是乙集合内的元素时﹐则甲物件型别为乙物件型别的父型别(Supertype)﹐乙物件型别为甲物件型别的子型别(Subtype)。


图3 嫌疑犯细分为子型别

图3是父子型别的一个范例﹕在司法审判的过程中﹐嫌疑犯可分为已审判与尚未审判﹔已审判又再分为罪犯或清白无罪。父子型别的图形符号是 。
一般化(Generalization)是从各子型别中界定父型别﹔特殊化(Specialization)则是由父型别中细分成子型别。
Martin/Odell认为﹕进行一般化或特殊化﹐宜将父型别细分为数个不相连的子型别(Disjoint Subtype)﹐即是子型别物件的集合间的交集是空集合﹐子型别物件的集合间的联集等于父型别物件的集合﹐所谓的型别分割(Type Partition)。
图4是并没有进行完全的型别分割的一个范例﹕嫌疑犯被分割为罪犯或清白﹐但事实上当未审判前的嫌疑犯无法真正归类为罪犯或清白﹐只能说是一个嫌疑犯。


图4 嫌疑犯做不完全的分割

父子型别在设计应用系统阶段时﹐有利于定义相对应的父类别与子类别(Subclass)关系的类别阶层(Class Hierarchy)﹐类别继承(Class Inheritance)是父子型别的一种实作机制。形成父子型别主要是父型别与子型别里的物件具有相同或类似的属性或运作﹐并非字义上的父子关系。我们偶而可看到有以父亲与孩子之间的血缘关系拿来做为父子型别或父子类别的范例似乎是不适当的﹐此可由集合观念来加以检验。

物件结合
物件间存在着关系(Relationship)﹐结合(Association)定义不同型别或同一型别的物件是如何连系在一起。没有物件结合﹐这个世界就没有办法凑在一起。
图5是物件结合的一个范例﹕客户一次可订购好多种产品﹔一订购物件是由一客户物件与一个以上的产品物件相互结合而成﹐其图形符号是 ﹐外加”I”表示。


图5 订购是物件结合

物件结合是具有意义与目的可参考的单位。物件结合是一种不可改变的结合(Immutable Association)﹐只有诞生与灭亡﹐不能改变它的参与物件。甲客户与乙客户虽然订购同样的产品﹐但被视为两个不同的订购物件。物件结合时﹐其参与的物件必须先存在。客户并不能订购事实上并未提供的产品。
像上述的订购物件﹐本身是客户物件与产品物件产生的关系﹔关系是一个观念﹐观念就是物件型别﹐因此订购在图5中被视为一明显的(Explicit)物件型别。


图6 父子间的血缘关系

物件结合的关系有时不必被视为一明显的物件型别﹐而是一隐含的(Implicit)物件型别。图6是父子间血缘关系的表达﹕一个人有刚好一个父亲﹔一个人可能没有孩子也可能有很多的孩子。
有了物件结合的观念﹐属性归属规则(Rule of Attribution)就非常简单﹕应该属于物件型别的属性就属于此物件型别的属性﹔应该属于结合物件型别的属性就属于结合物件型别的属性﹐而不是其结合的组成物件的型别内的属性。
例如﹕若客户物件与订购物件均具有「日期」属性﹐则客户的日期属性是指客户第一次来交易的日期﹐而订购的日期属性是指客户对某些产品订购时的订购日期。
某一时刻客户订购产品观念架构下的物件的范例如图7所示。物件间结合的关系具有双向关联的意义。操纵观念架构下的物件﹐可根据物件结合关系﹐由一物件寻找到相关联的物件﹐以便操纵这些物件﹐反映真实世界系统的处理过程。此将在未来的文章内予以陈述。

图7 某一时刻客户订购产品观念
架构下的物件

总结说明
Martin/Odell的物件导向分析方法是利用建立的系统观念架构﹐再利用操纵观念架构下的物件来反映系统的一连串处理过程。
因此﹐界定观念架构是一件重要工作﹐被称为物件结构分析(Object Structure Analysis﹐简称OSA)。我们可以利用以上介绍的物件型别﹑物件组合﹑父子型别与物件结合的观念来建立系统的观念架构。
对任一问题领域系统﹐每个人建立的观念架构并非要完全一样﹐但必须能够以建立的观念架构为基础﹐并能正确地操纵观念下的物件来反映系统的一连串处理过程。Martin/Odell虽未明确的给予物件分类﹐但明确地告诉我们建立观念架构的目的以及该做到什么地步﹐让我们在寻找物件型别或类别时有所依据。■

参考文献
[1] James Martin and James J. Odell, Object-Oriented Methods: A Foundation, Prentice- Hall, 1995.
[2]包冬意﹐“Martin/Odell的物件导向系统发展哲学”﹐物件导向杂志﹐第4期﹐中华民国八十五年四月。
[3] 包冬意,物件导向分析与设计---方法导引,松岗图书资料有限公司,中华民国八十四年五月。

 
借楼主宝地,打打广告,谢谢!
阳春三月,和Borland专家--刘艺相约上海!
大家好:
 “一年之计在于春”,春天是定目标、打基础关键时刻!
无论你的目标是加薪,成为项目经理,还是让自己的技术水平更上一层楼,
都需要不断地学习,而与高手的交流,仿佛是站在巨人的肩上:站得高,看得远,助力你迅速成为Delphi高手!
应中国项目经理网邀请,Borland专家--刘艺老师将于这个三月来到上海
给大家做<<UML与DELPHI模型驱动开发>>的培训,机会难得!请热爱Delphi的朋友请抓紧时间报名!
届时将会有众多Delphi高手光临现场!热烈的现场讨论以及众多Delphi高手的面对面交流讲师本次培训的特色之一!
在温暖的三月,刘艺与众多Delphi高手与大家相约上海!

中国项目经理网相关培训链接:
[公告]阳春三月,和刘艺老师面对面讨论UML和Delphi面向对象开发!
http://www.china-pm.net/dispbbs.asp?boardID=22&amp;ID=5&amp;page=1
[公告]uml与delphi模型驱动开发课程介绍
http://www.china-pm.net/dispbbs.asp?boardID=22&amp;ID=21&amp;page=1
报名表
http://www.china-pm.net/dispbbs.asp?boardID=22&amp;ID=35&amp;page=1
中国
 
楼主听说过MDA吗?用过Bold,ECO吗?
只要UML图画好,就能自动转换为程序框架,自动维护O/R Mapping
当然你也可以手动
其实UML指是一个分析,交流,文档的工具,真正的OOP需要真正的OOA和OOD.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
625
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部