3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

手続き型からオブジェクト指向へ抜け出す9つのルール

Posted at

まえがき1

の内容を一部抜粋し、自分なりの解釈を加えたものです。

まえがき2

少々、極端な内容を含みます。

オブジェクト指向を有効に実践できることを保証するものではありませんし、むしろ不自然で非効率になる場合もあるので予めご注意ください。

①1メソッドにつきネストは1つまで

メソッドが担うべき仕事は1つであり、ネストが複数ある時点でそのメソッドが複数の責務を担っていることを示しています。

ネストは1つの処理単位であり、その単位でメソッドやクラスに抽出して部品化することこそがオブジェクト指向の根本の発想と言えます。

②else 句禁止

ガード節と早期リターン、またポリモーフィズムの使用を勧めます。

if ブロックの条件句を脳の stack に保存しておく必要がないため可読性が上がります。また、ロジックのかたまりを部品化するオブジェクト指向らしい設計へのよいガイドになりえるでしょう。

③すべてのプリミティブ型と文字列型を wrap する

プリミティブ型と文字列型を、そのままではなくオブジェクトとして扱うべきという指摘です。

そのオブジェクトに計算や加工のロジックを閉じ込めて扱うことがオブジェクト指向の基本のきです。

④ドットは1つまで

ここで言う「ドット」は、オブジェクトのネストを指します。

ドットが多数繋がっているとことは、すなわちオブジェクトの中に深く潜り込んでいることを意味します。

複文から単文構造への分解と同じ処理の重複を排除することを目的としています。ドット1つごとに説明変数や要約変数に落とすような工夫ができそうです。

⑤名前の省略禁止

(オブジェクト指向に限定しないような気もしますが。)

名前の省略(特に業務用語の省略)は保守性を落とします。

⑥すべてのエンティティを小さくすること

50行を超えるクラス、10を超えるクラスを内包するパッケージを作ってはいけません。

オブジェクト指向の真価はメソッド・クラスは小さく保っておけることです。長いメソッド、巨大なクラス、クラス数の多いパッケージは分割するチャンスと考えられます。

⑦1クラスにつきインスタンス変数は2つまで

インスタンス変数が増えれば増えるだけクラスの凝縮度は低くなります。

インスタンス変数とメソッドが密接に結びついたクラスは、目的が明確になります。逆にインスタンス変数が増えると、クラスの意図が不透明になるということです。

⑧ファーストクラスコレクションを使用すること

リストやマップなどのコレクションを wrap したクラスをファーストクラスコレクションと言います。

関連するデータとロジックを一つのオブジェクトに閉じ込めるのがオブジェクト指向の基本と言いました。コレクションに関しても同じことが言えます。

⑨getter、setter、プロパティを使用しないこと

他のクラスでこれらを使用すると、インスタンス変数の振る舞いが他のクラスへ染み出します。

値オブジェクトとして扱うことが理想です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?