20070710の続き

 20070710に紹介した本に「クラスメソッドはオブジェクトを生成しなくても実行できる」という記述があった事を報告したことに付いたコメントが脱線&長くなったのでこちらに移動させる。

通りすがりの旅人
『>staticをつけるとオブジェクトを作らなくても動作する
上記は正しい事なのですが、Java初心者には、
やや誤解を生むもの言いですね…^^;
staticの意味を正しく理解していないとダメですね…^^;

正しく言うと?staticをつけるとクラスフィールドとして
使用出来る為に、オブジェクトを生成しないでも動作させる事が出来る
…っと思っておいた方が良いでしょう

 言い換えがやっぱり同じ事を言ってる気がする。違いが良く分からない。

>new()をしなくても動作するメソッドがある
newする場合は常に別クラスのインスタンスを生成して、
内部のメソッド等を使用する為と思っておいた方がいいかな?
別クラスのインスタンスを生成【クラス名.変数名 = new(クラス名)】すれば、
そのインスタンス内のメソッドは、再度newしないでも使用出来るのは明白だと思います
まぁ、クラスごとimportしちゃうって手もあるのですが…
(それはあえてここでは触れません…w)

 ここから脱線が始まった。

まぁJavaは基本作成した物は常に再利用する
という概念から来ているからですね
一度作成したメソッドや、クラスであれば
また1からプログラムを書くのは、はっきりいって無駄ですから…

全くその通りだと思う。

解りやすく実世界の物で例えるなら…
車を(1から)作ったとして、更にタクシーを作りましょう
っとなった時、1からオーダーメイドのように作るか?
っと、問われたら…、おそらく違うと思います。
エンジン、タイヤ、ハンドル等等…
利用(使用)出来る物は再利用した上で作成すると思います。

その上でタクシーとして必要な物のみを作成すると思います
料金メーター等…

頼みもしないのに例え話を始めてくれた。俺の解釈と大体似てるから良いけど。
おそらく「クラスとインスタンス」から連想して彼の悩んでいた所につながってしまい、話題を勘違いしたものと思われる。まあ、書き込んでくれること自体嬉しいのでそのままつなげていく事にした。そもそも通常の会話もこんな感じで脱線の連続だし。

まぁ要はオブジェクト指向って物になれて、
理解しないと難しい+なかなか先に進めないのが
オブジェクト指向言語のやっかい(難解)な所でしょうか…^^;

って、気づけば長々と駄文を…OTL(苦笑w)
同じ学生の分際であんま長々と書くと生意気+殺されそうですねwww
お許しを…苦笑w
同じJavaを志す者?として何かアドバイスしたくなり、
コメントしまくっちゃいましたwww


