![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
・オブジェクト指向のメリットってなんですか?
・カプセル化だ!とよく叫ぶ人がいますけど、カプセル化が嬉しい人って正直技術者でもなんでもないのでは?
ただ、臭いものに蓋してるだけですよね。そもそもカプセル化って別にオブジェクト関係なく、関数作ってそれをコンパイルするか中間言語にトランスパイルでもすれば誰も触らないわけだから(別に、振る舞いを変えなければ変更も容易)。
・僕的にメリットとしては、型として使えることだと思うけれど、これをより強調するならオブジェクト指向より、クラス指向と言いたい。そう思いませんか?
・名前空間も立派な発明だけど、これもやっぱりオブジェクト指向とはあんまり関係ない。
・継承や抽象化できるというのも型として最終的に使えるメリットがあるからこそって認識でそこに含まれてるんだけど、
・ネットの人ってなんか、オブジェクト指向の抽象化の意味よく分かってないよね?
・まあ、ひとつあげるとしたら遅延評価(と並列処理可能)くらいか?でも実行速度の話って結局なんも本質的じゃない気がする
・オブジェクト指向の偉さって何?クラス指向は偉いと思うけど
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
① カプセル化
オブジェイト指向以前から有るもの。
昔は外部には関係ない、内部実装を外部へ隠す方法が無かった。
一度ソースをコミッ卜すると誰がどう使うかわからず、変更には多大な労力がかかった。カプセル化は大きなシステムを多人数で作るとき、労力を激減してくれる仕組み。
② 抽象化と実装
一連の機能の共通性を分析し、インターフェースとしてくくり出したもの。
機能をプラグインとして実装したりなどの大きな効用も有るが、モジュール間の依存性を激減させ、メインテナンスをとても楽にする効用が大きい。
ある程度大きなモジュール(コンポーネントやしイヤー)のインターフェ一スを定義してからものを作れということ。
DIと組み合わせると泣きたい程メンテが楽になる。
是非いっぺんがっつり試してみて欲しい。
③オブジュクト指向設計
オブジェクト志向は設計時の分割統治の為に、設計を分割して行く為の手法。責任による分割と処理の分散化が特徴。
オブジェクト指向の肝はここなんだけど質問に言及がないのが寂しい。
ここにいっぺんどっぷり浸からないとオブジェクト指向は解らんです。
端っこの道具の話は肝が解った後でやるべき。
No.4
- 回答日時:
私が認識している範囲内でのお話になりますが・・・。
オブジェクト指向のメリット
・状態と振る舞いを定義づけて、一貫した状態と振る舞いを
管理できること。
・インターフェースや継承関係などによって管理された範囲を
崩さずより細かなオブジェクトを構成できること。
・様々な原則(DRY、KISS、YAGNI、SOLIDなど)を適用した
ものと、オブジェクト指向を用いず可能な範囲の原則を適用した
ものでは、オブジェクト指向の方が管理コストが低い。
(実装コストが低いとは言っていない)
・カプセル化
臭いものに蓋をするという意見については、それはそう、と思います。
コンパイルしようがしまいが、コンパイルされた成果物を利用して
新たなアプリケーションを作ろうが、臭いものに蓋がされているからこそ
必要最小限のルールやAPI仕様ドキュメントが策定されていれば、
構造を破壊するような不正な操作を防ぎ、余計な具体的実装を
理解する必要がありません。
・クラス指向
オブジェクトの考え方として状態と振る舞いがあるわけなので、
別にオブジェクト指向と呼ばれることに違和感を覚えません。
クラスはオブジェクトを構成する考えの中の1つにしか過ぎません。
・名前空間
オブジェクト指向とは関係ありませんね。
言語仕様によってマチマチですが、要は『同名の命令をバッティング
させたくない、ミスを誘発させたくない、分類ごとにカテゴライズ
したい』という考えから生み出された先人の知恵です。
これは名前空間がなかった時でも、人間がモジュール名などを工夫して
やっていたことなので、それの延長ですね。
・継承や抽象化
継承、カプセル化、多態性はオブジェクト指向のメリットです。
・ネットの人
人によるんじゃないですか。
スーパーエンジニアに出会ってないだけで。
・遅延評価と実行速度
言語仕様の問題なので、オブジェクト指向の思想自体とはなんら
関係ないと思います。
並列処理も。
言語自体のパフォーマンスとオブジェクトの構成によって左右される
ので、とにかくスピードが最重要視される場面や組み込み系などでは、
低水準言語や比較的コンピューターに近い高水準言語を選定すること
もありますね。
・偉さ
別に偉くはありません。
様々な悩みを解消すべく定義され、考えが素晴らしいから
広く定着したのです。
もちろん、それを否とするシチュエーションだってあります。
古くはモジュール、サブルーチン、構造化プログラミングから始まり、
今では別な視点としてコンポーネント指向などもあります。
オブジェクト指向というか、例えばクラスを使ってるだけで、
その中身がガタガタなら、それはオブジェクト指向ではありません。
色々な考えや原則を組み合わせて構築していくだけなので、
オブジェクト指向に偉いもなにもありません。
No.3
- 回答日時:
プログラム改修をする際に、影響範囲を限定的にすることができる
プログラム改修を頻繁に定期的にしないことがわかっているプログラムであればオブジェクト指向のメリットが減る
設計や各開発者とのルール決めが必要になるので費用やスケジュールにデメリットが増える
理想主義と現実主義との対決
No.2
- 回答日時:
オブジェクト指向で設計したシステムを
オブジェクト指向言語で実装すれば、
設計と実装の間にある食い違い(ギャップ,ミスマッチ)を
ある程度吸収できるでしょう。
そのため具体的なメリットとしては、
大規模システム開発時の実装コスト削減効果かと思います。
例) オブジェクト指向の設計図
https://ja.wikipedia.org/wiki/UML
No.1
- 回答日時:
一口にオブジェクト指向といっても人によって言っていることにバラツキはあるし、言語の実装も色々でそれぞれにかなり違う。
それぞれに出てくる背景もあるので歴史を含めて幅広くみておかないと理解が難しいですね。それで型(抽象データ型)とか型継承や、遅延評価なんかはどちらかというと関数型言語に属するパラダイムだと思う。並列処理もそうかな。
オブジェクト指向としては型だけでなく実装も含めた継承とかメソッドのオーバーライド(上書き)ですね。これによってプログラムコードの再利用がし易くなるのがメリットです。
オブジェクト指向というけどクラスの特徴だろうというのはその通り。クラスはオブジェクトのテンプレートなのでこれがオブジェクト指向です。クラス指向という言い方は聞かないですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら…
-
マイクロソフトがvbを捨てたのは何故ですか C#は変数の型指定ひとつとっても最近の主流とはかけ離れて
その他(プログラミング・Web制作)
-
近年誕生したプログラミング言語
その他(プログラミング・Web制作)
-
逆コンパイルと逆アセンブルの違いはなんですか
C言語・C++・C#
-
-
4
プログラミング言語について
その他(プログラミング・Web制作)
-
5
プログラマーは誘惑にさらされる人生?
その他(プログラミング・Web制作)
-
6
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
7
AIの登場でプログラマーたちが解雇されていますが
その他(プログラミング・Web制作)
-
8
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
9
文系のSE志望です。プログラミングを今から習得したいのですが、初めて学ぶのにオススメの言語があれば教
その他(プログラミング・Web制作)
-
10
プログラミング言語についてc++に空白あると同じ文字を再度繰り返して処理しないといけないので2倍動作
C言語・C++・C#
-
11
過剰なオブジェクト指向脳からの脱却について
その他(プログラミング・Web制作)
-
12
Pythonのコードエラーについてです。
その他(プログラミング・Web制作)
-
13
これて逆じゃないですか?
C言語・C++・C#
-
14
これなにがちがうんですか??
C言語・C++・C#
-
15
0 == False はいいけど
C言語・C++・C#
-
16
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
17
インターフェースとトレイトってどっちが正義なんですか? インターフェースを利用するとそのクラスのよう
その他(プログラミング・Web制作)
-
18
プログラマーに向いている人の特徴や性格は何がありますか?
その他(プログラミング・Web制作)
-
19
プログラミングの雑談がしたいのですがどこで出来ますか?
その他(プログラミング・Web制作)
-
20
趣味レベルでプログラミングをしたいのですがいいコミュニティとかないのでしょうか? 大抵の人はプログラ
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
phpのクラスにて別ファイルの変...
-
・オブジェクト指向のメリット...
-
'_'(アンダースコア)の使い方...
-
お金を掛けずPHPを独学された方...
-
ラッパークラスって何ですか?
-
クラス
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
PHPのif文でその処理を途中で抜...
-
3つ以上の論理積は利用可能なの...
-
PHPファイルの中身が見られるこ...
-
ファイル名は、数字の「0」(...
-
VBSの「MsgBox」について
-
FTP接続の例外処理
-
透過PNGが透過されない!!
-
.phpと.incファイルの違いはな...
-
PHPで複数ファイルのダウン...
-
PHPでSMTPを使ってメール送信で...
-
php pear
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
・オブジェクト指向のメリット...
-
「クラス関数」「メンバ関数」...
-
ラッパークラスって何ですか?
-
phpのクラスにて別ファイルの変...
-
class定義のphpをファイル分割...
-
PHP4、PHP5 1ファイル複数クラ...
-
クラス
-
配列とオブジェクトの違い
-
'_'(アンダースコア)の使い方...
-
外部ファイルのクラスのインス...
-
PHPのクラス名の付け方
-
データベースで値をインクリメ...
-
PHPでの継承について
-
文字連結中の三項演算子について
-
PHP,privateの使用理由について
-
require_onceについて
-
クラス
-
MVCモデル MV間のデータ共有
-
php インスタンスとオブジェク...
-
インタフェースとは
おすすめ情報