じゃんぬのどっとてきすと

雑記とネタと時々プログラミング

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  982  : 記事  4  : コメント  15582  : トラックバック  277

ニュース

My Website

初心者向けのサイトです。

C# と VB.NET の入門サイト

最近のできごと

少し前に女のコが生まれました。家事と育児と仕事にと奮起しています。めちゃくちゃかわいいです。あと Blog の更新は全然してませんが、Twitter とかでアホなこと呟いています。見つけることができたら、ぜひフォローしてあげてください。けっこう喜びます。

Sponsored Link1

Sponsored Link2

Archive

書庫

私は、2 年ほど前から技術掲示板で投稿するようになりました。その理由としては、教育をするにおいて大いに役立つと思ったからです。文章だけで相手を納得させると、それなりに説明能力を身に付けられますし、日本語の勉強にもなると思います。(私の場合は、特に日本語が下手なので)

そんなこんなで、いろいろ自身の中で改善を努めてきたつもりなのですが、未だに骨が折れるのが「オブジェクト指向」についての説明だったりします。オブジェクト指向という定義はやや抽象的ではありますが、今後も覚えておいて損はない概念だと確信しています。

オブジェクト指向となると、個人的には「マルチプル インスタンス」というのが基本中の基本だと考えています。よく、アクセシビリティや「カプセル化」などが OOP からはじまった概念の一部かのように仰る方がいるのですが「カプセル化」は、構造化言語レベルでも意識できる概念です。この時点で教育される側が理解していないのであれば、構造化言語から教育すべきです。

また「継承」や「多態性 (ポリモーフィズム)」は (個人的にはオブジェクト指向の先にある概念だと思いますが) もっと後に説明すべき概念だと思います。継承階層や Interface から説明をされる方がいますが、これは順序が違うと思います。いきなり『車というのは抽象クラスで~』とか『動物の鳴き声はワンだったりニャンだったり~』などと言われても理解できないでしょう。

前置きが長くなりましたが、以上の理由で私は「マルチプル インスタンス」から教育するようにしています。しかし、これの説明が結構難しくて改善に困っております。まあ、最初のとっかかりになるわけですから難しいのは当たり前だとは思いますが。

さて、オブジェクト指向の説明をするためにメタファを使うことがあります。マルチプル インスタンスのメタファとしては、

非共有メンバを参照するには、オブジェクト参照が必要です (microsoft.com) より IIJIMAS さんの投稿を引用

「日本人」クラスが「身長」プロパティを持っているとします。具体的に特定された日本人Aさんの身長は 180 cmだとします。「A.身長」は 180 cmと分かりますが、「日本人.身長」といわれても分かりませんよね。「A.出社する」「日本人.出社する」も同様です。後者は意味を持ちません。

このような説明がなされるわけですが、このメタファというのも個人のセンスに依存する (センスの良し悪しという意味ではない) ので、必ずしも有効な方法とは限りません。たとえば、今回の場合ですと (発言者の意図はともかくとして)『"日本人.出社する" でも、日本人が出社するという '意味' を持つじゃないか』という反論をされるかもしれません。

メタファは概念を説明するには有効ですが、間違ったメタファやその人に合わないメタファだったりすると「ミスリード」になりうる諸刃の剣です。そういった危険があるだけに推奨しない人さえいます。(わんくま同盟の中でも) 個人的には、正しいメタファという前提であれば、どんどん使っていって問題ないと思います。

そういうわけでして、何か良い教育方法、または説明するのに有効なメタファはございませんでしょうか?

# やっぱりないですかね... 良い方法は。
# 教えてくれるすごくていい人いないですかね?

投稿日時 : 2007年3月13日 13:49

コメント

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 14:28 trapemiya
メタファはあくまで一部の側面だけをとらえて、そこだけを説明しているんだということを強調しないと誤解を与えてしまいますでしょう。
メタファは使い方によっては有効です。危険だからといって使わないのはもったいないことです。なんでもそうですが、使い方によって、毒にでも薬にもなります。
#メタファって何?って質問した昔が懐かしい・・・

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 16:04 シャノン
> 個人的には「マルチプル インスタンス」というのが基本中の基本だと考えています。

