• ベストアンサー

オブジェクト指向の意味

こんにちは。 前から分からずに考えていたのですが、 オブジェクト指向は、抽象具体の階層を利用することで、 プログラミングに必要な概念を階層化して分類する、 ということとは、違いますか? 多分これでは違うかも・・ とも思うのですが、 上の考えからのずれとしての指摘をしていただけたらうれしいです。 つまり、上の階層概念に、足りない部分を付け加える形でのご指摘をお願いできたらと、都合が良いのですが、よろしくお願いします。 というかぶっちゃけ、長く理解できずに困っています・・

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

  • ベストアンサー
回答No.2

継承は、オブジェクト指向の主要な概念ではないです。なので、階層化というのは別段大事な部分ではありません。 変数や関数を「オブジェクト」という単位にまとめ、その(一般的な意味での)インターフェイスを定義するカプセル化の方が、概念的には大切です。 ソースコード上で嬉しい点も、カプセル化による名前空間の分離と、ポリモーフィズムによる場合分けの減少(または、より抽象度の高い書き方が出来ると言う点)というあたりですね。 ただ、オブジェクト指向と言ったときにその背景があまりに広いので、人によって意味するところは違います。上記は、現代的なオブジェクト指向言語に対する私の考え方に過ぎません。メッセージング指向こそがオブジェクト指向、という方が歴史的には正統なのかも知れません。 http://d.hatena.ne.jp/sumim/20040525/p1

sheep67
質問者

お礼

ありがとうございます。 参考のページを読んでみたのですが、詳しい方が分析しもてこうだ、ということは、 単純に、昔のプログラミングから直線的に進化したのではなく、 以下に現実に即して、巨大なプログラムをうまく組むか? という課題をこなしていくために、 プログラミングの理想を追う、というよりは、 現実的な問題に処すために、現実によって変形してきたのかな? という印象を持ちました。 だからこそ、一言で語れないで、理解の難しいことになってるのかも知れない、と感想を持ちました。 おもしろかったですー。

その他の回答 (2)

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

#2さんと同じ意見ですが階層化は基本的な部分ではありません 例えば、「部屋に入って明かりを点ける」プログラムを書く場合、 オブジェクト指向で無い場合は if(Aの部屋の場合){ 扉を押して部屋に入る;右の壁に行く;スイッチを上げる;} if(Bの部屋の場合){ 扉を引いて部屋に入る;左の壁に行く;スイッチを下げる;} if(Cの部屋の場合){ 扉はないそのまま入る;右の壁に行く;スイッチを上げる;} などと記述しますが オブジェクト指向の場合はどの部屋でも  部屋に入る;明かりを点ける; と一つの記述で済みます。 (扉を押すのか引くのか、右か左か、上げ下げ等を記述しなくて良い) その代わり、  部屋A:扉は押す;スイッチは右の壁;上げると入る;  部屋B:扉は引く;スイッチは左の壁;下げると入る;  部屋C:扉はない;スイッチは右の壁;上げると入る; などと記述する必要が有ります。 部屋Aと部屋Cは扉のところだけが違うので 部屋AC:扉は?;スイッチは右の壁;上げると入る;を定義すれば 部屋A:扉は押す;その他は部屋ACと同じ; 部屋C:扉はない;その他は部屋ACと同じ;と記述することが出来ます

sheep67
質問者

お礼

そっかーなるほどですー。 下の方の回答やこちらのを読んでると、 以下にプログラミングが持つ大量の情報や概念を、整理してシンプルに作り、整理するか? という、プログラムの理想と言うよりは、人手を経て初めて作ることのできるというプログラミングの特徴が、 巨大なプログラムを組む必要性によって、浮き彫りになってきた、 なんて言う感想を持ちました。違うかしら? 素人把握だけど、現在そんな感じに思っています。 だからあんまり統一的見解がないのかなーと。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

このあたりが、参考になりませんか? http://www.happiese.com/system/dataorient.html

sheep67
質問者

お礼

こんにちは。 気合い入れて読んでみました。 ちょっと前よりは分かった気もするのですが・・ 昔MSXのプログラムを作っていた頃には、構造化プログラミングの概念はものすごく同意したのですが、 このオブジェクト指向になるとさっぱりです。 やったことがないからだと思うんですが、そういう概念を考える必要性が、分かりずらいですねー。 お返事ありがとうございました。 今回ので、なんとか気合い入れて、一応分かった、というレベルに持っていきたいです。

