プログラムをオブジェクト指向にするには
プログラムをオブジェクト指向にするには、
- そのプログラムがなにをするか、に加えて、
- それをどこにやらせるか、
が重要になる。
気を付けるのは、他のクラスのプロパティを使って、いろいろ計算しているところ。次の例では、適用期間 (ApplicableTerm) クラスを使うクラスが、ApplicableTerm の Start と End プロパティから期間内かどうかを求めている。
using System; namespace ObjectOrientedBadSample { public class ApplicableTerm { private TimeSpan _start; private TimeSpan _end; public TimeSpan Start { get { return _start; } } public TimeSpan End { get { return _end; } } } public class ApplicableTermUser { public void BadUser(ApplicableTerm term) { TimeSpan someTimePoint = new TimeSpan(); // ある時点 if (term.Start <= someTimePoint && someTimePoint <= term.End) // ======================================================== { // 適用期間内 } } } }
他のクラスのプロパティを使って自分で計算するのではなく、そのプロパティを提供するクラスにやってもらう。
using System; namespace ObjectOrientedBetterSample { public class ApplicableTerm { private TimeSpan _start; private TimeSpan _end; public bool IsIncluded(TimeSpan timePoint) { return _start <= timePoint && timePoint <= _end; } } public class ApplicableTermUser { public void GoodUser(ApplicableTerm term) { TimeSpan someTimePoint = new TimeSpan(); // ある時点 if (term.IsIncluded(someTimePoint)) // ============================== { // 適用期間内 } } } }