損傷 - 欠陥がある 、劣っている。 有害、不十分。
継承
継承は、新しいコードで古いコードを活用する方法です。 プログラマは、このピースを自分自身にコピーして編集することにより、既存の関数またはコードブロックから継承します。 継承コードは、原則として、古いコードではサポートされていなかった機能の助けを借りて、新しいニーズに合わせて具体化されます。 この意味では、古いコードはそのままですが、新しいコードは継承されます。
継承を使用するプログラムは、多数のほぼ同一のコードフラグメントによって識別できますが、それでも小さな違いが含まれています。 継承の別の兆候は、 静的フィールドと見なすことができます。変数とコードブロックはどこでも直接使用されませんが、新しいコードと古いコードの間のリンクとして機能します。
擬似コード継承の例:
function getCustName(custID) { custRec = readFromDB("customer", custID); fullname = custRec[1] + ' ' + custRec[2]; return fullname; } function getCustEmail(custID) { custRec = readFromDB("customer", custID); fullname = custRec[1] + ' ' + custRec[2]; /*************** * 4/15/96 git : email * ***************/ return custRec[17]; }
電子メールサポートがアプリケーションに
getCustName
れたときに、
getCustName
関数は
getCustName
関数から継承さ
getCustName
ました。 この方法でコードを継承すると、プログラムに誤って新しいバグを持ち込むことを防ぎます。
型多型は、継承のタイプの1つです。 その中で、コードを継承すると、ソース変数の型が置き換えられます。
モジュール性
モジュラープログラムは、コメント付きの共通ヘッダーを持つ複数のファイルに分割されます。 通常、モジュールには以下が含まれます。
- 著作権
- 免責事項
- アスタリスク付きの3〜5行
- 変更履歴
- モジュールが本来行うべきことの説明
- アスタリスクを使用してさらに3〜5個
- アスタリスクまたは他の文字で囲まれたスペースと空白行を含む大きなブロック。すべての関数の名前、作成者の名前またはイニシャル、および執筆日がリストされます。
- コード
彼らは通常、 接続性を減らして電力を改良するために合理的な制限の中でモジュールのサイズを保つのを試みます。 モジュールが大きくなりすぎると、複数の部分に分割され、各著作権、免責事項などにコピーされます。 コメントは常に恐れることなく継承できるため、元のコメントはすべてレンダリングされたモジュールに転送することをお勧めします。
コンポーネントとライブラリ
欠陥のあるプログラミングでは、プラグインとコンポーネントが広く使用されています-インターネットや書籍にあるコードの断片。 グーグルを使用すると、経験豊富なプログラマーは、ほとんどすべてのコンポーネントが事前に記述されているため、多くの時間を節約できます。 それらの中で最高のものはブラックボックスです:プログラマはコンポーネントがどのように機能するかを知る必要も考える必要もありません。 多くの大規模なアプリケーションは、ネットワーク上にある他のアプリケーションやコンポーネントからの継承を使用して記述されています。
カプセル化
カプセル化の本質は、データをコードから分離することです。 このアプローチはデータ非表示とも呼ばれますが、データは実際には非表示ではなく、追加のコード層に配置されます。 たとえば、データベースクエリがコードのいたるところにある場合、これは悪い習慣です。 損傷指向のアプローチでは、これらの関数のラッパーを作成して、データベースをカプセル化します。 上記の
getCustName
メソッドでは、データベースに直接アクセスするのではなく、1つのレコードを読み取る特別なラッパーを介してアクセスします。 これらの両方のメソッド(およびそれらに類似した他の多くのメソッド)は、クライアントのレコードに必要なデータが含まれている場所を「認識」します。 データベースからレコードを読み取る方法は、他のモジュールに
れています。
一部のプログラミング言語では、フィールドに
private
、
public
または
protected
修飾子を付けることができます。 これは、欠陥のあるアプローチとは関係ありません。 モジュールの作成者は、将来、必要な機能を実装するために自分のモジュールのどの内部変数が必要になるのかを知ることはできません! したがって、すべてのフィールドを公開し、変数をグローバルにし、外部コードが何に触れ、何に触れないかを自分で決定できるようにする必要があります。
多型
欠陥のあるアプローチを研究している間、ポリモーフィズムの概念は多くのプログラマーに問題を引き起こします。 ただし、アイデアはシンプルで実装が簡単です。 ポリモーフィックコードは、出力の形式または内容が入力によって異なるコードです。
たとえば、上記の関数は、継承とポリモーフィズムを使用して、単一のポリモーフィック関数に書き換えることができます。
function getCustData(custId, what) { if (what == 'name') { custRec = readFromDB("customer", custId); fullname = custRec[1] + ' ' + custRec[2]; return fullname; } else if (what == 'email') { custRec = readFromDB("customer", custId); fullname = custRec[1] + ' ' + custRec[2]; /*************** * 4/15/96 git : email * ***************/ return custRec[17]; } /* ... . */ }
多態性は、 非決定論的なチューリング有限状態マシンにも関連付けられています。これは、コンピューターサイエンスのコースから思い出すことができます。
短所が含まれています
これは、優れた欠陥のあるデザインの繊細さです。 初心者プログラマーは多くの場合、継承(「is」モデル)を乱用しますが、経験の出現により、多くの場所で「contains」関係がより適切であることが明らかになりました。 上記の例では、各クライアントに関する情報には名前が含まれていますが、 custRec はデータベース内のレコードです。
仮想クラスと関数
仮想クラスまたは関数は、プログラムが将来必要とするが、まだ書かれていないコードです。 通常、これは最終コードのベースとなる基本クラスを介して実装されます。
function calcSalesTax(price, isTaxable, state) { /**************************************** * * TO DO: * * * - , * * ****************************************/ /** 02/07/99 git -- **/ return price * (7.25 / 100.0); }
壊れやすい基本クラスは、プロジェクト内に長い間存在していたクラスまたはモジュールであり、その変更はアプリケーション全体を破壊します。
過負荷
オーバーロードは、1つのモジュールまたはコードブロックが複数のタスクを実行するアプローチです。 たとえば、ユーザー名、メールアドレス、州の付加価値税を返す関数。 オーバーロードされた関数はメソッドディスパッチを節約します。これは、多くの場合、他のアプローチを使用して記述された低速実行コードの原因です。
ドキュメント
当局は、読みやすいようにコードを書く必要があると言っています。 したがって、ドキュメントは最も読みにくい方法で記述する必要があります。 それは新しいモジュールごとに維持され、戦闘コードに変更が加えられたときに更新される必要があります-少なくとも、または特別なことは特にない場合。
文書を作成する絶好の機会は、誰かが雇用の終了を申請するときです。 従業員が解決するはずの2週間で、彼が開発したすべてのコードのドキュメントを書くのは良いことです。
操作のメカニズムを宣言するコメントでコードを詰まらせると、注意がそらされ、コンパイルが遅くなります。 したがって、欠陥のあるプログラミングの「ベストプラクティス」に従うプログラマーは、ワークフローアカウンティングシステムにドキュメントを保持して、プログラマーが誤ってそれを消去できないようにします。
バージョン管理
もちろん、これはプログラミングの実践ではありませんが、欠陥のあるアプローチの信者はそれを適用します。 1人の人がプロジェクトに取り組んでいる場合でも、以前のバージョンと変更履歴を手元に置いておくことが重要です。 経験豊富な欠陥指向のプログラマーは、次のルールを順守します。
- 常にファイルヘッダーにイニシャルと最終変更日を追加します
- ファイルに触れて、変更をロールバックするのが難しいことを理解している場合、拡張子
.bak
付けてコピーを保存します。 - コードのコピーをいくつか保存し、ファイル名のイニシャルと変更日を指定します。 例:
custdata_git20040321.bak
- 変更履歴の追跡がより簡単で便利になるように、バックアップは常に元のファイルと同じフォルダーに保存してください。
おわりに
おそらく、多くの企業がいくつかの(またはすべての)欠陥のあるプログラミング慣行に従っていることに気付くでしょう。 柔軟な方法や極端な方法論などの新しい流行が行き交いますが、欠陥のあるプログラミングは時の試練をパスしました。 マネージャーは常に欠陥のあるアプローチを認識しており、このスタイルで書かれたプロジェクトで作業できることを期待しています。
翻訳者から:この記事は2007年にも公開されましたが、関連性は失われていません。 「 サポートされていないソフトウェアを開発する方法 」という記事のリンクを教えてくれたvovochkinに感謝します 。