【以高质量程序设计为目标的教学改革】《c语言程序设计》

  摘要:高质量程序设计为目标的课程教学,是指把支持可维护性,提高可复用性,设计出贴近实际工程应用的“好程序”作为程序设计课程的教学目标,以强调设计模式,真实体验软件设计原则在实践中的渗透过程,真正理解面向对象思想和方法为教学优化的内容。做为C++后续的Java课程教学,受宜于C++语言语法方面的先期解决,应该担负起使学生提升程序设计的质量、能解决实际问题,从而满足社会用人需求的责任。
  关键词:设计模式;抽象类;接口;软件设计原则
  中图分类号:G642.0 文献标识码:A 文章编号:1674-9324(2012)06-0127-02
  一、问题的提出
  C、C++作为计算专业程序设计的基础课程,一个是结构化设计的入门语言,一个是具有面向对象知识的入门语言,基本都在大一就开设计了。正因为如此,它们的教学重点主要是在语言语法方面,程序设计的思想和方法强调不够,学生写程序的时候,很少进行设计,特别是用面向对象的思想和方法设计。而是直接写代码,只要完成功能就行,很少考虑程序的质量、是否可扩展、易维护。Java作为C、C++的后序课程,必须对C、C++学习过后所出现的程序设计质量不高的问题进行解决。不少人觉得Java语言与C++差不多,计算机专业课程没有必要开设,其实不然,Java依赖成熟的面向对象技术支持,系统本身设计采用了先进的程序设计理念、思想和技术,特别是面向对象思想和方法的设计模式的使用,充分体现了软件的设计原则,并通过Java语言表现出来。借助Java技术,理解和掌握面向对象的程序设计思想和方法,设计出能够解决实际问题的“好”程序,才是真正目标,而不是仅仅限于语言本身的学习。建立面向对象的思想和方法和发挥面向对象语言提供的优势是达到教学目标所设定的设计易维护、易复用的高质量的贴近实际应用的“好程序”的一个有效途径,这需要在课堂教学内容和实验教学内容上下功夫。这两个方面的优化都不能只依赖教材,而必须结合实际情况精心设计和安排,再选择合适的项目让学生完成,就能很大程度上缩短达到教学目标的时间,培养满足社会需求的软件人才,提升就业竞争力。
  二、课堂教学内容的优化
  如果单从语言角度来说,学了C++,的确是不再需要学Java,因为在C++之上发展其语言语法是非常相似的。大部分Java教材的编写也都围绕语言,其中绝大多数例子实际意义不大,或者说离实际工程较远。如果单纯依赖教材,会导致在面向对象的方法和思想方面得不到真正的训练,出现用面向对象的语言写出面向过程的程序,或者只停留在写了较低层次上的程序。最终,在程序的可维护性和可复用性方面都不能达到要求。作为Java前序课程的C、C++在高级语言语法方面已经提供了很好的实践过程,Java课程有基础,也有必要把教学重点放在面向对象的思想和方法上,强调设计,强调质量,不强调只完成功能。UML提供了10种模型图,其中类图、对象图等可以很好地帮助理解面向对象的思想和方法,对现实世界抽象,建立系统模型。设计模式的运用有助于掌握软件设计的“开——闭”原则、里氏代换原则、依赖倒转原则、接口隔离原则,组合/聚合复用原则、迪米特法则等等,帮助确定各个类型之间的结构关系和对象之间的通信和协作关系。由于Java抽象类和接口概念清晰,类库设计时采用了诸如工厂模式、适配器模式、装饰模式、观察者模式等等,同时还提供了开源的代码,把只停留在理论的软件设计原则、设计模式落实到了实处。这些方面要在课堂教学内容中必须加以重点补充做透彻分析。借助于UML及系统类库采用的具有面向对象思想和方法的设计模式的理解和掌握,发挥Java面向对象语言提供的优势,在具体的实验项目的设计过程中加以运用,就有可能是复用性、易维护性都具备的好程序。
  三、实验教学内容优化
  围绕教学目标,作为给学生实践起示范作用的实验教学内容的优化显得更为重要,应该构思接近实际生活中应用的、易于理解的、结构完整的、设计过程中能充分体现软件设计原则指导下的设计模式使用的问题,突显软件设计原则遵守及设计模式使用对于系统设计带来的好处。从身边寻找接近现实的实例是一个有效的办法,例如:实现某学院学期末教师的奖金发放。教师有属性:编号、姓名,教学总工作量,奖金;假设其中奖金的计算方法为:y=x*50(当职称为教授时)x*40(当职称为副教授时)x*35(当职称为讲师时)当用户输入编号、姓名,教学总工作量x时,得到该教师的信息及奖金数Y。问题一提出来,估计会有疑问:是不是问题太简单了?其实不然。作为起示范作用的系统不能太大、太复杂,如果问题的业务逻辑太复杂,设计结构就过于复杂,不易掌握理解,不同的系统又有不同的业务需求逻辑,这也不利于举一反三。但是,不同的系统设计都遵循同样的设计原则,要先强调设计,强调设计原则的体现、设计模式的运用过程,先弱化功能需求。如果按照课程设定的目标来设计,就需要有面向对象的思想和方法,运用设计模式。策略模式针对一组算法,将每一个算法封装到具有共同的抽象类或接口的独立类中,使得它们可以相互替换,在不影响用户使用的情况下发生变化。
  环境角色:Teacher,抽象策略角色Rule是具体策略类所需要的接口,具体策略角色:Algorithm1,Algorithm2、Algorithm3包装了相关的算法或行为。Rule接口,规定出其实现子类所必须进行的操作来作为系统的抽象层,如果这一抽象层时设计时能预见所有的扩展,当系统需要扩展时抽象层不需要修改,从抽象层导出的具体类可以改变,也可以增加,符合软件设计中的“开——闭”原则,即对扩展开放,对修改关闭。也就是说如果再增加一个助教的算法将会很容易。Java需要取得一个对象的引用,如果这个对象有抽象类的话,应该声明抽象类型的变量,代码(1)(2)(3)是这些原则的体现,Teacher要取得Algorithm1、Algorithm2、Algorithm3的引用,按照依赖倒转原则,定义的是其抽象父类Rule类型的变量obj,通过里氏代换原则,根据不同的情况动态获取不同子类的对象,具有更好的灵活性。体现了多态性。Java I/O流中使用了装饰模式,FilterInputStream是一个装饰类,DataInputStream、BufferedInputStream等是具体的装饰角色。如果计算完工作量奖金后,系统还要按职务:院长,书记为1.5倍,副书记、副院长1.2倍,教研室主任1.1倍来计算,这相当于增加了教师的职责,这跟I/O流有类似之处。采用装饰模式进行功能扩充,形成具体的装饰角色对教师增加职责(见下图)。
  四、目标实现与总结
  根据教学目标,围绕软件设计原则、设计模式的课堂教学及易于理解和掌握的实验教学内容的优化,学生实验环节给学生设计一些知识范围内的业务需求逻辑不太复杂的实际应用问题做为实验项目,用于检验设计模式理解程度及在实验过程中的运用能力,体会软件设计原则在程序开发过程中的具体指导作用,快速提高代码质量。在此基础上进一步提高复杂业务需求逻辑的分析能力,从而奠定解决企业级应用问题的坚实基础。值得注意的是,不了解设计模式很难设计有质量的程序,解决问题的过程中,应针对实际问题利用UML设计出模型,再借助于相关的设计模式进行优化,也就是说设计围绕问题,而不是用问题来套模式。同时也看到一个模式可以是独立存在的,但一个系统或构件往往由多个模式来构成,而在分析问题时是一个模式一个模式地独立思考,然后再把它们组合在一起。设计模式的使用能使具有复杂业务逻辑的问题模块化,易于实现。强调设计,强调设计原则的体现,最终就能够创造出满足实际应用的好的软件。
  参考文献:
  [1]陈志泊.面向对象的程序设计语言C++[M].北京:人民邮电出版社,2009.2.
  [2]任哲.Java技术应用基础[M].北京:机械工业出版社,2009.2.
  [3]王映辉.软件构件与体系结构[M].北京:机械工业出版社,2009.9.
  [4]肖磊.Java实用教程[M].北京:人民邮电出版社,2009.9.1.
  作者简介:汤谷云(1967-),女,副教授,主要研究方向为计算机软件与应用。

推荐访问:教学改革 为目 标的 程序设计