没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记178(2007)15-22www.elsevier.com/locate/entcs面向对象概念的动画隐喻Jorma Sajaniemi1,2Pauli Byckling3 Petri Gerdt4约恩苏大学计算机科学与统计学系约恩苏摘要程序可视化和动画传统上是在编程语言及其在计算机中的实现的级别上完成的。然而,新手不知道这些概念,并且基于编程语言实现的可视化可能很容易无法帮助新手学习编程概念。隐喻则相反,它涉及用一个更熟悉的概念来表达一个新的概念,可以促进主动学习。本文采用隐喻的方法,面向对象的程序设计,提出新的隐喻等概念,如类,对象,对象实例化,方法调用,参数传递,对象引用,和垃圾收集。这些隐喻在入门编程教育中的使用也进行了讨论。保留字:隐喻,面向对象程序设计,程序可视化,程序动画。1引言程序可视化和动画传统上是在编程语言及其在计算机中的实现的级别上完成的。例如,变量被可视化为框(表示内存位置),嵌套函数调用被可视化为包含参数和局部变量的帧堆栈(表示许多计算机体系结构中的调用堆栈实现)。在面向对象(OO)的上下文中,动画也是基于UML图,这些图揭示了对象和类之间的连接,从而表示另一个层次,即,单个程序的组件之间的关系。我们只知道一个程序动画系统,PlanAni [20],它将其可视化建立在通用的1这项工作得到了芬兰科学院的支持,资助号为206574。2电子邮件地址:saja@cs.joensuu.fi3电子邮件地址:pbyckli@cs.joensuu.fi4 电子邮件地址:pgerdt@cs.joensuu.fi1571-0661 © 2007 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2007.01.03716J. Sajaniemi等人/理论计算机科学电子笔记178(2007)15编程知识(变量的作用),并使用隐喻,使这种知识更容易吸收的学习者。新手在学习非常基本的OO概念时存在问题,这导致误解,导致错误或次优的编程技能(参见,例如,[4、6、7])。程序可视化和动画应该增强学习并防止误解,但可视化应该是信息丰富的,并且与要学习的概念处于同一水平。因此,基于编程语言实现或无信息的图形符号的可视化可能很容易无法帮助新手学习编程概念。隐喻涉及到一个新的想法,即所谓的目标,在一个更熟悉,通常更具体的一个,来源[3,11,17]。与类比不同,隐喻不是一种精确的对应物,而是与目标语在形式和内容上的差异。隐喻的关键在于源语和目标语之间的关系必须涉及某种转换,因此人们必须积极地构建构成隐喻的关系[1]。源和目标的显著差异-在显著相似的背景下-刺激思维,并可以促进主动学习[3]。本文将隐喻方法应用于面向对象程序设计。我们的最终目标是为新手提供隐喻,帮助他们学习基本的OO概念。为此,我们提出了新的隐喻类,对象,对象实例化,方法调用,参数传递,对象引用和垃圾收集。这些隐喻旨在掌握面向对象编程的基本思想;它们不依赖于实现问题或专为专家使用而设计的建模技术。本文的其余部分组织如下。第2节描述了新的隐喻,并解释了如何在程序动画器中将它们可视化和动画化。第三部分是一个文献综述,介绍了目前的程序动画系统中的可视化,并与我们的想法进行比较。第四节讨论了隐喻和基于隐喻的动画在入门程序设计教育中的可能用途。最后,第5节是结论。2 OO概念对象封装了实体的存在、状态和行为。它的形象化应体现这三个方面。对象的存在性受到对象的实例化及其在垃圾收集中的销毁的限制。状态表现在成员变量中,行为是方法调用的结果,包括局部变量的创建和销毁。单个成员和局部变量的行为可以通过已经有隐喻的角色[18,19一只狗作为追随者,一个盒子作为收集者等等。对于一个对象,我们因此选择了一个监视面板的隐喻,它具有类相关的固定对象的实例化是通过复制一个类特定的蓝图书中的蓝图。 蓝图书通常放在J. Sajaniemi等人/理论计算机科学电子笔记178(2007)1517仅在对象实例化需要时才显示和出现。每个蓝图在书中占据自己的页面,类变量位于同一页。蓝图的背景颜色是蓝色,而类变量区域的背景颜色是白色。每当该类的对象处于活动状态时,此区域就变得可见。类变量与成员变量使用相同的角色隐喻来描述在此上下文中,方法调用的一个有意义的比喻是包含所有参数和局部变量的临时车间,以及调用结果的工作台。由于新的局部变量可以在调用过程中创建和销毁,因此workshop必须足够大以容纳所有变量。如果调用了另一个方法或递归调用了一个方法,则会创建一个新的车间。因此,共存工作室的数量取决于未完成的方法调用的数量。为了强调方法调用与对象的成员变量相关联最后,一个静态的方法是可视化为一个永久性的车间与混凝土基础和坚固的屋顶。方法调用的传统口头隐喻是“消息传递”。我们用一个包含实际参数的信封来方法调用的动画开始于在调用工作室中创建参数信封,然后信封将与被调用对象相关联的监视面板连接,新的工作室出现,信封中的值被转移到形式参数的角色隐喻,从而给出它们的初始值。空的en-value留在工作台上,并在方法调用结束时用返回值填充。然后,完成的workshop消失,信封沿着方法调用期间创建的路径返回到调用workshop在Java中,指针被对象引用取代这个概念已经被发现是有问题的新手和一个精心设计的隐喻是必要的。传统上,指针由箭头表示,每次为指针分配新值时,都会重新绘制箭头以指向新项。这个箭头隐喻建立在实现方面:指针是内存地址,对指针的赋值意味着为指针设置新的内存地址为了避免这种实现观点,我们建议使用一个三角旗比喻:对象引用被可视化为具有相同唯一标识的两个pennant;一个pennant附加到对象引用变量,另一个附加到被引用对象。一个空的参考是可视化的两个pendrone躺在地上。将新创建的对象分配给对象引用时,通过将另一个标志移动到新对象来设置动画;重新分配对象引用时,通过将标志从旧目标移动到新目标来设置动画。如果两个变量引用同一个对象,则该对象有两个pendrone。因此,不具有优先级的对象不能被引用并且经受垃圾收集,垃圾收集由四处移动并且停在每个对象旁边的垃圾车来动画化,即,手表面板,没有钢笔。然后调用finalizer,手表面板最终被挤压到车辆中图1是基于上述隐喻的可视化草图。 安-18J. Sajaniemi等人/理论计算机科学电子笔记178(2007)15Fig. 1. 一个使用OO隐喻的程序动画师的假想用户界面。J. Sajaniemi等人/理论计算机科学电子笔记178(2007)1519mated程序模拟一个由银行账户组成的银行。对象引用myBank被可视化为一个三角旗,它的一对三角旗被附加到Bank对象。这两个三角旗有相同的颜色,这是从所有其他三角旗对不同。各个银行账户被实现为一个链接列表,并被可视化为具有进行链接的pendable的监视面板。最后一个帐户中的下一个链接是空的,在地面上有两个pendrone成员变量用角色形象来描述:变量账户中存储的账号是固定值;收集存款和取款净收益的变量余额是收集器等。概念上封装单个属性的系统定义对象字符串、日期)就像原始变量一样可视化。例如,存储在成员变量date中的最新交易日期是最近的持有者。当前活动对象(窗口底部的帐户1476)及其活动方法(updateRate)用红色增强。此方法调用的workshop包含参数transferDate(具有角色固定值)和局部变量increment(临时)。这个方法是从同一个对象的deposit方法调用的,deposit方法是从银行账户1235(最顶层的银行账户)的transferTo方法调用的,transferTo方法又是从单个银行对象的creditTransfer方法调用的--从静态方法main调用。方法creditTransfer和transferTo返回一个整数;因此它们有一个工作台来准备返回值。垃圾车四处移动,但目前没有围栏的物体。蓝图书现在还看不见。3与当前可视化的当前的OO程序动画系统使用基本的几何图形(2D或3D盒子,圆锥体,箭头等)进行可视化。这些数字组成了一种对学生来说是新的符号语言。因此,学生必须同时学习新的几何符号语言,新的OO概念本身,以及这两个世界之间的联系。例如,GROOVE [10],Jeliot 3 [15],OGRE [14]和OOP-Anim [5]使用几何图形来表示OO结构,例如类和对象,类和对象之间的关系,类层次结构中的关系等。另一方面,JACOT [12],JAN [13]和JavaVis [16]使用UML符号用于相同的目的。尽管UML是一种标准的符号语言,但它对新手来说是新的,除了OO概念本身之外,还必须学习。这些系统都没有使用OO概念的隐喻。JACOT、JAN和JavaVis也使用UML序列和对象图来模拟方法调用;方法实例不是可视化的。GROOVE可视化方法调用类似于我们的建议,但方法实例没有附加到相应的对象。在OOP-Anim中,每个对象都像UML中一样被描述,并且包含成员变量和所有方法的名称;方法调用通过改变对象20J. Sajaniemi等人/理论计算机科学电子笔记178(2007)15并且整个方法在单个步骤中执行。可视化中既没有参数也没有局部变量;此外,同一方法的多个实例无法可视化。Jeliot 3使用一个特殊的方法实例区域来动画化方法调用,该区域表示基于实现的方法调用堆栈。这些系统都没有使用任何类似于我们的车间比喻。上述系统用箭头或引用对象的微缩图片来可视化对象引用如果一个新的值被分配给一个对象引用变量,箭头被重绘或微型图片被替换为一个新的。这是这与我们的三角旗隐喻相反,在三角旗隐喻中,引用变量具有唯一的标识,即使引用的目标发生变化,该标识也不会改变4教育中的隐喻和动画隐喻、可视化和动画可以通过多种方式用于教育。例如,学生的参与程度似乎会影响学习成绩[9]。很明显,快速被动地观看一个自主运行的动画并不能提高学习能力,而是需要更费力地对可视化进行心理处理。在我们早期的研究中[2,21],学生们观看每个节目的动画短片约半小时:首先教师演示动画,然后学生们使用教师精心选择的数据自己运行动画,最后学生们用自己的输入数据制作动画。一直以来,学生们都被鼓励慢慢地进行动画,并预测下一个语句对变量值和程序其他方面的影响。这种方法被证明是有效的,但需要大量的时间为每个程序的动画。因此,我们建议动画只用于少数精心挑选的OO程序,以展示OO概念的核心方面。仅选择几个要动画化的程序使得动画的创作相当容易,因为不需要动画化任意程序。特别是,我们不建议OO隐喻和慢速动画应该作为入门编程课程中唯一的编程环境相反,我们建议使用通用的编程环境来完成正常的编程任务,而使用基于隐喻的动画来完成少数精心挑选的程序。每一个动画都应该在适当的概念在课堂上被处理之后呈现。此外,隐喻可以--或许应该--用于学习材料中的静态可视化,这样学生就有足够的时间来积极构建包含隐喻的关系。只有反复推敲这些概念才可能导致主动学习。研究发现,隐喻的效果在复杂的学习情境中是积极的,而在简单的任务(记忆或死记硬背)中的效果则微乎其微[8]。由于编程是一项非常复杂的任务,人们可以期待积极的效果。事实上,我们早期的实验[2,21]已经表明隐喻和动画对学生在祈使句中使用变量的能力有很强的J. Sajaniemi等人/理论计算机科学电子笔记178(2007)1521编程.类、对象、方法和其他OO结构甚至是更复杂的概念,使用这些OO结构会导致比使用变量和简单控制结构更复杂的编程情况因此,隐喻不仅对简单的编程有积极的影响,而且对OO概念的学习也有积极的影响。例如,OO概念中的一个典型的新手误解是将对象与类混淆[4,7]。我们的新隐喻明确了这一区别:类被表示为蓝图书中的蓝图,而对象是使用适当蓝图创建的具体实例。类的蓝白蓝图和对象的黄铜色监视面板在视觉上的强烈区别使得这些概念之间的区别变得清晰。另一个新手的误解是假设方法有一些关联的对象。在动画中,方法的执行是用空间上位于关联对象旁边的车间来描述的,但是静态方法main旁边没有对象。因此,静态方法和非静态方法之间的差异可以很容易地用视觉术语来解释总之,以前的文献提供了理由,假设隐喻和动画可以用来提高学习面向对象编程。当然,这一假设必须通过实证调查进行彻底研究。5结论我们已经为类(蓝图书)、对象(监视面板)、方法调用(车间)、参数传递(信封)、返回值(工作台)、对象引用(三角旗)和垃圾收集(垃圾车)提供了新的隐喻。我们还展示了这些隐喻的可视化和使用这些隐喻的程序动画草图。可视化和动画不会扩展到大型程序,但这不是问题我们不建议使用可视化,例如, 调试或理解大型程序。相反,我们建议在初级程序设计教育中,首先使用PlanAni程序动画器引入变量的角色及其角色当角色隐喻熟悉时,可以通过动画一些精心挑选的OO程序来引入OO隐喻。与适当的学生参与,这可以预期给学生一个正确的心理模型的OO概念之间的关系,建立在一个空间表示的程序执行的心理隐喻在视觉上的丰富我们目前正在为几个Java程序创作动画。将来,我们计划在编程入门课程中使用它们,并研究隐喻和动画如何影响新手对OO概念的心理模型的发展22J. Sajaniemi等人/理论计算机科学电子笔记178(2007)15引用[1] Alty,J.L.,R. P. Knott,B. Anderson和M. Smyth,A framework for engineering metaphor at theuser interface,Interacting with Computers13(2000),pp. 301-322[2] Byckling,P.和J. Sajaniemi,变量的作用和编程技能的提高,在:第37届SIGCSE计算机科学教育技术研讨会,2006年,第37页。413-417[3] 卡罗尔,J.M.和R. L. Mack,Metaphor,Computing Systems,and Active Learning,InternationalJournal of Human-Computer Studies51(1999),pp. 385-403[4] Eckerdal,A. 和M. Thun′e,NoviceJavaprogrammers' c on c p t i on s of“o b j e c t“and d“c l a s s“,andvariation theory , in : Proceedings of the 10th Annual SIGCSE Conference on Innovation andTechnology in Computer Science Education ITiCSE'05(2005),pp. 八九比九三[5] 埃 斯 特 韦 斯 湾 和 A. Mendes , OOP-Anim , 一 个 支 持 学 习 基 本 面 向 对 象 编 程 概 念 的 系 统 , 在 :CompSysTechhttp://ecet.ecs.ru.acad.bg/cst/Docs/proceedings/S4/IV-6.pdf。[6] Fleury , A. E 、 Programming in Java : Student-Constructed rules , in : Proc. of the 31th SIGCSETechnical Symposium on CS Education,2000,pp.197-201.[7] Holland , S. , R. Gri aerths 和 M. Woodman , Avoiding object misconceptions , SIGCSE Bulletin29(1997). 131-134.[8] 徐,Y.- C.的方法,隐喻对新手和专家学习者的表现和心理模型发展的影响770-792.[9] 洪德豪森角D、S. A.道格拉斯和J. T. Stasko,算法可视化有效性的元研究,视觉语言和计算杂志13(2002),pp. 259-290。[10] Jerding,D. F.和j.t.陈文辉,以视觉化技术促进物件导向程式理解,国立成功大学计算机工程研究所硕士论文(1994)。[11]Lako,G.和M.约翰逊,[12] Leroux,H.,C. Mingins和A. Requile-Romanczuk,JACOT:一个基于UML的并发Java程序运行时检查工具,在:R。 Filman,M. Haupt和K. Mehner,编辑,第一届运行时检测先进技术研讨会,2003年,可在www.example.com上获得http://www.st.informatik.tu-darmstadt.de/pages/workshops/ASARTI03/LerouxASARTI03.pdf。[13] Lohr,K.- P.和A. Vratislavsky,Jan - Java animation for program understanding,in:Proceedings ofthe 2003 IEEE Symposium on Human Centric Computing Languages and Environments,2003,pp.28-31.[14] 米尔恩岛和G. Rowe,Ogre:Three-dimensional program visualization for novice programmers,Education and Information Technologies9(2004),pp. 219-237[15] Moreno,A.,N. Myller,E. Sutinen和M. Ben-Ari,可视化程序与Jeliot 3,在:先进的视觉界面,2004年,pp。373-376.[16] 厄什勒河和T. Schmitt,JAVAVIS:使用Java调试接口(JDI)的对象和序列图的自动程序可视化。Diehl,软件可视化编辑:国际研讨会,Dagstuhl城堡,德国,2001年5月20日至25日;修订的论文,计算机科学讲义2269,2002年,第2269页。176比190[17] 奥托尼,A.,《隐喻与思维》,剑桥大学出版社,1993年,第[18] Sajaniemi,J.,对新手级过程程序中变量角色的实证分析,见:IEEE 2002年以人为中心的计算语言和环境研讨会论文集(HCC37比39[19] Sajaniemi,J.,变量的角色主页,http://www.cs.joensuu. fi/zhaizaja/var roles/(2006),(2006年8月4日访问)。[20] Sajaniemi,J.和M. Kuittinen,Visualizing roles of variables in program animation,InformationVisualization3(2004),pp. 137-153[21] Sajaniemi,J.和M. Kuittinen,An experiment on using roles of variables in teaching introductionprogramming,Computer Science Education15(2005),pp. 59比82
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功