許せない心理テスト

クラスが人間という種類だとしたら
インスタンスが例えばAさん、Bさんという具体的な人のことで、
オブジェクトが誰でもいいけどとりあえず具体的な誰か
という認識でいいでしょうか?
だとしたらなんとなくイメージはできたのですが、もっとわかりやすい言葉が欲しいです。
どなたから説明してもらえませんか?

A 回答 (3件)

オブジェクトは『振る舞いや状態を有しているなにか』ですよ。


例で考えたら、人間じゃなくても、そのようなものを有しているものはすべてオブジェクトです。

オブジェクト、クラス、インスタンスの解釈の順序が問題でしょうね。
インスタンスは確かにインスタンスかもしれませんが、それも1つのオブジェクトですよ。
オブジェクトが最も抽象的です。

その結果、あらゆるインスタンスをオブジェクトと呼称することが出来ます。
まあ『オブジェクト指向言語』ですから、当たり前ですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
分かりやすかったです。覚えておきます。

お礼日時:2014/02/23 12:09

言葉的なものとしては、それでいいです。


それ以上も以下もなく、言葉を足しても冗長になるだけですよ。

//Human型のクラス
class Human{
 private String name;
 public Human(String name){
  this.name=name;
 }
}

class Main{
 public static void main(String[] args){
  //Human型のクラスから作成したインスタンスAさん
  Human A = new Human("Aさん");
  //Human型のクラスから作成したインスタンスBさん
  Human B = new Human("Bさん");
 }
}
//クラスHuman、インスタンスA、B、実行用のクラスMainは全てオブジェクトと呼べる。
    • good
    • 0
この回答へのお礼

なんとなく分かってきました。
回答ありがとうございました。

お礼日時:2014/02/23 12:08

しばらく前にプログラミングの世界で「オブジェクト指向」ってのがIT業界で大流行しました。


そして、質問者さんが書かれたような、クラス、インスタンス、オブジェクトを、車や動物とかタイ焼きの例で説明する文章がいろんな雑誌・書籍に書かれていたものです。

「なんとなく納得させられるけど、よくわからない・・・」って、それらの解説を読んで、私も思ったし、たぶん多くの方も同じように感じていたと思います。

日経BP社より「オブジェクト指向でなぜつくるのか」という書籍を見ると、このような説明で理解しようとするのは、「オブジェクト指向の理解を妨げることになる」と書かれています。
この本の目次を紹介すると

1章.オブジェクト指向はソフトウエア開発を楽にする技術
2章.オブジェクト指向と現実は大違い
3章.OOPを理解する近道はプログラミング言語の歴史にあり
4章.OOPは無駄を省いて整理整頓するプログラミング技術
5章.メモリの仕組みの理解はプログラマのたしなみ
6章.OOPがもたらしたソフトウエアとアイデアの再利用
7章.汎用の整理術に化けたオブジェクト指向
8章.UMLは形のないソフトウエアを見る道具
9章.現実世界とソフトウエアのギャップを埋めるモデリング
10章.擬人化して役割分担させるオブジェクト指向設計
11章.オブジェクト指向設計から生まれた素敵な開発プロセス
12章.オブジェクト指向を使いこなそう

となっています。

そして、1章にて、質問者さんの読んだような説明で理解することは、混乱を増すことになると指摘されています。
そして、「オブジェクト指向でなぜつくるか」というタイトルで一冊の本ができあがるように、ここで回答できるような分量での説明は困難ですし、それをやったとしても、ほんとうのところは分からないと思います。

それは、泳ぎ方の説明みたいなものです。言葉で、書籍で「泳ぎ方」の説明を読んでも、写真をみても自分が泳げるようになることが無いのと同じです。
実際にプール、川、海で泳がない限り、泳げるようになれないのです。

そして、Javaという言語は、メモリの仕組みをできるだけ隠そうとした言語です。ですので、5章の内容からすれば、オブジェクト指向を理解したければ、メモリの仕組みを理解するのが必須であるC言語を学ぶほうが適しているという考え方も出てくるのです。

なお、3章では、構造化プログラミングの課題として、「残された課題はグローバル変数問題と貧弱な再利用」があげらえています。この問題の解決手段としてオブジェクト指向言語が出てきます。
ただし、オブジェクト指向だけでは、この課題の解決が十分にうまくいったように思えません。時々、「システム開発にオブジェクト指向の言語を採用した。でも、生産性は上がらず、かえって低下してしまった!」という嘆きが雑誌て紹介されたりしたものです。

実際のところ、オブジェクト指向言語で開発されたプロジェクトが2年以上かけて行われ、市場に投入する寸前のベータテストで、現場からの変更依頼を取り入れることが困難との判断が出て「発売中止!」となってしまったことがあります。これは、オブジェクト指向言語が悪いというより、「新しいソフト開発の目指すもの」の議論を十分に行わず、単に「オブジェクト指向で作るから変更が容易になる」という開発部隊の希望でスタートしてしまったことが問題であり、「要件定義」が甘かったのだと言えるかもしれません。(会社としては、数億円の損害となったみたいです・・・)

ただ、開発プロジェクトに参加したプログラマの立場からすれば、「オブジェクト志向言語を下手に使うと、生産性が大きく悪化する」ということを身にしみて感じたものです。

ということで、質問者さんへの回答にはなっていませんが、さしあたり、上記で紹介した書籍を読んでみてください。
そして、本を読むだけでなく、実際にJavaやC++、C#などで、簡単なプログラムを作ってみることです。そうすれば、オブジェクト指向のことが分かってくると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
機会があれば作ってみます。
他のプログラミング言語も頑張ります。

お礼日時:2014/02/23 12:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報