「オブジェクト指向の真髄は何か」と「オブジェクト指向をどこから教育すべきか」は別ですよね。

マルチプルインスタンスを説明するなら、クラスを捨てて、アラン・ケイ風にメッセージングを絡めて言ってみるといいかも?
同じ日本人でも、Aさんの身長は180cmで、Bさんは165cmですよ、みたいな。
#これは多態性とはまた別だよね。同じ?

あと、オブジェクト指向の難しいところは、モデリングと実装の両方に使える(というよりも、両方に使って初めて真価を発揮する)にもかかわらず、まず教育は実装からという点なのかも。
モデリング方面がわかってくるとストンと腑に落ちる(そうすると犬とか猫とかもわかるようになる)んですよね。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 16:04 NAO
たぶん居ない…
一番下の部分に反応してみた(w

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 16:25 じゃんぬねっと
>シャノンさん
きたきたw

> 「オブジェクト指向の真髄は何か」と「オブジェクト指向をどこから教育すべきか」は別ですよね。

真髄とはまで言っているつもりはなかったのですが、単純に基本はここだからという脳みそしかありませんでした。

> アラン・ケイ風にメッセージングを絡めて言ってみるといいかも?
> 同じ日本人でも、Aさんの身長は180cmで、Bさんは165cmですよ、みたいな。

えっと、これはマルチプル インスタンスに当たる概念の説明ですよね。

> #これは多態性とはまた別だよね。同じ?

確かに我々からすると微妙かもしれませんね。
メタファにおける日本人と A さんの関係が、インスタンスという実体の関係なのか、継承関係にあるのかが明確でないですね。
身長がプロパティという前提があるなら良いかもしれませんが...

日本人という設計図から実体化したものが A さんというのはしっくり来ないかもしれません。
むしろ、継承関係の説明で用いるべき例かもしれません。

別にメタファに拘っているわけじゃないですけどね。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 16:52 梅林
「たいやきの型(クラス)とたいやき(インスタンス)」の例えでは納得してもらえないんでしょうか。
私はこれで頭にすっと入った記憶があるのですが。


# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 17:03 じゃんぬねっと
'型' とかけているだけにかなり良質だと思います。

 ・利用する (食べる) には、たいやきにしないといけないコト
 ・複数作ることが可能であるコト
 ・それらは最初は同じ形をしているけど別物であるコト
 ・別物の証拠に誰かが一口食べても型やほかのインスタンスに影響はないコト

さらに、「作る (インスタンス化) には、引数で追加の '材料' などのオプションも渡せる」 という説明ができ、コンストラクタにまで繋げられそうです。
それと、型は '食べる' は実行できないけど、別の操作なら実行できることも説明できますね。(static)

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 17:10 シャノン
> えっと、これはマルチプル インスタンスに当たる概念の説明ですよね。

そうですね。
例示されたメタファでは、「クラスとインスタンスの違い」は説明しているけど、マルチプルインスタンスについて言及していない(インスタンスがAさん1個しか出てこない)ので、「こういう説明はどう?」って言ってみました。

メッセージングは余計だった?
AさんとBさんに、同じ「身長を教えて」っていうお願いをした時に、返ってくる返事が違うのは、AさんとBさんが違うインスタンスであって、それぞれが固有の身長を持っているからだ、と言いたかったわけです。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 17:25 シャノン
たい焼きの型反対論者の俺が来ましたよw

『「型」とかけてある』のを知っているなら構いませんが、「たい焼きの『型』とデータの『型』は同じ意味である」と誤解される恐れがあるならば避けた方が。

たい焼きの型は「そこから同じ形のものを量産するためのもの」ですが、データ型は「似ている形のものを分類したカテゴリ」であり、意味は正反対に近いと考えています。
まず型ありきか、まずインスタンスありきかの違いですね。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 17:27 シャノン
メッセージングの件は、「マルチプルインスタンスの説明に、必ずしもクラスを登場させる必要はないのでは?」というのが要点です。
で、そういえばSmalltalk流オブジェクト指向を提唱したアラン・ケイは、「クラスなど重要ではない」という考えを持っていたなぁ、ということで、あのような文章になりました。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:15 koka
こんにちわ。
エントリーを読んでて以前、「Windowsのエクスプローラを例えに使ったらいんじゃね?」と思いついたのを思い出しました。
実際のエクスプローラの実装内容は存じませんが、オブジェクト指向の概念を説明するには最適なメタふぁだと思います。
パソコン1台あれば、どこでだって説明できますし、エクスプローラでファイルを扱ったことがある人ならば親しみがあるはずです。
実際にはどう説明するの?ですが、考え中ですw
「エクスプローラは実はこんな考えを持って作られてるんだ(妄想)」ってなお話だと面白いのではないかなと思うのですが・・・


# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:33 梅林
>たい焼きの型反対論者の俺が来ましたよw
うぅ、シャノンさんと議論するのは大変そうです。

>たい焼きの型は「そこから同じ形のものを量産するためのもの」ですが、データ型は「似ている形のものを分類したカテゴリ」であり、意味は正反対に近いと考えています。
>まず型ありきか、まずインスタンスありきかの違いですね。

まず型ありきか、まずインスタンスありきかという問題は、オブジェクト指向「分析」においては
重要な論点かもしれません。

ですが、JavaやC#のようなオブジェクト指向「言語」を教えるという文脈においては、クラスという
「型」を定義し、そこからインスタンスを生成するという説明の仕方が一番理解しやすいと思いますし
プログラミングの実践上の流れでも、そのような説明が一番混乱が少ないかと思います。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:35 刈歩 菜良
ものの2~3日で新人ちゃんに変数宣言からポリモフィズムやらインターフェイスまで教えなきゃいけない人が来ましたYo。しかも、車とか犬猫使いまくりです(あぃ、とぅいまて~ん)。

たい焼き面白いですねぇ。バリバリの初心者には親しみやすいかも。

うちのテキストの場合はいきなりクラスの説明に行っちゃって(ここで車登場)、マルチプルインスタンスっていう言葉すら使ってないし、あれよあれよという間にカプセル化だ静的メソッドだ、なんて感じでトントン進んじゃいます。

わたしも良いメタファ募集中です。
ちなみに、カプセル化のとこではAV機器の再生ボタンとか車のメーターなんかで説明してます。

説明の時間がかなり限られてるので、一つのメタファでいろんな機能を説明できる方が都合が良いので、結局メインは車。
# あまりにもべたなので変えたい変えたいとは思っているのですが...

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:37 シャノン
> JavaやC#のようなオブジェクト指向「言語」を教えるという文脈においては、クラスという
> 「型」を定義し、そこからインスタンスを生成するという説明の仕方が一番理解しやすいと思いますし
> プログラミングの実践上の流れでも、そのような説明が一番混乱が少ないかと思います。

そうですね。
俺の見方が分析寄りであることは認めます。

はじめの一歩ならば、正確性を欠いてもわかりやすさを優先することはありだと思いますが、後々には修正せねばなりません。
導入期が終わったら、「実は前に教えたあれは正確ではなくて…」とやることを忘れないのであれば、いいと思います。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:39 じゃんぬねっと
>シャノンさん
> 例示されたメタファでは、「クラスとインスタンスの違い」は説明しているけど、
> マルチプルインスタンスについて言及していない(インスタンスがAさん1個しか出てこない)ので、
> 「こういう説明はどう?」って言ってみました。

とっかかりとしては良いでしょうね。
でも、マルチプルな部分は説明しておきたいですね。

> メッセージングは余計だった?

いえ、今は意味を理解できているので大丈夫です。
リンク先のスレッドでの代替説明だったわけですね。
まあ、それ自体も例にはすぎませんが。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:41 2リットル
とりあえずCでhello worldが組めるくらいの人に説明するなら、マルチプルインスタンスの説明はint型で十分じゃないかな。
 ex)
