アラタナエンジニアブログ

aratana Engineer's Blog

オブジェクト指向エクササイズのすすめ

この記事はアラタナアドベントカレンダー11日目の記事です。

f:id:kimesawa:20161202085600j:plain

寒くなってきましたが、皆さん風邪などひいていないですか?
私はこの土日完全にダウンして、土曜に書く予定だったこのブログを週明けに書いています^^;

ノロだのインフルエンザだの流行っていますので、このような流行には乗らずに元気に年を越したいものですね。

さて、今日は「オブジェクト指向エクササイズ」というダイエット手法ではなく、オブジェクト指向を正しく身につけるための練習方法を紹介します。

前回、こんなブログエントリーを書きました。
lab.aratana.jp

いわゆる、機能分割的な設計をしていては、オブジェクト指向を理解できず、オブジェクト指向で設計するためには、部品と役割を考えて設計していく必要がある、ということでした。

ただ、このように考えられるようになるためには、ある程度の訓練、そして、考え方のブレイクスルーが必要となってきます。

自転車に乗ることでも、スポーツでも、練習しないとうまくできるようにはならない。考えること、探求することでできるようになるものなど存在しない。ところが心理的技能についてはすぐにできるようになる、と思ってしまうことが多い。
「自分には価値がない」の心理学(朝日新書:根本橘夫 著 )

と最近読んだ本から抜粋してみましたが、設計や実装の技法についても全く同じことが言えると思います。

DDD本を読んだから、オブジェクト指向の本を読んだから何ができるわけではありません。

まずは訓練が必要です。

といことでお勧めなのがこちら。

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

リアル書籍は絶版になっておりますが、
www.oreilly.co.jp

こちらでPDF版が購入できます。

この本の第5章に「オブジェクト指向エクササイズ ソフトウェア設計を改善する9つのステップ」というエッセイがあります。

まずは騙されたと思って、1000行程度の小さなプロジェクトで9つのルールを厳密に適用してみてください。そうすれば、ソフトウェア設計に対するまったく異なるアプローチに気がつくでしょう。
(5.2 エクササイズ)

ということで騙されて見てください。きっと、オブジェクト指向による設計が自然と身につくはずです。

9つのルールはこんなルールです。まずは厳密に守ってソースを書いたり、リファクタリングしてみてください。

ルール1:1 つのメソッドにつきインデントは1 段階までにすること
ルール2:else 句を使用しないこと
ルール3:すべてのプリミティブ型と文字列型をラップすること
ルール4:1 行につきドットは1 つまでにすること
ルール5:名前を省略しないこと
ルール6:すべてのエンティティを小さくすること
ルール7:1 つのクラスにつきインスタンス変数は2 つまでにすること
ルール8:ファーストクラスコレクションを使用すること
ルール9:Getter 、Setter 、プロパティを使用しないこと

ただ、このエクササイズを過去に何度か紹介させていただいたことがあるのですが、大方反応は以下の2通りでした。

1.えっ!こんなルールでソースが書けるの?
2.ルールを聞いたけどピンと来ない。。。

1の反応は正常な反応です。ぜひこのエクササイズを試していただきたいです。

2の反応の人は恐らくまだオブジェクト指向を備えた言語で実装したことがない、または、実装したことがあってもオブジェクト指向の機能を使って実装をしていない方(PHPとか)だと思います。特に、ルール3、6、7、8,9あたりがピンと来ないと思います。

そんな方はまず、クラスの機能を使って実装をしてみて欲しいです。それも1機能1クラスとか、1画面1クラスなどにとらわれず、自由にクラスを分けて書いてみて下さい。
その際は特にルール1,2,5を守って書いてみるといいかもしれません。

それでもまだ、これまでのやり方とくらべて何がいいのかわからないと思います。そこで、ルール3、6、7、8,9を使ってリファクタリングを試していただきたい。きっと効果があると思います。

実際、どうすればルールを守れるか。という点が気になるところですが、これについてはまた別記事で詳しく書いていきたいと思います。

f:id:kimesawa:20161202085600j:plain

明日はECテクノロジー事業部、期待の若手、成長著しい甲斐先生による「【2進数】両手で1023まで数を数える方法」です。
どうでもいい話ですが、宮崎には「甲斐」さんという名字が多くてびっくりしました。

以上ですー\(^o^)/