プログラムだけをやるのではなく、
実世界の実物の物で例えて考えると
理解が深まると思います。
車は何がメソッドで、何がオブジェクトか?
ラジオだとどうなる?等等…
まぁやっぱり考え方?(ry (笑)


あぃ、失礼しました(苦)m(_ _)m』 (2007/07/11 11:19)

このコメントを読んでて気が付いたが、俺はいまだに「オブジェクト指向」を使ったプログラミングが何なのかさっぱり理解していない。今後この会話を通して理解できたら幸いである。

java1rou 『コメントどうも。

>newする場合は常に別クラスのインスタンスを生成して、

 別クラスでなくても自クラスのインスタンスを生成することも出来ると思いますが、それを念頭に置くとこの文の意味が良く分りません。詳述希望。

>【クラス名.変数名 = new(クラス名)】

えー!?これ可能なんですか?実験しましたが、
「static コンテキストから参照することはできません」

「互換性のない型」
というエラーが出てしまったんですが・・・。

 これは【クラス名 変数名 = new クラス名()】という事だったのだろう。すぐ気が付くべきだった。

>同じJavaを志す者

一緒にがんばりましょう!』 (2007/07/12 09:45)

やはり同期の桜とは良いものである。



通りすがりの旅人
『どうも通りすがりの(ry ですw
今後名乗る名前考えときますw
通りすがりの(ryだと紛らわしそうなんで…苦w


>別クラスでなくても自クラスのインスタンスを生成することも出来る
確かに仰る通りなのですが、(これはJavaのテキスト全般が悪い)
オブジェクトと、インスタンスはよくどのJavaの解説書にも
同じ意味のように取り扱って記述されておりますが、
これは厳密に言うと答えは[NO]です。
オブジェクトの意味合いとしては、この物
インスタンスの意味合いとしては、その物といった感覚でしょうか…

 厳密に言おうとしてよりあやふやになる好例。「この」「その」は使用範囲が広い&ダブるため万人に対してはあいまいになってしまう。恐らく身振り手振りを交えると意味が明確になると思われる。彼は「身振り型」の話者なのだろう。実に学生らしい。精進せよ。

これは正直Javaを実際に使用して慣れていかないと…
なかなか解らない感覚なのですが…
一応抑えて置きたい点として、オブジェクトと、インスタンス
同意語ではないと、思っておいた方がいいと思います。

さて、その話を踏まえて考えると
自クラスの「この物」を扱うのにnewする必要性があるでしょうか?
目の前にある物はそのまま箱(変数)に入れて使えばいいと思います。



>【クラス名.変数名 = new(クラス名)】
記述が悪かったですね… すみません…^^;
↑は、忘れて下さいw


自分で作るより普段使ってる物を例にあげて記述してみましょうかね
普段何気なく使ってる【String】これはクラスですよねぇ?
じゃぁなんでnewせずに使えるのでしょうか? 
例:System.out.println();

例にStringが使われていないが良いのか?

それはJavaの機能としてすでにStringクラスが(標準機能として)
ラッピングされているからです。

一方BufferedReader(クラス)等を使用する際には
importした上で、更にnewして変数に格納しなくては使用出来ないと思います。

ただし、別パッケージのクラス等をimportして
別クラスのインスタンスを使用する際にはnewする必要性はあるでしょうか?
答えはNOです。
引っ張ってきてその場(目の前)にある物は、そのまま使用出来るからです。


まぁ、ここら辺は色々自分でメソッドや、クラスを作成して
使用しながらコンパイルエラーを食らい…
イラつきつつ、慣れていくしかないんでしょうね…OTL(苦笑w)


あとJavaAPIは脳みそが疲れるくらい見た方がいいですw
例えばよく使用するString関連のクラスでnewしないと使用できない物と
newせずともそのまま使用できる物があるのは何故でしょうか?
等等…
何気なくテキストに書かれている物をそのまま記述したり、
使用するのではなく、上記に様に色々意味を考えていくと理解が深まると思います。


まぁあんま真面目くさった話しばかりをつらつらと言っても
面白くない+楽しく学習できないと思うので…^^;
自分の作りたい物などテーマを考えてプログラムを作成してみると
いいと思いますよ♪

例:Socketを使用してJavaでチャットが出来るツールを作成してみる等…
  (何かDLするツールを作成してみるのも楽しいかもしれませんね♪)


あっ、IBMのRoboCodeって知ってますか?♪
あれいいですよ♪遊びながらプログラム(Java)が学べちゃぃます♪
友達と対戦したりして盛り上がれますしね♪
メソッドの使用法や、クラスのよりよい使い方等も
無意識的に楽しく学べると思います♪


自分も校内で友達たちと一緒に
各自作ったロボットを対戦しあって遊んでました♪w


まぁ、またまたありえなぃ長さのコメントなんで
失礼しますw
今日も全力投球?っで、コメントさせて頂きましたw


お互いJavaの理解を深めて頑張りましょう♪』 (2007/07/12 10:54)

まことそうありたいものである。

java1rou
『>オブジェクトの意味合いとしては、この物
インスタンスの意味合いとしては、その物といった感覚でしょうか…


まだ良く分らないです。「この」と「その」の詳述希望。


私の理解としてはインスタンスは型の”実例”として生成されたもので、int型のインスタンスはAというint変数で中身は整数、String型のインスタンスはBというString変数で中身は文字列、Test1型クラスのインスタンスはCという名前で中身はTest1型クラスのインスタンスフィールド変数とインスタンスメソッド。で、特別にクラスのインスタンスはオブジェクトと呼ぶ、と理解していますが。
 つまり集合論的に書けば
オブジェクト∈インスタンス
(もしくは、オブ⊂イン)
だと思っています。

IBMのRoboCodeって知ってますか?

 いや、知りませんでした。ここですね↓
http://www-06.ibm.com/jp/developerworks/java/020329/j_j-robocode.html
ふーむ。
私自身は今、MMORPGを作りたいのでモチベーションの方向性がちょっと違いますね・・・。
』 (2007/07/13 11:19)

記事部に移動するとどうしても口が悪くなる(辛辣になる)がそれは仕様なので我慢して欲しい。