オブジェクト指向
なぜシリーズ

備忘録:「オブジェクト指向でなぜつくるのか」 4章後半

後半戦です。
次にまとめるのは

  • パッケージ
  • 例外
  • ガベージコレクション

です。こちらはそんなに長くないです。
さっそくいきましょう。

パッケージ

すごく簡単に言うと、「クラスをまとめるもの」です。
クラスはメソッドや変数をまとめる「本」、パッケージはそれをさらにまとめる「棚」みたいなイメージでした。

変数、クラス名の衝突を避けるために
「国名」.「組織の種類」.「組織名」とするのが基本的な決まりごとだとか。

例外

ただのエラーコードではなく、特別なエラーを示す仕組みですね。
そもそもこれはサブルーチンを再利用する際に必要になったものです。
例えば、
サブルーチンA→サブルーチンB→サブルーチンCの関係で参照をしているとします。
もしサブルーチンCでエラーが起こったとき、例外を使わない場合は何らかのエラーコードをサブルーチンBに返すことになります。
そしてサブルーチンBはエラーが返ってきたので、また別のエラーコードをサブルーチンAに返します。
この連鎖はエラーの後処理をする根元のサブルーチンにたどりつくまで続きます。
さらに根元に処理を書き忘れているとデバッグが非常に面倒なことになります。

こうした冗長性を解決するのが例外になります。

例外処理と聞いて真っ先に思いつくのはtry-catchでしょうか。

public static string ReadAllText(string filePath)
{
    System.IO.StreamReader sr;

    try
    {
        //ファイルを開く
        sr = System.IO.File.OpenText(filePath);
    }
    catch (System.IO.FileNotFoundException ex)
    {
        //FileNotFoundExceptionをキャッチした時
        System.Console.WriteLine("ファイルが見つかりませんでした。");
        System.Console.WriteLine(ex.Message);
        return null;
    }

    //内容をすべて読み込む
    string s = sr.ReadToEnd();
    //ファイルを閉じる
    sr.Close();

    //結果を返す
    return s;
}

引用:https://dobon.net/vb/dotnet/beginner/exceptionhandling.html

こちらはFileNotFoundExceptionという例外を発見した時、catch{}の中に書いてある処理を行います。
これにより、例外処理の連鎖を最小限に抑えることができます。
ためしにページアプリケーションを作り、ブレークポイントでエラーを追って見ると、どこかで例外に当たると思います。
でもあまり処理を意識して書いてませんよね?
そう言う具合にプログラマに楽をさせる仕組みが例外です。
NullPointerExceptionを嫌わないであげてください。

ガベージコレクション

「いらなくなったオブジェクトを捨てる」仕組みです。
C言語などでは「メモリの確保」、「メモリの解放」を明示的にコードでやる必要がありました。
その手間を排除するのがガベージコレクションです。
詳しい説明は次の章で行います。

まとめ

制約がふえることで大変なイメージを持つかと思いますが、
これらの便利な仕組みを使いこなせるかはプログラマの腕にかかっています。
僕も頑張ります、、、