OOPテクノロジーの死[終了]


9

アスペクト指向プログラミングについて何度も聞いたことがありますが、そのほとんどはプログラミングにおける「次世代」のテクノロジーであり、OOPを「殺す」予定です。

正しいですか?OOPは死ぬのでしょうか、それともその理由は何でしょうか?

回答:


40

あるソフトウェアテクノロジーが別のソフトウェアテクノロジーを殺すか、市場全体/使用/聴衆全体を支配すると誰かがあなたに言ったときはいつでも、これを覚えておいてください:

健全な(動的だが安定した)生態系は、さまざまな種から成り立っています。

つまり、新しい誇大広告技術は誇大広告の曲線たどり、最終的には、時間と経験を通じて、その特定の目的を見つけることになります。

誇大広告曲線

これは、アスペクト指向プログラミングなどの極端な概念が必要な場合に役立つことを意味します。つまり、暗黙のコストのために、常にではなく、それほど頻繁ではありません。

しかし、OOProgrammingのように、汎用プログラミングのように、関数型プログラミングのように、手続き型プログラミングのように、すでにその場所があります。

使用頻度が高く(論争の的になっている人気があり)、実生活で広く普及している言語は「純粋ではない」ことに気づきましたか?これは、いくつかのパラダイムを許可することで、時間の経過に応じてコンテキストを柔軟に変更できるようになり、使用法のニッチを埋めることができるためです。


1
「純粋でない」の+1。純粋なOOP言語は、非常にニッチな使用法/学者を除いて、特に死んでいます。
jv42

純粋なオブジェクト指向言語とは何でしょうか?Smalltalk?
Zhehao Mao

20

AOPが原因でOOPが死ぬことはありません。AOPはいくつかの価値を追加しますが、OOPと完全に共存しています。関数型プログラミングがOOPを殺すとは思いません。OOPは、さまざまな種類の問題ドメインに適しているため、機能パラダイムに置き換えることは意味がありません。


1
それは非常に主観的です。OOPは特定の問題ドメインに適しているとは思いません。特定の開発者がソリューションを作成する方法に適しています。開発者がパラダイムスイッチを作成できないため、OOPが死ぬことはありません。
レイノス

6
OOPが適している典型的な例はGUIです。言語がそうでなくても、OOではないGUIツールキットのAPIを想像するのは困難です。(確かに、それは通常、問題ドメインという用語が使用されている方法ではありません)OOPが適切である実際の問題ドメインの例を示すには、倉庫の自動化です。ストレージとリトリーブ手段とその活動のモデリングは、OOPが自然に適合するように感じる場所です。
user281377

2
@ ammoQ、OOで表現するとGUIは恐ろしいです。これが、すべてのAPIがDSL(WPFなど)に移行している理由です。たとえば、Tkを想像するのは難しくありません-OOPの痕跡は1つもありませんが、それでも(プログラミングにとっては、ルックアンドフィールではなく)非常に優れており、過大なJava OOツールキットよりもはるかに優れています。OOPは、エージェントベースのシミュレーション(リストしたものなど)に非常によく適合しますが、既存の問題のごく一部です。
SKロジック

6
私が見つけたtkの最初の例を見て、どうしてOOではないのですか?チュートリアルから:「ウィジェットはオブジェクトであり、ボタンやフレームなどを表すクラスのインスタンスです。」tkdocs.com/tutorial/concepts.htmlさらに、DSL自体はオブジェクト指向プログラミングに非常に依存しています。だから私はあなたが言っていることを本当に理解していないのですか?
インカ

3
SK-ロジック、@ammoQ @、@Raynosは、@jkocking、私は、独自の質問にそれを昇格:programmers.stackexchange.com/questions/88385/...私はこれについての詳細な説明を持っていることは非常に興味があるが、私は非常によ学ぶことに興味があります。
インカ

12

パラダイムは行き来しますが、レガシーコードは永遠です。維持するC ++コードは常に存在するため、OOPが完全になくなることは決してありません。


6
真に素晴らしいフレーズの+1:「パラダイムは行き来しますが、レガシーコードは永遠です」
NoChance '31

8

短い答え:いいえ、そうは思いません。

より長い答え:私がAOPについて理解していることから、それはそれ自体はプログラミングパラダイムではなく(たとえば、それはOOPに取って代わるものではありません)、より多くの追加、より短いメソッド、より単純で単一の責任のクラスを書くのに役立つツールキット、etcetera。ただし、OOPの代わりにはなりません。

OOPを(少なくとも部分的に)置換または追加するのは関数型プログラミングですが、これは実際に異なるプログラミングパラダイムです(ただし、Scalaプログラミング言語などでOOPと混在させることができます)。特に並行性に関しては、不変のデータ構造とOOP開発者を苛立たせる傾向があるあらゆる種類の凝った機能を好みます。


機能<->命令型がラインです。OOPはそれに平行しています。手続きはOOPの反対側にあると思いますが、よくわかりません。もちろん、機能的パラダイムがOOPパラダイムより古いのは
おかしいです

2
@Raynos、直線はありません。OOPは、可能性のある巨大な(無限の)一連の抽象言語の内部にある1つの小さなメタ言語学的抽象です。そしてもちろん、それらのいずれかに自分を限定するのは非常に愚かです。
SKロジック

6

OOPは、多くの状況でデファクトアプローチであると想定されているため、最近はあまり話題になりません。AOPはあらゆる種類の大衆運動として地面から降りることはありません。

http://imgur.com/9VmKC


5

アスペクト指向プログラミングについて、OOPSLA '97チュートリアルに初めて参加したことを覚えています。彼らはそれがオブジェクト指向を殺すつもりだったと言っていました。それ以来、OOは非常に大きな期待を超えて成長してきました。AOPはまだほとんど知られておらず、コンピューティング業界への影響は基本的にありません。その答えは、AOPがオブジェクト指向のキラーではないことは明らかです。


1

既存のAOPシステムをいくつか見てください。それらは、何らかのコードが何らかの形式で記述されているかどうかに依存します。たとえば、Spring AOPは、クラスでメソッドが定義されていることに依存しています。Castle Windsorは、オブジェクト指向言語であるC#でそれをサポートしています。

理論的にはOOPから構造化プログラミングに切り替えてもAOPを維持できますが、実際にはそれは困難です。何かをサブクラス化し、適切なbefore / afterフィルターを呼び出すために関連するメソッドをオーバーライドし、依存性注入のプロセスでそれを渡すのは簡単です。

静的メソッド呼び出しを書き換えて、ユーザー定義のフィルターを呼び出すように設計されたトランポリンメソッドにルーティングするのに比べると、かなり大変です。

一般的な実装の観点から、AOPにはOOPが必要です。


0

OOPは確かに特効薬ではありませんが、AOPについても同じことが言えます。コンポーネントベースのデザインをサポートしますが、より壮大なスキームでは、コンポーネントは新しいオブジェクトであり、コンポーネントインターフェイスは基本的にトランザクションのリストであり、真のOOPではありません。

さらにAOPとコンポーネントベースのデザインが貧血データモデルをサポートしています。

http://martinfowler.com/bliki/AnemicDomainModel.html

(私は上記の記事が古いが、驚くほど関連性があることを知っています)

要するに、AOPシステムは今も存続しているということですが、完璧とは言えません。完璧なシステムはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.