Objects First With JAVA using BlueJ

Chapter1 Objects and Classes

★キーワード(Keywords)

Object オブジェクト
Class クラス
Method メソッド
Parameter パラメター

★オブジェクトとクラス

さて、いきなりオブジェクトやらクラスやらという単語が出てきます。 イヤですね。。でもこれはずーっと付いてくるのでイヤだと言っていても仕方ないです。 Javaはオブジェクト指向、という考えに基づいてるので、残念ながらもうここは避けて通れません。

私はこの考え方を理解するまでに結構苦労しました。(多分みんなそうんでしょうけど) 教科書を読んでもよくわからない、webで調べてもやっぱりよくわからない。。 みんな一様に言うのが、「この世界に存在するものを全て、一般的にObject(オブジェクト=モノ)として捉える。Class(クラス)とはオブジェクトの総称。」であるとかなんとか。。

大体ここで例が登場します。何故なら抽象的過ぎて言葉でいくら説明しても絶対にピンとこないからです。BlueJの教科書では、車の例が載っていました。

ある時あなたが交通について、シュミレーションをしたいとします。その時車を取り扱わなければいけません。このとき車とは、オブジェクトですか、クラスですか?

‥‥という質問ですが。答えはどちらだと思いますか? 車は「モノ」である、だからオブジェクト!と言いたいトコですが、ちょっと待ってください。更に質問をします。

車の色は何色ですか?どのくらいの速度がでますか?車はどこにありますか?

この質問に対して答えるためには、それが「どの」車なのかという情報が必要です。ただ車、と言われても色なんて沢山あるし、わかるわけないじゃないか。と。。 このとき私たちの頭にある「車」とは、自動車一般のことのことを指していて、色とか速度とかの付加情報は(プログラムでは、これをparameter(パラメター)と言います)それが一体どの車なのかという事がわかった時点で始めてわかるものです。

このように、車一般のことを指す場合、それはClassであると考えることが出来ます。 それが、たとえば私のRVRだったり、さっき道を渡ろうとしたときにいきなり曲がってきたイヤな車だったりすると、その車はObjectである、と言えるわけです。

ClassとはObjectを抽象的に、一般化したもの。という訳です。

ここまで来て、どうしても煙に巻かれたような、ごまかされたような気がする、という人も多いと思います。でも、この際、煙に巻かれちゃったまま「ふーん、そうなのねぇ。。」という状態でとりあえず先に進む事をお勧めします。プログラムを勉強する上で、一番大事なのは「ふーーん‥‥」というくらいの理解度でもとりあえず先に進むことだと、私は思います。後で戻ってくるとよくわかるので安心してください。(この考え方は、いい加減な私の性格にぴったりだ‥)

もう一つ例を出します。私はネコが好きなので、ネコネタで・・(笑)

私はネコが好きです。

といった場合、この「ネコ」という言葉はClassとして認識されています。この場合、ネコ一般が好きなわけですね。

私は「プリ」という名前の茶トラネコを飼っています。

この場合、「ネコ」という一般的なものから、実際の一匹のネコまで具体化されています。この段階で「プリ」 はObjectである、と言うことが出来ます。何故なら最初の車の問題の時のように細かく質問された場合を考えてみてください。

プリは雄ですか、雌ですか?体重は何キロですか?毛は短いですか長いですか?

という具体的な質問に答えることが出来るからです。ちなみにプリは雄で、体重は7,5キロで、毛は短いです。(←誰も聞いてないって‥?)

それから、もう一つ大事な単語があります。Instance(インスタンス)です。

この例の場合、プリはインスタンスである、といえます。 ‥‥ちょっと待て、さっきプリはオブジェクトだと言ったじゃないか!と聞こえてきそうですが。。オブジェクトであり、インスタンスなのです。。

まあ、落ち着いて考えてみてください。 英語で"for instance.."から始まる文章を聞いたことがあると思います。"for example.."と同じですね。訳すと「例えば‥」です。この例の例えはプリなので、プリはインスタンスなのです。

つまり、お隣の人見知りなネコもオブジェクトだし、最近よく見かける野良猫もオブジェクトで、もちろんプリもオブジェクトです。(みんなネコという共通のClassを共有してるObject達です。) そして今、私はプリという一匹のネコを「例として」取り上げて話をしているので、プリはオブジェクトであり、インスタンスである、といえるわけです。

 

★メソッド(method)

次にメソッドの話をします。まだ続くのか〜と言わずにおつき合い下さい。。

クラスはメソッドを持っています。メソッドとは、そのクラスが持っている機能のことです。

車の例でいうなら、車は多分「走る」「止まる」「曲がる」などのmethodを持っているはずです。(じゃないと困りますよね)さしずめネコなら、「ひっかく」「走る」「寝る」などでしょうか。。ろくなもんじゃないですが、これがないとネコとは言えないわけですね(苦笑)

私たちはメソッドを呼ぶ(calling method)ことによって、オブジェクトを操作することができます。呼び出されたメソッドは、大抵何かします。

例えば、車クラスは「アクセル」というメソッドを持っているとします。アクセルに+1をするとスピードが上がる、といったことを実装できるわけです。ネコクラスの場合は、「寝る」というメソッドを呼ぶと"true/false" を返すことででネコが寝ているかどうかがわかりそうですね(笑)

ちなみに英語では実装することを"implement"といいます。何故わざわざ英語も書いているのかというと、Java(というか多くのプログラミング言語)では英語と数字を組み合わせているので、英語も一緒に覚えていくと後で楽です。このimplementも後々キーワードとして出てきます。(でも教科書が全部英語だと、結局理解不能な部分があって、インターネットで調べたりしますが‥‥困ったとき頼りになるのはやっぱり日本語です。。)

メソッドはある時はparameter(引数)をとり(取らないときもあります)、ある時はreturn value(値を返す)したりします(やっぱり返さないときもあります)。
引数をとる、というのは、メソッドを実行するときに、外部から情報を得る場合のことです。上の段落で「アクセルに+1すると‥‥」という行がありましたが、その場合の+1がパラメター(引数)です。

また、値を返す、というのは、ネコクラスの例で出した「寝る」メソッドがそれにあたります。「寝る」メソッドを呼んだとき、"true"と返ってきたら、そのネコは寝ている、"false"と返ってきたら起きている、と見なすことができるでしょう。(しょっちゅう"true"ばっかり返ってきそうですけど‥)

メソッドについてはプログラムを実際に書いていく段階になってから、また詳しく書くつもりです。


ああ疲れた一休みする。   とりあえず私的理解Javaのトップページに戻る  そのまま勉強続ける。