APP下载

以面向对象思维为主线的教学设计研究

2019-10-08郭惠芳

软件 2019年5期

摘  要: 面向对象分析与设计课程理论性比较强,内容设计上也比较繁杂,容易在教学中失去重点,针对教学中培养面向对象思维难点进行分析,阐明引导学生理解面向对象设计的目的和用途的重要性,并使用层层递进方法解决为何学的问题;围绕面向对象设计的目的,阐述面向对象的基本特征与设计原则和模式的内在关联,进一步明确面向对象设计的本质。

关键词: 面向对象分析与设计课程;面向对象思维;面向对象分析与设计

中图分类号: TP311    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2019.05.017

本文著录格式:郭惠芳. 以面向对象思维为主线的教学设计研究[J]. 软件,2019,40(5):9092

【Abstract】: The course of object-oriented analysis and design is relatively theoretical and complex in content design, which is easy to lose its focus in teaching. This paper analyses the difficulties in training object-oriented thinking in teaching, clarifies the importance of guiding students to understand the purpose and purpose of object-oriented design, and uses the progressive method to solve the problem of why to learn; expounds the purpose of object-oriented design around the purpose of object-oriented design. This paper describes the basic characteristics of object-oriented design and the inherent relationship between design principles and patterns, and further clarifies the essence of object-oriented design.

【Key words】: Object-oriented analysis and design curriculum; Object-oriented thinking; Object-oriented analysis and design

0  引言

有些概念是属于人人都知道,甚至人人都在用,却并不深知,面向对象就是其中之一。有不少学生毕业几年后,与我反映,用了多年的面向对象语言,却并未真正进行过面向对象的设计。自己也是在工作多年后,在不断的摸索中慢慢对面向对象思想有所认识。

1  面向对象语言的普及

“面向对象程序设计”课程是计科和软件专业的专业基础课,这类课程着重于讲解面向对象程序设计语言的语法、数据结构及算法,學生之前也掌握了Java语言/C++语言,但在实践项目中却很难有效使用面向对象的设计方法[1]。

学习了“面向对象分析与设计”课程后,这种情况有所改善,大部分学生明白了使用一门面向对象语言进行程序设计与面向对象的设计是两码事,面向对象它是一种思维方式,也是一项程序设计技术。它的基本思路是利用对象各司其职、相互协作完成每项工作,设计中有一系列原则和方法来保证系统各部分的低耦合、高内聚性,以得到一个维护成本低、灵活性和可扩展性好的系统。但就多数年轻的软件从业者的反映看,真正的面向对象的设计还远未达到[2]。

2  解决为什么要学的问题

2.1  直观的引入

在面向对象分析与设计课程中常说的一句话就是,面向对象的设计思想是最接近人的思维,符合人类对现实世界的认知,这个世界是由人组成的,每个人又各司其职,需要别人协助时,可以借用另一个人或团体来完成。那么每个人就是一个对象,每一种角色就是一个类。各自独立又相互协作完成一个系统的运转。这个道理是挺好理解的,但这个道理好像还不足以说服学生从编写面向过程的思路改变为面向对象。[3-4]

那么在软件设计时如何才能尽力减少这种软件维护的成本呢?抽象是一种行之有效的方法,是人类掌握复杂事物,设计复杂事物的基本方法。如何讲让“抽象”的概念不那么抽象呢?

2.2  抽象的层次

1)面向过程中的算法抽象

抽象这个概念离我们并不遥远,大家熟知的数据结构其实也是一种抽象,它是一种比算法抽象更底层的抽象。比如一个数组,一个二叉树,它们都是代表一种数据集合的抽象,解决特定问题时它们使用起来更为方便而已。[5-7]

2)面向对象的抽象

由于学生此时一般已学习过Java或C++语言,可以直接用代码来实现上述的对象,并在主程序中使用这些对象,使学生直观理解,在更大范围内进行抽象的好处。将事物的数据及行为进行封装,并对相似的事物的行为进行抽象,这样使用一个复杂系统会更加简便。

2.3  软件的灵活性

从许多事例中我们得到一个结论,一个软件系统只要它在使用,就会有需求变化,因为这个世界在不断变化之中,需求变更是不可避免的,识别并定义那些系统中相对稳对的部分,并在构建软件系统时将这部分抽象出来。在面向对象的设计中给出了多种分离抽象与具体实现的手段,让系统的其它部分建立在相对稳定的抽象(接口)之上,而具体实现可以在以后被新的需求所替代[8-9]。

3  面向对象思维的具体体现

3.1  理解面向对象的基本特征

面向对象的基本特征一般说法是三个:封装、继承和多态,还有说法是四个:封装、继承、抽象和多态。

