我正在高中开办一个编程俱乐部,我已经使用C ++中的简单课程向OOP介绍了我的学生。我相信至少在理论上他们会得到这个想法。我希望能够为他们提供一个可以共同完成的具体项目。我的问题是采取哪种方法。当我在大学学习编程课程时,我看到了两种不同的方法,但在我看来,他们都有严重的缺点。我最后沉睡了大部分时间,并通过书籍和例子自己学习这些东西。 既然我是老师的话,我想了解哪种方法更可取或者是否有第三种选择。
使用的方法1是在板上(或在带有投影屏幕的计算机上)编写程序。始终首先编写类定义。通常学生在这一点上看起来真的很困惑,因为变量和方法的目的对他们来说似乎完全模糊不清。他们唯一一次了解每个变量和方法的用途以及它们如何相互作用的时间是教师最终编写实现的时候(我称之为外向内方法)
方法2是解释我们想要实现的目标,并根据需要创建类和成员。这有相反的问题。他将编写一种方法,使用这些必须在以后实现的虚构类。但是学生们不知道其他课程如何运作。
答案 0 :(得分:6)
碰巧的是,我通过老师的身份在大学里工作。我现在是一名软件工程师。
根据我的经验,学生在情感投资于编程项目中是至关重要的。我会在一分钟内回答你的问题,这是一个必要的序言。
为了达到目的,我把这个程序的主题变成了真正让他们感兴趣的东西,无论它看起来多么愚蠢,只要它在他们的世界中与它们相关联。
因此,可能(取决于你的学生的年龄)按照他们的才能水平排列歌星,包括Justin Bieber。你可以想象那个人的骚动。
喜欢,加载他们的歌词并计算他们说“婴儿”这个词的次数。有点创意,有趣。
这将使“干”问题变得活跃起来。比如,“歌手”课程应该是什么样的。为什么它应该具有“八度范围”之类的属性将立即直观。
歌手类是否应该使用名为'barfOnStage'的方法? (不久前Biebs在舞台上摔了一跤)。当然,为什么不呢!?他们很容易看到方法和属性之间的区别。
我的意思是,我只是在谈论我的头脑,我相信你可以将自己的创造力和创造力应用到适合你孩子的任何事情上。
我很想听听你的情况,以及孩子们的项目结果如何。
答案 1 :(得分:0)
对于初学者级别,我会采用修改后的第2种方法,在这种方法中,您可以从一个简单的问题开始,然后构建它。经验是最好的老师....就像我的高中老师让我们“迭代”二十个离散变量作为'列表'和然后教我们关于数组......
您需要选择正确的问题。它需要是一个运动“面向对象的肌肉”而不是“算法肌肉”的问题。它需要是能够在其上构建运行面向对象的要求的东西。一个简单的CRUD程序就足够了。你只需要将它们限制为使用对象而不是数组,因为我认为它们会很舒服。我会留下准确的说明书。
首先,让他们编写一个程序,只让他们将记录添加到'数据库'。只需在“数据库”中创建“行”,就会被迫学习如何创建对象并实例化对象。
下一步,让他们修改程序以显示其“数据库”的内容。当他们阅读他们的“数据库”时,他们将使用.show功能或者你实现该功能。
第三次,让他们这样做,以便他们可以更改“记录”的内容。更新将强化如何告诉对象自行修改。
最后,他们应修改程序以允许“记录”删除。这将加强适当的物体破坏。
将它提升到一个新的水平(因为这是c ++)你可以:
要求他们将“数据库”实施为链接列表
编写规范,以便您可以执行需要对象的操作 加在一起
添加数据范围,以便程序结构更好 由模板或继承(车辆'数据库')提供便利 例如汽车和摩托车)
根据我的经验,做最好的老师。有人告诉我如何做某事(或在板上做一组)会使学习短路。与它进行摔跤并获得一些苏格拉底式的指导可以让我们更深刻地理解并产生更好的编程大脑。
如果他们还没有准备好做“创建”功能,那么将其编码为白板上的一组可以工作,但是一旦他们有一个模板,说明所有东西是如何组合在一起的,那么他们需要在计算机后面找出它
答案 2 :(得分:0)
如果这是一个初学者编程课程,我会说OOP方面是一个小问题。专注于表达,陈述和控制流程。
如果重点是OOP,我会说从OOP的历史开始,以及OOP的重点是什么。从那个可以看看如何用不同语言描述这些概念。 (即ADT,Simula等http://retis.sssup.it/~lipari/courses/oosd2010-1/02.oop.pdf)
......然后进行实验。
“如果我们看一下整个历史,我们会看到原型OOP的东西是从ADT开始的,......” - Alan Kay(http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en)