计算思维与程序设计

2013-08-15 00:45武仁杰郭喜凤郭晓玲刘志兰
关键词:用例程序设计对象

武仁杰,郭喜凤,郭晓玲,刘志兰

(1.河北北方学院信息科学与工程学院,河北 张家口 075000;2.张家口市桥东区环境卫生管理处,河北 张家口 075000)

1 引 言

计算思维 (computational thinking)是当前国际及国内计算机界广为关注的一个重要概念[1]。计算思维作为人类三大科学思维 (理论思维、实验思维、计算思维)之一[2],涉及到运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为。计算思维涵盖了反映计算机科学广泛性的一系列思维活动[1]。

计算思维就是通过约简、嵌入、转化和仿真等方法,把一个看来困难的问题重新阐释成一个知道问题怎样解决的方法。它采用抽象和分解来完成复杂的任务或设计复杂的系统;它选择合适的方式去陈述一个问题,或者选择合适的方式对一个问题的相关方面建模使其易于处理;它使树立在不必理解每一个细节的情况下就能够安全地使用、调整和影响一个大型复杂系统的信心;它是为预期的多个用户而进行的模块化,是为预期的未来应用而进行的预置和缓存[1]。

计算思维是利用启发式推理来寻求解答,是在不确定情况下的规划、学习和调度。计算思维是利用海量的数据来快速计算,它是在时间和空间之间,在处理能力和存储容量之间的权衡[1]。

计算思维所关注的核心问题是人的思维方式及问题求解能力的培养[3]。把转变思维方式融入到 “程序设计”类课程的教学中,以系统化、逻辑化的计算思维方式去思考问题和解决问题,着重培养学生的计算思维能力,最大限度地利用有限的时间强化学生如何进行工程化、系统化程序设计的观念和能力,而不是过于局限于机械的语言本身,让学生成为被动的语法背诵者。事实上,语言特性及语法规则可以很快从相关资料中获取,而面对实际问题能快速地找出解决的方法才是一个开发人员能力的体现。

2 计算思维与程序设计

计算思维必须建立在服务的基础之上,同时,计算学科为服务的工程化、信息化和智能化提供技术和工具以及产品 (软件、硬件或集成系统)服务[4]。

计算思维不仅仅源于和服务于计算机科学。实际上,狭义地讲,计算机思维源于并服务于计算机科学、计算机工程、软件工程、信息技术和信息系统。广义地讲,计算思维源于并服务于由理论、技术、工程、工具、服务和应用构成的计算链(或计算网络)。这一计算链以理论为始点,以应用为终点。这一计算链上的每一结点都将产生计算思维,而计算思维从这一计算链的始点到终点的转化构成了计算思维的工程化[4]。

教育部专家在 “积极研究和推进学生计算思维能力的培养”一文中指出:计算机及其相关专业教育应该在计算思维能力培养中做出表率。事实上,计算思维已经在某种程度上渗透到培养方案和课程大纲中,但计算思维能力培养的水平还不够高,学生对于计算思维要掌握的程度也不够深。对此,需要更主动地采取有效措施,从思想观念、师资队伍、教学内容、教学方法等方面入手,进一步强化对学生开展计算思维能力的培养。

2.1 通过模型设计训练计算思维

程序设计在计算机及其相关专业教育教学中是必不可少的内容,程序设计课程教学的许多环节都可以训练学生的计算思维能力,使计算思维能力得到提高。模型设计是程序设计的重要方法,一个好的模型会使程序变得简洁而轻松,程序的性能也会得到提高。模型设计过程中,计算思维起着非常重要的作用。因此它也是计算思维能力培养的重要途径。

无论是结构化程序设计还是面向对象程序设计,需求分析是整个程序设计的第一个阶段。结构化的分析方法是最具代表性的分析建模技术,它是一种面向数据流进行需求分析的方法,分为功能建模、数据建模和行为建模。

功能建模的思想就是用抽象模型的概念,按照数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求为止。它用数据流图来描述。如银行储蓄系统业务流程为:储户填写存单或取单,然后由业务人员录入系统。如果是存单,系统记录存款人姓名、身份证号、存款类型、金额等信息,并打印存单给储户;如果是取款,系统首先核对储户密码,若密码正确,则系统计算出利息并打印利息清单给储户。针对这样的需求,首先引导学生识别外部实体有哪些,并确定输入数据流及输出数据流。将存款及取款信息抽象为事务,最后得到分层的数据流图。

数据建模使用实体-关系模型在较高的抽象层次 (概念层)上对数据结构进行建模。实体-关系模型表示为可视化的ER图。对于银行的储蓄业务,涉及的对象有储户、账户、存单和取单,在进行需求分析时,可以把这些对象抽象为实体,这些实体间有着一对一或一对多的关系,比如一个储户有多个帐户,一个帐户可对应多个存单等,存款和取款事件抽象为这些实体间的联系。通过抽象设计出ER图,最后确定数据库的结构。在这个过程中,学生的计算思维能力得到了训练。

行为建模,就是用状态转换图来描绘系统的状态及引起系统状态转换的事件来表示系统的行为。状态是任何可以被观察到的系统行为模式,事件是某个特定时刻发生的事情。银行的储蓄业务流程中,发生了一系列的状态转换,通过引导学生对这些流程的行为建模,可以得到存款过程状态图和取款过程状态图,也训练了学生的计算思维能力。

