• ベストアンサー

オブジェクト指向について教えてください

プログラム素人です。 できれば素人にもわかる書き方で教えてください。 オブジェクト指向のプログラミングとは、要は(画面などの動きの)見栄えがよければよい、それ重視で、内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方でしょうか? おおざっぱでいいので、わかりやすくお教えいただければありがたく存じます。

  • ooiei
  • お礼率18% (174/927)

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

  • ベストアンサー
  • gachinco
  • ベストアンサー率20% (32/156)
回答No.6

オブジェクト志向言語とは ■型が定義できる - クラスが定義できる ■「継承」ができる みたいな感じだったと思います。 このような言語仕様がある言語は、プログラムの再利用ができ、インターフェースを定義することができ、プログラムのユーザー(プログラムのユーザーってのは開発者ね)にとって開発が効率的になります。 従ってオブジェクト指向ってのは、見栄えだのアクターだのの説明が先行しがちですけど、一番知らなければならない考え方は、分類と包含だと思います。この分類と包含により、効率的な開発ができるんですね。 例)分類の考え方を、いくつかのクラスを定義した例で示します。 ---- 以下、定義 ---- 商人を定義する ・商人から今月の売り上げを聞く ・商人から商品を買う 商人を継承し、魚屋を定義する ・魚屋から売っている魚の種類を聞く 商人を継承し、肉屋を定義する ・魚屋から売っている肉の種類を聞く 肉屋と商人を継承し、スーパーを定義する ---- ここまで、定義 ---- 商人は上で定義された2つの行動を取ります。(・・と定義します。) 魚屋も商人に含まれますよね?魚という商品を扱うので・・・ つまり、魚屋は商人の特性も持つことができるんです。 ここで、オブジェクト指向の「継承」を利用すれば、以前定義した商人の行動をそのまま魚屋に当てはめることができますよね? 魚屋の商人の部分は、新しく定義する必要がないので、開発者としては定義するという作業が減ります。 これがオブジェクト指向の基本かと思います。 >内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方でしょうか? おそらく、質問者さんが言われてる 「見栄えの方を優先」=「インターフェースに従って実装」 ということを指しているのかな? だから、「見栄えの方を優先するよ」というよりも「定義は必ず守れよ」って感じかなぁ。 つまり、関数の引数と出力を決めて、とりあえず関数の見栄えの定義だけ行なう。 この関数の見栄えの定義さえ守っていれば、内部的にどのような処理をしても良い。 っていうのが正しい認識だと思う。 例えば、 ある関数fがプログラムの100箇所で参照されているとする。ところが、開発途中で関数fの見栄えの定義(引数と出力)を変えなければいけなくなった。この場合、プログラム中の100箇所を書き変えないといけなくなるよね?非常に面倒くさい。 でも、関数fの内部的な処理を変えるだけなら、プログラム中の100箇所を変える必要がないから修正が楽ってこと。 そもそも、巷でオブジェクト指向という言葉だけが先走ってて、定義自体あいまいなんだよね。 でも、根底にある考え方は、集合を分類して、各集合の特性を定義して、その特性に反しないように各集合に対して処理を施す。 こうすることで、多くの利点がある。 ■データと処理が一括で扱える⇒プログラムが読み易い ■見栄え(集合の特性)を意識する⇒プログラムの途中修正が少ない ■継承できる⇒再利用性大 っつーことで、要は、開発者がいかに楽をするか?っつー動機から生まれてる。 >内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方 ってのも一応合ってると思うけど、オブジェクト指向を利用することを考えると、イマイチな考え方かな。

ooiei
質問者

お礼

わかりやすい説明です。ありがとうございました。 要するにプログラマーが書きやすい、やりやすい(たとえば引き継ぎのプログラマーがソースを見たときなど)指向ということでしょうか?

その他の回答 (7)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.8

