6

私は高校でプログラミング クラブを運営しており、C++ の単純なクラスを使用して生徒に OOP を紹介しました。少なくとも理論的には、彼らはその考えを理解していると思います。彼らが一緒に取り組むことができる特定のプロジェクトを彼らに提供できるようにしたいと思います. 私が抱えている問題は、どのアプローチを取るかです。大学でプログラミングの授業を受けたとき、2 つの異なるアプローチを見ましたが、私の意見では、どちらにも深刻な欠点がありました。私はそれらのほとんどを熟睡し、本や例から独学で学びました。私が先生の立場になったので、どのアプローチが望ましいか、または 3 番目の選択肢があるかどうかについて、意見を求めたいと思います。

使用されたアプローチ 1 は、ボード (または投影スクリーンを備えたコンピューター) にプログラムを書き込むことでした。クラス定義は常に最初に記述されます。通常、学生はこの時点で当惑しているように見えます。なぜなら、変数とメソッドの目的が彼らにはまったくわからないように見えるからです。各変数とメソッドの目的とそれらがどのように相互作用するかについて彼らが学んだのは、インストラクターが最終的に実装を作成したときだけでした (私はこれをアウトサイドイン メソッドと呼びました)。

アプローチ 2 は、達成しようとしていることを説明し、必要に応じてクラスとメンバーを作成することでした。これには逆の問題があります。彼は、後で実装する必要があるこれらの架空のクラスを使用するメソッドを作成していました。しかし、生徒たちは、これらの他のクラスがどのように機能するかわかりません。

4

3 に答える 3

6

たまたま、私は教師として働きながら大学を卒業しました。私は今、ソフトウェアエンジニアです。

私の経験では、学生がプログラミングプロジェクトに感情的に投資することが最も重要です。すぐにあなたの質問に答えます。これは必要な前文です。

そこにたどり着くために、プログラムのトピックを、彼らの世界で彼らとつながるものである限り、どんなにばかげているように見えても、彼らが本当に興味を持っているものにしました.

つまり、(学生の年齢にもよりますが) ジャスティン ビーバーを含む歌唱スターを才能レベルでランク付けすることになるかもしれません。そのときの騒ぎは容易に想像できる。

同様に、歌詞を読み込んで、「赤ちゃん」という言葉を何回言うかを数えます。クリエイティブなこと、楽しいこと。

これにより、「ドライ」な質問が生き生きとします。たとえば、「歌手」クラスはどのように見えるべきか。「オクターブ範囲」のようなプロパティが必要な理由は、すぐに直感的にわかります。

歌手クラスには「barfOnStage」というメソッドが必要ですか? (Biebsは少し前にステージでバーフをしました). もちろん!?メソッドとプロパティの違いは簡単にわかります。

つまり、私は頭の中で話しているだけです。あなたは自分の創意工夫と創造性をあなたの子供に適したものに適用できると確信しています.

あなたが何をしたか、そして子供たちのプロジェクトがどうなったかを聞きたい.

于 2013-04-04T23:29:16.613 に答える
0

初心者レベルの場合は、簡単な問題から始めて、その上に構築する修正された 2 番目のアプローチを使用します。経験は最高の教師です....私の高校の教師が、20 個の離散変数を「リスト」として「反復」させ、配列に​​つい教えてもらったときのように....

適切な問題を選択する必要があります。「アルゴリズム筋」ではなく「オブジェクト指向筋」を鍛える問題である必要があります。オブジェクト指向を実行する要件を構築できるものである必要があります。単純な CRUD プログラムで十分です。配列ではなくオブジェクトを使用するように制限するだけでよいので、快適に使用できると思います。正確な仕様はお任せします。

まず、「データベース」にレコードを追加するだけのプログラムを作成してもらいます。「データベース」に「行」を作成するだけで、オブジェクトの作成方法とオブジェクトのインスタンス化の方法を学ぶ必要があります。

次に、「データベース」の内容を表示するようにプログラムを変更してもらいます。彼らが「データベース」を読み取ると、.show 関数を実行するか、その機能を実装します。

第三に、「レコード」の内容を変更できるように作成してもらいます。更新により、オブジェクトにそれ自体を変更するように指示する方法が強化されます。

最後に、プログラムを修正して「レコード」を削除できるようにする必要があります。これにより、適切なオブジェクトの破壊が強化されます。

それを次のレベルに引き上げると (これは C++ であるため)、次のことができます。

  • 「データベース」をリンクされたリストとして実装する必要があります

  • オブジェクトを一緒に追加する必要がある何かを実行できるように仕様を作成する

  • プログラム構造がテンプレートまたは継承によってより容易になるように、データの範囲に追加します(たとえば、車とオートバイの両方を含む車両「データベース」)

私の経験からすると、最高の教師です。誰かに何かをする方法を教えてもらう (またはボード上でグループとして行う) と、学習が短絡します。それに取り組み、ソクラテスの指導を受けることで、理解が深まり、より優れたプログラミング脳が生まれます。

「作成」機能を実行する準備ができていない場合は、ホワイトボードにグループとしてコーディングすることで機能しますが、すべてがどのように組み合わされるかのテンプレートができたら、コンピューターの後ろでそれを理解する必要があります.

于 2013-04-06T06:26:18.537 に答える
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 )

于 2013-04-06T07:02:14.577 に答える