• ベストアンサー
  • 困ってます

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

  • 質問No.6755174
  • 閲覧数108
  • ありがとう数3
  • 気になる数0
  • 回答数8
  • コメント数0

お礼率 18% (174/927)

プログラム素人です。
できれば素人にもわかる書き方で教えてください。

オブジェクト指向のプログラミングとは、要は(画面などの動きの)見栄えがよければよい、それ重視で、内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方でしょうか?

おおざっぱでいいので、わかりやすくお教えいただければありがたく存じます。

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

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

ベストアンサー率 20% (32/156)

オブジェクト志向言語とは

■型が定義できる
- クラスが定義できる
■「継承」ができる

みたいな感じだったと思います。
このような言語仕様がある言語は、プログラムの再利用ができ、インターフェースを定義することができ、プログラムのユーザー(プログラムのユーザーってのは開発者ね)にとって開発が効率的になります。

従ってオブジェクト指向ってのは、見栄えだのアクターだのの説明が先行しがちですけど、一番知らなければならない考え方は、分類と包含だと思います。この分類と包含により、効率的な開発ができるんですね。

例)分類の考え方を、いくつかのクラスを定義した例で示します。
---- 以下、定義 ----
商人を定義する
・商人から今月の売り上げを聞く
・商人から商品を買う

商人を継承し、魚屋を定義する
・魚屋から売っている魚の種類を聞く

商人を継承し、肉屋を定義する
・魚屋から売っている肉の種類を聞く

肉屋と商人を継承し、スーパーを定義する

---- ここまで、定義 ----

商人は上で定義された2つの行動を取ります。(・・と定義します。)
魚屋も商人に含まれますよね?魚という商品を扱うので・・・
つまり、魚屋は商人の特性も持つことができるんです。
ここで、オブジェクト指向の「継承」を利用すれば、以前定義した商人の行動をそのまま魚屋に当てはめることができますよね?
魚屋の商人の部分は、新しく定義する必要がないので、開発者としては定義するという作業が減ります。

これがオブジェクト指向の基本かと思います。



>内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方でしょうか?
おそらく、質問者さんが言われてる
「見栄えの方を優先」=「インターフェースに従って実装」
ということを指しているのかな?

だから、「見栄えの方を優先するよ」というよりも「定義は必ず守れよ」って感じかなぁ。

つまり、関数の引数と出力を決めて、とりあえず関数の見栄えの定義だけ行なう。
この関数の見栄えの定義さえ守っていれば、内部的にどのような処理をしても良い。
っていうのが正しい認識だと思う。

例えば、
ある関数fがプログラムの100箇所で参照されているとする。ところが、開発途中で関数fの見栄えの定義(引数と出力)を変えなければいけなくなった。この場合、プログラム中の100箇所を書き変えないといけなくなるよね?非常に面倒くさい。
でも、関数fの内部的な処理を変えるだけなら、プログラム中の100箇所を変える必要がないから修正が楽ってこと。


そもそも、巷でオブジェクト指向という言葉だけが先走ってて、定義自体あいまいなんだよね。
でも、根底にある考え方は、集合を分類して、各集合の特性を定義して、その特性に反しないように各集合に対して処理を施す。
こうすることで、多くの利点がある。
■データと処理が一括で扱える⇒プログラムが読み易い
■見栄え(集合の特性)を意識する⇒プログラムの途中修正が少ない
■継承できる⇒再利用性大
っつーことで、要は、開発者がいかに楽をするか?っつー動機から生まれてる。

>内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方
ってのも一応合ってると思うけど、オブジェクト指向を利用することを考えると、イマイチな考え方かな。
お礼コメント
ooiei

お礼率 18% (174/927)

わかりやすい説明です。ありがとうございました。

要するにプログラマーが書きやすい、やりやすい(たとえば引き継ぎのプログラマーがソースを見たときなど)指向ということでしょうか?
投稿日時:2011/05/23 10:03

その他の回答 (全7件)

  • 回答No.8

ベストアンサー率 55% (1857/3366)

そういうことでしたか。

objectという英単語には複数の意味があります。例えば、goo辞書で調べればこうなります。
http://dictionary.goo.ne.jp/leaf/ej3/58296/m0u/object/

コンピュータ用語としても、そこから発展して、やはり多くの場面でそれぞれの意味で使われています。どの意味で使われているかは、文脈の中から推測する必要があります。
「オブジェクト」と言う単語を使っているだけでは「オブジェクト指向」とは言いません。
それをやったら、あらゆる物(「オブジェクト指向」と反するものさえも)がオブジェクト指向になってしまいます。


画面表示だと、ある程度まとめた部品を「物」として扱った方が便利です。
例えば、ゲーム画面だったら、背景とか各キャラクターを「物(オブジェクト)」として、それぞれがどんな位置関係にあるかを決めたら、それがどう見えるかを計算すれば、人物で背景が隠れるような絵ができあがります。
  • 回答No.7

ベストアンサー率 20% (32/156)

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

ただ、"プログラミングにおけるオブジェクト指向"という視点を持ったとき、オブジェクト指向の概念だけの考え方だけだと、かえってわかりにくいソースになり易い。本末転倒な感じ。

