普段は、C#やPythonを使っています。最近、『独学プログラマー Python言語の基本から仕事のやり方まで』という本で知識の再整理をしているのですが、引っかかったことがあったので質問させてもらいます。
Cなどの手続き型の言語のローカル変数も、C#やPythonなどのオブジェクト指向型言語ではオブジェクトになります。
手続き型っぽく書いてみた場合
main1.cs
1public class Hello{ 2 public static void Main(){ 3 int money = 10000; 4 } 5}
オブジェクト指向っぽく書いてみた場合
main2.cs
1public class Hello{ 2 public static void Main(){ 3 Person john = new Person(10000); 4 } 5} 6 7public class Person{ 8 public int money; 9 10 public Person(int money){ 11 this.money = money; 12 } 13}
ここで疑問に思うのは、上のプログラムのmoney変数がオブジェクトというよりは、文脈的には明らかにローカル変数であることです。
Personクラスのインスタンスとしてjohnというオブジェクトが存在するように、intクラスのインスタンスとしてmoneyというオブジェクトが存在するという解釈もできますが、そう考えると不自然な点があります。
それは、johnというオブジェクトのフィールドを参照するにはjohn.money
と書かなくてはならないのに、moneyというオブジェクトはmoney
だけで割り当てられている値を参照できるということです。本来は、例えば、money.value
(valueはフィールドを参照するのに使われる予約語)のように書かないと参照できないようにするのが統一感があってよいのではないでしょうか。めんどくさいですけど...
Main()のフィールドとして考えられなくもない...(??)
質問したいことをまとめると以下の2点になります。
1.オブジェクトのくせにフィールドを参照しなくていいって内部的にどうなっているの?省略記法として認められているってこと?数値データはどこに格納されているの?
2.この宇宙のあらゆる値は、何らかのオブジェクトのフィールドとして存在するので、上記の「手続き型っぽく書いてみた場合」のプログラムってオブジェクト指向でも何でもないし、オブジェクト指向とは言えない という認識であってますか?
久しぶりに投稿したからか、なぜかラフな文体になってしまいましたが、回答よろしくお願いします。
回答7件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/12 11:37
2018/04/12 11:48 編集
退会済みユーザー
2018/04/12 13:38
2018/04/12 14:06 編集
退会済みユーザー
2018/04/12 16:30