回答編集履歴

2

「全体の記述量が増え、メンテナンスコストが増える」の理由を追記

2019/02/28 15:57

投稿

nskydiving
nskydiving

スコア6500

test CHANGED
@@ -25,3 +25,47 @@
25
25
  極端な例かもしれませんが、ポケモン最新作「Let’s Go!ピカチュウ/イーブイ」では 809 種類のポケモンが登場しますが、この設計ですと 809 個のクラスが必要になります。
26
26
 
27
27
  現実的にメンテナンス不可能な気がします。
28
+
29
+
30
+
31
+ ---
32
+
33
+
34
+
35
+ 「全体の記述量が増え、メンテナンスコストが増える」の理由を、以下の挙げさせていただきます。
36
+
37
+
38
+
39
+ - 単純にクラスが増えれば増えるほどが全体の記述量が多くなり、開発者が把握しなければならない範囲が広くなる。
40
+
41
+ - クラスが増えることにより、コンパイル時間が長くなる。(使用するプログラミング言語やコンパイラの性能にもよりますが)
42
+
43
+ - クラス継承により、他のクラスとの関係性が複雑になる。
44
+
45
+
46
+
47
+ 最後の「クラス継承により、他のクラスとの関係性が複雑になる」は、少し理解しづらいと思いますので、一つだけ例を挙げます。
48
+
49
+
50
+
51
+ ![イメージ説明](a44530c91dba4d0215b016a875a0d4c7.jpeg)
52
+
53
+
54
+
55
+ Bird(鳥)クラスを継承する子クラスとして、Owl(フクロウ)クラスと Pigeon(ハト)クラスがあり、そこに Penguin(ペンギン)クラスを追加したいのですが、一つ問題があります。
56
+
57
+ Bird(鳥)クラスは Fly メソッドを持っていますが、ペンギンは空を飛ぶことができません。
58
+
59
+ さて、この場合はクラス設計をどう変更すべきでしょうか?
60
+
61
+
62
+
63
+ 本題ではないので、解説はリンク先の記事に譲りますが、クラス継承にはこのような問題がたくさん出てきます。
64
+
65
+ この例では、全部で 4 つしかクラスが出てきませんでしたが、これがもしポケモンのように数百個のクラスが必要になった場合、果たしてうまくクラス設計することができるでしょうか?
66
+
67
+
68
+
69
+ 参考:
70
+
71
+ [【Bad & Good】拝啓 継承による問題を間違って解決した私へ](https://qiita.com/yoshinori_hisakawa/items/57ff158b89c38881ace9)

1

誤った表記「多重継承」を削除

2019/02/28 15:57

投稿

nskydiving
nskydiving

スコア6500

test CHANGED
@@ -1,4 +1,4 @@
1
- 提示されたクラス設計ですが、クラスの多さよりも多重継承継承されたクラスをさらに継承が使われていることの方が気になります。
1
+ 提示されたクラス設計ですが、クラスの多さよりも~~多重継承~~「継承されたクラスをさらに継承が使われていることの方が気になります。
2
2
 
3
3
 
4
4