回答編集履歴
2
「全体の記述量が増え、メンテナンスコストが増える」の理由を追記
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
|
+

|
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
誤った表記「多重継承」を削除
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
提示されたクラス設計ですが、クラスの多さよりも多重継承
|
1
|
+
提示されたクラス設計ですが、クラスの多さよりも~~多重継承~~「継承されたクラスをさらに継承」が使われていることの方が気になります。
|
2
2
|
|
3
3
|
|
4
4
|
|