int x, y;
x = 3;
y = 5;








# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:45 じゃんぬねっと
>刈歩 菜良さん
> ちなみに、カプセル化のとこではAV機器の再生ボタン

私と一緒でビックリです。
再生ボタンを押した後の実装 (リモコンの中の回路) は知らなくても良い。
ですね。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:56 じゃんぬねっと
> とりあえずCでhello worldが組めるくらいの人に説明するなら、
> マルチプルインスタンスの説明はint型で十分じゃないかな。
>  ex)
> int x, y;
> x = 3;
> y = 5;

これですと、あくまでインスタンスの箱だけの話になってしまい、

x.Add("item");
y.Add("item");

のように、メソッドやプロパティで実行されたインスタンス内部の説明の時には通じないです。

これは、メソッドをモジュールの関数のように捉える方が多いためです。
うまく説明しにくいのですが、データと手続きの関係が理解させるための手段に発展しにくいという意味です。

その後に何を教えなければいけないのかという道筋ありきですと、
「前、こうやって説明されたからこうだと思っていたよ」
ということになって、逆に遠回りになります。(経験談)

一度、そうだと間違えて理解させてしまうと、立て直しが難しい場合があります。
正しくその部分だけ考えを改めさせるのは、そのための説明も必要になって難しいです。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 18:59 じゃんぬねっと
先にシャノンさんに事例を書かれていましたね。

