• ベストアンサー

オブジェクト指向の壁

Java言語などは「オブジェクト指向」が売り?だと思うのですが 素人や初心者が、ぶち当たる「オブジェクト指向の壁」って何だと思いますか? 暇な時にでも回答ください。

  • Java
  • 回答数15
  • ありがとう数14

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

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

>クラスのインスタンス化がはっきり分かること そこは、そんんな難しくないと思いますが。 >★クラス(設計図)からインスタンス(実体)を量産できる。 >分かりやすく生物で例えるとDNAを再利用してクローン(複製)を量産できる(この場合 、オブジェクトからオブジェクトをクローニングすると言う意味ではありません。) ↑この説明でOKかと。

その他の回答 (14)

回答No.15

細かい事を言うなら、オーバーライドによる多態性が分かりにくいですね。 親クラスA、その子クラスBが有ったとして、両方に同じメソッドM(子クラスBがオーバーライドしている)が有ったとします。 子クラスBをインスタンス化した場合、親クラスA内からメソッドMを呼び出す処理があると(デフォルトの場合)クラスBのメソッドMが呼ばれます。 参考。 オーバーライドとオーバーロード間違えないために http://qiita.com/ShirakawaYoshimaru/items/058484a8fb584eb452b2

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.13

 クラスのインスタンス化がはっきり分かることが大切だと思います。つまり、インスタンス(実体)はクラス(設計図)をコンピュータのメモリー上に在処を確保した機械語プログラムのまとまりです。別名で複数のインスタンスを生成し、インスタンス名.メソッド() や インスタンス名.プロパティ などと指定して操作することは、 例えば、1000番地から始まるインスタンスの500番地目のメソッドを働かせよとか、1000番地から始まるインスタンスの200番地目にあるプロパティを呼び出せとか、指示しているのです。これが別名であれば、3000番地から始まるインスタンスのメソッドやプロパティを操作せよと指示すればいいのです。  この手順を意識すれば、クラス(型)とインスタンス(実体)の違いやオブジェクト指向らしい記述の手順が理解しやすくなります。  また、オブジェクトを使う技術とオブジェクトを作る技術と分けて考えれば、オブジェクト指向の壁を乗り越える手掛かりになると思います。割と簡単なオブジェクトを使うことをオブジェクト指向的に捉えることができるようになると、オブジェクト指向プログラミングについても理解しやすくなることでしょう。具体的には、表計算ソフトの各ワークシートもオブジェクトなので、シート1をシート2に複写してみたり(複数のインスタンス生成)シート2だけ売上金額を消費税込みの列にしてみたり(継承)、ワークシート関数の( )内の引数を省略できたり、セル内の値を状況により四捨五入の指定や日付形式の表示指定ができたり(多態性)することが、オブシェクトを使っていることに対応しています。  そのような使い方をオブジェクト指向として捉えれば、VBAでシートやセルの操作する基礎になるわけです。そこまでできれば、オブジェクト指向プログラミングのさらに高度な活用法が分かるようになっていくでしょう。

  • hiodraiu
  • ベストアンサー率15% (448/2821)
回答No.12

初心者だと、最初は小さなプログラムから作り始めるだろうと思います。そうなると、オブジェクト指向を使うメリットがなかなか見えてこないように思います。 そこそこの規模のあるソフトウェアで、複数のクラスがある中で、インターフェースを使ってポリモフィズムを使ったりすると、メリットも見えてきそうですが、初心者では、そこそこの規模って時点で、難しい気がします。

回答No.11

稀にクラスでプログラムを作れば「オブジェクト指向」だとか勘違いしてる人も居ますので、ご注意を。 人に「オブジェクト指向」の話を聞く場合、それを見抜くぐらいの能力が必要です(笑) また、(「オブジェクト指向」とか)簡単にできちゃう人も自分基準でモノを話すので自分基準でモノを話すので参考にならないと思います。 そう言う人は「難しい事を考えずに普通にプログラム組めば良いんだよ」とか言っちゃたりします、いわゆる(野球選手だった)「長嶋茂雄」タイプですね。 非常にスランプに苦しんでる選手が「長嶋茂雄」にバッティングの話を聞いた時に、「長嶋茂雄」は「ピューと来た玉をカーンと打てば良いんだよ」とか言ったそうです(それぐらいの事でスランプから脱出できたら苦労はせんわい、と言う話)。

回答No.10

>大雑把にいえば「オブジェクト指向の壁」は、例えばグラフィックの描画で「DrawLine、DrawPolygon、DrawCircle」とかが(人に言われなくても)同じ機能だと認識できるか どうかです。 蛇足ですが、大抵の場合 抽象クラスを作っておきます、例えばグラフィックの描画関係ならFigureとか。

回答No.9

>(グラフィックの描画の描画だけでなく)つまり(同系統のクラスで)同じ機能が同じ機能だと認識でき、それをクラスに実装できる能力があるか どうかです。 この辺の感覚は(言葉として分かっても)プログラミングしてみないと、実感として分からないと思います。

