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

回答編集履歴

1

質問の追記を受けて追記

2019/12/19 13:32

投稿

Q71
Q71

スコア995

answer CHANGED
@@ -1,3 +1,21 @@
1
+ # 追記
2
+
3
+ 『スッキリわかるJava入門』
4
+ > なぜJavaでは「オブジェクト同士が連携する仮想世界」を作るために、わざわざ「クラスを定義して、そのクラスからオブジェクトを生成する」という複雑な手順を踏まなけれぱならないのでしょうか。
5
+
6
+ おそらく、BASICあたりからいきなりJavaに飛んでこられたのでしょうか。
7
+ 質問はオブジェクト指向ですが、オブジェクト指向が言われる前には「構造化しよう」と言われていました。プログラムコードの作りも構造化しますが、扱う情報も構造化します。BASICでは情報を「意味のある塊」にすることはできませんが、例えばCでは、`struct`を使って意味のある塊、すなわち構造体を作ることができます。ということは、オブジェクト指向言語ではないCでも、「わざわざ「構造体を定義して、その構造体にメモリを割り当てる」という複雑な手順を踏」んでいるわけです。
8
+ 引用部分は、もうちょっとプログラミング言語の歴史を知っていれば、違う書き方をされたのではないかと思われます。
9
+ 興味があれば[「プログラミング言語 歴史」で検索](https://www.bing.com/search?q=%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e8%a8%80%e8%aa%9e+%e6%ad%b4%e5%8f%b2&form=EDGEAR&qs=HS&cvid=b62f47174300407ba37e07702cb87b13&cc=JP&setlang=ja-JP&plvar=0)してみて下さい。
10
+
11
+ 『Javaのオブジェクト指向がゼッタイにわかる本』も、同じですね。
12
+
13
+ BASICでは、構造体を作れないので、意味のある情報の塊の管理は工夫します。はて?ダンジョン探索型RPGを作ったはずなんだけど、どうやって管理したのだろう?
14
+ 数値であれば、配列を使います。インデックス0にHP、1にMP、というように。なので、「オブジェクトを大量作る」ことよりも、「オブジェクトの意味的な塊ごとに管理する」ことの方が重要ですし、苦労します。あえて言いますが、「インスタンス化によってオブジェクトを作ることを簡略化する」というのは、間違いです。クラス化することで情報と、それを扱う操作をひとまとめにして、オブジェクトの管理を簡略化します。情報の塊の設計図であるクラスを元に、実態の一つであるインスタンスを生成します。インスタンス化も、やはり管理です。「意味のある塊」と、再三書いています。RPGで、モンスターAと、モンスターBが出てきました。プレイヤーはMORLISを唱え、モンスターAには効きました。モンスターAは一定時間怯え、攻撃をしてこなくなり、アーマークラスが上がります。オブジェクトを使うのが楽なので、昔どうやっていたか忘れてしまいましたが、インスタンスによってモンスターAとモンスターBは、全く別のメモリ空間が割り当てられています。クラスに定義したインスタンスメソッドは、インスタンス内の変数領域に対して作用するので、モンスターAのアーマークラスを上げようとしてモンスターBを変えてしまうと言うことはありません。
15
+ メモリ割り当てが自動化するとか、楽になるとかということはありません。しかし、クラス化によって情報がまとまることで管理しやすくなり、インスタンスが分かれることで変更が楽になります。
16
+ あ、MORLISは、Wizardlyというゲームに出てくる呪文です。
17
+
18
+ ---
1
19
  まず、object, oriented, class, instance の意味を調べましょう。
2
20
  object:
3
21
   (感情、動作などの)対象(となるもの)