私は、2 年ほど前から技術掲示板で投稿するようになりました。その理由としては、教育をするにおいて大いに役立つと思ったからです。文章だけで相手を納得させると、それなりに説明能力を身に付けられますし、日本語の勉強にもなると思います。(私の場合は、特に日本語が下手なので)
そんなこんなで、いろいろ自身の中で改善を努めてきたつもりなのですが、未だに骨が折れるのが「オブジェクト指向」についての説明だったりします。オブジェクト指向という定義はやや抽象的ではありますが、今後も覚えておいて損はない概念だと確信しています。
オブジェクト指向となると、個人的には「マルチプル インスタンス」というのが基本中の基本だと考えています。よく、アクセシビリティや「カプセル化」などが OOP からはじまった概念の一部かのように仰る方がいるのですが「カプセル化」は、構造化言語レベルでも意識できる概念です。この時点で教育される側が理解していないのであれば、構造化言語から教育すべきです。
また「継承」や「多態性 (ポリモーフィズム)」は (個人的にはオブジェクト指向の先にある概念だと思いますが) もっと後に説明すべき概念だと思います。継承階層や Interface から説明をされる方がいますが、これは順序が違うと思います。いきなり『車というのは抽象クラスで~』とか『動物の鳴き声はワンだったりニャンだったり~』などと言われても理解できないでしょう。
前置きが長くなりましたが、以上の理由で私は「マルチプル インスタンス」から教育するようにしています。しかし、これの説明が結構難しくて改善に困っております。まあ、最初のとっかかりになるわけですから難しいのは当たり前だとは思いますが。
さて、オブジェクト指向の説明をするためにメタファを使うことがあります。マルチプル インスタンスのメタファとしては、
「日本人」クラスが「身長」プロパティを持っているとします。具体的に特定された日本人Aさんの身長は 180 cmだとします。「A.身長」は 180 cmと分かりますが、「日本人.身長」といわれても分かりませんよね。「A.出社する」「日本人.出社する」も同様です。後者は意味を持ちません。
このような説明がなされるわけですが、このメタファというのも個人のセンスに依存する (センスの良し悪しという意味ではない) ので、必ずしも有効な方法とは限りません。たとえば、今回の場合ですと (発言者の意図はともかくとして)『"日本人.出社する" でも、日本人が出社するという '意味' を持つじゃないか』という反論をされるかもしれません。
メタファは概念を説明するには有効ですが、間違ったメタファやその人に合わないメタファだったりすると「ミスリード」になりうる諸刃の剣です。そういった危険があるだけに推奨しない人さえいます。(わんくま同盟の中でも) 個人的には、正しいメタファという前提であれば、どんどん使っていって問題ないと思います。
そういうわけでして、何か良い教育方法、または説明するのに有効なメタファはございませんでしょうか?
# やっぱりないですかね... 良い方法は。
# 教えてくれるすごくていい人いないですかね?