だから、あえて"プログラミングにおけるオブジェクト指向"という視点を持って説明をしました。
お礼コメント
ooiei

お礼率 18% (174/927)

ご回答ありがとうございます。

>分類された各集合に対して個別にルールを決定することで、全体として上手く動く

たとえば合体ロボがいて、一号機、二号機、三号機は勝手なプログラミングで動くけど、三体合体した時もちゃんと動く、という感じでしょうか?
投稿日時:2011/05/23 13:03
  • 回答No.5

ベストアンサー率 55% (1857/3366)

> (画面などの動きの)見栄え

プログラミング理論を論じるときに、無視される、あるいは、計算や他装置の入出力等の処理の一つとしてまとめて扱われ、特別扱いはされない。「見栄え」なんてものは、そういうものだと思います。

なので「オブジェクト指向のプログラミングとは、要は(画面などの動きの)見栄えがよければよい、それ重視で、内部でどんなごっゃなプログラムが書かれていても、見栄えの方を優先するよ、という考え方」などというのが、いったい何をどう読んだらそうなるのか不思議です。
よろしかったら、何でそう考えたのか補足していただきたく。どこが誤解の元かわかれば、より理解しやすいかもしれませんし。


あと、見栄えを重視しても、プログラムで使いにくければ、余計な手間がかかって、結局利点を上回る欠点となりかねません。なので、~さえよければ、みたいなものは結局主流にはなれないと思います。
お礼コメント
ooiei

お礼率 18% (174/927)

ご回答ありがとうございます。

>どこが誤解の元かわかれば

すいません。私自身ネットで聞きかじった知識で「オブジェクト」=画面の表示物(たとえばゲームキャラなど)という理解でした。

全然違うんですよね……。

そもそもでは「オブジェクト」とは何かということなりますね……。
投稿日時:2011/05/23 00:27
  • 回答No.4

ベストアンサー率 61% (1597/2589)

http://okwave.jp/qa/q6660148.html の私の過去の回答ANo.4

の末尾の「単純なイメージで説明するならば。」以降を参照。
(ANo.2,ANo.3 と同じことを私の言葉で説明した回答ということになります)

ということで ANo.1 にも賛成です。
  • 回答No.3

ベストアンサー率 45% (763/1670)

自動販売機の例

登場人物

・お金を数える装置
・自動販売機でもっているお金を管理する装置
・品物を選ぶ装置
・品物を出す装置
・おつりを出す装置


スタート

お金 → お金を数える装置 → 投入されたお金を覚えておく
品物を選ぶボタン → 品物を選ぶ装置 → 要求されている品物確認する

【お金を数える装置】
・投入金額教えてと言われたら、投入金額を答える。
・お金精算 と言われたら、投入されたお金を、お金を管理する装置に「入金」と言って渡す。

【お金を管理する装置】
・おつりxx円払える? と聞かれたら、手持ちのお金(と硬貨の種類)で、YES NO を答える。
・入金(xx円)と言われたら、その金額を受け取って、手持ちのお金を増やしておく。
・出金(xx円)と言われたら、その金額を渡して、手持ちのお金を減らしておく

【品物を選ぶ装置】
・品物が選ばれたら、その品物の代金を調べる。
 その後、「お金を数える装置」に、「投入金額教えて」と尋ねて、購入可能かどうか判断
 さらに、「品物を出す装置」に、「在庫があるかどうか」確認して、購入可能かどうか判断
 購入可能なら以下の処理、購入不可なら、なにもしない
  品物を出す装置に、「品物出して」と言う。
  お金を数える装置に「お金精算」と言う。
  おつりを計算して、「おつりを出す装置」におつり出してと言う

【品物を出す装置】
・在庫があるか? と言われたら、在庫を調べて、 YES NO を答える。
・品物出してと言われたら、品物を一個出す。在庫数量を一個減らしておく

【おつりを出す装置】
・おつり出してと言われたら、お金を管理する装置に、出金と言う
 その後受け取った、お金をおつりとして出す。

こういう感じで、それぞれの行動様式を決めてしまえば、全体でうまく動くだろうという考え方です。
  • 回答No.2

ベストアンサー率 45% (763/1670)

おおざっぱに言えば、ひとつのドラマなり演劇なりを仕上げるときに……。

オブジェクト指向でない考え方。

・最初から最後までシナリオをきっちり作って、その通りに演じる
・もしかしたら、最初と最後で設定の矛盾ができてしまうかもしれない。

オブジェクト指向の考え方

・役者一人一人の行動様式をきっちり決める。
・「スタート」と声をかけると、(シナリオがなくても)役者同士の掛け合いでドラマが進んでゆく
・ぞれぞれの行動様式を決めてからスタートするので、矛盾は起こりにくい。
・ついでに、役者一人一人の行動様式があってるかどうかを検証すればいいので、
 検証が簡単になることが多い。
・ただし、ドラマ全体として、思ったような流れで進行していくかどうか、ちょっと不安。
  • 回答No.1

ベストアンサー率 18% (216/1139)

> おおざっぱでいいので

おおざっぱに言うと、その逆で内部の見栄えを良くするよ。という考え方さ。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