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

回答編集履歴

10

表現の訂正

2019/02/28 03:00

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -95,7 +95,7 @@
95
95
 
96
96
  データを保持する方法は人によって様々ですが、HPや攻撃力のステータスはシステムで静的に持つのではなく各々のオブジェクトに保持しておくのが良いと思います。
97
97
 
98
- システムを管理させるデータというのはステータスなどの具体的な値ではなく、`Unit`オブジェクトではないでしょうか。
98
+ システムを管理させるデータというのはステータスなどの具体的な値ではなく、どちらかというと`Unit`オブジェクトだとか、何かしらのオブジェクトではないでしょうか。
99
99
 
100
100
  2はよくわかりません。関数チックに定義しろということでしょうか。
101
101
 

9

誤字

2019/02/28 03:00

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -85,7 +85,7 @@
85
85
  (4) 複雑になると予想される?システム部分の記述量を減らせる。
86
86
  (5) オブジェクトの使い回しが容易(拡張性が高い?)
87
87
 
88
- これ等5点を見て思うのは、オブジェクト指向っぽいというよりかは**継承という機能のメリットを説明している**ように見えます。ただ、継承がオブジェクト指向の全てではないことは認識しておくと良いかもしれません。
88
+ これ等5点を見て思うのは、オブジェクト指向っぽいというよりかは**継承という機能のメリットを説明している**ように見えます。なので、継承がオブジェクト指向の全てではないことは認識しておくと良いかもしれません。
89
89
 
90
90
  > (1) わざわざクラスを用意してデータを保持せずとも、システムを管理するクラスに組み込むべきだ。
91
91
  (2) これは普通のコードではない。

8

インタフェースにアクセス修飾子がついているので取った

2019/02/28 02:59

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -39,8 +39,8 @@
39
39
  ゴブリンを表現するなら次のようになります
40
40
 
41
41
  ```Java
42
- public interface IAutoFightable{
42
+ interface IAutoFightable{
43
- public void AutoFight();
43
+ void AutoFight();
44
44
  }
45
45
 
46
46
  public class Goblin extends BattleUnit implements IAutoFightable{

7

表現の訂正

2019/02/28 02:58

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  上の関係で違和感がないのはCAN-DOの方なので、NPCの「行動パターンを持つ」という概念はクラスではなくインタフェースで表現したほうが適切な気がします。
25
25
 
26
- ただ、あくまで「個人的に」なので「ゴブリンは絶対NPC」という思想の元でクラス設計をされているのであれば、次に紹介する「気になった点を解決する」欄はスルーしても構いません。
26
+ ただ、あくまで「個人的に違和感を感じているだけなので「ゴブリンは絶対NPC」という思想の元でクラス設計をされているのであれば、次に紹介する「気になった点を解決する」欄はスルーしても構いません。
27
27
 
28
28
  ### 気になった点を解決する
29
29
 

6

表現の訂正

2019/02/28 02:56

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -72,7 +72,7 @@
72
72
  `Goblin`に`BattleNpcUnit`を継承させた場合は、上記の`Fight`メソッドの引数に渡すことができます。
73
73
  `Goblin`クラスで`AutoFight`メソッドをオーバーライドした場合は、`Gobrin`独自の戦闘が行えます。(パーティー戦ならあるプレイヤーだけ一人狙いするとかがあるかもしれません)
74
74
 
75
- そうすると`Fight`メソッドで**enemyの具体的な型を知らないで実装を作ることができる**ので作りやすくなります。
75
+ そうすると`Fight`メソッドで**enemyに保持されているインスタンスの型を知らないで実装を作ることができる**ので作りやすくなります。
76
76
  このように抽象クラスやインタフェースに対してプログラミングすることを「ポリモーフィズム」と言います。
77
77
 
78
78
  もっとオブジェクト指向チックに設計したいのであれば、継承することだけにこだわらず抽象に対してプログラミングするという考え方があると良いと思います。

5

誤字

2019/02/28 02:55

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  - Goblin can be NPC
19
19
  - Goblin can do fight automatically
20
20
 
21
- 継承はIS-A関係なので、文章にすると「Goblin is NPC」になります。
21
+ 継承はIS-A関係なので、文章にすると「Goblin is a NPC」になります。
22
22
  つまり「ゴブリンは絶対にNPC」という確固たる性質を持ってしまうわけなので、個人的に違和感があります。
23
23
 
24
24
  上の関係で違和感がないのはCAN-DOの方なので、NPCの「行動パターンを持つ」という概念はクラスではなくインタフェースで表現したほうが適切な気がします。

4

スペルミス修正とマークダウンの修正

2019/02/28 02:47

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  クラス設計には日々悩んでるまだまだオブジェクト指向のアマチュアですが、2点。
14
14
 
15
- 1点目、UnitとNpcUnitとBattleNpcUnitは抽象クラスであったほうが良いと思います。
15
+ 1点目、`Unit``NpcUnit``BattleNpcUnit`は抽象クラスであったほうが良いと思います。
16
16
 
17
17
  2点目、Npcクラスは、独自の行動で戦闘ができるNPCとして振舞えるということなので、次のようにCAN-DO関係で表現できます。
18
18
  - Goblin can be NPC
@@ -43,7 +43,7 @@
43
43
  public void AutoFight();
44
44
  }
45
45
 
46
- public class Gobrin extends BattleUnit implements IAutoFightable{
46
+ public class Goblin extends BattleUnit implements IAutoFightable{
47
47
  public void AutoFight(){
48
48
  //敵ゴブリンの戦闘パターンを定義
49
49
  }
@@ -69,10 +69,10 @@
69
69
  }
70
70
  ```