回答No.8

>同じ機能は、同じ名前にする。 >例えば、グラフィックの描画で、「DrawLine、DrawPolygon、DrawCircle」とか やってはダメ、(特に同系統のクラスなら)全て「Draw」に統一する。 大雑把にいえば「オブジェクト指向の壁」は、例えばグラフィックの描画で「DrawLine、DrawPolygon、DrawCircle」とかが(人に言われなくても)同じ機能だと認識できるか どうかです。 (グラフィックの描画の描画だけでなく)つまり(同系統のクラスで)同じ機能が同じ機能だと認識でき、それをクラスに実装できる能力があるか どうかです。

回答No.7

>★ラップ(分かりやすく例えるとプラグイン)によるオブジェクトの再利用。 >様々なオブジェクトを乗せ変えて活用させる事ができます(実際の PC で分かりやすく例えるなら高性能グラフィック・ボードを挿す、高音質サウンド・ボードを挿す、高速LANボードを挿す、みたいな感じで機能を拡張できる)。 すみません、この説明だと もの凄い自由度があるように勘違いしてしまいそうですね。 実際の PC で分かりやすく例えるなら、NVIDIAのグラフィック・ボードがさせるとか、AMDのグラフィック・ボードがさせるとか、その他のメーカのグラフィック・ボードがさせるとか、その程度の自由度です。

回答No.6

>同じ機能は、同じ名前にする。 >例えば、グラフィックの描画で、「DrawLine、DrawPolygon、DrawCircle」とか やってはダメ、(特に同系統のクラスなら)全て「Draw」に統一する。 ブラックボックス化と言う表現は良くないかもしれないですが、プログラマーが「DrawLine、DrawPolygon、DrawCircle」とか考える必要がなければ、ヒューマン・エラーを削減できます(引数も(設定以外は)共通にする)。 オブジェクト指向プログラミングの理念はヒューマン・エラーの削減です。 以前はオブジェクト指向プログラミングの理念に反し、インスタンスを なんでもObjectに放り込む事も多々あったのですが、Genericsにより その辺の改善されました。 下記は再利用によるヒューマン・エラーの削減を目的としたモノです(つまりオブジェクト指向プログラミングの肝は再利用によるヒューマン・エラーの削減です)。 ★クラス(設計図)からインスタンス(実体)を量産できる。 分かりやすく生物で例えるとDNAを再利用してクローン(複製)を量産できる(この場合 、オブジェクトからオブジェクトをクローニングすると言う意味ではありません。) ★クラスを継承し機能を拡張できる。 この場合、当然ゼロから作るのではなく継承元のクラスを活用する事ができるので、その分 労力の削減でき、手間が少なくなるので その分 プログラミング上のヒューマン・エラーも多少 減らせます。 ★ラップ(分かりやすく例えるとプラグイン)によるオブジェクトの再利用。 様々なオブジェクトを乗せ変えて活用させる事ができます(実際の PC で分かりやすく例えるなら高性能グラフィック・ボードを挿す、高音質サウンド・ボードを挿す、高速LANボードを挿す、みたいな感じで機能を拡張できる)。 ★オブジェクト志向プログラミングのデメリットは肥大化です。 つまり、上記のように再利用できないモノはオブジェクト化のメリットがなく、デメリットだけだと言って良い程です。

回答No.5

>メソッドの名前とかではなく、メソッドの機能 同じ機能は、同じ名前にする。 例えば、グラフィックの描画で、「DrawLine、DrawPolygon、DrawCircle」とか やってはダメ、(特に同系統のクラスなら)全て「Draw」に統一する。

関連するQ&A

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

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

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

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

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

    お世話になります。 VB.NETはオブジェクト指向言語であると聞きました。しかし、VB6.0はそうではないという話を耳にしました。 一部では、6.0もオブジェクト指向言語であるとも聞いたのですが、実際のところどうなのでしょう? どうであれば、オブジェクト指向言語と言えるのでしょうか?

  • オブジェクト指向の教え方

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

    • ベストアンサー
    • Java
  • オブジェクト指向の利点とは?

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

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

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

    • ベストアンサー
    • Java
  • オブジェクト指向分析・設計(OOAD)の重要性

    オブジェクト指向を用いた開発工程について、分析・設計工程が重要だ、分析・設計モデリングについてよく学んでおくべきだとよく言われますが・・・どうしてなんでしょうか? 私個人としては、オブジェクト指向言語(JAVA)による実装の方がよっぽど重要のように思うのですが。。。 すごい基本的な質問かもしれませんが、OOADがどれぐらい、またなぜ重要なのか教えてください。

  • オブジェクト指向言語とは???

    初めての言語として今PHPを勉強しているのですが PHP4をベースにして本格的なオブジェクト指向言語として作られたのが PHP5だという風に勉強しました。 でも(本格的な)オブジェクト指向言語という言葉がよく分かりません。 自分で調べても難しい言葉ばかりでいまいち理解することが出来ないのです。

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

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

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

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

専門家に質問してみよう