2017-01-20 7 views
0

私は、「Separation of Concerns」という用語に精通しています。これは、あなたのコードでかなり多くのことを提唱しています。OOPで対処されている問題の種類

しかし、私がAOPについて読んでいたときは、クロスカッティングに関する懸念を分けることができます。

私の質問は、AOPがクロスカッティングに関する懸案事項を分ける場合、OOPはどのような懸念事項を分けていますか?

答えて

2

OOPは、実際のシナリオでは、直接の関連付けによって相互に結合されるという懸念を分けています。

例えば、会社には従業員が多く、従業員には給与があります。

AOPは関係のオブジェクトへのオブジェクトを越えて行く直接団体が、より多くのような歩哨はない懸念があります。

AOPの典型的なサンプルシナリオは、ログです。ロギングはまだロガーと呼ばれるオブジェクトで表されますが、実際にはロギングアクションは、通常のフローをフィルタリングし、バックグラウンドでフローを傍受するオブザーバのようなものです。

ロギングはAOPなしで実装できますが、実際には、特定のアクションの目的とは何の関係もないコードで汚れてしまいます。ユーザー登録はロギングと関係ありません。

したがって、AOPでは、コードを簡単に保ちながら、いくつかの要件を満たしていても、心配する必要はありません。

0

短い答え:OOPは抽象度を分離します。うまく設計されたOOPコードは、モジュール全体にわたって一貫した抽象概念を使用します。

長い答え:OOPは4 '柱' の上に構築されています:

  • データ抽象化
  • カプセル化
  • 継承
  • ポリモーフィズム

これらは、プログラマが簡単にレイヤーを構築することを可能にしますより高い抽象化を提供するために、より低い抽象化を使用する各レベル。

たとえば、フレーム、メッセージ、ルーティング、およびセッション(抽象化)からTCP/IPスタックを構築できます。セッションを使用する場合、フレームがどのように再送信され、衝突検出(カプセル化)されているかを知る必要はありません。また、IP4またはIP6(多型性)を使用しているかどうかを知らずにメッセージを送信することもできます。そして、全てのレベルは、例えば、継承。したがって、これらの4つの柱は、非常にクリーンな抽象レベルを作成できるプログラミング方法を可能にします。しかし、あまりにもしばしば、OOPソフトウェアは抽象レベルがきれいに分離されていない混乱となる。

AOPはOOPを補完します。 OOPは抽象レベルと構造に焦点を当て、AOPは「懸念」に関連する行動に焦点を当てている。それらはコードを見る直交した方法です。

関連する問題