そういうことでしたか。 objectという英単語には複数の意味があります。例えば、goo辞書で調べればこうなります。 http://dictionary.goo.ne.jp/leaf/ej3/58296/m0u/object/ コンピュータ用語としても、そこから発展して、やはり多くの場面でそれぞれの意味で使われています。どの意味で使われているかは、文脈の中から推測する必要があります。 「オブジェクト」と言う単語を使っているだけでは「オブジェクト指向」とは言いません。 それをやったら、あらゆる物(「オブジェクト指向」と反するものさえも)がオブジェクト指向になってしまいます。 画面表示だと、ある程度まとめた部品を「物」として扱った方が便利です。 例えば、ゲーム画面だったら、背景とか各キャラクターを「物(オブジェクト)」として、それぞれがどんな位置関係にあるかを決めたら、それがどう見えるかを計算すれば、人物で背景が隠れるような絵ができあがります。

  • gachinco
  • ベストアンサー率20% (32/156)
回答No.7

>要するにプログラマーが書きやすい、やりやすい(たとえば引き継ぎのプログラマーがソースを見たときなど)指向ということでしょうか? いや。 オブジェクト指向がプログラミングに対して導入された最大の理由が、プログラマの開発を楽にするためであって、 "オブジェクト指向"の概念自体は他の回答者さんが述べているように、「分類された各集合に対して個別にルールを決定することで、全体として上手く動く」的な説明の方が合っているよ。 ただ、"プログラミングにおけるオブジェクト指向"という視点を持ったとき、オブジェクト指向の概念だけの考え方だけだと、かえってわかりにくいソースになり易い。本末転倒な感じ。 だから、あえて"プログラミングにおけるオブジェクト指向"という視点を持って説明をしました。

ooiei
質問者

お礼

ご回答ありがとうございます。 >分類された各集合に対して個別にルールを決定することで、全体として上手く動く たとえば合体ロボがいて、一号機、二号機、三号機は勝手なプログラミングで動くけど、三体合体した時もちゃんと動く、という感じでしょうか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

> (画面などの動きの)見栄え プログラミング理論を論じるときに、無視される、あるいは、計算や他装置の入出力等の処理の一つとしてまとめて扱われ、特別扱いはされない。「見栄え」なんてものは、そういうものだと思います。 なので「オブジェクト指向のプログラミングとは、要は(画面などの動きの)見栄えがよければよい、それ重視で、内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方」などというのが、いったい何をどう読んだらそうなるのか不思議です。 よろしかったら、何でそう考えたのか補足していただきたく。どこが誤解の元かわかれば、より理解しやすいかもしれませんし。 あと、見栄えを重視しても、プログラムで使いにくければ、余計な手間がかかって、結局利点を上回る欠点となりかねません。なので、~さえよければ、みたいなものは結局主流にはなれないと思います。

ooiei
質問者

お礼

ご回答ありがとうございます。 >どこが誤解の元かわかれば すいません。私自身ネットで聞きかじった知識で「オブジェクト」=画面の表示物(たとえばゲームキャラなど)という理解でした。 全然違うんですよね……。 そもそもでは「オブジェクト」とは何かということなりますね……。

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

http://okwave.jp/qa/q6660148.html の私の過去の回答ANo.4 の末尾の「単純なイメージで説明するならば。」以降を参照。 (ANo.2,ANo.3 と同じことを私の言葉で説明した回答ということになります) ということで ANo.1 にも賛成です。

回答No.3

