Javaのオブジェクト指向とは?

このQ&Aのポイント
  • Javaのオブジェクト指向とは、プログラムを一つのまとまりとして捉える考え方です。
  • C言語との違いとして、Javaは細かいプログラムの集合体であり、それぞれのプログラムをオブジェクトとして扱います。
  • オブジェクト指向はプログラムの保守性や再利用性を高めるために重要な概念です。
回答を見る
  • ベストアンサー

Javaにおけるオブジェクト指向とは?

現在Javaを勉強しております。 以前はC言語を勉強しておたのですが、 JavaとCの違いにおいてJavaの特徴としてオブジェクト指向と習いました。 しかしいまいちこのオブジェクト指向を理解できません。 プログラムを一つのまとまりとして考えるというのはどういうことなのでしょうか? 確かにJavaはC言語とは違いいくつかのプログラムからできている (はず?見当違いだったらすみません) C言語が一つの大きなプログラムでできているとすると、 Javaは細かいプログラムの集合体であると私は考えていました。 この細かいプログラムの集合体というのがオブジェクト指向なのでしょうか? 全くの見当違いだったらすみません。 よろしくお願いします。 

noname#177863
noname#177863
  • Java
  • 回答数6
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • tadys
  • ベストアンサー率40% (856/2135)
回答No.5

>確かにJavaはC言語とは違いいくつかのプログラムからできている はい、見当違いです。 JavaやC言語に限らず、ある程度規模の大きいソフトウエアは多数のプログラムの集合体で出来ています。 オブジェクト指向には、“指向”という言葉が付いていて“オブジェクトプログラム”では有りません。 オブジェクト指向とは、“オブジェクト”というものを中心に考えて行こうと言う考え方の事を言います。 「オブジェクト指向 = オブジェクト中心の考え方」 です。 異存の有る人もいるでしょうが、C言語を用いてオブジェクト指向のプログラムを作る事も出来ます。 もちろん、JAVAやC++を使ったほうがスマートに記述できますが。 多数のプログラミング言語がオブジェクト指向をサポートするようになっています。 それではオブジェクトとは何かというと、一言では説明が難しいものです。 オブジェクトは外部とデータのやり取りが出来ます。C言語の関数と同じですね。 オブジェクトは内部にデータを持つ事が出来ます。C言語の関数と同じですね。 オブジェクトは内部で色々な処理をする事が出来ます。C言語の関数と同じですね。 JAVAのオブジェクトとC言語との違いには、次のようなものが有ります。 ・オブジェクトの中にC言語の関数の関数に相当するもの(メソッドと言います)を複数持つ事が出来ます。  c言語の関数では入口は一つです。オブジェクトは色んな入口から内部を操作できます。 ・オブジェクトの中にオブジェクト内のメソッドで共通に使えるデータを持つ事が出来ます。  C言語の場合、関数間で共通のデータを持とうとするとグローバル変数にするしか有りません。 ・既存のオブジェクトで機能が足りない時には、足りない機能を追加したオブジェクトを作る事が出来ます。  C言語でもコールバック関数を使えば似たような事は出来ますが、その場合、あらかじめコールバック関数を用意しておく必要が有ります。  大抵の場合、ソースコードをコピーして足りない機能を追加した別の名前の関数を作る事になります。 一度に全部の説明は出来ないのでこれぐらいにしておいて オブジェクトは複数の関連した関数(関連していなくてもかまいませんが)やデータを一まとめにしたうえで、外からどの様に見えるか(メソッドの事)を定義したものと言えるでしょう。 オブジェクトの内容を定義したものをクラスと呼びます。 クラスはオブジェクトの定義を書いただけなので、それ自身が動作するわけでは有りません。 (C言語の関数や変数のプロトタイプ宣言みたいなもの) クラスを元にして実際に動作するもの(インスタンス)を作ります。 一つのクラスから複数のインスタンスを作る事が出来ます。 オブジェクトを使用したプログラムの利点としては次のようなものが有ります。 ・オブジェクトの中でどんな処理をしているのかを知らなくてもオブジェクトを利用できます。 ・大抵のプログラム言語では色々なクラスが定義されているので、既存のクラスだけでもかなりの事が出来ます。 ・機能が足りない時でも足りない部分だけの追加で済みます。 ・バグなどで、プログラムを修正する場合でも元のクラスを修正するだけで済みます。  C言語で元の関数をコピーした関数が有る場合、全部を修正する必要が有ります。  大規模なプログラムの場合、どれだけコピーされている関数が有るのか調べるのが大変な場合が有ります。   以下のサイトが参考になるでしょう。 http://www.rsch.tuis.ac.jp/~ohmi/software-intro/index.html http://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248617/

