Riverside Learning LABO(Skill/Idea/Code)

よりよいシステムのため工学系と人間系の学習下書きメモ

プログラミング作法4

第4章 インターフェイス


設計において解決すべき課題。これらが決まったら仕様としてまとめる。
インターフェイス (提供するアクセスやサービス)
・情報の隠蔽 (可視、プライベート)
・リソース管理 (割り当て、解放)
・エラー処理 (検出、報告、報告手段、復旧措置)
・面倒な入力解析プログラムで入力例を付ける
・一度しのぎのはずのプログラムが、その後も使われることは多い
・原則としてライブラリルーチンはエラー発生時に死んではならない


よいインタフェースを作るための留意点。優れたインターフェイスはシンプルで普遍的で整然としており、予測可能で堅牢、更には変化に対応できている。実装が隠蔽されポインタからしかアクセスできないようなもののことを不透過型(opaque type)という。
・実装の詳細を隠蔽する
・直交性のあるプリミティブなセットを選択する
・ユーザに内緒で何かをしない (インタフェースの拡大を含む)
・同じことはどこでも同じように実行する (一貫性と規則性)


リソース管理での要点。ポイントは解放を割り当てと同じレイヤで行う点。マルチスレッドなどではプログラムが再入可能(reentrant)である必要がある。
・初期化/生成
・状態管理
・共有とコピー
・後始末/破棄


strtok は処理の目印として NULL をデータに書き込むので多重呼び出しができない。(スレッドセーフでない。)
・標準関数のエラー処理までをラッパーとして包んで提供する
・勝手に終了はしないようにする(ログに残すなど)
・エラー検出を低いレベルで行い、処理は高いレベルで行う
(呼び出し側で対処するということ)
・例外は例外的な状況でのみ使う
・エラー情報をユーザには分かりやすく伝える (エラー + 正しい方法)
C/C++ では atexit で正常終了直前の制御を取得できる

NaN (Not a Number : 非数) IEEE 浮動小数点数の返す特殊なエラー値