71
71
 
72
- GobrinにBattleNpcUnitを継承させた場合は、上記のFightメソッドの引数に渡すことができます。
72
+ `Goblin``BattleNpcUnit`を継承させた場合は、上記の`Fight`メソッドの引数に渡すことができます。
73
- GobrinクラスでAutoFightメソッドをオーバーライドした場合は、Gobrin独自の戦闘が行えます。(パーティー戦ならあるプレイヤーだけ一人狙いするとかがあるかもしれません)
73
+ `Goblin`クラスで`AutoFight`メソッドをオーバーライドした場合は、`Gobrin`独自の戦闘が行えます。(パーティー戦ならあるプレイヤーだけ一人狙いするとかがあるかもしれません)
74
74
 
75
- そうするとFightメソッドで**enemyの具体的な型を知らないで実装を作ることができる**ので作りやすくなります。
75
+ そうすると`Fight`メソッドで**enemyの具体的な型を知らないで実装を作ることができる**ので作りやすくなります。
76
76
  このように抽象クラスやインタフェースに対してプログラミングすることを「ポリモーフィズム」と言います。
77
77
 
78
78
  もっとオブジェクト指向チックに設計したいのであれば、継承することだけにこだわらず抽象に対してプログラミングするという考え方があると良いと思います。
@@ -95,7 +95,7 @@
95
95
 
96
96
  データを保持する方法は人によって様々ですが、HPや攻撃力のステータスはシステムで静的に持つのではなく各々のオブジェクトに保持しておくのが良いと思います。
97
97
 
98
- システムを管理させるデータというのはステータスなどの具体的な値ではなく、Unitオブジェクトではないでしょうか。
98
+ システムを管理させるデータというのはステータスなどの具体的な値ではなく、`Unit`オブジェクトではないでしょうか。
99
99
 
100
100
  2はよくわかりません。関数チックに定義しろということでしょうか。
101
101
 

3

誤字

2019/02/28 02:46

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
File without changes

2

誤字

2019/02/28 02:43

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  上の関係で違和感がないのはCAN-DOの方なので、NPCの「行動パターンを持つ」という概念はクラスではなくインタフェースで表現したほうが適切な気がします。
25
25
 
26
- ただ、あくまで「個人的に」なので「ゴブリンは絶対NPC」という思想の元でクラス設計をされているのであれば、2点目以下の「気になった点を解決する」欄はスルーしても構いません。
26
+ ただ、あくまで「個人的に」なので「ゴブリンは絶対NPC」という思想の元でクラス設計をされているのであれば、次に紹介する「気になった点を解決する」欄はスルーしても構いません。
27
27
 
28
28
  ### 気になった点を解決する
29
29
 

1

抽象クラスであるべきクラスが一つ抜けていたので追加

2019/02/28 02:43

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  クラス設計には日々悩んでるまだまだオブジェクト指向のアマチュアですが、2点。
14
14
 
15
- 1点目、UnitとNpcUnitは抽象クラスであったほうが良いと思います。
15
+ 1点目、UnitとNpcUnitとBattleNpcUnitは抽象クラスであったほうが良いと思います。
16
16
 
17
17
  2点目、Npcクラスは、独自の行動で戦闘ができるNPCとして振舞えるということなので、次のようにCAN-DO関係で表現できます。
18
18
  - Goblin can be NPC