質問するログイン新規登録

回答編集履歴

1

コメント欄への回答を追記(コメ欄に書くと長くなるため)

2016/11/23 13:09

投稿

LLman
LLman

スコア5592

answer CHANGED
@@ -21,4 +21,41 @@
21
21
  ユニットがブロックを持つ(合成する)設計を採用するかもしれません。
22
22
  ブロックに処理を委譲すると、再帰的に処理できるパターンがあるからです。
23
23
 
24
- けっきょく、オブジェクト指向も手段なので、目的に合わせて使いわけます。
24
+ けっきょく、オブジェクト指向も手段なので、目的に合わせて使いわけます。
25
+
26
+ ---
27
+
28
+ > オブジェクト指向を駆使したものが
29
+ > 抽象度が高くなるのですか?(コメ欄)
30
+
31
+ プログラミングは書くより読む方が難しいので、修正コストが高いです。
32
+ とくに、大規模なプログラムを長い間少しずつ拡張するのは大変です。
33
+
34
+ 変更コストを下げたい → 交換しやすくする →
35
+ (中心部の)抽象度を上げる → オブジェクト指向を使って設計する
36
+
37
+ ですから、結果的にはそうなるのですが、
38
+ 上のような順番で根本には「変更コストを下げたい」という意識があります。
39
+
40
+ テトリスのブロックパターンが7つのまま固定なら、そんなに凝る必要はありません。
41
+ しかしもし、たとえば100パターンくらいに増やす予定なら、もっと抽象化します。
42
+
43
+ ---
44
+
45
+ > オブジェクト指向はシンプルな設計を
46
+ > するのには向いていないのですかね?(コメ欄)
47
+
48
+ オブジェクト指向は、複雑な設計を「シンプル化」するのに向きます。
49
+ しかし、元からシンプルな設計対象に使うと、過剰設計になる場合があります。
50
+
51
+ たとえると、建物は木造よりコンクリの方が耐久力がありますが、田んぼにビルは建てませんし、
52
+ 自転車より自動車の方が早いですが、歩いて5分なら車に乗る必要もありません。
53
+
54
+ 同様にたとえば、ジャンケンゲームをオブジェクト指向で組むのは無意味に過剰です。
55
+ 逆に、麻雀くらい複雑なルールだと効果がありそうです。テトリスは微妙なラインです。
56
+
57
+ ですから、オブジェクト指向などを駆使して高度な設計をするのは、
58
+ 複雑性や不確定性に柔軟に対応するための、技術的な投資なのです。
59
+
60
+ オブジェクト指向が手続き指向の上位互換で、つねに勝るわけではありません。
61
+ プログラミングに「銀の弾丸」はなく、適材適所の使い分けがあるだけです。