noname#177863
質問者

補足

他の回答を見たうえで自分なりの解釈です。 C言語は関数の集まったものがいわゆる私たちが作るプログラムで、 作ったプログラムはそれ単体で機能する。 それに比べてオブジェクト指向を用いたプログラムでは、 オブジェクトからクラスが生成、このクラスが一つのプログラムとなる。 クラスのプログラムをいくつも集めたものが最終的なソフトとなる。 Cだとミスを一か所直すと他のところを直す羽目になるかもしれませんが、 オブジェクト指向においてはミスをオブジェクト単位で修正するので、 他のオブジェクトへの影響度は少ない。 よってオブジェクト指向の方が拡張・修正などでも優れている。 こんな感じに解釈したのですがどうでしょうか? オブジェクト指向では最終的なプログラムソフトはオブジェクトの集合体によって構成されているため、オブジェクト指向=オブジェクト中心の考えと言えるのでしょうか。

その他の回答 (5)

回答No.6

かなり外してます。 プログラミングに限らず、規模の大きなものを作るには 設計を分割して個々に検討する「分割統治」という手法が 使われます。 「分割統治」を行うには、「分割」をどのように行うか を考えなければなりませんが、様々な手法が存在します。 オブジェクト指向もその一つで、データの塊とその振る舞い に着目して設計を行うのが特徴です。 オブジェクト指向は様々な技術、手法、哲学の集合体で、 その定義は人によって様々です。 私のお勧めの書籍は「オブジェクト指向入門 第2版」 1900ページの大著で、ぜんぜん入門ではないのですが、 よい本だと思います。

  • root139
  • ベストアンサー率60% (488/809)
回答No.4

オブジェクト指向プログラミングは「データに振る舞いを持たせてプログラム上をうろうろさせる様なプログラミングスタイル」というイメージでしょうか。 (あくまでイメージ的な表現で実際にメモリ上を移動する訳では有りません) 「データ」はCの構造体と言い換えても良いでしょう。 後述しますが、オブジェクト指向の概念とメリットはすぐに理解出来るものでは有りませんので、腰をすえて勉強されると良いと思います。 下記の書籍・サイトなども参考になるかと。 ■ デザインパターンとともに学ぶオブジェクト指向のこころ http://www.amazon.co.jp/dp/4894716844/ ■ オブジェクト指向でなぜつくるのか 第2版 http://www.amazon.co.jp/dp/4822284654/ ■ オブジェクト指向を正しく理解する http://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248617/ ■ 5分で絶対に分かるオブジェクト指向 http://www.atmarkit.co.jp/im/carc/special/fiveoo/00.html ■ オブジェクト指向は難しい - Matzにっき http://www.rubyist.net/~matz/?date=20030729 > C言語が一つの大きなプログラムでできているとすると、 > Javaは細かいプログラムの集合体であると私は考えていました。 どちらかといえば、Javaも最終的には一つのプログラムとしてにまとめられるタイプですかね。(そうで無い場合も有りますが) C言語でも部品としての関数を作り、階層的に関数から別の関数を呼出し、最終的にmain関数でまとめる感じですよね?それと同じ様に部品としてのクラスを作っていく感じです。もちろん、クラスの方がデータを保持できて複数のメソッドも持てるので、関数と比べればより独立性の高い部品を作ることが出来ますが。 ちなみに、COBOLなどは細かいプログラムの集合体としてシステムを構成する感じですね。 確か、荒井玲子さんがどこかで書かれていたと思いますが、オブジェクト指向の学習曲線の初めのほうは地を這うようで、最初の数ヶ月~数年ぐらい、分かった様な分からない様な期間が続いて、或る時スッと理解できる瞬間が来てから伸び始める様です。 確かに自分もそんな感じだったのを覚えています。 習うより慣れろとよく言いますが、悩むより、色々なプログラムを読んだり書いたりしていくうちに分かってくると思いますよ。

  • piraippi
  • ベストアンサー率27% (47/168)