> はじめの一歩ならば、正確性を欠いてもわかりやすさを優先する
> ことはありだと思いますが、後々には修正せねばなりません。

ここはバランス次第でしょうか。
'いきすぎ' てしまうと修正の方に手間がかかってしまいます。
これは、コーディングも一緒ですね (w

> 導入期が終わったら、「実は前に教えたあれは正確ではなくて…」
> とやることを忘れないのであれば、いいと思います。

意外とここで食い下がる人もいたりするので、難しいのですよね。
やはりバランスと人に合った教育でしょうか。

会社から教育の方針も任せられているので、こういった手法全般についても広く意見を聞きたいです。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 19:43 nagise
型とインスタンスというところを正しく理解していればintで説明してもあまり問題にならないような気がしますね。
値渡しと参照渡しの説明に苦労するところですが…。

型に定義されるメソッドについて。
Hoge h;
h.hoge();
というのが
hoge(h);
を変形したようなものだと捉えています。

「封筒(データが格納されている)を持ってこのメモの通りに窓口を回ってください」
「封筒に順番が書いてありますからその通りに窓口を回ってください」
の違いになる、と。
後者だと封筒の種類とメモの種類を取り間違えることがないよね、という話をしています。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 19:59 刈歩 菜良
じゃんぬさん
> 再生ボタンを押した後の実装 (リモコンの中の回路) は知らなくても良い。
> ですね。
そそ。
(^◇^)

で、同じ例をポリモフィズムでも使えちゃう。
相手がDVDだろうが、カセットテープであろうが...
ってな具合。

あと、インターフェイスでも。

2リットルさん
> とりあえずCでhello worldが組めるくらいの人に説明するなら、
> マルチプルインスタンスの説明はint型で十分じゃないかな。
わたしも、intの例を使います。
使うのは、クラスとインスタンスの用語解説の時ですね。ただ、「同じ」とは言わずにインスタンス化においては「同じようなもの」と言っています。
で、そのあとにCとかのintとC#でのクラスの違いを押さえておきます。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 20:00 シャノン
> ものの2~3日で新人ちゃんに変数宣言からポリモフィズムやらインターフェイスまで教えなきゃいけない人が来ましたYo。

かるぼさんにそういう命令を下した上司に、「オブジェクト指向を2~3日で教えることの困難さ・愚かさ」を2~3日で叩き込むのと、どっちが楽だろうか…。

昔いた会社の上司に「なんでオブジェクト指向で作らないんですか?」って聞いたら、「学校を出たての新人はオブジェクト指向を知らないだろ。でもそういうヤツにも保守させなきゃならないだろ。オブジェクト指向で作っちゃうと新人に保守できなくなるからダメなんだ」って言われました。
「あぁ、この会社ダメだ…」って思った瞬間でした。

それに比べれば、オブジェクト指向教育をしろと言われているだけまだ報われる? そんなことない?

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 20:04 シャノン
俺のオブジェクト指向観もコロコロ変ってます。
昔GDNJで「カプセル化はオブジェクト指向のキモか否か」でじゃんぬさんとやりあった覚えがあるのだけれど、過去ログが見つかりませんでした。
#ちなみに、あのときじゃんぬさんが論拠として出した本はEiffelに関する本で、C++/C#と同列に論じるには、ちょっと卑怯な言語だったりします。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 20:07 シャノン
> ちなみに、カプセル化のとこではAV機器の再生ボタン

「カプセル化」と「データ隠蔽」と「実装隠蔽」はそれぞれ別物だ…とか言い出すのはここでは場違いですね。
#とか言いつつ言ってるしよ。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 20:30 じゃんぬねっと
>シャノンさん
> 昔GDNJで「カプセル化はオブジェクト指向のキモか否か」で
> じゃんぬさんとやりあった覚えがあるのだけれど、過去ログが見つかりませんでした。

雑談フォーラムでしたから跡形もなく削除されていますよw
他のフォーラムは残っているのですけどね。

ちなみに、私もあの時とは考え方が変わっています。

> ちなみに、あのときじゃんぬさんが論拠として出した本はEiffelに関する本で、
> C++/C#と同列に論じるには、ちょっと卑怯な言語だったりします。

ごめんなさいw
って、何で私やねん!

> 「カプセル化」と「データ隠蔽」と「実装隠蔽」は
> それぞれ別物だ…とか言い出すのはここでは場違いですね。

確かに、隠蔽化という概念でしか伝えられませんが、そこから先は実際にコードでプレゼンした方が早いです。

問題はそれが不便だとか言う人が多いこと...
COBOL (ByValue と ByRefference などがないの限定) 出身者だと引数の概念すらないですよ。
「グローバルの方が便利」と言って聞き入れません。
巨大なソースとオープンな世界を味あわないと難しいかもしれません。

何で、シャノンさんってこういう話になると見違えるほど元気になるんだろう?
いや、普段から元気かもしれないけどw

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 20:49 シャノン
> 何で、シャノンさんってこういう話になると見違えるほど元気になるんだろう?

変な考えを持っているからですw
他人と似たような考えでは議論にならないじゃないですか。
「汝、変人たれ」が座右の銘ですからw

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 20:58 Ognac
Ognacです。 有用なメタファがほんと欲しいですね。

継承関係を生物界に例えて失敗した者です。>シャノンさんありがとう。
クラスとインスタンスは 鯛焼きと型のメタファでも,厳しい人種がいます。
同じ内容のインスタンス生成まではOKのようですが,生成後, Property/methodで振る舞い/形態を変えるという話は、
鯛焼きの中身をツブアンからコシアンに変更するイメージで捉えるみたいで,理解できないって。

 身近な会社ではは,クラスを使いこなせるプログラマーが少ないから,継承禁止令が出ました。護送船団方式なんてナンセンスだぁ....orz。


# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 21:22 刈歩 菜良
永遠のわんくまーインストラクタ かるぼです。

シャノンさん
> かるぼさんにそういう命令を下した上司に、「オブジェクト指向を2~3日で教えることの困難さ・愚かさ」を2~3日で叩き込むのと、どっちが楽だろうか…。

あ、いや、その。
(^^ゞ
わたくし世をしのぶ仮の姿の時のお仕事がイントラですの。
お客様は「20日間たっぷりかけてC#をみっちりお教えしますよ!!」って言っても来てくださらないのです。
しかも、新人ちゃんとは限りませんし...
なので、経験者も新人ちゃんもごちゃまぜに「わずか2,3日でC#教えまっせ」のコースを提供する羽目になるんですねぇ。

なので、新人ちゃんや経験の浅い方向けには「完全に理解させる」というのが目標ではなく「正しい理解に向けてレールを引いておきますから、あとはそれに沿って理解を深めてね」っていうスタンスで講習します。

もっととある言語並に需要があれば、レベルに応じて事細かにコースのラインアップをそろえることができるのに...
(;O;)

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 22:49 有末 清華
オブジェクト指向って理解するとすごい楽なんですがね(苦笑。

やっぱり状況によってメタファは使い分けなきゃいけないと思います、僕は「プログラムを組むときの流れ」の説明としてスパゲッティーと和食を使います。

スパゲッティーは一皿で一食、ひとつの料理(ソフト)を作るのに一個の皿の上でごちゃごちゃやるのが従来のプログラム(あんまりにも簡単にしすぎ?w)

和食は「ごはん」「味噌汁」とかたくさんの小皿があつまって一食(ソフト)を作ってる、プログラムするときは小皿ごとに作ってあとはそれをまとめるだけ

この方法だとクラス間の関係とか説明できませんがなんとなくイメージつかむのには使えるかと。

クラスの説明はタイヤキの型派ですねw イメージを掴むだけなら十分効果を発揮しますし、イメージを掴んだ後は実際のプログラムコードを見せてやれば問題ないかと。

p.s.
会社で「継承禁止」とか「オブジェクト指向禁止」とか…やっぱりプログラムは個人でいいや(笑。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/13 22:57 IIJIMAS
じゃんぬねっと様、皆様、初めまして。

図らずも元ネタを提供してしまったIIJIMASです。

>『"日本人.出社する" でも、日本人が出社するという '意味' を持つじゃないか』という反論をされるかもしれません。

実は投稿時その突っ込みの可能性は考えていました。

単に「日本人が出社する」に意味があると言った時には暗黙に、
「”ある”日本人が出社する」「”すべての”日本人が出社する」のどちらかを意味していると思います。
この場合は”すべての”は現実にはありそうもないことなので”ある”が隠れているとみなします。その場合は確かに意味があります。

クラスは集合、インスタンスはその集合の要素と考えることもできます。派生クラスは部分集合です。

ただ他の方々にこの考え方を押し付けるつもりはありません。


# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 3:20 なちゃ
オブジェクト指向でないプログラミングの経験がある人にはオブジェクト指向とは、という観点での説明というかそういうものが必要な記がしますが、
初めて学ぶ人にはもはやあえてオブジェクト指向とはという話は不要ではないかと思ったりもします。
※最初からオブジェクト指向の言語を学ぶ場合の話ですが


# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 5:00 職人気質
私はメタファなぞなくとも、実際に打ってみて、理解しましたがそれでは駄目ですか?
百聞は一見にしかずで、
コード量がどれだけ減るかとか(多態性)
余計なものが見えなくてよい(カプセル化)
ウィンドウが画面に出力されるイメージ(インスタンス)
とか指・肌・イメージで覚えましたが・・・
どうしても論理を先に覚えないといけないものかな?


# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 7:55 ひろえむ
メタファが苦手なひろえむが来ましたよ。

んー、万人に(もしくは、不特定多数に)通用するメタファってのが難しいんでしょうねぇ。(^^;

覚えていることや経験しているものが異なるのでメタファをもって説明するととらえ方によって解釈が変わってしまうおそれがありますものね。

で、目の前の人に説明するのであれば、その解釈の違い(理解の度合い)をつかんで補正することも可能かもしれませんが、やはりオンラインやら書籍などの文書やらで、それをやろうとすると非常に難しいような気がしますねー(^^;

何が何でも反対ってことはないですが、そういう意味では間違いない技術的な部分で説明して、補足としてメタファ・・・って感じでしょうか(^^;

いきなりメタファで説明されても、たぶん理解できないんじゃないかなぁという気はしますね(^^;

タイヤキと型が適切かどうかは時と場合によるので否定も肯定もしませんが(^^;;
(というかできませんが(^^;;;;)

ちなみに私も職人気質さんのように、肌で覚えた感じでしょうか(^^;
理論は理論として大事だと思いますが、感覚的なもの(センス)もあると思うんですよねー(^^;;
これは経験して場数を踏まないと・・・って感じなんですが(^^;

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 9:09 じゃんぬねっと
>なちゃさん
> オブジェクト指向でないプログラミングの経験がある人にはオブジェクト指向とは、
> という観点での説明というかそういうものが必要な記がしますが、
> 初めて学ぶ人にはもはやあえてオブジェクト指向とはという話は不要ではないかと思ったりもします。

新入社員の教育であれば、そのようなところから教えることはないです。
既存社員の教育についても任せられています。(相手は年上ばかり...)
5 月くらいから断続的にやるのだそうですが...

テーマはコスト パフォーマンスも気にして OOP にしたのですが、メタファの有用性はどうなのかについても気になったので、このような記事になりました。

> ※最初からオブジェクト指向の言語を学ぶ場合の話ですが

初めてであれば、構造化とは何ぞや以前にもっと基本的な部分もありますからね。
まず、変数を理解するのに時間がかかることもありますから。

RPG ツクールの「スイッチ」を理解するのに時間がかかった小学生時代を思い出します。
あんなもので、小一時間悩んでいました。はい。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 9:11 じゃんぬねっと
>職人気質さん
> 私はメタファなぞなくとも、実際に打ってみて、理解しましたがそれでは駄目ですか?

そういう人も多いでしょうね。(私もそうでしたし)
人に依存する部分が多いので、最初に概念を説明してから目の前でやってみせるという手法が良いと思います。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 10:14 すけけん
こんにちは。つい先日わんくま同盟に加盟させていただいがすけけんです。

自分も社内で研修等で教える側なのですが、
オブジェクト指向の説明には本当に苦労しています。。

最近思いついたのはロープレのキャラクターを使っての説明です。

キャラクターをクラス(型)と考えて各キャラクターを作る(インスタンス化)みたいな感じです。
これで継承やらポリモーフィズムも説明できます。

・キャラクタークラスを親クラスとして派生させて剣士クラスや魔法使いクラスを定義(継承)
・キャラクタークラスの「攻撃をする」振る舞いは剣士と魔法使いでは振る舞いが代わる(ポリモーフィズム)

という感じです。


# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 10:27 未記入
この業界にはなかなかいないと思うけど、RPG(言語でない)を知らない人からするとチンプンカンプンかも。

ところで女性を教育する時がもっともつらい。メタファをメタファと理解できないし、実際コードを組んでやっても1を聞いて2以上知ろうとしない。女がこうだと決め付けるわけではないが、そういう傾向が多いと言える。

男と女では統計的に向き不向きな分野があると思っているので、これは差別的発言という意図はないです。すごい人はすごいですからね。

それと新入社員の質が最近よくないんだけど、うちの会社だけかなぁ。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 11:32 シャノン
> RPG(言語でない)

ろけっとらんちゃーですよねっ!(違

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 14:00 frontline
私は{鯛焼き|クッキー}と車を使いますねぇ。私自身も完全に理解してるわけじゃないですが、インスタンスとか、カプセル化であればそれで「素人相手」ならいけそうです。
車は、ハンドルの形状やアクセル、ブレーキの位置など、インターフェイスを揃えることについても説明しやすいので、便利です。

もっとも、運転しない人には別のたとえが必要ですが。結局、相手によってその場で調整が必要ですね。

それより、じゃんぬねっとさんの小学生時代には、RPGツクールがあったことがちょっとショックです。私の世代はブラックオニキスですが。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 14:34 じゃんぬねっと
あとは、デザエモンとか... (FC 版じゃないですよ)

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 15:31 nico
私のお気に入りの説明に、C言語の構造体の説明が済んだ後で、「じゃこの構造体の中に、この構造体専用の関数を作ってみたくならない?」というもってき方があります。古いかな?

もうひとつ、喫茶店をたとえに使うやつも好きです。
  喫茶店で「おねえさん、スパゲッティひとつ」と言って注文することを、
  「おねえさん」オブジェクトに「スパゲッティ:」というメッセージを引数「ひとつ」で送る。
という見方で見てみよう、というものです。

# いい本だと思ったけど、あんまり売れなかったみたいで。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 16:06 アクア
オブジェクト指向を説明してもらって、私が理解できたならそれが一番最良の説明と思う。w



…orz

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 17:16 じゃんぬねっと
今度レクチャしますよ。

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 19:35 がる
がるです。
んっと…前述の、職人気質さんと同様なのですが。
自分が理解するときも下の子たちに教え込むときも、メタファは一切使ってないです。

基本的にはOOがどうのってよりも「こんな面倒があって」「たとえばこんな便利な解法がある」っていう流れで「この手法っていわゆるオブジェクト指向の一端なんだよ」っていう説明をすることが多いです。
まぁかくして「実践講座」が仕上がったわけなのですが(笑

# re: オブジェクト指向を教育する良い方法は? 説明するのに有効なメタファは? 2007/03/14 22:33 アクア
> 今度レクチャしますよ。

涙で画面がみ(ry



その時を期待しますよ。T-T

Post Feedback

タイトル
名前
Url:
コメント: