質問編集履歴

2

2016/03/13 00:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ```java
12
12
 
13
- final class Dice1 {
13
+ final class NonStateDice {
14
14
 
15
15
  private final Random random = SecureRandom.getInstanceStrong();
16
16
 
@@ -22,7 +22,9 @@
22
22
 
23
23
  }
24
24
 
25
+
26
+
25
- final class Dice2 {
27
+ final class MutableDice {
26
28
 
27
29
  private final Random random = SecureRandom.getInstanceStrong();
28
30
 
@@ -42,7 +44,7 @@
42
44
 
43
45
  }
44
46
 
45
- final class Dice3 {
47
+ final class ImmutableDice {
46
48
 
47
49
  private final Random random = SecureRandom.getInstanceStrong();
48
50
 
@@ -50,15 +52,15 @@
50
52
 
51
53
 
52
54
 
53
- Dice3(final int roll) {
55
+ ImmutableDice(final int roll) {
54
56
 
55
57
  this.roll = roll;
56
58
 
57
59
  }
58
60
 
59
- Dice3 roll() {
61
+ ImmutableDice roll() {
60
62
 
61
- return new Dice3(random.nextInt(6) + 1);
63
+ return new ImmutableDice(random.nextInt(6) + 1);
62
64
 
63
65
  }
64
66
 

1

2016/03/13 00:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- しかしながら,実世界に存在するものは必ず状態を持っています.例えばサイコロは出目という状態を持ちます.サイコロでは次に対て現在の状態気にす必要はありませんが,オブジェクト指向的に,状態を持つオブジェクト,状態を持たないオブジェクト,どちらが適切に実世界を切り取っているでしょうか.
5
+ しかしながら,実世界に存在するものは,様々な状態に変化します.例えばサイコロは出目という状態を持ち,人に投げられることで,その状態が変化します.JavaのBigIntegerのように,演算結果を新しいインスタンスによって返すような不変オブジェクト設計をサイコロに適用するとサイコロが転がって新いサイコロのか?と納得がいきません.今あるものの状態変化すべきという点で可変オブジェクトは納得がいきます.不変オブジェクト,可変オブジェクト,どちらが適切に実世界を切り取っていると考えますか.
6
6
 
7
7
 
8
8
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  private final Random random = SecureRandom.getInstanceStrong();
28
28
 
29
- private final int roll;
29
+ private int roll;
30
30
 
31
31
  void roll() {
32
32
 
@@ -42,6 +42,32 @@
42
42
 
43
43
  }
44
44
 
45
+ final class Dice3 {
46
+
47
+ private final Random random = SecureRandom.getInstanceStrong();
48
+
49
+ private final int roll;
45
50
 
46
51
 
52
+
53
+ Dice3(final int roll) {
54
+
55
+ this.roll = roll;
56
+
57
+ }
58
+
59
+ Dice3 roll() {
60
+
61
+ return new Dice3(random.nextInt(6) + 1);
62
+
63
+ }
64
+
65
+ int show() {
66
+
67
+ return roll;
68
+
69
+ }
70
+
71
+ }
72
+
47
73
  ```