回答No.3

ちょっと前にJavaを勉強してなんとなーく分かってきたかなーと思っている者です。 No.1、No.2 の方が仰っているのは今ならなんとなく分かるのですが、 半年前の私だったら意味がわからなかったと思います。 私は「オブジェクト脳のつくり方」という本を繰り返し読んでみた結果すこしイメージできてきたので、 よろしければ読んでみてください。 お互い頑張りましょう。 回答でなくてすみません。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

ハードウェアの世界には革命的な技術が沢山ありますが、ソフトウェアの世界ではオブジェクト指向が唯一の革命的技術かもしれません。 オブジェクト指向を取り入れた言語は沢山あります。 Cではオブジェクト指向は取り入れられていませんが、C++で取り入れられています。 今ではオブジェクト指向が無いものは考え難いくらいです。 オブジェクト指向は結構高度な理解力を必要とします。 すごく単純に書きますので、数年勉強して肉付けをして下さい。 まず、関数、サブルーチン、モジュール、色々な呼び方がありますが、プログラムを幾つかの部品に分けるわけですが、この分け方が難しいのです。 エラーが発生し難い、メインテナンスの容易性、生産性の高さ、が求められます。 その為には、機能的な独立性が望ましい訳です。 ところが機能的独立性だけを求めると、同じグループの機能に共通のデータが外部に流出して、情報の独立性が失われます。 そこで、オブジェクト指向では、共通の情報を使う機能群をクラス単位でまとめ、各独立した機能をメソッドで実現し、クラス外から見たら情報も機能も独立しているように見える訳です。 この独立性が眼目です。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

