1.はじめに
近年、フレームワークの重要性はますます増し、Javaの急激な普及によって、AWTやJavaBeansのような新しいフレームワークが広まりつつある。ユーザインターフェースや分散処理のような技術分野で、多くのフレームワークが商品化され、一方、特定のアプリケーションのためのフレームワークは、その大部分が各企業で非公開の財産として管理されている。
2.フレームワークとは
2.1定義
「抽象クラスの集合とそのインスタンス間の相互作用によって表現された、システム全体または一部の再利用可能な設計」
抽象クラスとは、インスタンスが存在せず、スーパークラスとしてだけ使われるクラスである。
2.2概要
フレームワークとは、オブジェクト指向に基づいた再利用技術の1つであり、それを使うことで、対象となるシステムの抽象的なモデル、直面する問題を解決するための設計、そしてその設計に基づく大部分の実装が再利用可能になるものである。 直訳的には、「枠組み」「骨組み」といった意味で、文脈によってさまざまな内容を指し示す便利な言葉である。また、IT関連で使われる場合には、あるサービスの土台の部分を構成するソフトウェアシステムやアーキテクチャのことを言うことが多い。単体のソフトウェアが提供するものではなく、複数のソフトウェアシステムが複合して構成するようなある程度大規模なものの場合にフレームワークと呼ぶのが一般的である。
3.オブジェクト指向
ソフトウェア開発の考え方のひとつ。データ定義と処理内容を1つのオブジェクトとして収め、ソフトウェアはオブジェクトに処理ルーチンを呼び起こすメッセージを送る形で記述する。記述内容の重複を避けたり、少しだけ機能の異なるオブジェクトを効率よく作成するために、記述を階層化した継承機能がある。ソフトウェアの構造がわかりやすくなり、共同作業やプログラムの再利用が容易なため大規模なソフトウェア開発では主流の考え方となっている。 オブジェクト指向プログラミング(OOP)を使う主な理由の1つは再利用性にある。オブジェクトは手続きに比べて優れた再利用単位になり、データ構造とそれを使うすべての手続きをカプセル化する。そこであるデータ構造を使いたいときに、それを使うための手続きもカプセル化されているため非常に効率的である。
4.再利用の目的
フレームワークで再利用を行うことにはいくつもの目的があるが、その中でも重要なのは、開発に必要な時間と費用を削減することである。多くの企業では製品を出荷すまでの時間を短縮する目的でフレームワークを作成している。また、フレームワークを用いた開発を行っていると、フレームワークがもたらす統一性も費用、時間の削減とともに重要であることが解る。同じグラフィカルユーザインタフェース(GUI)のフレームワークを使ったアプリケーションは、見かけや操作がよく似たものになる。またネットワークインターフェースを再利用できれば、すべてのアプリケーションが同じプロトコルになる。さらに、アプリケーションの統一性によって、保守を行うプログラマが新しい学習をすることなく、あるアプリケーションから次のアプリケーションに移れることで、保守に必要な費用を削減できることになる。以上のことが主な目的として挙げられる。
5.フレームワークの特徴
5.1利点
● 経験の浅い開発者の支援
フレームワークを用いた場合には、そのフレームワークで規定された手順にしたがって開発を進めることになる。従って、経験の浅い開発者でも、効率よく開発が進められることが期待できる。
● 開発工数の削減
フレームワークを用いた場合には、フレームワークを用いない場合と比べ、少なくとも開発の絶対量を減らすことができる。
5.2課題
● Development Effort(開発能力)
複雑なソフトウェアを開発するのが難しいのと同様に、品質が高く、拡張性を持ち、再利用可能なフレームワークを開発することは非常に困難であり、開発努力を怠ってはいけない。
● Learning Curve(学習曲線)
フレームワークを効率的に用いるためには、その利用法の習得に膨大な時間を費やさなければならないことがある。例えば、フレームワークの実践的な使用法を学ぶために、多くのトレーニングを受ける必要がある。そうした学習に費やした投資は、複数のプロジェクトをこなして初めて元がとれるものであり、場合によっては十分な効果が得られないケースも起こりうる。
● Integratability(統合性)
複数のフレームワークを統合してアプリケーションを開発することが困難な場合がある。通常、アプリケーションを開発する際に、複数のフレームワークやクラス・ライブラリを用いることは珍しくない。しかし、フレームワークの中には、それ自体の拡張は可能なものの、他のフレームワークと連携に関しては全く考慮されないものがある。
● Maintainability(保守性)
アプリケーションに対する要求は変化するものだが、それに合わせてフレームワークに対する変更要求が発生する場合がある。逆に、フレームワークの変更の合わせて、それを利用しているアプリケーション側でも変更を行わなくてはならない場合がある。
● Efficiency(効率性)
フレームワークを用いることによってシステムの拡張性が得られるが、その代償として、処理を抽象化した中間層が導入されることが多い。これにより、使用メモリ・サイズやパフォーマンスに関する問題が引き起こされる可能性がある。
参考文献
パターンとフレームワーク 1999年6月20日 著 Ralph E..Johnson 発行 共立出版株式会社
オブジェクトの広場