1)封装,这个特征是所有面向对象系统中都会使用到的,但封装得合适与否,就大不相同了。封装的作用我们前面提到一个就是方便共享,将数据与其行为进行封装,使用时比使用一堆函数要方便;但封装得合适与否的标准却并不是一句话能讲清楚的,我们只能说合适的封装是需要一个过程的,伴随着系统分析与设计过程,需要经过反复的重构,最终才能得到一个合适封装的系统。

2)继承,这个特征是面向对象中代码重用的重要手段之一,通过继承父类的非私有成员,子类获得了在父类中已定义好的大部分功能,初学者比较喜欢用这个特征,但这个特征最容易被过度使用,随着我们后面学习面向对象设计原则中举的一些例子,会让学生理解有些继承不如组合这种特征灵活。

3)多态,这个特征一直是一些学生的难点,多态是指父对象中的同一个行为能在其多个子对象中有不同的表现。这是为什么呢?为啥需要有这个多种表现呢?这些问题都是影响学生理解这一概念的难点所在。

3.2  面向对象设计原则与模式

面向对象的设计原则讲五个足够了,它的核心就是开闭原则,而里氏替换、依赖倒置等原则都是为开闭原则提供具体的手段。使用案例讲清楚每个原则的含义,让学生理解它的用途,真正运用这些原则需要一个循序渐进的过程,在后面的设计模式中可以再举些例子加强对原则的理解,因为面向对象的设计模式无一不是对原则的不同诠释。

4  实际系统设计中贯彻面向对象思维

在面向对象分析与设计课程中,我们是这么安排:

单元一 面向对象的基本概念。在此单元中解决为什么要学面向对象,面向对象设计的目的是什么。有了目标,有了基本的面向对象的思维,在实际系统设计中如何使用就不会没有方向。

单元二 统一建模语言概述。此单元概要地介绍UML这种建模语言的概貌,以及发展历程。为下面系统的分析与设计做准备。

单元三 面向对象的分析。此单元着重介绍在需求分析阶段,如何适当使用UML中的用例模型、分析类图及辅助模型进行需求分析及表示。

单元四 面向对象的设计。此单元着重介绍在系统设计过程中如何由分析类图细化至设计类图,以及各类职责及类间的协作进一步划分和确定。

单元五 面向对象设计模式简介。此单元着重介绍几个常用的设计模式,用实例说明其适用场合及作用方式。

在这个部分我们引导学生理解模型是为系统的分析与设计服务的,它是面向对象思想的一种体现,一种表达而已。面向对象的设计围绕需求,运用面向对象的思想进行设计、用适当的模型表达出来就可以,并不是模型设计的越复杂越好或UML模型越漂亮越好[10]。

5  结语

面向对象更多的是一种思维模式,它是软件工程专业人员必备的素养,也是計算机相关专业应该有的训练内容。我认为让学生学会使用工具进行面向对象分析与设计固然重要,但更重要的

是面向对象设计本身,面向对象设计的初心以及如何达成这样的目的。在当前新工科专业人才培养思路的引领下,想要培养复合型人才,推动原始创新发展,打牢理论基础是根本,使学生从只会使用工具,转换到有意识地掌握软件工程思想方法以及思维模式。

参考文献

[1] 谭火彬, 林广艳. 培养软件工程思想的面向对象程序设计课程改革与实践[J]. 《计算机教育》2018(8): 53-58.

[2] 高歌在羊城. 循序渐进地培养面向对象的思维方式[EB/OL]. https://www.cnblogs.com/georgeguo/p/3904256.html.

[3] 高贤君, 杨元维, 李功权. 面向计算思维的Web程序设计教学思考[J]. 电脑知识与技术, 2018, 14(21): 141-143.

[4] 王丽影, 石秋香, 王顺才. 应用型大学背景下《面向对象程序设计(C#)》课程教学设计探究[J]. 办公自动化, 2019, 24(04): 33-34+47.

[5] 阚运奇. “面向对象程序设计”教学方法研究[J]. 无线互联科技, 2018, 15(23): 151-152.

[6] 孟瑶. 面向对象程序设计课程微课设计研究[J]. 信息与电脑(理论版), 2018(22): 230-232+235.

[7] 钱诚, 徐煜明. 面向对象程序设计课程案例法教学探讨[J]. 电子世界, 2018(22): 100.

[8] 孙勇, 徐建辉. 定位于实践的面向对象程序设计课程教学探索[J]. 教育现代化, 2018, 5(40): 271-274.

[9] 谭火彬, 林广艳. 培养软件工程思想的面向对象程序设计课程改革与实践[J]. 计算机教育, 2018(08): 53-58.

[10] wengxuan_kanon. 真的理解面向对象思维[EB/OL]. https: //blog.csdn.net/kanonlemon/article/details/70052522.