acm-header
登录

ACM通信

ACM通信

实例编程:类比实例编程


为什么终端用户需要编程?在一个信息泛滥的世界里,任何人都可能在处理信息时不知所措。由于计算机网络的普及,最终用户面临的信息挑战不再是获取信息,而是处理信息。在20世纪80年代流行起来的直接操作范式,当他们无法直接操作信息源或信息源的信息时,比如他们的文件在硬盘驱动器上的位置或收件箱中的电子邮件,就开始崩溃了。

终端用户编程正在成为日常信息处理斗争中的一个关键工具[8].这种编程允许定制个人信息处理。但是很少有终端用户有使用传统编程方法的背景、动机或时间,或者有办法雇用专业程序员为他们创建程序。终端用户编程的简单形式包括电子邮件过滤器,它通过将特定的电子邮件定向到单独的文件夹和电子表格中来清理电子邮件,以探索(比如)新房子的总成本。

示例编程(PBE)是一种功能强大的终端用户编程范式,允许未经正式编程培训的用户创建复杂的程序。PBE环境通过观察和记录终端用户在图形用户界面(GUI)级别操作信息时的软件行为,为终端用户创建程序。例如,在Microsoft Word中,PBE机制允许用户构建宏。

在这里,我们将探讨PBE重用的问题,或者用户如何重用旧的程序行为。用户可能会发现pbe生成的程序很有用,但可能需要对其进行泛化或修改,以完成相关但不同的任务。程序重用是一个众所周知的软件设计问题。重用问题阻碍了大量软件项目的生产力,从个体的最终用户程序员到大型的分布式软件开发团队。在PBE上下文中,重用提出了更复杂的问题。虽然PBE最初使最终用户不必处理编程问题,但重用迫使他们在两个表示级别之间进行认知跳跃:

  • GUI级别。这一关卡设有熟悉的窗口、图标和菜单。例如,在word等字处理应用程序中,此级别表示由用户通过输入新文本、文本格式和使用光标键在文档中导航等操作直接操作的内容。
  • 这个项目的水平。该级别将用户操作直接捕捉到程序中,以便用户可以重播这些操作。在Word中,这一层包含了Visual Basic。用户操作记录为Visual Basic脚本;然后,用户将脚本分配给键盘命令或用户定义的工具栏命令。

PBE表示鸿沟反映了用户理解GUI级别和程序级别之间的映射的困难。在重用中,这个鸿沟尤其有问题,因为如果用户希望能够使这些表示适应他们的需要,他们就需要至少对程序级表示有最低限度的了解。对于以前没有接触过Visual Basic编程,甚至没有接触过一般编程的最终用户来说,这种转换可能太过复杂,让他们感到沮丧。受挫时,他们可能会放弃最终用户编程的想法,并在数年时间里不断地手工解决最初的问题。

类比是人们利用已有知识构建新知识的强大认知机制。当类比与PBE一起使用时,结果是一个新的终端用户编程范式,它结合了PBE创建程序的优雅性和类比重用现有程序的强大功能。我们把PBE和类比的结合称为“类比实例编程”。类比是连接GUI和程序级别的一种有效表示级别。

