2014年8月11日月曜日

モダンC言語プログラミング

モダンC言語プログラミングを読んで、アウトップとしないと忘れそうなのでブログに書く

継承について
C言語で継承の機能を疑似的に使用することが出来る。これは構造体の先頭に宣言した変数はその内包されている構造体に変換することが出来る機能を利用している。
例えば、
struct Data {
    int common;
    int unique;
};
という構造体が会ったときに、commonのアドレスを知っていれば、そのアドレスを利用して、Dataのアドレスと認識させることが出来るということ。
これにより、先頭に宣言した変数に共用で使用するデータを定義し、2番目以降にそれぞれの処理に必要なデータを定義して、処理することが可能になる。これはC#のインターフェース機能とほぼ同等のことが出来ることを意味している。(ここの説明が難しい。。。)
この手法を利用して、様々なデザインパターンを利用することが可能になる。


デザインパターンについて
以下の5つのパターンがある
  1. Stateパターン
  2. テンプレートパターン
  3. オブザーバーパターン
  4. チェインオブレスポンシビリティパターン
  5. ビジターパターン
それぞれを簡単に説明すると
  1. Stateパターン → スイッチ文の代わりに状態のクラス₍構造体₎を使う。そうすると、状態遷移表がそのままプログラミング出来るので、バグが少ないし、実装しやすいし、網羅性も大丈夫だよ。というすごい組み込みで便利なパターン
  2. テンプレートパターン → メモリ確保と解放のようなセットで必要な処理を、必ず実施させる。コールバックを使った機能で、どんな時でも、メモリの開放を忘れないので、不要で不毛で無駄に時間のかかるバグを追いかけなくて済む涙が出るくらいありがたいパターン。ファイルのオープン、クローズ等何にでも使える。
  3. オブザーバーパターン →エラー処理などを呼び出すクラスと呼び出されるクラスで依存関係を分離出来る。コールバックを使っていて、呼び出されるクラスを不要に変更する必要を失くし、ファイルの肥大化を抑えるパターン
  4. チェインオブレスポンシビリティパターン→変数チェックなどの処理が複数ある場合に、呼び出すクラス側で簡単に順番を変えられるようにするパターン。配列のリスト構造に似ている。変数チェック等と同じ形式の関数で変数チェックをオーバーラップする感じのパターン(説明しにくいですね。。。)
  5. ビジターパターン → 二つの機能を一つのクラス₍構造体₎に持たせるときに、お互いに疎結合な状態にさせることが出来るパターン。それにより、拡張性、バグが減る、ファイルの肥大化を防ぐ、ソースが読みやすくなる等の様々なメリットが生まれる。コード量は少し増えそう。

まとめ
上記の機能を利用することで、様々なバグを減らし、無駄なデバッグ時間を減らし、ファイルの肥大化を防ぐことで、コードの可読性を上げることが出来る。デザインパターン最高!

以上が、自分なりにまとめてみた結果。忘れたころにまず、これを読み返そう♪

参考文献
本 モダンC言語プログラミング

0 件のコメント:

コメントを投稿