6

我在一所高中经营一个编程俱乐部,我已经使用 C++ 中的简单课程向我的学生介绍了 OOP。我相信至少在理论上他们明白了。我希望能够为他们提供一个他们可以一起工作的特定项目。我的问题是采取哪种方法。当我在大学上编程课时,我看到了两种不同的方法,但在我看来它们都有严重的缺陷。我最终睡了大多数,并从书本和示例中自己学习了这些东西。既然我站在老师的立场上,我想就哪种方法更可取或是否有第三种选择征求您的意见。

使用的方法 1 是在板上(或在带有投影屏幕的计算机上)编写程序。类定义总是先写的。通常学生在这一点上看起来真的很困惑,因为变量和方法的目的对他们来说似乎完全模糊。他们了解每个变量和方法的用途以及它们如何交互的唯一时间是讲师最终编写实现的时候(我称之为由外向内的方法)

方法 2 是解释我们想要实现的目标,并根据需要创建类和成员。这有相反的问题。他将编写一个方法来使用这些稍后必须实现的虚构类。但学生们不知道这些其他课程将如何运作。

4

3 回答 3

6

碰巧的是,我通过担任老师的工作完成了大学的学习。我现在是一名软件工程师。

根据我的经验,最重要的是让学生在编程项目中投入情感。我会在一分钟内回答你的问题,这是一个必要的序言。

为了做到这一点,我把节目的主题变成了他们真正感兴趣的东西,不管它看起来多么愚蠢,只要它是与他们的世界相关联的东西。

因此,可能是(取决于学生的年龄)按天赋水平对歌唱明星进行排名,包括贾斯汀比伯。你可以想象那场的喧嚣。

比如,加载他们的歌词并计算他们说“宝贝”这个词的次数。有创意的,有趣的。

这将使“枯燥”的问题变得生动起来。比如,“歌手”班应该是什么样子。为什么它应该具有诸如“八度范围”之类的属性将立即直观。

歌手类应该有一个名为“barfOnStage”的方法吗?(Biebs 不久前在舞台上大喊大叫)。当然,为什么不呢!?他们将很容易看出方法和属性之间的区别。

我的意思是,我只是在胡说八道,我相信您可以将自己的创造力和创造力应用到适合您孩子的任何事情上。

我很想听听你做了什么,以及孩子们的项目结果如何。

于 2013-04-04T23:29:16.613 回答
0

If it's a beginner programming course I'd say the OOP aspect is of minor issue. Focus on expressions, statements and control flow.

If the focus is on OOP I'd say begin with the history of OOP and what OOP focus is. From that one can look at how one describe these concepts in different languages. (i.e. ADT, Simula etc http://retis.sssup.it/~lipari/courses/oosd2010-1/02.oop.pdf )

...and then experiment.

"If we look at the whole history, we see that the proto-OOP stuff started with ADT, ..." -- Alan Kay (http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en)

于 2013-04-06T07:02:14.577 回答
0

对于初学者级别,我会采用修改后的 2 号方法,您从一个简单的问题开始,然后在此基础上进行构建。经验是最好的老师......就像我的高中老师让我们“迭代”通过二十个离散变量作为“列表”然后教我们数组......

你需要选择正确的问题。它需要是一个锻炼“面向对象肌肉”而不是“算法肌肉”的问题。它必须是您可以在其上构建要求以练习面向对象的东西。一个简单的 CRUD 程序就足够了。你只需要限制他们使用对象而不是数组,因为我认为他们会很舒服。我会把确切的规格留给你。

首先,让他们编写一个程序,让他们将记录添加到“数据库”。仅仅通过在他们的“数据库”中创建一个“行”,他们将被迫学习如何创建一个对象和实例化一个对象。

接下来,让他们修改他们的程序以显示他们的“数据库”的内容。当他们阅读他们的“数据库”时,他们将行使 .show 功能,或者您实现该功能。

第三,让他们制作,以便他们可以更改“记录”的内容。更新将强化如何告诉对象修改自身。

最后,他们应该修改程序以允许删除“记录”。这将加强适当的对象破坏。

把它提升到一个新的水平(因为这是 c++)你可以:

  • 要求他们将“数据库”实现为链表

  • 编写规范,以便您可以做一些需要将对象添加在一起的事情

  • 添加到数据范围,以便通过模板或继承更好地促进程序结构(例如,同时具有汽车和摩托车的车辆“数据库”)

根据我的经验,做是最好的老师。有人向我展示如何做某事(或在板上以小组的形式进行)会缩短学习时间。与它搏斗并获得一些苏格拉底式的指导可以教会更深入的理解并产生更好的编程大脑。

如果他们还没有准备好执行“创建”功能,那么在白板上将其编码为一个组就可以了,但是一旦他们有了一个所有东西如何组合在一起的模板,他们就需要在计算机后面弄清楚。

于 2013-04-06T06:26:18.537 回答