- 締切済み
オブジェクト指向に関して。
Javaの解説本を読んでオブジェクト指向プログラミングという物があることをしりました。その本には「オブジェクトはデータとそのデータを扱うための機能を持っている。この機能はメソッドと呼ぶ。クラスは設計図のような物で変数とメソッドから構成されている。設計図を実際に形にした物がインスタンスである。」と書いてありました。私はオブジェクト=クラスのような感じがしたのですが、実際のところオブジェクト=クラスでいいのでしょうか? また、友人に話したところ、オブジェクト指向はサブルーチンに似ているといっていました。私はプログラミングの知識が全くないのでサブルーチンという物が何なのかわからないのですが、サブルーチンとオブジェクト指向の考え方は違うような気がするのです。友人に説明して納得させるにはどうしたら良いのでしょうか? ぜひ、力を課してください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
サブルーチンとはプログラムの部品のことです。サブルーチンAがあったとして、そのサブルーチンは画面のXY座標にアイコンIを表示させるとします。 そして、X座標を10、Y座標を2、Iを「マイコンピュータ」として、サブルーチンAを実行すると、画面の左上あたりに、そのアイコンが表示されるわけです。1つのサブルーチンを作成すれば、座標やアイコンを変えて他のアイコンも表示させることができるので便利なわけです。(Windowsユーザーでなかったらごめんなさい) オブジェクト指向の場合は、まずアイコンとはどういう存在(オブジェクト)なのか?という考え方をします。どこの座標にいるのか?どんな絵なのか?というような情報がまずあります(クラス)。画面上には幾つかのアイコンがあります(1つ1つがインスタンス)。あるアイコンをマウスでドラッグしたら、画面を移動しないといけないので、インスタンスに対して、マウスの座標に移動せよ!と伝える(メソッド)。という感じです。 オブジェクト指向では、全てがオブジェクトであるので、クラスもオブジェクトであり、インスタンスもオブジェクトです。 xruzさんが最初に言っていたように、メソッドとサブルーチンはノイマン型コンピュータ(普通のコンピュータ)では良く似ています。 できるだけ簡単に書いたつもりですが、果たして理解していただけるかどうか・・・。
- aton
- ベストアンサー率47% (160/334)
オブジェクト指向の「クラス」は分類,「インスタンス」はその分類に属する実体,と考えてもいいかと思います。 例えば,「人間」というクラスを考えると,そこには「aton」や「Leroy(敬称略失礼)」のようなインスタンスがあります。「人間」には例えば「喋る」という機能がありますから,それを「人間」クラスにメソッドとして実装すれば,「人間」クラスに属する全てのインスタンスが「喋る」機能を持つようになります。 サブルーチンには,こういうカテゴリー的な概念は含まれていません。例えば「走る」という機能について考えてみます。オブジェクト指向プログラミングでは,「動物」というクラスを作り,そこに「走る」というメソッドを実装するという方法を取ります。この場合,「動物」クラスのインスタンスではないもの(例えば「植物」)からは,「走る」というメソッドは使えません。一方,サブルーチン化では,単に「走る」というサブルーチンを作ると,それはプログラムのどこからでも再利用できます。 #「人間」からしか使えないほうがいいのか,どこからでも使えたほうがいいのか, #どちらの方がよいか,ということはここでは論じません。 ちなみにオブジェクト指向プログラミングにはさらに便利な概念として,「継承」「多態化」という概念があります。上の例で言うと,例えば「動物」クラスの下に,「人間」クラスと「犬」クラスを作ると,「動物」クラスの「走る」メソッドは「人間」インスタンスからも「犬」インスタンスからも使えます(継承)。さらに,人間は二本足で走り,犬は四本足で走るという違いを実装したい場合,継承したメソッド「走る」を*同じ名前で*「人間」クラス/「犬」クラスにおいてカスタマイズできます(多態化)。 #上の「多態化」の例は「継承」に含まれるかも…。ちょっと自信なし。 ##Java/オブジェクト指向を学ぶためにC/C++を学ぶ必要はないんじゃないかなぁ。
- hidebu-
- ベストアンサー率53% (45/84)
下の方が答えられてることは非常に正確でわかりやすいとおもいますが、初心者のかたにはちんぷんかんぷんだとおもいますのでひとつアドバイスを。。。 JAVAを習得する前にC言語を習得されるのがよいと思います。CとC++を習得すればJAVAの基本は2週間程度でほぼ完璧に習得できると思います。 めんどくさいと思われるかもしれませんが、それが一番確実にJAVAを自分のものにする方法だとおもいます。
- ymmasayan
- ベストアンサー率30% (2593/8599)
> 私はオブジェクト=クラスのような感じがしたのですが、実際のところオブジェクト=クラスでいいのでしょうか? イコールではないと思います。 オブジェクトと言う言葉が、実はいろんな意味に使われます。クラスを意味したり、インスタンスを意味したりするのですが、あくまでもクラスとインスタンスが対語になります。(クラス・オブジェクトとインスタンス・オブジェクトがあると思ってください) クラスと言う設計図から何台もの(別々の)車(インスタンス)が作られたとき、それぞれの車(インスタンス又はオブジェクト)はクラスに属しますが、クラスそのものではありません。クラスを代表するのはあくまでも設計図です。 > 友人に話したところ、オブジェクト指向はサブルーチンに似ているといっていました。サブルーチンとオブジェクト指向の考え方は違うような気がするのです。 これはいろんな人から聞きます。見かけはすごく似ていますが、根本が違います。 サブルーチンは、システムの組みやすさで、作成されます。 オブジェクト指向は、世の中の仕組みを分析して、それを忠実に再現するモデルを作ります。(クラスの構成)。その上でそのクラス(最終的にはインスタンス:オブジェクト)を定義します。 オブジェクトプログラミングでは、インスタンスがサブルーチン(実際にはモジュール)のような形で作られていきます。 しかし、最も特徴的なのはサブルーチン(モジュール:実はインスタンス)がプログラムの実行中にどんどん作られていくことです。 クラスと言う設計図をもとにインスタンスをどんどん作り、それを自由自在に実行して処理をしていく。 似ていると言いながら、従来の言語ではありえなかった機能だと思います。 あくまでも、自然界をモデルにしているから出てくる発想と言えます。
- xruz
- ベストアンサー率50% (72/143)
私もまだ勉強中の者です。 1.クラスはオブジェクトのひとつでありイコールではありません。 2.サブルーチンはオブジェクトのメソッドとして考えたほうが近いですね。 まだまだ私も初心者レベルですがお互いにがんばりましょうね。