オブジェクト指向全然出来てない・・・。いまさら聞けない「オブジェクト指向設計の3つのコツを読んで
いまさら聞けない「オブジェクト指向設計の3つのコツ」〜オブジェクト指向設計問題解説 #objectoriented - CodeIQ Blog
http://codeiq.hatenablog.com/entry/2013/08/26/155959
電車の中で読んで、
問題2つ考えてみたけど全然・・・orz
◎ データと、そのデータを使うロジックは、一つのクラスにまとめる
◎ 一つ一つのオブジェクトの役割は単純にする
◎ 複雑な処理は、オブジェクトを組み合わせて実現する
とあります。
この記事読んで・・・
まず1つ目の問題。
値をメソッドで渡しまくりです。というかそれしかしてないです。
コンストラクタで渡すという記述したことないです。
読んだ後もメソッドでの値渡しとコンストラクタでの渡しの違いも
なんとなくそうした方が一つにまとまっていていい位の感覚しかなくて。。。
全てオブジェクト生成時に必要なデータを揃えるっていうのも難しいなって感じます。
オブジェクト生成してからそこに情報入れ替えてたり追加する場合、
例えばTwitterから検索結果を追加で取得して入れて行く場合も
新しくインスタンス生成して、前のを廃棄。してく形がいいのかな。
フィールドを全部使う形は難しくても
このフィールドすごくよく使うってところは別クラスに分けていくようにしよう。
完全コンストラクタも初めて知りました。
■オブジェクト指向設計の基本は「完全コンストラクタ」パターン
「完全コンストラクタ」は、オブジェクトが生成された時点で
必要なデータを全てオブジェクト自身が知っています。setter もありませんから、
最初に設定したデータが途中で変わってしまうこともありません。
不変(immutable)のオブジェクトですね。こういう不変オブジェクトは常に安定した結果を返します。
よくデータの確認は徹底してなくてまた別問題でやってなくてダメダメですが・・・
デバッグ中に確認するために、よく止めて、NSLog書いて確認したりと。
それが少なくなると、確認する時間短くにと安定することがあるのかなぁと思いました。
(よくsignal SIGABRT エラーでて落ちるので)
2つ目の問題。
関連するデータと処理をまとめてオブジェクトに持たせて、分散させない。
オブジェクト同士を可能な限り疎結合に関連持たせないように。
「ファーストクラス・コレクション」パターン
「関連するデータとロジックを一つのクラスに集める」原則のより具体的なやり方として「ファーストクラス・コレクション」という設計パターンがあります。
このパターンも初めて知ったのですが、
関連するデータとメソッドは一つのクラスにまとめる、というオブジェクト指向設計の原則をたいせつにすると、コレクションの集計処理はそれ専用の別クラス、という設計になります。コレクションとその操作ロジックを、一つのクラスに集めて閉じ込める(カプセル化する)ことは、オブジェクト指向設計の基本の一つです。
「ファーストクラス・コレクション」という設計パターンです。
コレクションは特別扱いをして、いつも、
専用クラスに閉じ込めておくという考え方ですね。
似たようなクラスが出てきてるの放りっぱなしなの直していこう。
オブジェクト指向の理解も実践も難しい。。。