関心の分離

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

関心の分離(かんしんのぶんり、英語: separation of concerns、SoC)とは、ソフトウェア工学において、プログラムを機能面において可能な限り重複がない、複数の機構に明確に分割することをいう。ここでいう「関心(関心事)」とは、プログラムのある機能や振る舞い、目的のことである。

関心の分離は目新しいものではなく、「大きな問題を小さな部分問題に分解することができれば解決が容易になる」という昔からある考え方である。特に、大問題の解法が部分問題の解法の組み合わせとして得られる場合にはそれが成り立つ。[1]

あらゆるプログラミングパラダイムは開発者が関心の分離を実践することを手助けするものである。例えばオブジェクト指向プログラミングはデータに関する関心をクラスオブジェクトに分離し、MVCのようなデザインパターンはデータとその表現を分離する。サービス指向設計は関心をサービスに分離する。手続き型プログラミングでは手続きに、アスペクト指向プログラミングではアスペクトに分離する。

関心の分離の実現には、モジュール性カプセル化が重要となる。

関心の分離は都市計画建築情報デザインなど、他の多くの工学分野でも重要な設計思想である。その目的は、ある機能をその他の機能から独立して最適化できる、ある機能の故障が他の機能の障害とならないようなシステムを設計すること、そして複雑で依存関係が入り乱れたシステムの理解・設計・運用を容易にすることである。よく知られた例として、セントラルヒーティングがある。

歴史[編集]

「関心の分離」を意味する英語「separation of concerns」は、エドガー・W・ダイクストラ1974年に論文「On the role of scientific thought」(科学思想の役割)[1]で初めて使用したとされている。

その15年後には、「関心の分離」という思想が受け入れられ始めていたことが明らかである。1989年に Chris Reade が「Elements of Functional Programming」(関数型プログラミングの要素)というタイトルの書籍で関心の分離を説明している。

[編集]

関心の分離の例として構造と見た目の分離(英:separation of presentation and content)がある。XHTMLCSSはそれを意図した言語である。XHTMLの要素が文書の抽象的な構造を定義し、CSSの命令がウェブブラウザに解釈され、それらの要素が視覚的に表示される。現実には、XHTMLは表示結果から完全に独立しているわけではなく、意図する表示を得るためにはXHTMLを変更しなければならないこともある。これは、既存のブラウザの実装では構造と見た目が完全には分離されていないこと、CSSに文書構造の再構成の能力がないこと、などが関係する。

アスペクト指向プログラミングではソフトウェアの各所に横断する、二次的な関心を解決することができる。二次的な関心とは、例えばセキュリティログのことである。これらはほとんどのソフトウェアに必要な機能であるが、第一の関心はビジネスロジックである。

関連項目[編集]

参考資料[編集]

脚注[編集]

  1. ^ http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD447.html