3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unity公式が公開しているプログラミングパターンを読み取ってみた!~その2. OpenClosed(オープン・クローズドの原則)~

Posted at

はじめに

Unity公式がプログラミングパターンのデモを説明書と共に全12種公開していたので、1つずつ読み取っていきたいと思います!
英語の説明書でしたので間違った解釈をしているかもしれませんが、ご了承下さい!
最初の5種は、SOLID原則に沿ったデモとなっており、コードのみが公開されています。
残り7種は、Scene付きのデモが入っていますので、ZIPファイルをダウンロードして試してみてください。
今回は、2つ目のOpenClosed(オープン・クローズドの原則)についてです。

環境

OS : Windows10
Unity バージョン : 2021.3.8f1

OpenClosed(オープン・クローズドの原則)とは

OpenClosed(オープン・クローズドの原則)は、クラスは拡張に対してはオープンでなければならないが、変更に対してはクローズでなければならないというものです。
要するに、機能拡張はいくらでもできるようにして、機能そのものの修正はできないようにするということです。
デモではよく目にする面積を求めるコードが掲載されていました。

悪いコード例

四角形と円の面積を求めるコードです。

public class AreaCalculator
{
    // 四角形の面積
    public float GetRectangleArea(Rectangle rectangle)
    {
        return rectangle.width * rectangle.height;
    }
    // 円の面積
    public float GetCircleArea(Circle circle)
    {
        return circle.radius * circle.radius * Mathf.PI;
    }
}

public class Rectangle
{
    public float width;
    public float height;
}

public class Circle
{
    public float radius;
}

これで十分に機能しますが、台形や平行四辺形の面積を求めたい時、更に新しいメソッドを作成する必要があります。
オープン・クローズドの原則を守るには、Shapeという基底クラスを作成し、四角形や円のクラスが基底クラスを継承するようにします。

良いコード例

public abstract class Shape
{
    public abstract float CalculateArea();
}
public class Rectangle : Shape
{
    public float Width { get; set; }
    public float Height { get; set; }

    public override float CalculateArea()
    {
        return Width * Height;
    }
}
public class Circle : Shape
{
    public float Radius { get; set; }

    public override float CalculateArea()
    {
        return Radius * Radius * Mathf.PI;
    }
}
public class AreaCalculator
{
    public float GetArea(Shape shape)
    {
        return shape.CalculateArea();
    }
}

これでAreaCalculatorクラスは、任意の形状の面積を取得できるようになりました。
変更の際はAreaCalculatorクラスに手を加える必要はなく、台形や平行四辺形の面積を求める機能拡張もShapeを継承するだけでよくなります。
つまり、面積を求める機能に修正を加えることなく、それぞれの形ごとにバグを見つけ出すことができます。
オープン・クローズドの原則を守ると長期的に新しいコードを追加することがより簡単になります。

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?