フレームワークという言葉をよく聞きます。
使っている人は「プログラムを書くときに使うやつ」「こんな感じのやつ」的に理解していると思いますが、少し高度な要求にこたえようとした場合、仕組みを理解しておく必要があります。
継承という考え方
オブジェクト思考言語では継承という機能が当たり前に存在しますが、構造化思考言語ではありませんでした。
構造化思考言語では、一つのプログラムを書く時には基本的に一つのメソッド(関数)を使用して記述します。
ただ、複数の似たような機能を持つプログラムを書く時には、同じ機能を外だしして共通メソッドとして記載し、それをそれぞれのプログラムが呼び出すことで高品質・低コストを実現していました。
しかし、そのような共通機能がたくさんできてくると、それぞれのプログラムで実装することがほとんどなくなってしまい、ほとんどのプログラムが共通処理を呼び出すための処理ばかりになってしまいます。
そこで、テンプレートのように決まった処理を書いたプログラムを用意し、それを継承して実装することで共通処理の記述を省いてしまおうと考えたのが継承という機能です。
最近のWebアプリケーションなどはサーブレットとして動作していますが、サーブレットにはパラメータの取得、変数に代入、セッション情報の取得やチェック、認証チェック、不正アクセスの排除など、本来の機能ではない日機能要件の実装が必須となっています。
これらの機能を全てのリクエスト処理で実装すると膨大なプログラムを記述することになってしまいます。
そのため、これらの機能を全て親クラスで実装し、それを継承することでそれぞれの処理は機能要件の実装に集中することができます。
最近のフレームワーク
一般的なフレームワークはWebアプリケーションなど用途を特定したものが多くあります。
それらはあくまでもアプリケーションを実装するうえで必要な機能を提供するもので、便利な機能や特殊なユーザ要件には対応できません。
そこで、開発プロジェクトではこれらのフレームワークを一部追加・修正してユーザビリティを向上させたり、実装工数を削減したりするのが一般的です。
例えば、Webアプリケーションフレームワークに簡単にマテリアルデザインの画面ができるCSSフレームワークを組み合わせたり、データベースアクセスを簡単に行えるDAOを組み合わせたりして、その会社、そのプロジェクトにあったフレームワークを作成します。
一般的にはアーキテクトの領域の作業となりますが、規模の小さいプロジェクトでは専用の要員を確保することができないので、経験が多い開発者が担当することも多いようです。
フレームワークの目的は、構造化思考言語時代の高品質・低コストと何ら変わっていません。
技術者の中にはオブジェクト指向の構造にこだわるあまり、実装工数が増加やユーザビリティ低下を無視してしまう人もいますが、フレームワークの作業を行うときには本来の目的を見失わないようにしましょう。