otakumesi / record_of_reading

読書記録です。
0 stars 0 forks source link

CodeComplete #3

Open otakumesi opened 8 years ago

otakumesi commented 8 years ago
otakumesi commented 7 years ago

クラス = ADT+ 継承 + ポリモーフィズム クラスが持つADTは一つ

otakumesi commented 7 years ago

派生クラスが基底クラスのルーチンを全て呼び出せなければ、継承ではなく包含で実装すべき

otakumesi commented 7 years ago

かつ、そのルーチンから返される返り値は意味的に同じものでなければならない

otakumesi commented 7 years ago

抽象化の基準は、ルーチンを上位に移動した時に上位の抽象化がうまくいかなくなる場合

otakumesi commented 7 years ago

将来の拡張に備えるのだとしたら、できるだけ継承を利用しないこと

otakumesi commented 7 years ago

制御の一元化≒情報隠蔽

otakumesi commented 7 years ago

振る舞いのないデータだけのクラス→他のクラスに属するデータの可能性 データがなく振る舞いだけ→他のクラスに属する振る舞いの可能性(個人的にモジュールやインターフェースにしてmixinが良い?)

otakumesi commented 7 years ago

■ルーチン 引数は入力、変更、出力の順に並べる

otakumesi commented 7 years ago

堅牢性 vs 正当性の中で非機能要件を見て見極める

otakumesi commented 7 years ago

アーキテクチャのガイドラインがシステムコールのエラーをチェックしないと書いていない限りは、システムコールのたびにエラーコードのチェックをすべき

otakumesi commented 7 years ago

例外はカプセル化を破壊する そのため、本当に例外的状況、すなわち絶対に発生してはならないイベントでのみ使用する それ以外はローカルで処理する ・・・アサーションの使用は絶対に発生すべきではない条件の文書化に限定する。

otakumesi commented 7 years ago

また、例外を投げる場合は抽象化レベル(何をやるのかに対するどんな例外なのかの説明になるような名前をつける)

otakumesi commented 7 years ago

防御雨滴プログラミングはソフトウェアの複雑さを増す危険性もあり、防御的プログラミングのコードにもエラーへの免疫はない。 そのため、どこで防御的になるのかを考える必要がある。

otakumesi commented 7 years ago

入力を受け取る関数と実際に処理を行う関数の間にバリケードを作る関数を設けてエラーによる被害を食い止める。 →エラー処理に配慮する量を減らす。 例:バリデーター

otakumesi commented 7 years ago

バッファオーバーフロー、SQLコマンド、HTML、整数の桁あふれ、悪質な入力に気をつける。

otakumesi commented 7 years ago

PPP…ルーチンの設計手法 →ロジックを言語や環境の文脈を一切入れずに書く ドメインの抽象化レベルに合わせて処理を書く →繰り返し書いて設計を詰める →それらをコードを書くときのコメントにする

otakumesi commented 7 years ago

一般に擬似コードを単純なものになるまで繰り返し検討をする

otakumesi commented 7 years ago

ルーチンが解決する問題を、ルーチンを作成できるくらいに詳細に説明する ルーチンの隠蔽をする情報、入出力、事前条件、事後条件 を準備する

otakumesi commented 7 years ago

変数の寿命はできるだけ短くする

otakumesi commented 7 years ago

デバッグコードやアサーションを利用して、変数に妥当な値が含まれてることを確認する

otakumesi commented 7 years ago

変数に複数の意味を持たせてはいけない。(ハイブリッド結合) 複数の型の意味を持ってしまってわかりづらくなる

otakumesi commented 7 years ago

覚えやすい名前は一般的に解決策ではなく問題を表現している 名前は方法(how)ではなくモノ(what)が良い 問題そのものを表す問題志向で名付けるのが良い

otakumesi commented 7 years ago

避けるべき名前

誤解を招きやすい名前 に通った意味を持つ複数の名前 1、2文字異なるだけの複数の名前 同じような発音 数字を使用する名前 短くするために意図的に綴りを変えた名前 英語で綴りを間違えやすい名前 標準ライブラリのルーチン名や既定の変数名と競合する名前 完全に独断的な名前 読みにくい文字

otakumesi commented 7 years ago

グローバル変数はできる限り使うな その上でどうしても使わなきゃならないときはアクセス用の関数を作って包み込め、直接触るな

グローバル変数の可能性が出てきたとき、それが構造体やクラスで包み込めないかを考える