コードの再利用は非常に良い考えです。 素晴らしいものではありません。
私は約30年間のソフトウェアエンジニアリングから「再利用」しようとする視点を持っています。
70年代前半に構築した1つのOSの設計を、70年代後半に構築した別のOSに再利用したことを発見した後、80年代に研究トピックとして「コード再利用」の調査を開始しました。
コードの再利用の良い点は、神に誠実な既存のコードを時々再利用できることです。しかし、世界はコードでいっぱいです。欲しいものをどうやって見つけることができますか?これが私がリユースの呪いと呼ぶものです:
私はサンタクロースです(オープンソースも可)。10億個のソフトウェアコンポーネントが入っています。それらのいずれかを使用できます。
幸運を選ぶ。
再利用の問題をうまく解決するには:
- 再利用者は何らかの方法で必要なものを指定する必要があります(機能、パフォーマンス、ターゲット言語、環境の仮定など)
- これらの潜在的な基準によってさまざまな方法でインデックス付けされた「再利用可能な」コードのライブラリが必要です
- 候補要素を選択するための何らかのメカニズムが存在する必要があります(10億個の要素では、それらをすべて個人的に見ることはできません)
- 選択した候補者が仕様からどれだけ離れているかを特徴付ける方法が必要です
- 再利用者が選択した再利用可能なコードを変更できるようにするための通常のプロセスが存在する必要があります(OOPの最大の貢献は、既存のコンポーネント/オブジェクトをそのスロットをオーバーライドして編集できることです。OOPは他のヘルプを提供しません)。
- これはすべて、単に再コーディングするよりも明らかに安くなければなりません
長年にわたって発見されてきたほとんどのことは、コードを再利用可能にするために、その目的のために設計する必要があるか、暗黙的な仮定が多すぎることです。最も成功したコード再利用ライブラリは、実際にはかなり小さいものです。おそらく、ライブラリとフレームワークは「再利用可能な」コードであり、非常に成功しています。JavaとC#が成功するのは、かなり優れたコンピューター言語であるためではなく、適切に設計され、実装され、文書化された巨大なライブラリーがあるためです。しかし、人々はライブラリのソースコードを見ません。よく文書化されたAPIを呼び出すだけです(一般的に使用できるように設計されています)。
コードの再利用が行われていない(OOPでもない)ことは、システムをコーディングする能力を大幅に向上させることです。
主な欠陥は、コードに組み込まれた仮定が多すぎるため、あらゆる種類のコードの再利用が根本的に制限されることだと思います。コードを小さくすれば、仮定を最小限に抑えることができますが、ゼロから構築するコストはそれほど大きくなく、再利用による効果はありません。コードチャンクを巨大にすると、新しいコンテキストではほとんど役に立たなくなります。ガリバーのように、それらは数百万の小さなひもでビーチに結び付けられており、すべてをカットする余裕はありません。
取り組むべきことは、知識を再利用してコードを構築することです。これを行うことができれば、その知識を適用して必要なコードを作成し、現在の一連の仮定を処理できます。
これを行うには、ソフトウェアコンポーネントを特徴付けるのと同じ仕様機能が必要です(まだ何をしたいかを言わなければなりません!)。ただし、この「構築」知識を仕様に適用して、必要なコードを生成します。
コミュニティとして、私たちはまだこれが得意ではありません。しかし、人々は常にそれを行います。なぜ自動化できないのですか?多くの研究があり、これは多くの状況でそれができることを示しています。
これに必要な重要な機械の1つは、「コンポーネントの説明」(これらは単なる正式なドキュメントであり、プログラミング言語のように解析できる)を受け入れ、プログラム変換を適用するための機械ツールです。
コンパイラはすでにこれを行っています:-}そして、彼らは取り組む問題のクラスが本当に得意です。
コード生成を伴うUMLモデルは、これを行う1つの試みです。あまり良い試みではありません。ほとんどのUMLモデルで言われていることは、「このようなデータがあります」ということです。機能が省略されている場合、実際のプログラムを生成するのはかなり困難です。
DMSと呼ばれるツールである実用的なプログラム変換システムを構築しようとしています。プログラム変換を、コードを生成するための抽象的な仕様ではなく、それをクリーンアップするためのレガシーコードに適用することにより、かなり注意散漫になりました。(これらは要約でも同じ問題です!)。(そのようなツールを構築するには多くの時間がかかります;私はこれを15年間やってきましたが、その間にあなたは食べなければなりません)。
ただし、DMSには、上記で説明した2つの重要な特性があります。任意の形式仕様を処理する機能と、「コード生成知識」を変換としてキャプチャし、要求に応じて適用する機能です。そして驚くべきことに、いくつかの特別な場合、仕様からかなり興味深いコードを生成します。DMSは、主に実装を生成するためにそれ自体を使用して構築されます。これにより、少なくとも(知識)再利用の約束のいくつか、つまり非常に大きな生産性の向上が達成されました。私は約7人の技術者のチームを持っています。おそらく1〜2 MSLOCのDMSの「仕様」を作成しましたが、10MSLOCの生成コードがあります。
要約: 生成知識の再利用はコードの再利用ではなく勝ちです。