2017-10-20 log

nc netcatコマンド

telnet 暗号化していないssh

コードコンプリート 第6章 読了

抽象データ型 □プログラムに含まれるクラスをADTとして考え、その見地からインターフェイスを評価したか。

抽象化 □クラスに基本目標があるか。 □クラスに良い名前が付き、その名前がクラスの基本目標を説明しているか。 □クラスのインターフェイスは一貫性のある抽象化を実現しているか。 □クラスのインターフェイスはクラスの使用法を明確に示しているか。 □クラスのインターフェイスは、そのサービスの実装方法について考えなくてもよいほど抽象化されているか。クラスをブラックボックスとして扱うことができるか。 □他のクラスがそのクラスの内部データに干渉する必要がないほど、クラスのサービスの完成度は高いか。 □関係のない情報をクラスの外へ移動したか。 □クラスをコンポーネントのクラスに再分割することを検討し、それをできるだけ細かく分けてみたか。 □クラスを修正するときにクラスのインターフェイスの整合性を維持しているか。

カプセル化 □クラスのメンバへのアクセスを最小限に抑えているか。 □クラスのメンバデータの公開を避けているか。 □プログラミング言語が許可する範囲内で、クラスの実装の詳細を他のクラスから隠ぺいしているか。 □派生クラスを含むクラスのユーザーについて憶測していないか。 □クラスが他のクラスに依存していないか。疎結合か。

継承 □継承を「isa」関係のモデリングにのみ使用しているか。つまり、派生クラスがリスコフの置換原則に準拠しているか。 □クラスの説明文に継承方法を記載しているか。 □派生クラスでオーバーライド不可能なルーチンを「オーバーライド」していないか。 □共通のインターフェイス、データ、振る舞いを継承ツリーのできるだけ上のレベルに移動したか。 □継承ツリーは浅めにしているか。 □基底クラスのすべてのメンバデータをprotectedではなくprivateで宣言しているか。

その他の実装問題 □クラスに含まれているメンバデータの数は約7個またはそれ以下であるか。 □クラスから他のクラスへの直接的または間接的なルーチン呼び出しを最小限に抑えているか。 □クラスが絶対に必要な範囲内で他のクラスと協力しているか。 □すべてのメンバデータをコンストラクタで初期化しているか。 □シャローコピーを作成する明確な理由がない限り、クラスがシャローコピーではなくディープコピーを使用する設計になっているか。

言語固有の問題 □特定のプログラミング言語について、クラスに関連する言語固有の問題を調査したか。

■クラスインターフェイスは一貫性のある抽象化を実現しなければならない。このたった1つの原則に違反しただけで、多くの問題が生じる。 ■クラスインターフェイスは何か(システムインターフェイス、設計上の決断、または実装の詳細)を隠ぺいしなければならない。 ■「isa」関係をモデリングする場合を除き、通常は継承よりも包含の方が望ましい。 ■継承は便利なツールだが、複雑さを増大させる。このことは、ソフトウェアの鉄則である複雑さへの対処を妨げる。 ■クラスは複雑さに対処するための第一のツールである。クラスの目標を達成するために必要なものと同じくらい、クラスの設計にも注意を払うこと。