関連するQ&A

  • 【オブジェクト指向について】

    【オブジェクト指向について】 こんにちは。初めて質問をさせていただきます。 さて、ただいまVBを勉強中なのですが、オブジェクト指向のところで躓いてしまいました。 質問したい事は以下の点です。 (1) オブジェクト指向の理解について   オブジェクト指向とは、プログラミングをするときに変数や機能などをクラスというものに格納しておくことで、プログラミングを円滑にすすめるための概念であると理解していますが、この理解は正しいのでしょうか? ご回答お待ちしております。よろしくお願いいたします。

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

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

  • オブジェクト指向

    こんにちわ。 先日授業で「オブジェクト指向」について簡単に習ったのですが、いまいちよくわらないので質問させてください。 「オブジェクト指向」が情報システムを開発するための重要な概念であると習ったのですが、では「オブジェクト指向」のどの特性(概念)が、情報システム開発の上で、どのように役に立つと考えられているのでしょうか。よろしくお願いします。

  • オブジェクト指向に関して。

    Javaの解説本を読んでオブジェクト指向プログラミングという物があることをしりました。その本には「オブジェクトはデータとそのデータを扱うための機能を持っている。この機能はメソッドと呼ぶ。クラスは設計図のような物で変数とメソッドから構成されている。設計図を実際に形にした物がインスタンスである。」と書いてありました。私はオブジェクト=クラスのような感じがしたのですが、実際のところオブジェクト=クラスでいいのでしょうか?  また、友人に話したところ、オブジェクト指向はサブルーチンに似ているといっていました。私はプログラミングの知識が全くないのでサブルーチンという物が何なのかわからないのですが、サブルーチンとオブジェクト指向の考え方は違うような気がするのです。友人に説明して納得させるにはどうしたら良いのでしょうか? ぜひ、力を課してください。

  • 実践的オブジェクト指向設計の本

    オブジェクト指向について勉強中です。 概念的なことを理解する本や、実際のプログラミングについて書かれた本は、割とあるのですが、設計時にどう生かすかがよくわかりません。 そういった内容の本でお勧めのものがありましたら教えてください。 よろしくお願いいたします。

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

    オブジェクト指向がうまく理解できず苦労しています。 Javaの解説書にはよくUMLについても記載されているものをよく見かけますが、UMLはオブジェクト指向を理解するのに役立ちますか? それともオブジェクト指向を理解したうえで活用するための技術ですか?

    • ベストアンサー
    • Java
  • オブジェクト指向モデルの抽象化について

    下記の設問について質問です。 設問:次の文が正しいか否かを答えよ 「オブジェクト指向モデルでは、抽象化の対象となるオブジェクトの操作をあらかじめ指定しなければいけない」 ~~設問以上~~ まず前提知識として抽象化というのはクラス、メソッドの名前だけを、 中身は何も書かないで予め宣言しておくことという理解でよいでしょうか。 その場合、上記「」内の文で誤っているところとしてはオブジェクト指向モデルでは抽象化は必ずしも必要ないから誤っているという理解でよいでしょうか。

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

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

    • ベストアンサー
    • Java
  • オブジェクト指向が先?言語が先?

    これからプログラミングを勉強するとして、オブジェクト指向の本と言語の本があるとすれば、どちらを先に読むべきなんでしょうか? オブジェクト指向って考え方ですよね? どんな分野も考え方の部分って、やる前に教わるより、ある程度経験を積んでからの方が理解できることが多いと思います。 となると、プログラミングもまずは言語を覚えて、ある程度いろいろ作れるようになってからオブジェクト指向に手を出した方が良いんでしょうか? それともオブジェクト指向を勉強してからの方が、言語を理解しやすくなったりするのでしょうか? そもそも個人が趣味レベルでプログラムをするのに、オブジェクト指向って必要なんでしょうか?

  • オブジェクト指向プログラミングの多態性のメリット、目的は?

    オブジェクト指向プログラミングを学んでいます。 基本概念の多態性がどうも理解できません。 メリット、目的はなんなのでしょうか? 上位クラスを継承し、 その継承されたクラスのメソッドを上書きするということと何が違うのでしょうか? 学習の参考にしている書籍の中には ”多態性を使ったオブジェクト指向プログラミングの典型例”として、 異種リスト(=上位型に下位型を代入し、一族のオブジェクトを一括管理する)を紹介しています。 多態性はこのような使用のみを目的としているのでしょうか?