自動販売機の例 登場人物 ・お金を数える装置 ・自動販売機でもっているお金を管理する装置 ・品物を選ぶ装置 ・品物を出す装置 ・おつりを出す装置 スタート お金 → お金を数える装置 → 投入されたお金を覚えておく 品物を選ぶボタン → 品物を選ぶ装置 → 要求されている品物確認する 【お金を数える装置】 ・投入金額教えてと言われたら、投入金額を答える。 ・お金精算 と言われたら、投入されたお金を、お金を管理する装置に「入金」と言って渡す。 【お金を管理する装置】 ・おつりxx円払える? と聞かれたら、手持ちのお金(と硬貨の種類)で、YES NO を答える。 ・入金(xx円)と言われたら、その金額を受け取って、手持ちのお金を増やしておく。 ・出金(xx円)と言われたら、その金額を渡して、手持ちのお金を減らしておく 【品物を選ぶ装置】 ・品物が選ばれたら、その品物の代金を調べる。  その後、「お金を数える装置」に、「投入金額教えて」と尋ねて、購入可能かどうか判断  さらに、「品物を出す装置」に、「在庫があるかどうか」確認して、購入可能かどうか判断  購入可能なら以下の処理、購入不可なら、なにもしない   品物を出す装置に、「品物出して」と言う。   お金を数える装置に「お金精算」と言う。   おつりを計算して、「おつりを出す装置」におつり出してと言う 【品物を出す装置】 ・在庫があるか? と言われたら、在庫を調べて、 YES NO を答える。 ・品物出してと言われたら、品物を一個出す。在庫数量を一個減らしておく 【おつりを出す装置】 ・おつり出してと言われたら、お金を管理する装置に、出金と言う  その後受け取った、お金をおつりとして出す。 こういう感じで、それぞれの行動様式を決めてしまえば、全体でうまく動くだろうという考え方です。

回答No.2

おおざっぱに言えば、ひとつのドラマなり演劇なりを仕上げるときに……。 オブジェクト指向でない考え方。 ・最初から最後までシナリオをきっちり作って、その通りに演じる ・もしかしたら、最初と最後で設定の矛盾ができてしまうかもしれない。 オブジェクト指向の考え方 ・役者一人一人の行動様式をきっちり決める。 ・「スタート」と声をかけると、(シナリオがなくても)役者同士の掛け合いでドラマが進んでゆく ・ぞれぞれの行動様式を決めてからスタートするので、矛盾は起こりにくい。 ・ついでに、役者一人一人の行動様式があってるかどうかを検証すればいいので、  検証が簡単になることが多い。 ・ただし、ドラマ全体として、思ったような流れで進行していくかどうか、ちょっと不安。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

> おおざっぱでいいので おおざっぱに言うと、その逆で内部の見栄えを良くするよ。という考え方さ。

関連するQ&A

  • オブジェクト指向のプログラム??

    「オブジェクト指向のプログラム」という言葉を プログラミングの話をしているときに聞きますが よくわかりません。 どなたか素人でもわかるように教えて下さい。

  • オブジェクト指向ではない指向は、何指向と言う?

    プログラミングでオブジェクト指向ではない指向は、何指向と言うのですか?

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

    C#でプログラミングをしているのですが、オブジェクト指向を一切使わずに作っています。 作っていくにしたがってツールが重くなってきたのですが、オブジェクト指向を使ってい書いたほうがアプリケーションは軽くなりますか?

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

    オブジェクト指向に対応したプログラミングはいっぱいあるけどオブジェクト指向の考え方を考えた人はだれなのですか?!

    • ベストアンサー
    • Java
  • 【オブジェクト指向について】

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

  • オブジェクト指向とは

    オブジェクト指向の本をたくさん読んでみましたが 全部書いてあることが難しくていまいちピンときません。 要は簡単にいうと、クラスを作ってその中にメソッドを 作ってロジックの中でその中のクラスを使い分けていく という考え方がオブジェクト指向というのでしょうか? 簡単でいいのでわかりやすくオブジェクト指向というのを教えていただけないでしょうか?友人に聞くとオブジェクト指向を説明すると2時間はかかると言われてしまいました。

    • ベストアンサー
    • Java
  • オブジェクト指向、理解しやすい?

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

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

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

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

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

    • ベストアンサー
    • Java
  • オブジェクト指向プログラミングについて

    VisualBasicを対象にしたオブジェクト指向プログラミングに関する参考書、Webサイトなどはないでしょうか。 現在、クラスモジュールなどを多用しオブジェクト指向プログラミングを実践しているつもりですが、あまり勉強したわけではないのでいまいちよくわからないです。 (オブジェクト指向プログラミングのメリットとデメリットなど)

専門家に質問してみよう