创新教育实例之“三国人物关系模型”

来源:互联网 发布:樱井知香 喷泉 番号 编辑:程序博客网 时间:2024/04/28 01:20

       最近与一位从事高校软件工程教育的同仁(挚友)聊天,谈到如何提高学生的创新性思维,两人不免大肆吐槽一番,有谈到过目前高校教育体制、学校的培养方案等等等等,但是这些东东无论是作为我们老师还是学生,只有微不足道的建议权,没有任何决策权,而且有些东西根深蒂固,在短时间内根本无法解决,难过。因此,我们只能从现实出发,看能否尽大的努力,从课堂和实训教育的角度来让学生的创新性思维有所提高。


      如何做?如果希望培养有创新性思维的学生,老师也应该努力去创新。老师的创新将引导和激发学生的创新性思维,创新教育离不开教育的创新。他跟我介绍了他在带《Java面向对象程序设计》实训时的一个创新之举,我深受启发,觉得这是一个挺不错的创新教育实例,希望抛砖引玉,引发各位教育工作者的思考和讨论,更好地进行创新教育和教育创新。


     本学期,朋友承担的是《Java面向对象程序设计》的教学和实训指导任务。通常大学里面的Java实训项目大都是做一个MIS系统,例如我原来用过的库存管理系统、酒店管理系统等,也有用过即时聊天系统的(涉及到网络编程、多线程等技术),技术难度会稍大,但是数据库那一部分又太过简单。这些都不说,关键是这样的项目很难创新,每年都做这几个,做来做去就是这么几个项目,这么几个功能,而且,学长学姐们会给学弟学妹们贡献无数代码和文档,偷笑,导致实训的效果越来越差,学生的实训积极性也不是很高。这不是办法?


       于是,今年做了一次尝试,换了一个新的实训项目——构造三国人物关系模型,基本介绍如下:

      从《三国演义》文本格式的电子书中,选择不少于20个人物,构建一个三国人物关系模型,要求如下:

       (1) 分小组(4-5人)讨论,确定一个人物关系模型构建算法,要求给出合理的算法分析和描述;

       (2) 对于指定的三国人物,以图形化方式显示出与之关系最紧密的5-10个人,按照关系紧密程度排列;

       (3) 要求使用两种及以上的设计模式,注意软件的可扩展性和可维护性,尽量使用配置文件,减少硬编码;

       (4) 以C/S 桌面软件的形式呈现,开发语言:Java;开发工具:Eclipse。


       最后检查和验收时,发现每一组学生的模型构造均不一样,不少学生还学习了一些相关的数学和数据挖掘知识,例如关联规则、聚类分类、相似性计算、概率统计,甚至马尔科夫链等,大笑。下面我简单介绍一下其中两组学生的实现方案【比较简单易懂的,毕竟还只是本科三年级学生】:


       (1) 第一组学生

       首先选择20个常见的三国人物,建立一个名字库(配置文件),包括每一个人物的各种别名和昵称,微笑,例如,曹操的别名(字)有“操”、“孟德”、“曹孟德”等;诸葛亮的别名(字)有“孔明”、“亮”等;

       使用一种滑动窗口扫描的技术,滑动窗口的大小通过配置文件设置(例如50),也就是说对于《三国演义》中的每一回,每次扫描指定长度的文本,在其中判断是否存在两个人的名字,如果有则关系计数加1(如果两个关系紧密的人刚好位于两个不同的窗口中,这种方法会导致产生误差,但也不失为一种可行的方法),最后统计两两之间关系的数量,再图形化显示。该组学生还分析了一下滑动窗口大小对结果的影响,得到了一系列在不同滑动窗口下人物关系模型,证明滑动窗口在一定范围内,人物关系是比较稳定的。

       在实现过程中使用了策略模式和单例模式,其中,策略模式用于扩展关系计数算法,可能以后会有更好的算法;主窗口用了单例模式,防止创建多个相同的界面。


       (2) 第二组学生

       以《三国演义》的每一回为一个单位,因为三国每一回的标题中都会提到一两个核心人物,然后分析该回中各个人物出现的次数(频率),找出在以核心人物作为标题的章回中其他出现频率最高的人物【也考虑了同一个人的多种不同的称呼】,认为他们之间的关系最密切,并据此构建人物关系模型。

       在实现过程中使用了单例模式和观察者模式,其中观察者模式是用在MVC中,提供了多种图形化显示方式(柱状图、折线图等),只要模型层的人物列表发生变化,多个图表都会随之发生改变,从而实现一对多的依赖联动。

 

      

       虽然这两组学生的模型都很简单,但都是他们自己的想法,并且都能够对自己的思路进行清晰的讲解。关键是学生们对这个项目很感兴趣,还有学生把《三国演义》这个目标库改成了自己正在看的一本玄幻小说,看软件的分析结果和自己认为的结果是不是一致。另外,每一组学生都在试图创新,在分析和设计算法的过程中也能够学到很多课堂之外的知识,大家都认为有收获。

       从这件事中,我也看到了很多高校老师也都意识到之前的创新教育存在的缺陷和不足,也都在思考和探索如何改善。当然,有时候使用MIS类型的项目作为实训项目效果也很好,而且还能够将程序设计、数据库、前端设计等相结合,在功能等方面也能够有所创新。但是,对于已有过一两次这种类型实训经验的学生,我们作为教育工作者,确实需要在后续的实训内容和形式上创新。学生创新能力的培养离不开具有创新性思维的老师,一想到这些,忽然感觉责任重大,路漫漫其修远兮,吾将上下而求索!大笑奋斗

 

【作者:刘伟   http://blog.csdn.net/lovelion

9 0