回答編集履歴

1

原因が分かりませんが、投稿が反映されなかったようなので、再投稿します。

2017/11/09 14:20

投稿

LLman
LLman

スコア5592

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  オブジェクト指向言語の一番最初の原型はSimulaで、
16
16
 
17
- 名前通りシミュレーションするための言語です。
17
+ 名前通り**シミュレーション**するための言語です。
18
18
 
19
19
 
20
20
 
@@ -44,7 +44,7 @@
44
44
 
45
45
  ただし、現実世界をそのまま再現するのではなく、
46
46
 
47
- 現実から抽象したドメイン(問題領域)を再現します。
47
+ 現実から抽象した**ドメイン(問題領域)**を再現します。
48
48
 
49
49
 
50
50
 
@@ -60,13 +60,15 @@
60
60
 
61
61
  とくに業務的な理由での変更に強くなります。
62
62
 
63
-
63
+ 業務知識の構造を再現しているから、その変更も再現しやすいのです。
64
-
64
+
65
+
66
+
65
- GUIは映像的なシミュレーション、
67
+ GUIやゲームは映像的なシミュレーション、
66
-
68
+
67
- DDDは業務的なシミュレーションで、
69
+ DDD(が使われる対象)は業務的なシミュレーションで、
68
-
70
+
69
- ドメイン
71
+ ドメインこそ違うものの、OOの性質を活かしています。
70
72
 
71
73
 
72
74
 
@@ -88,14 +90,6 @@
88
90
 
89
91
 
90
92
 
91
- 継承などは手段であって目的ではありません。
92
-
93
- たとえば、継承で実装を再利用するのはアンチパターンです。
94
-
95
- 概念を分類する型継承と、委譲を使う方が筋の良いOOです。
96
-
97
-
98
-
99
93
  普通、プログラムは開発より保守の方がコストがかかるので、
100
94
 
101
95
  変更、修正、拡張、交換などがしやすいのは大きなメリットです。
@@ -110,6 +104,32 @@
110
104
 
111
105
 
112
106
 
107
+ 抽象化というのが抽象的で分かりにくいと思います。
108
+
109
+ 抽象の反対が具象で、命令的、手続き的な手法です。
110
+
111
+
112
+
113
+ 機械語、アセンブラ、C言語と高級言語化してきましたが、
114
+
115
+ 機械側から人間側にさらに高水準化したのがOO言語です。
116
+
117
+
118
+
119
+ 複雑、大規模、長期運用のシステムは、
120
+
121
+ 具象だけで行くと人間が認識不可能になってきます。
122
+
123
+
124
+
125
+ 具体的な細部の手順が一度に分からなくても、
126
+
127
+ OOではドメインモデリングで人間の知識構造を再現するので、
128
+
129
+ 部分的な変更・修正・拡張がしやすくなります。
130
+
131
+
132
+
113
133
 
114
134
 
115
135
  ---
@@ -134,7 +154,7 @@
134
154
 
135
155
 
136
156
 
137
- オブジェクト指向はオブジェクト=データ中心であって、
157
+ オブジェクト指向は**オブジェクト=データ中心**の技法であって、
138
158
 
139
159
  メソッド=処理中心ではありません。そこが構造化技法との差です。
140
160
 
@@ -152,7 +172,7 @@
152
172
 
153
173
 
154
174
 
155
- このようにオブジェクトの関係によって、
175
+ このようにオブジェクトの関係、つまり責務の配分によって、
156
176
 
157
177
  ドメインをシミュレーションするのがOOのポイントです。
158
178
 
@@ -179,3 +199,33 @@
179
199
  Rubyもそうですが、Rubyの方がOO寄り、
180
200
 
181
201
  Pythonの方が関数型寄りに感じます。
202
+
203
+
204
+
205
+
206
+
207
+ ---
208
+
209
+
210
+
211
+ なお今回、ドメインモデリングから
212
+
213
+ DDDへの流れを軸に語りましたが、
214
+
215
+ Smalltalk流のOOは**メッセージング**を重視します。
216
+
217
+
218
+
219
+ これを一言でいうと遅延結合がポイントで、
220
+
221
+ 事後的な再設計を可能にする仕組みです。
222
+
223
+
224
+
225
+ どういうことかというと、後から設計を修正しやすいので、
226
+
227
+ リファクタリングなども含んだ反復的開発、アジャイルがしやすい。
228
+
229
+
230
+
231
+ つまり、XPからDDDへという、もう一方の流れがあると思います。