两个详细的示例帮助我们探索重用问题。在第一篇文章中,我们创建了一个Word宏,用于重复重新格式化,以便理解宏重用。我们选择这个特定的示例,并不是因为Word宏记录机制是最复杂的PBE系统,而是因为Word拥有庞大的用户基础,读者可以更容易地将Word上下文中的使用和重用问题联系起来。在第二个例子中,我们使用AgentSheets模拟创作工具构建了一个类似simcity的模拟[11来自科罗拉多州博尔德的AgentSheets, Inc.;这个工具提供了一种比Visual Basic更容易访问的最终用户编程方法。我们已经发现,即使在程序级别相对可访问的情况下,类比仍然需要作为PBE重用机制。

随着PBE技术在商业和研究系统中得到越来越广泛的采用,终端用户根据需要逐步构造和编辑新的行为和命令。与传统的编程方法一样,新行为的有效重用受到底层表示的限制。这些表示可能会给最终用户程序员带来复制-粘贴-修改和继承-重用的问题,而这些问题是专业程序员多年来一直在努力解决的。在PBE环境中,使重用更加成问题的是,需要修改以重用的程序是机器生成的,通常很少包含关于如何更改它们的信息。


与传统的编程方法一样,新行为的有效重用受到底层表示的限制。


中的重用场景图1涉及终端用户试图自动重新格式化地址列表。Word和其他应用程序允许通过宏机制进行模块化修改。PBE通过一个名为“Record New Macro”的菜单命令为用户提供了一个编程宏的界面。宏编辑工具栏和菜单功能提供了额外的支持。一旦宏被命名并分配给工具栏图标或键盘命令,只需在我们的示例中执行所需的任务重复重新格式化就可以创建宏。系统记录击键并将命令编译到Visual Basic中。然后,编辑文档的任何人都可以调用该命令。

最终用户希望定期修改,因此,使用附加的相关操作重用宏,然后将整个新的更改集分配给相同的键盘命令。Word中内置了重命名宏的机制,从而复制相同的行为,但对现有宏的任何修改都必须通过Visual Basic编程语言完成。例如,用户如何修改宏来重新格式化传真:但也地址:字段图1.要通过“Record”函数修改此宏,用户必须覆盖旧宏,执行先前记录的相同操作,然后记录所需的附加行为。

为了能够重用现有的宏,使它们在更一般的情况下有用,最终用户必须从GUI级别(图1(左)到程序级(图1,对吧)。根据微软自己的Word文档:“当你想每次运行宏都执行完全相同的任务时,记录宏是很好的。但是如果你想自动化一个动作随情况变化的任务,或者依赖于用户输入的任务……?要创建强大的自动化,你应该学习用Visual Basic for Applications编程。”

这两个层次之间存在着巨大的认知鸿沟。GUI只提供了有限的重用选项。尽管高级重用需要过渡到程序级别,但没有提供中间步骤将用户从简单的记录机制引导到Visual Basic编程语言。在GUI级别,用户在重用方面受到限制,只能将宏作为黑盒复制到其他文档中,或者使宏对所有文档普遍可用。在程序级别,可以复制、粘贴和修改代码,其难度与在任何其他面向对象程序中调用这些命令的难度相同。在这一点上,用户已经从GUI级别直接操作的舒适环境直接跳到不舒服或完全令人沮丧的程序级别。

回到顶部

类比如何弥合鸿沟

AgentSheets模拟创作工具有助于解释PBE系统中的类比如何弥合GUI级别和程序级别之间的鸿沟。在AgentSheets中,终端用户可以构建类似simcity的模拟,并将它们导出为交互式Java小程序。(AgentSheets的详细描述请参见www.agentsheets.com/userforum-publications。html)。

AgentSheets将PBE与图形化重写规则组合成终端用户编程范型。图形重写规则(GRRs),也在Cocoa/KidSim和Creator等系统中使用,是在可视化表示中表达更改概念的强大语言。grr声明性地描述了包含对象的两个或更多维情况序列的空间转换。情况可以根据所包含的对象和这些对象之间的空间关系来解释。不同情况之间的差异意味着一种或多种行动能够将一种情况转变为另一种情况。在AgentSheets中,可以聚合任意数量的grr,为代理创建复杂的行为;这些代理及其行为结合并相互作用,模拟用户可以想象的任何场景,从热扩散到城市规划。我们发现,在一个模拟中创建的行为很可能对构建其他模拟的用户有价值图2).

与Word中的gui -程序鸿沟相比,AgentSheets中的gui -程序鸿沟对终端用户来说要轻松得多。程序级别的GRR表示与GUI级别的表示非常匹配。例如,用户在GUI级别上生成的火车和火车轨道图标也可以在程序级别上找到。这种表示映射帮助最终用户理解程序。但是,尽管有更紧密的匹配,对于任何最终用户可编程的应用程序来说,拥有处理重用的机制仍然是必要的。

回到顶部

一个类比(让汽车像火车一样移动)

在城市规划者用来探索公共交通问题的名为Sustainopolis的应用程序中,终端用户可能希望将汽车和街道结合起来。注意到火车和轨道已经被编程,并且意识到汽车在街道上移动就像火车在轨道上移动一样,用户将希望重用已经为火车对象编写的“移动”行为,并将其附加到汽车对象上。

一种方法是让用户从头开始,简单地演示所有汽车和街道交互的示例。不幸的是,与火车相关的规则非常多。问题是,即使是相对简单的行为,比如让火车沿着轨道行驶,也必须演示规则来指定火车和轨道之间所有有意义的交互组合。火车可以向北、南、东、西四个不同的方向行驶。一份完整的规格,包括15个不同的直线轨道部件;四向曲线;四个不同的T型交叉口和一个交叉口;四个方向的死胡同需要256条规则。

这些规则规定了在不同情况下的行为,包括:如果火车驶入死胡同怎么办?如果火车可以选择向左或向右走,它应该往哪个方向走?如果在模拟中仔细地安排轨道,就可以消除大量规则,但问题是,演示完整的规则集必须花费相当多的时间和耐心。鉴于这种行为已经存在于我们的场景中,最好找到一种方法来避免再次演示整个规则集来指定汽车和街道之间概念上类似的交互。

另一种方法是将所有的火车规则复制到汽车中,并通过替换相应的图标手动编辑它们。在大多数基于grr的系统中,用户将从火车和轨道复制所有规则到街道和汽车,然后简单地将汽车替换为火车,将街道替换为轨道。但是,将规则从一个应用程序场景转移到另一个应用程序场景基本上是与程序员重用程序或Word用户重用宏相同的艰巨且容易出错的过程。那么,是否节省了用户的时间?在不了解用户意图的情况下,系统如何促进重用过程?我们已经发现,允许最终用户编程的机制也允许重用。

通过类似的例子进行编程可以重用以前记录的例子程序。而不是通过演示或手动编辑从头创建汽车行为,用户通过指定一个类比生成一套完整的规则。

用户希望将火车和轨道之间的关系重用为汽车和街道。与面向对象编程(在面向对象编程中,继承被用来定义对象类的本体)相反,类比被用来定义对象关系的本体,由常用的活动动词表示,例如“move”(参见图3).

用户通过类比对话框定义类比(参见图4).结果是,通过grr编程的在轨道上移动的火车行为被转移到在街道上移动的汽车。动词“moves”被区分为火车和汽车,所以火车不在街道上移动,汽车也不在轨道上移动,因为火车和街道、汽车和轨道之间没有任何关系。

在这里,重用是用现有对象表示的,不需要抽象。这个类比的结果是一套新的grr装置安装在汽车上,允许汽车在街道上移动。所有由类比生成的规则都类似于普通的grr,因为最终用户编辑它们来处理类比的异常。

幸运的是,通过使用类比,PBE系统通常具有作为GUI级别和程序级别之间的桥梁的表示。在火车车厢的类比中,最终用户从现有的行为中创建了新的行为。这种方法采用重用增强编程,通过PBE创建初始程序集,然后通过类比进行扩展。

类比机制要“理解”一个程序才能创建一个类似的程序,需要达到什么深度?单纯的句法符号替换对于非平凡程序的转换是不够的。对程序语义的深入理解不仅是一个非常困难和未解决的人工智能问题,而且开发类比可能需要用户广泛地用语义信息对程序进行注释。

回到顶部

从替换到类比

在类比中指定图3,这四个图标来自一组更大的图标,分别代表不同标题的汽车和火车,以及代表不同拓扑结构的街道和轨道。仅仅用汽车和街道图标代替火车和轨道图标来创建一组类似的重写规则的机制将不是很有用;它只能匹配所有相关规则的一个有限子集。类比系统如何在所有这些不同但相关的项目之间建立更一般的映射?

类比机制不能止步于句法替代,而是需要访问一些最小的语义信息,以建立更普遍的对应关系。对于计算机系统来说,在所有必要的级别上进行正确替换以使生成的代码可用,而无需人工进一步编辑,这不是一件小事。十多年前,位于博尔德的科罗拉多大学的Clayton Lewis提出了一个他称之为“伪化”的概念,以减少直接复制粘贴技术固有的脆弱性[5].

在AgentSheets基底中,通过基础对象和目标对象之间的结构和行为相似性来促进类比中的“系统性”或对应性[9].通过指定应该转移的关系来进行类比。例如,汽车和火车是可以根据用户需要简单或复杂的对象,可以包含一个或多个可应用行为。但是,用户必须指定汽车像火车一样移动,才能转移这种特定的行为。为了使传输具有高度的系统性(以及对用户的有效性),街道和轨道对象必须在结构上相似。

AgentSheets使用连接性信息确保了这种高保真度传输。从为城市规划图标库创建的基础图标开始,系统根据用户的要求应用语法转换,自动创建有意义的变化来说明十字路口和曲线,以及方向方向[10].语法转换创建了在AgentSheets工作表上放置代理所需的视觉变化,并节省了用户在图标描述上的工作时间。然后,用户用语义信息注释图标,例如连通性(参见图5).连接性定义了每个图标的输入和输出端口。例如,一个水平的街道段图标的左右两边都有输入/输出。转换带注释的轨道会创建一个完整的轨道图标家族,这些图标本质上充当在其上移动的对象的吞吐量。

该系统利用图标的语义和语法连接信息,通过类比实例支持编程中的傀儡。通过指定图标的连接性,然后对其进行转换,“移动”GRR获得了一个有用的复杂性维度。类比建立后,汽车有一个与火车规则集同构的规则集,即汽车知道如何在各种街道上行驶。该系统利用现有的语义信息,保证了基础和目标之间的高度系统性;这样,在没有终端用户干预的情况下,就建立了正确的轨道与街道的映射关系。

我们得出的一般见解是,为了创建有意义的类比,一点语义是必要的。这意味着终端用户必须提供一些额外的预先信息,以便用最小的语义注释他们的设计。这还意味着这种语义注释极大地提高了行为的可重用性。对于AgentSheets,用户只需要向基本代理提供语义信息,指定他们已经定义的街道代理的连接性。AgentSheets可以自动地从句法上(通过对代理位图应用几何变换)和语义上(通过对代理的连通性应用拓扑变换)转换代表流导体的代理,包括街道、电线和管道。


在PBE环境中,重用之所以成问题,是因为需要修改重用的程序是机器生成的。


回到顶部

重用通过继承

在面向对象编程中,为了促进重用,继承可以在PBE系统中充当重用机制的角色。对象子类不仅继承超类的行为,还可以覆盖和扩展该行为。在我们的火车和汽车例子中,继承如何起作用?获得类似行为的一种简单方法是将“car”作为“train”的类型或子类,将“street”作为“track”的子类。虽然这种方法产生了所需的行为(由于继承),但它在本体上是不可靠的,并且以这种方式更改对象层次结构会产生基于弱设计的误导性模型。

为了纠正这个问题,系统开发人员希望最终用户更像程序员。因此,在类层次结构中,通过两个抽象超类“移动对象”和“运动引导对象”,汽车成为火车的兄弟姐妹,街道成为轨道的兄弟姐妹。

为了让火车和汽车移动,一个广义的GRR必须用“移动对象”和“运动引导对象”来表示。然而,尽管这个新的类层次结构可能在本体上是合理的,但它也引入了一些问题:

  • 抽象的必要性。面向最终用户的抽象并不简单,而且很难用可视化的方式表示,特别是当对象由用户定义的图标表示时。抽象的物体体现了移动的物体和引导运动的物体会是什么样子,谁来画它们?
  • 过度泛化。如果城市交通运行在这种新的表示到位,火车可以在街道上运行,汽车可以在轨道上运行;虽然这种情况在理论上是可能的,但在城市规划领域的应用中不应该允许它发生。为了避开现实生活中的这种限制,火车和汽车的行为必须再次特殊化,以防止运动对象和运动引导对象的这种不必要的组合。

回到顶部

结论

在PBE系统中,终端用户在GUI级别看到的表示可能与在程序级别看到的表示有很大不同。在这些系统中,通常使用特殊表示来简化最终用户在两个级别之间的转换。这些表示特性支持通过类似的示例进行编程,简化了程序重用。

我们通过类似的例子进行编程的工作还处于早期但很有前途的阶段。一些语义信息与结构信息的结合允许在交互模拟环境中重用复杂行为。用户创建并想要重用的行为与目标行为之间的相似性越多,类比就越好,编辑的可能性就越小。我们寻求通过最终用户试图确定适当的类比匹配来增加差异化。例如,在街道上行驶的汽车和通过电线的电力有相似之处,但在十字路口,电力可以双向流动。因此,将这两类物体进行类比,就会产生容易发生碰撞的汽车。我们很快还将通过非模拟应用程序领域中的类似示例来探讨编程的使用。

回到顶部

参考文献

1.奇。金特纳类比理论在计算机程序设计教学中的应用。Int。j·马赫。38岁的钉。3(1993年3月),347368。

2.KidSim:模拟的终端用户编程。在1995年计算系统人因会议论文集(711年5月,科罗拉多州丹佛市)。ACM出版社,纽约,1995年,第351358页。

3.Goldstone, R., Medin, D.和Gentner, D.相似度判断中的关系相似性和特征的非独立性。Cognit。心理学23。(1991), 222262。

4.面向对象编程环境中的一些重用策略。在气89年学报》上(休斯顿,德克萨斯州)。ACM出版社,1989年,第6973页。

5.刘易斯,C。类比泛化的一些可学习性结果。技术报告CU-CS-384-88,科罗拉多大学,计算机科学系,1988。

6.为初级程序员提供的基于实例的环境。在《人工智能与教育》R. Lawler和M. Yazdani, Eds。Ablex出版社,诺伍德,新泽西州,1987年,第135151页。

7.Medin, D. Goldstone, R.和Gentner, D.尊重相似性。心理。100年启,2(1993), 254278。

8.Nardi, B。编程的小问题.麻省理工学院出版社,剑桥,马萨诸塞州, 1993年。

9.Perrone, C.和Repenning, A.图形化重写规则类比:避免继承或复制粘贴重用困境。在1998年IEEE视觉语言研讨会论文集加拿大新斯科舍省,9月14日)。IEEE计算机协会出版社,Los Alamitos,加利福尼亚州,1998年,第4046页。

