导航菜单

基于计算思维的Java课程群的教学改革和实践

邢 丹,姚俊明

(济宁医学院医学信息工程学院,山东日照276826)

摘要:针对面向对象程序设计中计算思维和设计模式的概念、面向对象设计的原则及常见的设计模式,提出绘制计算思维图,同时以Struts2框架中所体现的MVC设计模式为例,阐述该设计模式的思想、Struts2的使用、原理和自定义拦截器,指出在注重应用的同时突出思维模式的讲解,培养学生的计算思维能力。

教育期刊网 http://www.jyqkw.com
关键词 :Java课程群;计算思维;设计模式;Struts2;MVC模式

文章编号:1672-5913(2015)15-0036-05 中图分类号:G642

基金项目:济宁医学院校级教学改革专项课题“基于PBL教学模式的Java课程群的混合式课堂教学模型及资源平台的构建”( 14053)。

第一作者简介:邢丹,女,讲师,研究方向为计算机教育及网络算法,danxing1981@126.com。

1 计算思维的内涵及在Java课程群的应用

计算思维是以设计和构造为特征的“构造思维”,即以计算手段研究社会/自然现象及规律。作为计算手段奠基性思维之一的程序,程序设计语言作为计算机能够“理解”的语言,经历了从机器语言、汇编语言、面向过程的语言到面向对象的语言的发展。从上述发展过程可以看出,语言从易于机器执行到易于人的思维习惯,这种“构造思维”也越来越多地模仿社会/自然现象及规律。

目前,程序设计语言的教学只是在讲授语法,学生也主要是练习语法,而未真正领会程序设计的思想和软件设计的规律。计算机程序设计语言教学改革应该逐步加强培养学生的计算思维能力,其培养目标的定位应该不仅是掌握程序设计的语法,还要掌握计算思维的基本方法。对学生专业素养的培养应不仅局限于学习理论知识点和掌握通用软件的使用,还应能够适应未来软件的升级和变化以及未来社会变革的需要,因此应着重培养学生的计算思维能力,理论知识点很容易被遗忘,而思维方法却可以迁移、跨越时间和空间,直接或间接地应用到未来的工作、学习和生活中。

目前流行的面向对象的开发语言Java在语言中实现了对面向过程的封装,将过程作为类的一部分,提升了抽象的粒和封装的粒度。另外,Java程序不仅是编程语言,同时还是一个平台(有标准的JavaSE平台,向大方向为JavaEE平台,向小方向为Java移动嵌入式开发),因此Java课程的学习应是Java课程群的系统学习,即从JavaSE、Java Web、JavaEE、JavaEE框架、设计模式再到Android的学习。Java课程群中的知识点多,学习过程相对较难且复杂,但在复杂的代码背后却蕴含大量的计算思维。计算思维中的程序设计(尤其是面向对象的设计)有很大一部分的精华体现在设计模式中,体现在计算思维之树上。思维能力的培养需要依赖于知识点,如果把每个知识点看作一个环节,那么各个环节“融会贯通”后就成为某种思维方式。传统的单纯从理论上讲解设计模式既抽象,又难理解,教师可将Java课程群中所体现的计算思维总结为各个知识点,如图1所示;将各个知识点贯穿于Java课程群的理论和实践教学中进行重点讲解,使学生能够掌握设计思想的精华,并以在Struts2中的MVC模式为例进行理论和实践教学,培养学生的创造性能力。

解决方案是一个通用设计,用来解决约束,达到目标。例如,在拥有一个对象的集合的情景中,有一个需要走访每个对象,但是不用关心集合的实现的问题,解决方案是将迭代封装进分离的类中。通俗的理解为:发现自己处于某个情境下,面对着所欲达到的目标被一群约束影响着的问题,然而,你能够应用某个设计,克服这些约束并达到该目标,将你导向某个解决方案。设计模式的这种概念同计算思维所训练的思维方式有异曲同工之处。思维具有联想性、普适性和迁移性,有了这种思维方式,不仅可以解决软件开发和设计的问题,还能够激发学生的潜能。

在软件开发中,无论你在何处工作,构建什么业务,用何种编程语言,不变都是相对的,变化才是永恒的。无论当初软件设计得多完善,在使用的过程中都需要不断更新,因此所有面向对象设计的原则都是在封装变化,应对变化。

2 设计模式

2.1 面向对象设计原则

(1)封装变化:找出应用中可能变化的部分,把它们独立出来,不要和那些不需要变化的代码混在一起;减小代码变化对操作者的影响,使系统变得更有弹性。软件开发设计关心的是建立弹性的设计,方便维护,可以应对变化。良好的软件设计必须具备可复用、可扩充、可维护3个特性。

(2)面向接口编程:针对接口编程,而不是针对实现编程。针对接口的编程关键在多态,多态在执行时会根据实际状况执行到真正的行为。可以更明确地说“变量的声明类型应该是抽象类或者一个接口”,这样,只要是具体实现此接口或抽象类的类所产生的对象,就都可以指定给这个变量,这也意味着声明类时不必了解以后执行时的真正对象类型。例如,代码Animal a=new Dog(); Animal.makeSound();即父类的引用指向子类的对象,子类实例化的动作不再需要在代码中硬编码,而是在运行时才指定具体实现的对象,使用其方法。然后,可以继续将生成的对象放到方法中,对于代码A=getAnimal();a.makeSound();不必了解实际的子类是“什么”,只关心它知道如何正确地进行makeSound就可以。

