Paradigm Shift Design

ISHITOYA Kentaro's blog.

オブジェクト指向を簡単に教えるという課題が与えられたの巻き

註:課題が与えられたからといって、必ずしもそれを解いているとは限らないのです。


研究室で、先生と色々話していて、うちの研究室では

  1. 研究そのもののやり方
  2. 研究の概念や論理的な内容について
  3. 実際の実装作業

について、他の研究室と比べて遜色はないし、実は結構充実している方だということを認識した。それにそれ以外にも色々と学べるしね。


だけれども、確かに「研究」に関しては充実しているけれど、研究に欠かせない実装に関する事柄については少し疎かになっているのではないかな、と常々思っているのです。しかも、どうやら来年度からは、B4が4人、M1が2人、計6名!が新しく配属されてくるとのこと。このままじゃヤバイなという、悪寒がそこはかとなく感じられる今日この頃なのです。


まぁ、わが研究室に所属して2年経てば、確かにいっぱしに実装できるようになると思う。ねぇMさん。
でも実際には、力ずくの実装ができるだけで、そのソースコードを再利用したり拡張したりすることは難しい。ともすれば参考にすらならない場合もある。ねぇM君*1


まぁそんなわけで、今までやっていなかったのもどうかと思うけれど、1週間に一度、みんなで持ち寄ってコードリーディングなりソースレビューなりをすることにして、先週、パイロット的に第1回を行った。
ん、予想通り。ヒドイ。スサマジイ。
ひとつのクラスだったソースコードをモデルに分けたのはいい。
だけど、それを単一のファイルに全部かいてたらあんまり意味がない。
C#にはグローバル変数はないよ。それはプライベートメンバ変数というのだよ。
君がプロパティといっているのは、アクセサで、プロパティの実体は君の言うグローバル変数だよ。



…まぁそんなわけで、今週はみなさん忙しいそうなので、来週、第2回をやるのだけれど。
第1回の終了時に「オブジェクト指向を簡単に教えてくれ」と要望された。
えぇ。ほとんど何も考えずに、安請け合いしましたよ。
前置きが長くなったけれども…
オブジェクト指向を簡単に教える」
ってなんだ。そんな秘孔あったか。
カリン様の超神水飲んだってオブジェクト指向は身につかんのですよ。


普通、一般的に、オブジェクト指向を教える時って
「動物がいて〜」
「動物から派生した犬と猫がいて〜」
「犬も猫も鳴くから動物に鳴くっていう抽象メソッド作って〜」
「子クラスでオーバーライドして、『ワン』『ニャン』みたいな〜」
みたいな…
いやさ、イデア論から語るならそれもありですよ。でもねぇ。


かといってねぇ
「このソースコードを見てください!スパゲティです!」
「こういう場合は、Factoryを使うんです」
「さらにこういう場合は、Commandです」
「こんなときは、Adaptorでしょう」
みたいな…
教え方してもだれもついてこないよねぇ。


じゃなんだ、むしろ
「クラスは複数の動作と属性を一つのまとまりとして取り扱うための仕組みです。名詞でよろしく」
「動作のことをメソッドといいます。動詞でよろしく」
「属性のことをプロパティといいます。名詞でよろしく」
「継承という概念があって、これは既存のソースコードを再利用するための仕組みです」
みたいな…
基本的なところから攻めるべきなのか。


はたまた
オブジェクト指向というのは開発効率を高めるための手法です」
「派生技術としてUMLというのがあります」
「開発手法としてRADとかDSDMとかXPやTDDとかUDDとかそういうのがあります」
「開発効率を高めたり、意思疎通を図るための道具としても使われるんですね」
みたいな…
あーむり。


オブジェクト指向の分かりにくいところは、オブジェクト指向自体が技術というか言語体系というかツールとしての範疇を超えて、もうなんか概念というか、むしろ学会一つできちゃうんじゃないのみたいなところだなぁ。


それをさ「簡単に」とか、どうすればいいんですか。
とりあえずあれですか、virtualとabstractとnewとoverrideとstaticくらい教えればいいですか。
あーもー。


…安藤先生、Help!
I need somebody.
Help!
Not just anybody.
Help!
You know I need someone Help!


同じような話:
リファクタリングをするために必要なこと - Paradigm Shift Design
オブジェクト指向を教える方法を考える - Paradigm Shift Design
M1のソース - Paradigm Shift Design*2

*1:いや、多分大丈夫です、再利用させます

*2:M君の黒歴史