10.改写规则:迈向语义丰富的图形重写规则的步骤。在视觉语言学报(德国达姆施塔特,9月59日)。IEEE计算机协会出版社,Los Alamitos,加利福尼亚州,1995,第226233页。

11.Repenning, A.和Sumner, T. Agentsheets:创建面向领域的可视化语言的媒介。IEEE第一版。28日3(1995年3月),1725。

12.Roschelle, J., DiGiano, C., Koutlis, M., Repenning, A.开发教育软件组件。32岁的IEEE第一版。9(1999年9月),5058。

回到顶部

作者

亚历山大Repenning(ralex@cs.colorado.edu)是AgentSheets, Inc.的CEO,科罗拉多大学博尔德分校计算机科学系和终身学习与设计中心的教授。

Corrina Perrone(corrina@agentsheets), AgentSheets, Inc.的项目经理,一家国际非营利组织的媒体关系总监。

回到顶部

脚注

本研究得到国家科学基金会的资助:DMI-9761360, RED 925-3425, RED 925-3425的补充,REC 9804930, REC-9631396,和CDA-940860。

回到顶部

数据

F1图1。创建一个PBE应用程序,将所有出现的“Fax:”格式化为“Fax Number:”。GUI级别(左)显示了一个使用查找和替换对话框编辑的文档;程序层(右)显示一个Visual Basic编辑器。

F2图2。在AgentSheets中通过示例编程火车跟随轨道。当用户在GUI级别(左)在轨道上移动火车时,AgentSheets记录移动(包括上下文),并在程序级别(右)作为规则表示。

F3图3。传输对象之间的关系。

F4图4。做一个类比。

F5图5。图标在语法和语义上进行转换。用户只定义基本的根图标,如水平的街道段,然后将其转换为外观和含义方面的曲线图标。语义信息被用来匹配类比的图标。死胡同的街道和轨道被最终用户进一步装饰。

回到顶部


©2000 acm 0002-0782/00/0300 $5.00

允许为个人或课堂使用本作品的全部或部分制作数字或硬拷贝,但不得为盈利或商业利益而复制或分发,且副本在首页上附有本通知和完整的引用。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或付费。

数字图书馆是由计算机协会出版的。版权所有©2000 ACM, Inc。


没有发现记录

Baidu
map