- ベストアンサー
オブジェクト指向を本当にわかりやすく教えてください
いろんな本を読みましたが あまり理解力がないせいか、 オブジェクト指向というものの意味が 全っ然わかりません。 「簡単に言うと・・・」みたいな感じで 本に書いてあったりしますが、結局なんのことやらさっぱり・・・という感じです。 どなたかわかりやすく、そして どういう場面で役に立つのか、教えていただけませんでしょうか?よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
例えば料理をするとします。 料理をするには「食材・調理道具・お皿」などがいりますよね? 例えば野菜を切る、肉を切る、魚を切るという作業が発生した場合… 3人でやろうとすると包丁が3本いりますよね? しかし、一人でやれば包丁は1本でいいわけです。 ニュアンス的にはこれに近いものがありまして、 掲示板、アンケート、アクセスカウンタなどのプログラムを用意するとき、 共通して『書き込む』と言う作業が発生します。 この書き込む作業をパーツとして作っておけばそれぞれのプログラムに流用できるわけです。 また、書き込む処理にメンテナンスを行いたい時、 通常だと掲示板、アンケート、アクセスカウンタの全てのプログラムにメンテナンスを行わなくていけないところですが、 パーツとして作っておくことで、1つのプログラムのメンテナンスで済むというメリットがあります。 また、パーツごとで作業できるので、複数人で作る時はパーツ単位で作れるため 作業効率が上がるというメリットもあります。
その他の回答 (5)
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 んっと…正直、書籍であまりよいと思われるものを見たことがないです。 というのも、そういった書籍にありがちな「たとえ話」は大抵業務に結びつかず。読んでいる限りでは「知っている人間にはわかりやすいが知らない人間にはわからない」書き方をしています。 とりあえずお勧めの書籍は、唯一これくらいでしょうか? http://shop.infocreate.co.jp/shop/sib4901672029.html オブジェクト指向ソフトウェア工学 OOSE use-caseによるアプローチ 著者 : I. ヤコブソン/M. クリスターソン/P. ジョンソン/G. ウーハガード どういう場面で役に立つのか…については言及を避けますが。私が人から質問されたときには「手を抜くための手段」である、と答えます :-P 必要なものを最低限実装し、流用性を高め、かつ仕様変更などがあるときに容易に対応可能であるというのがオブジェクトの特性の一つだと思っているので。
- suseimei
- ベストアンサー率35% (17/48)
オブジェクト指向に関する書籍を読まれたとの事ですが、その書籍がソフトウェア開発に関するものであるという前提でお答えします。 オブジェクト指向自体はソフトウェア開発に特化した考え方ではありません。オブジェクト指向開発やオブジェクト指向プログラミングという場合、それは、多くの場合、リスク管理です。この場合のリスク管理とは、納期遅れ、赤字を出さない、脱落者を出さない、役割分担を決める、分かりやすい図を書くなどの開発プロジェクト進行上の問題点の洗い出しです。 赤字を出さないためには、どのようにすればよいと思いますか。それは、新しいコードを書かず、既存コードをそのまま再利用することです。脱落者を出さないためにはどのようなことが必要になりますか。プロジェクトが取り組むべき課題を誰にでも分かるようにはっきり定義することでしょうね。ソフトウェア開発で言うオブジェクト指向は、あくまでもリスク管理であり、"金儲け"の方法です。この事実を隠蔽しながら、だらだらと説明文が続くため、"オブジェクト指向って何?"ということになります。オブジェクト指向は金儲けの1つの方法にすぎませんから、万能ではありません。このため、オブジェクト指向を生半可に知っていると、プロジェクトによっては参加させてもらえないこともあります。 ソフトウェアにおけるオブジェクト指向。それは経済原則のようなものである、という視点から適切な書籍を選んでください。ソースコードを用意することは、金儲けであり、また、そうでなければなりません。 頑張ってください!
- shiro-joe
- ベストアンサー率22% (15/66)
”オブジェクト指向とは部品を使う、作る”事だと教わりました。 例えば、車を造るのにエンジン、バッテリなどの部品を使って出来ていますよね?部品の構造は解らなくても車を組み立てることは出来ますし、運転することも出来ますよね。 機能別に部品を作ってそれを組み上げて車というオブジェクトが出来ているわけです。 …なんて偉そうなことを言っている自分もプロジェクトを経験してやっと理解したかなって所なんですけどね。
- cobun5513
- ベストアンサー率59% (25/42)
私の場合は、最初の頃、こう考えていました。 (全く正しい考え方ではないかもしれませんが) まず、全体のプログラムの成果物を「人体」とします。 人間の体はいろいろパーツに分かれていますよね。 例えば「手」だけとって見たとき、 「手」は物を掴んだり、いろいろ機能がありますが、 通常、「手」が「何個の関節でできているか」とか、 「何本の筋肉でできているか」とかは知りませんね。 でも、使う側は、「使用方法さえ分っていれば」 「手」を自由に使って、その目的を達成することができます。 つまり、特化した機能を集約した「オブジェクト」を適切に組み合わせることで、 プログラマはより簡単に、大規模なプログラムを組むことができるわけです。 これが、「手」なのに「肺」の機能や「足」の機能まであるとなると、 いちいち「手」「肺」「足」を意識しないといけないので、煩雑になってくるでしょう? 物によっては、「肺」はいらない。みたいな場合もあるし。 こうしてパーツ化したオブジェクトをたくさん用意しておくと、以下のメリットがあります。 1.「手」の構造に深い知識が無くても「手」を使うことも可能。 (使い方さえ知ってればとりあえずOK) 2.「手」の機能に不具合やアップグレードがあった場合、「手」だけの更新が可能。 3.別のプロジェクトでも「手」のオブジェクトがしっかりしていれば、転用が可能。 ということです。 では、関数の外部ライブラリと、オブジェクトのクラスと何が違うの?というと。。。 ちょっと書き切れませんね^^ とりあえず、オブジェクト指向とはこんなものだと思うので、 具体的な方法はまた勉強してみてください。
- daive
- ベストアンサー率66% (2/3)
たとえば、プログラムを作成する場合。 ”表示” というオブジェクトがあるとします。 この”表示”というクラスは、良く出来たオブジェクト で、あらゆるデータの表示ができるとします。 そうした場合、 この”表示”というオブジェクトを使えば テキストでも、画像でも、動画でも、 プログラムからは、ファイル名のみを このオブジェクトへ渡せば、曲りなりにも 表示を行ってくれることになります。 実際上は、表示位置とか、表示窓の方法とか 他にも指定が必要でしょう。 これによって、プログラムの作成者は、 表示に関しては、”表示”にまかせれば 事足りるようになり、楽ができるはず、 というのが、私が理解している範囲での オブジェクト指向です。 別な例では、通信でデータを送受信する場合は、 通信相手が、RS232-Cなのか 無線なのか、赤外線なのか、LANなのか、 パラレルなのかとか、 それぞれに、使い方や、制御方式、速度が違ったり します。 それらを、まとめて、共通に使えるようにプログラムできたら、プログラムからは、 データ送信:相手名、12345 → ”通信”オブジェクト データ受信:相手名、御返事待ち ← ”通信”オブジェクト として使用できて、デバイスとか、プロトコルとか通信 速度とか、TCPとかUDPとかに悩まされる必要がな くなります。デバイスの定義や、使い方は、データ送受 信の処理の本質ではなく、”通信”オブジェクトによっ てデータ送受信のみ考えれば良いことになります。