精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 系统分析>>面向对象专题>>面向对象的系统分析与面向对象的可视化开(3)

主题:面向对象的系统分析与面向对象的可视化开(3)
发信人: leeyg()
整理人: leeyg(2001-06-05 22:19:18), 站内信件
  
你可以引用本文,但请注明作者,并请注明出自本论坛。    
                      请大家指正。    


五、人机界面与复用者中各类的关系。

    人机界面,通常是屏幕、键盘、鼠标等人与计算机交互的交界面。
本文所讨论的人机界面,仅仅指显示在屏幕上与人交互的界面。

    本人认为,在面向对象的软件开发过程中,人机界面作为系统的
一个组成部分,在设计中也是以“类”的形式存在的,只是这个类的
对象实体往往只有一个(通常系统中并不存在2个完全一样的界面)。
在用可视化开发工具开发的人机界面中,人机界面是由一个或多个在
系统运行时具有外观形状的控件组成的,人机界面是通过Form类来表
现的。

    因此,解决复用者与被复用者构筑的人机界面的关系,就是解决
复用者中的类与Form类的关系。在可视化开发工具,所有的可视化控
件都必须放入Form中(DELPHI中DataModal,可以放入一些不可视的
控件),都是也只能是Form类的属性,我们没有必要去讨论单个的可
视化控件与复用软件中的哪个类的什么属性有联系,我们只需讨论复
用者中的哪个类与被复用者中的哪个布满控件对象的人机界面Form类
有联系,因为在面向对象的分析及设计中,类的属性与属性之间并不
需要去分析,但类与类之间的关系必须仔细分析。举例来说,我们没
有必要去讨论一个录入电话的录入框与“联系通讯录”类有没有直接
的联系,与“联系通讯录”类有关系的是“联系人录入界面”这个类,
电话只是联系人的属性,而电话录入框也只是联系人录入界面的部分
而已。

    既如此,让我们再来看看,复用者的类与用被复用者开发出来的
人机界面Form类是一种怎样的关系。

    们知道,类与类之间的关系,不外乎三种:一是整体-部分关系,
二是一般-特殊关系,三是实例连接。

    一般-特殊关系,描述的是一种“is a kind of”的关系,也就
是我们常说的继承与被继承关系。复用者与被复用者各有各的类树,
复用者中的各类不会从被复用者中继承而来,反之亦然。所以,复用
者与被复用者之间的各类,不会是一般-特殊关系。

    再来看看整体-部分关系。整体-部分关系是组装关系,反映系
统中各类对象之间的组成关系,描述的是一种“has a”的关系。很
自然地,我们会说:“联系人通讯录”有一个(has a)“录入”人机
界面,因此,“联系人通讯录”与“录入人机界面”之间的关系是整
体-部分关系。这样理解本身并没有错,然而,这是一种从复用者的
角度看过去的理解,如果从被复用者的角度看过去,我们可以说:
“录入人机界面”录入的是“联系人”这一类的对象实体,并不是
“联系人通讯录”,也就是说“录入人机界面”与“联系人”类有
关系,与“联系人通讯录”并无关系,这样,“联系人通讯录”与
“录入人机界面”之间的整体-部分关系是不成立的。

    那么,人机界面究竟是与“联系人通讯录”有关还是与“联系人”
有关?它们之间的关系是什么?

    本人认为,人机界面是与“联系人通讯录”存在实例连接的关系。
进一步地说,人机界面与其所反映的实例化对象集管理类存在实例连
接的关系,而不是单个的实体对象。人机界面应能反映所表现的对象
实体的全部,而决不是仅能表现某个单个的对象实体。(有关对象、
类、已实例化对象集的概念,请见拙作《数据库系统在面向对象分析
设计的应用》)。

    “联系人通讯录”是已经实例化的“联系人”对象的集合,它的
主要任务,是管理这些已经实例化的“联系人”对象;“联系人”着
眼于“联系人”这个“人”的功能,如“报价”等。在日常的生活中,
“联系人通讯录”即是我们的通讯记录本,本子上新的一页就是我们
的“新增”界面,当修改一个联系人的资料时,找到这个联系人所在
的页,这一页就是我们“修改”的界面。而“联系人”是联系的人本
身,这个人本身并没有什么外观界面(面孔当然不是界面)。

    人机界面是与其所反映的实例化对象集管理类有关系,这一点不
仅适用于数据库类型的应用系统,同样也适用于其它应用系统。举例
来说,Microsoft Word中的各种参数设定的界面,可以看成是对这种
参数类(如字体类)的实例化对象进行管理的界面,只是这个实例化
对象只是一个。Word中初安装后省缺的字体,就是已经实例化的对象,
修改这个对象实体时,与联系人一样,Get出这个实体,提供“修改”
的界面。

    人机界面与其所反映的实例化对象集管理类的关系是一种“交互”
的实例连接关系。正如上面所说,人机界面与其所反映的实例化对象
集管理类之间,并不能分出谁是整体、谁是部分,并不能用紧密的整
体-部分结构所用的嵌套来实现,它们之间表现的是一种既依赖又松
散的关系,这正是实例连接的典型例子。这个关系体现的是一种“交
互”的责任关系。

    很多情况下,对象的某些方法需要由操作员通过界面来触发。考
虑这样一种情况,在一个call center系统中,“联系人”类中有一
个方法(服务)是“呼叫”,该方法被调用时,会拨叫对象实体的传
呼机,在有需要时,操作员通过“联系人通讯录”类的相关界面找到
了某个联系人(找到了一个对象实体),于是按动显示在界面上的这
一实体的“呼叫”按纽,触发“联系人”类的“呼叫”方法。这个
“呼叫”按纽怎么解释?同样的,“联系人通讯录”中的“增加”、
“修改”等方法也需要有对应的按纽来触发,怎样处理?

    这里的问题是:需从人机界面中触发的方法(服务)在人机界面
中如何实现。最自然而又最简单的解决方法,就是在人机界面中增加
触发该方法的互动控件,典型的控件就是按纽,通过这个控件来触发
该方法。从面向对象的分析方法考虑:不要将方法实现的实体放在按
纽的onClick事件中,按纽仅仅是调用它所代表的方法。因为这个方
法应该封装在对象中而不是界面中。举例来说:“联系人通讯录”中
有“增加”这一方法,这一方法是需要由界面来触发的。在设计时,
要在界面中设立“增加”按纽。但是,不要将“增加”这个方法的实
际动作放到按纽的OnClick事件中,而应该将它放到“联系人通讯录”
的“增加”方法中,OnClick事件只是调用这个“增加”方法。


待续....
下节介绍怎样用面向对象的可视化开发工具开发人机界面

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

[关闭][返回]