オブジェクト指向との出会いってずっと前から出会っていたけど気がつかなかった!
ずっと前から出会っていましたが,見てみぬふりをしていたのか,オブジェクト指向を正面から学んでいませんでした。しかし,リーダブルコードという本を読んでみても,何かしっくりしないものがありました。
C#を学んでいるだけでは突破できない
「C#を学んでいるだけでは突破できない何かがある…」なんとなく私の心の中は,そんな気持ちが芽生えていました。確かにリーダブルコードに書かれていることは有益な内容でした。美しいプログラミングをするための知識がありました。しかし,リーダブルコードは文法的な美しさや,コーディングルール的な美しさがメインで書かれていました。
ボタンクリックイベントの中身をどこか違うクラスに移動してみても,結局書いてある場所が違うだけで,それで何が良くなったのか分からない,というか,何も良くなっていない,もっと言うと,違う場所に書くようにしたために,返って可読性が悪くなってしまっていました。
オブジェクト指向を学ぶことが良いプログラミングであると気づく
どうすればいいのか悩んでいましたが,そんなときに以前の大手で学んだ,オブジェクト指向が頭に浮かびました。C#で美しいコードを書きたかったのだけど,C#なんて言語の概念は一度忘れて,オブジェクト指向言語として捕らえないといけなかったのだと思いました。
とりあえず,オブジェクト指向とは何かをインターネットで調べてみることにしました。以前働いていた職場では,3層構造でプログラミングをしている現場が結構ありました。働いているときは,それにどのような意味があるのかは分からず,そういう決まりなのでそれにならって書いているという感じで働いていました。
この3層構造がオブジェクト指向をつかむヒントになるのではないかと思い,いろいろとインターネットで3層構造に関して探しました。インターネット上には,あまりこの3層構造の概念は無かったように思います。少しは出てきましたが,詳しい解説はありませんでした。
ストラテジーパターンとの出会い
しかし,ひとつ有益な情報を得ました。それは,データ取得部分はDAOパターンを使うということ。DAOパターンはjavaの世界での常識のようでしたが,私にはよく分かりませんでした。私が読んだ記事では,データ取得部分にインタフェースを使用して,ストラテジーパターンにするということ。ストラテジーパターンなんてもちろん知らなかった私でしたが,インタフェースをしようして,インスタンスを差し替え可能にするという概念は,なんとなく理解でき,探していた3層構造のデータ部分に使えると感じました。さらにその記事では,ファクトリーパターンを使用して,必要なインスタンスを生成することを専門にしたクラスを実装することが書かれていました。この考え方は今でも使用している実装方法で,データなど外部との接触部分は「ストラテジーパターン」プラス「ファクトリーパターン」が有効です。
「困ったときは本を読む」ということで,本屋さんに行って,オブジェクト指向に関する本を色々と探しました。独習シリーズのオブジェクト指向という本がありました。そこには3層構造での実装が「java」と「C#」で書かれていました。先輩たちのしていた実装に結構似ていた気がしたので,みんなこれを見て実装していたのかな?と思いました。
それ以外でいうと「コードコンプリート」上下巻あわせると2万円近くしました。内容はリーダブルコードをさらに詳しくした感じに,プログラム設計の要素もある感じの本でした。
あとは,HeadFirstシリーズのオブジェクト指向本などは,漫画みたいな感じで,結構読みやすかったですね。
C#とか関係なく,オブジェクト指向言語として捉える
結局これまでは本屋に行ってもC#の本を買っていましたが,そんな小さな世界ではなく,プログラム設計のお話に目を向けなければならないということにようやく気がつきました。
そういった視線で本屋に行くと,結構設計に関する本が出ています。サンプルコードはほとんどがjavaですが,C#と非常によく似ているため,8割以上はすらすらと読めますね。
先祖であるC++やjavaの本から学ぶことはたくさんありました。
- C#erが5年目までに学ぶべき7ステップ!!
- C#を勉強する順番!オブジェクト指向からドメイン駆動開発まで#1-1
- C#を勉強する順番!とりあえず最低限の文法や開発環境の使い方の知識は必要#1-2
- C#を勉強する順番!WindowsFormsプログラミングで電卓なんかを作ってイベントなどを使えるようにする#1-3
- C#を勉強する順番!企業でのシステム開発とかだとDBを使うのでC#とDBをつなげる技術#1-4
- C#を勉強する順番!ボタンクリックイベントにだらだら書くのはなんか違う気がしてくる#1-5
- C#を勉強する順番!良いプログラミングのお手本がないとどうして良いのかわからない#1-6
- C#を勉強する順番!プログラミング初級講座とかいう大手の研修を受けてみたが#1-7
- C#を勉強する順番!良いプログラムとはリーダブルコード?コーディングルールを学ぶ#1-8
- C#を勉強する順番!第2章 オブジェクト指向との出会い#2-0
- オブジェクト指向を学ぶって事はデザインパターンを学ぶって事なんだな#2-1
- ドメイン駆動開発がオブジェクト指向をうまくコーディネートしていて最強みたい#2-2
- C#を勉強する順番!ドメイン駆動開発をするにはテスト駆動開発の知識が必須?#2-3
- C#を勉強する順番!テストコードのないプログラムは全部レガシーコードって呼ぶらしい#2-4