(3)多用组合,少用继承。继承描述的是“是一种”的关系,组合描述的是“有一个”的关系,使用组合建立系统具有很大的弹性,不仅可将算法族封装成类,还可以“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可。软件开发中需要用在系统维护和更新上的时间要比开发更多。

(4)为了交互对象之间的松耦合设计而努力。松耦合的设计能建立有弹性的软件系统,能够应对变化,因为对象之间的互相依赖降到了最低。观察者模式和监听器模式都使用了这种设计理念。

(5)类对扩展开放,对修改关闭。

(6)依赖倒置原则:依赖抽象,不要依赖具体类。避免在软件设计中违反依赖倒置原则,变量不可以持有具体类的引用;不要让类派生自具体类;不要覆盖基类中已实现的方法。

2.2 常用的模式

(1)创建型模式:涉及将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦,如单例( singleton)模式、构建者( builder)模式、原型(prototype)模式、抽象工厂和工厂方法模式( abstract factor, factorymethod)等。

(2)行为型模式:涉及类和对象如何交互及分配职责,如模板方法( template method)、访问者( visitor)模式、中介(mediator)模式、迭代器( iterator)模式、命令(command)模式、过滤器(interpreter)模式、观察者(observer)模式、责任链(chain of responsibility)模式、状态( state)模式、策略(strategy)模式等。

(3)结构型模式:可以把类或对象组合到更大的结构中,如装饰者( decorator)模式、组合( composite)模式、代理(proxy)模式、桥接( bridge)模式、适配器(adapter)模式等。

2.3 生活中的模式

模式并非从软件开始,而是始于建筑和城镇的架构。事实上,模式的概念可以被应用在许多不同的领域。架构模式:建筑、城镇和城市的架构;应用模式:如出现在3层架构、客户/服务器系统以及Web系统级架构中的模式;领域特定模式:关注特定领域的问题,如并发系统和实时系统;业务流程模式:描述业务、顾客和数据之间的交互,此种模式能够处理“如何有效决策并沟通决策”之类的问题如公司的项目管理会议;组织模式:描述人类组织的结构以及实践,如开发团队和顾客支持团队;用户界面设计模式:致力于解决涉及交互式软件的问题,如视频游戏设计者、GUI构造者和制作者。因此,模式的学习不仅可以应用在程序设计上,还可以把这种思维方式迁移到其他的应用场合。

3 Struts2中的MVC模式

3.1 Struts中MVC模式的应用案例

教师应以分析问题和解决问题为改革的突破口,加强学生自主学习能力培养,着重以培养学生的工程实践能力为目标;采用传授解决问题的方法,“授之以渔”,理论讲解“以点带面”、由浅入深、循序渐进的策略,达到“触类旁通”的效果;先演示怎么使用,然后讲解为什么要这样。

3.2 Struts2的讲解

第1次课:内容为计算器的实现,先讲解Java Web学习中采用的开发方式是在JSP页面中嵌入Java脚本页面,“牵一发而动全身”;进而讲解MODEL1模式,给出计算器的开发,分析这种开发模式的优缺点。

前端界面通常容易改变,后台模型不易变化。企业通常采用MODEL2开发模式,即MVC模式。计算器自定义的MVC模式讲解中间使用了一个控制器Controller将表示层和模型层分开。

第2次课:采用Struts2框架之后,中间控制器无需自己定义,由Struts2完成;讲解struts2软件包的下载及资料的使用,学习的关键是业务控制器及配置文件,阅读Struts2下载包中apps文档中的例子作参考,从查找过程培养学生的自学能力。

第3次课:巩固、实践,学习在线考试系统。

第4次课:深入学习原理,如对于Intercep-tor,在复杂的代码背后设计者的初衷是什么,归根结底是程序员的解脱。

第5次课:框架原理、从自定义拦截器进行框架的深入。

在Struts2的jar包中找到org.apache.struts2.dispatcher.,在FilterDispatcher类(在struts2.1版本中则为StrutsPrepareAndExecuteFilter)的doFilter方法中加入断点,以观察工作原理。读代码的原则是先读脉络,再研究细节。执行过程如图2所示。前端页面提交的请求交给Struct2Filter过滤器之后,再生成一个Dispatcher类,通过该类产生一个ActionProxy代理类,代理类经过一个个拦截器之后会执行自定义的业务控制类TestAction,返回的顺序刚好同原顺序相反。

4 结语

通过对面向对象程序设计课程中所体现的计算思维的知识点——设计模式中的主要知识点进行归纳总结,分析采用设计模式的作用并重点以Struts2讲解过程为例,帮助学生明确MVC模式的设计思想、Struts2框架的使用和自定义拦截器,掌握Struts2内部的原理。实践证明,此种教学法更加突出了计算思维的作用,取得了更好的教学效果。

教育期刊网 http://www.jyqkw.com
参考文献:

[1]战德臣,聂兰顺,徐晓飞.计算之树:一种表述计算思维知识体系的多维框架[J]工业和信息化教育,2013(6): 11-12.

[2]战德臣,聂兰顺,计算思维与大学计算机课程改革的基本思路[J]中国大学教学,2013(2): 59-60.

[3] Freeman E.Head first设计模式[M].北京:中国电力出版社,2007: 40-45.

[4]李莹.计算思维在计算机课程教学中的贯穿[J].计算机教育,2013(4): 37-39.

(编辑:宋文婷)

下载文本