関連するQ&A

  • オブジェクト指向が理解できません 教えてください

    現在Javaを勉強しているのですが、 Javaに限らず最近のプログラムの特徴であるオブジェクト指向がよくわかりません。 C言語も学んでいたので少しは知識はあります。 以下は私の解釈です。 C言語は関数の集まったものがいわゆる私たちが作るプログラムで、 作ったプログラムはそれ単体で機能する。 それに比べてオブジェクト指向を用いたプログラムでは、 オブジェクトからクラスが生成、このクラスが一つのプログラムとなる。 クラスのプログラムをいくつも集めたものが最終的なソフトとなる。 Cだとミスを一か所直すと他のところを直す羽目になるかもしれませんが、 オブジェクト指向においてはミスをオブジェクト単位で修正するので、 他のオブジェクトへの影響度は少ない。 よってオブジェクト指向の方が拡張・修正などでも優れている。 こんな感じに解釈したのですがどうでしょうか? オブジェクト指向では最終的なプログラムソフトはオブジェクトの集合体によって構成されているため、オブジェクト指向=オブジェクト中心の考えと言えるのでしょうか。

  • オブジェクト指向の利点とは?

    汎用機でCOBOLのSEを10数年やってました。(今は自営業) COBOLはプロセス型の言語といわれているのに対して C言語はオブジェクト指向型の言語といわれています。 私はC言語やJAVAで開発したことはないのですが、 C言語、すなわちオブジェクト指向の利点ってなんでしょう? JAVA、C言語はオブジェクト指向ですよね。 私はソフトウェア開発技術者の資格など持っていますのでオブジェクト指向の表面的な意味は分かります。 ですが実際、アプリ開発時・運用時にどのような利点があるのかがイマイチ分かりません。 「どっちでもいいんじゃないか」なんて思ってしまいます。 プロセス指向(VB、COBOL等)とオブジェクト指向(C言語、JAVA)の差異って何なんでしょう。 よろしくお願いします。

  • オブジェクト指向とUMLについて

    「オブジェクト指向」と「UML」の勉強をしようと思っているのですが、お勧めの参考書またはWebサイトをお教えていただきたいです。 ※オブジェクト指向については、JavaやC++のような言語についてではなく、オブジェクト指向についてです。 ちなみに私はJavaは経験したことがありますが、正直"オブジェクト指向がなんたるか"はわかっていないです… 現在業務でJavaに携わっていてるので、オブジェクト指向という考え方をこの機にしっかりと学べればと思っています。 UMLはまったく無知です; クラス図やシーケンス図など中身にナニがあるか微妙に知っているだけです…; どちらか片方でも良いので何かございましたら、お教え願います。 …参考書だと電車で読めるので、ちょっとだけ喜びます(笑

  • オブジェクト指向の特徴

    プログラミングにおいて Java言語などのオブジェクト指向とは 「クラス(設計図)からインスタンス(実体)を量産できる。」がオブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか? またオブジェクト指向とオブジェクト指向ではない言語の決定的な違いや 実際に実務において経験した感覚的な違いなどがあれば教えてください。 インターネットに乗っていない些細なことでも構いません。

    • ベストアンサー
    • Java
  • オブジェクト指向の教え方

    新入社員にJavaを教えているところなのですが、オブジェクト指向プログラミングをどのように教えていいか困っています。 全員がC言語研修を受講済みで、さらにJava言語も、継承やオーバーロード、例外まで一通り教えて、一応理解しています。 そこで、次のレベルとして、C言語風のプログラミング(「プログラム=関数の集まり」の考え方)から、オブジェクト指向(「プログラム=オブジェクトの集まり」の考え方)に意識改革させたいところです。 問題領域をオブジェクトの集まりとしてとらえ、そこからクラスを抽出していく、という説明がよくありますが、 「何をオブジェクトにするのか」「どのようにクラスを抽出したらいいのか」の部分を詳しく教えたいのですが、どのように説明したらいいでしょうか。また、参考になるWebサイトなどありませんでしょうか? 自分が普段作るときは、ほぼ「勘」でクラス設計していますので、それでは教えられなくて困っています。よろしくお願いします。

    • ベストアンサー
    • Java
  • C言語とC++ の違いについて(オブジェクト指向)

    今まで(3年ぐらい)は,ずっとC言語を勉強してきました. C言語だったらある程度のプログラムは書けると思います. ただ,来年からC++ を使わなくてはならなくなってしまい ました... CとC++との間には一体どういった違いがあるんでしょうか? よく耳にするのが「オブジェクト指向か,そうではないか」 ということです. オブジェクト指向...,良く分りません.一体どういう ことなんでしょうか. なるべく詳しく教えていただけると助かります.また参考書 やサイトなどを教えていただいても構いません. よろしくお願いいたします.

  • オブジェクト指向、理解しやすい?

     最近、Javaの解説書や解説サイトを見ていて、しばしば、「Javaは完全なオブジェクト指向だから理解しやすい」といった記述を見かけます。(「プログラムが見やすくなる」とかではなく)  Javaに限った話ではないのですが、個人的に、オブジェクト指向の概念は、プログラミング初心者の最大の関門ではないかと勝手に思っています。僕はPHPから入ったのですが、ある程度基本事項をマスターした後も、オブジェクト指向だけは長い間苦手としてきました。(最近やっと慣れてきたところです。)  そこで伺いたいのですが、最初にやったプログラミング言語がオブジェクト指向だったという方、オブジェクト指向の概念は、 1.わかりやすかった 2.そこでつまずいた 3.特に意識せずに通り過ぎた 4.その他 いずれでしょうか? ※最初にJavaについて書きましたが、これはただの例なので、オブジェクト指向言語全般についての質問であるととらえてください。

  • オブジェクト指向という考え方がいまいちわかりません。

    オブジェクト指向という考え方がいまいちわかりません。 オブジェクト指向とは一体どういう意味なのでしょうか? また、いわゆるオブジェクト指向の言語(Javaなど)とそうでない言語(PL/SQLなど?)との違いも合わせて教えていただけないでしょうか? 宜しくお願い致します。

  • オブジェクト指向

    Javaプログラミングを少し勉強し始めました。 そこで、オブジェクト指向という言葉が出てきました。 オブジェクトを作る利点というか意味はどのようなところにあるのでしょうか? 比較的簡単なプログラムなら、変数とメソッドで表示できると思うのですが・・。 ・コードが読みやすくなる ・実行速度が速くなる などの利点があるのでしょうか? なるべく分かりやすく解説してもらえればと思います。

    • ベストアンサー
    • Java
  • javaのオブジェクト指向とAPIの違いは何ですか

    javaのオブジェクト指向とAPIの違いは何ですか?