在面向对象的程序设计中,通过用例模型、静态模型和动态模型来实现功能建模、对象建模和交互建模。

建立用例模型的目的是提取和分析足够的需求信息。该模型应能表达用户需要什么,而不涉及系统如何实现的特定细节。如分析学校的选课系统需求时,首先引导学生根据系统功能,确定业务的参与者是学生、教师、系统管理员和学籍档案系统;接着在确定业务需求用例时,设计以下问题帮助学生更好的标识系统的用例:

·每个参与者的任务是什么?

·每个参与者是否都要从系统中创建、存储、移动、修改或读取信息?

·支持或维护系统的用例有哪些?

·当前的用例是否覆盖系统的所有功能需求?

在此基础上,设计出选课系统的环境图,确定系统的主要输入和输出及潜在用例;最后画出用例图,标识参与者与用例之间、用例与用例之间的关系。在整个用例模型设计过程中,学生的计算思维能力得到了培养。

用例模型是从用户的角度描述对系统的需求,依据用例模型可以导出对象模型。在系统分析阶段,对象建模的任务是建立问题域的概念模型。为了降低系统的复杂度,需要在概念上把系统所包含的内容分解成若干个范畴;然后确定问题域的类与对象。在选课系统中,确定教师、学生、课程、课程任务、学生名册和成绩单等类与对象。在确定类与对象后,分析确定关联有助于考虑问题域的边缘情况,发现那些尚未被发现的类与对象。如教师与课程任务、课程与课程任务、学生与课程任务之间都存在关联关系。接着引导学生为类和对象确定各自的属性,如选课系统中教师类至少有教师号、姓名和系别等属性,学生类有学号、系别、专业、班级、姓名等属性。最后为类和对象确定服务,即对象收到消息后所能执行的操作,如选课系统中教师类有查询所教课程的信息和查询学生名册等服务。这一系列的过程,学生学会了分析问题和解决问题的方法,计算思维能力有了一定的提高。

动态模型在交互式系统设计中起着很重要的作用。动态模型的描述工具有顺序图、协作图和状态图。顺序图按照时间顺序显示对象之间的交互关系。协作图用于描述相互协作的对象间的交互关系和链接关系,它比顺序图更形象。状态图由对象的各个状态和连接这些状态的转换组成,用于描述用户接口、设备控制器和其它具有反馈的子系统,也可用于描述在生命期中跨越多个不同性质阶段的被动对象的行为。在选课系统分析中,课程任务类的对象具有比较明显的状态特征,在教学中,引导学生分析其各种状态下,有初始状态、可选状态、人满状态和关闭状态。

2.2 通过多样化的算法训练计算思维

算法 (algorithm)是对解决问题方案准确而完整的描述,是解决问题的一系列清晰指令。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。不同的算法可能用不同的时间、空间或效率来完成同样的任务。程序设计中的许多问题都需要不同的算法来解决。由于学生的认知差异,必然导致学生解决问题的方法不同。在教学中,鼓励学生使用适合自己认知程度的算法,然后引导学生对算法进行反思和进一步探索,从而达到简化并优化算法的目标。这种将一个计算任务用多种思路、多种算法进行求解的教学过程,可以培养学生的计算思维能力。如程序设计中的排序问题,目前的主要算法有:冒泡排序、选择排序、插入排序、壳排序、归并排序、快速排序、堆排序、拓扑排序、锦标赛排序和基数排序等。教学中从学生使用的排序算法中,指导学生考虑程序的执行时间、存储空间和编程工作量等因素。对于数据量较小的情形,主要考虑编程工作量的多少,以程序简化为先;而对于数据量大的情况,应首先考虑程序的执行时间,以执行时间短为优。

3 结束语

程序设计是计算机及其相关专业教育教学中必不可少的内容,工程化程序设计的各个环节所使用的设计模型对于培养计算思维能力有着极其重要的作用。只要在程序设计类课程中,主动地采取有效措施,从思想观念、教学内容、教学方法等方面入手,强化对学生计算思维能力的培养,学生的计算思维能力就会得到提高。

[1]Wing J M.Computational thinking[J].Comm ACM,2006,49(03):33-35.

[2]朱亚宗.论计算思维—计算思维的科学定位、基本原理及创新路径[J].计算机科学,2009,36(04):53-55,93.

[3]郭喜凤,武仁杰,米海英.计算思维能力培养模式探索[J].河北北方学院学报:社会科学版,2012,28(05):115-117.

[4]郭喜凤,孙兆豪,赵喜清.论计算思维工程化的层次结构[J].计算机科学,2009,36(04):64-67.

猜你喜欢
用例程序设计对象
UML用例间包含关系与泛化关系的比较与分析
UML用例模型中依赖关系的比较与分析
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
联锁软件详细设计的测试需求分析和用例编写
從出土文獻用例看王氏父子校讀古書的得失
攻略对象的心思好难猜
高职高专院校C语言程序设计教学改革探索
基于熵的快速扫描法的FNEA初始对象的生成方法