いちばん失敗した人決定戦

・オブジェクト指向のメリットってなんですか?

・カプセル化だ!とよく叫ぶ人がいますけど、カプセル化が嬉しい人って正直技術者でもなんでもないのでは?
ただ、臭いものに蓋してるだけですよね。そもそもカプセル化って別にオブジェクト関係なく、関数作ってそれをコンパイルするか中間言語にトランスパイルでもすれば誰も触らないわけだから(別に、振る舞いを変えなければ変更も容易)。

・僕的にメリットとしては、型として使えることだと思うけれど、これをより強調するならオブジェクト指向より、クラス指向と言いたい。そう思いませんか?

・名前空間も立派な発明だけど、これもやっぱりオブジェクト指向とはあんまり関係ない。

・継承や抽象化できるというのも型として最終的に使えるメリットがあるからこそって認識でそこに含まれてるんだけど、

・ネットの人ってなんか、オブジェクト指向の抽象化の意味よく分かってないよね?

・まあ、ひとつあげるとしたら遅延評価(と並列処理可能)くらいか?でも実行速度の話って結局なんも本質的じゃない気がする

・オブジェクト指向の偉さって何?クラス指向は偉いと思うけど

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (5件)

① カプセル化



オブジェイト指向以前から有るもの。

昔は外部には関係ない、内部実装を外部へ隠す方法が無かった。
一度ソースをコミッ卜すると誰がどう使うかわからず、変更には多大な労力がかかった。カプセル化は大きなシステムを多人数で作るとき、労力を激減してくれる仕組み。

② 抽象化と実装

一連の機能の共通性を分析し、インターフェースとしてくくり出したもの。
機能をプラグインとして実装したりなどの大きな効用も有るが、モジュール間の依存性を激減させ、メインテナンスをとても楽にする効用が大きい。
ある程度大きなモジュール(コンポーネントやしイヤー)のインターフェ一スを定義してからものを作れということ。
DIと組み合わせると泣きたい程メンテが楽になる。
是非いっぺんがっつり試してみて欲しい。

③オブジュクト指向設計

オブジェクト志向は設計時の分割統治の為に、設計を分割して行く為の手法。責任による分割と処理の分散化が特徴。

オブジェクト指向の肝はここなんだけど質問に言及がないのが寂しい。
ここにいっぺんどっぷり浸からないとオブジェクト指向は解らんです。
端っこの道具の話は肝が解った後でやるべき。
    • good
    • 0

私が認識している範囲内でのお話になりますが・・・。



オブジェクト指向のメリット
 ・状態と振る舞いを定義づけて、一貫した状態と振る舞いを
  管理できること。
 ・インターフェースや継承関係などによって管理された範囲を
  崩さずより細かなオブジェクトを構成できること。
 ・様々な原則(DRY、KISS、YAGNI、SOLIDなど)を適用した
  ものと、オブジェクト指向を用いず可能な範囲の原則を適用した
  ものでは、オブジェクト指向の方が管理コストが低い。
  (実装コストが低いとは言っていない)

・カプセル化
 臭いものに蓋をするという意見については、それはそう、と思います。
 コンパイルしようがしまいが、コンパイルされた成果物を利用して
 新たなアプリケーションを作ろうが、臭いものに蓋がされているからこそ
 必要最小限のルールやAPI仕様ドキュメントが策定されていれば、
 構造を破壊するような不正な操作を防ぎ、余計な具体的実装を
 理解する必要がありません。

・クラス指向
 オブジェクトの考え方として状態と振る舞いがあるわけなので、
 別にオブジェクト指向と呼ばれることに違和感を覚えません。
 クラスはオブジェクトを構成する考えの中の1つにしか過ぎません。

・名前空間
 オブジェクト指向とは関係ありませんね。
 言語仕様によってマチマチですが、要は『同名の命令をバッティング
 させたくない、ミスを誘発させたくない、分類ごとにカテゴライズ
 したい』という考えから生み出された先人の知恵です。
 これは名前空間がなかった時でも、人間がモジュール名などを工夫して
 やっていたことなので、それの延長ですね。

・継承や抽象化
 継承、カプセル化、多態性はオブジェクト指向のメリットです。

・ネットの人
 人によるんじゃないですか。
 スーパーエンジニアに出会ってないだけで。

・遅延評価と実行速度
 言語仕様の問題なので、オブジェクト指向の思想自体とはなんら
 関係ないと思います。
 並列処理も。
 言語自体のパフォーマンスとオブジェクトの構成によって左右される
 ので、とにかくスピードが最重要視される場面や組み込み系などでは、
 低水準言語や比較的コンピューターに近い高水準言語を選定すること
 もありますね。

・偉さ
 別に偉くはありません。
 様々な悩みを解消すべく定義され、考えが素晴らしいから
 広く定着したのです。
 もちろん、それを否とするシチュエーションだってあります。
 古くはモジュール、サブルーチン、構造化プログラミングから始まり、
 今では別な視点としてコンポーネント指向などもあります。
 オブジェクト指向というか、例えばクラスを使ってるだけで、
 その中身がガタガタなら、それはオブジェクト指向ではありません。
 色々な考えや原則を組み合わせて構築していくだけなので、
 オブジェクト指向に偉いもなにもありません。
    • good
    • 0

プログラム改修をする際に、影響範囲を限定的にすることができる



プログラム改修を頻繁に定期的にしないことがわかっているプログラムであればオブジェクト指向のメリットが減る
設計や各開発者とのルール決めが必要になるので費用やスケジュールにデメリットが増える

理想主義と現実主義との対決
    • good
    • 0

オブジェクト指向で設計したシステムを


オブジェクト指向言語で実装すれば、
設計と実装の間にある食い違い(ギャップ,ミスマッチ)を
ある程度吸収できるでしょう。

そのため具体的なメリットとしては、
大規模システム開発時の実装コスト削減効果かと思います。

例) オブジェクト指向の設計図
https://ja.wikipedia.org/wiki/UML
    • good
    • 0

一口にオブジェクト指向といっても人によって言っていることにバラツキはあるし、言語の実装も色々でそれぞれにかなり違う。

それぞれに出てくる背景もあるので歴史を含めて幅広くみておかないと理解が難しいですね。
それで型(抽象データ型)とか型継承や、遅延評価なんかはどちらかというと関数型言語に属するパラダイムだと思う。並列処理もそうかな。
オブジェクト指向としては型だけでなく実装も含めた継承とかメソッドのオーバーライド(上書き)ですね。これによってプログラムコードの再利用がし易くなるのがメリットです。
オブジェクト指向というけどクラスの特徴だろうというのはその通り。クラスはオブジェクトのテンプレートなのでこれがオブジェクト指向です。クラス指向という言い方は聞かないですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!