物流データの持ち方
物流モデルにおいて、戦略レベル、戦術レベル、運用レベルで統一的に扱うデータとして、全レベルの情報を全て持つ方法がある。これをオブジェクト指向風に、各レベル毎にインターフェースを定義するのはどうだろうか。実際には問題グループ毎にインターフェースを定義する。データの方は、解きたい問題のインターフェースを継承して実装する。例えば、ネットワーク問題と配送問題を解きたければ、両方のインターフェースを実装するなど。
public interface ITest1 { string Name {get;} } public interface ITest2 { string Name {get;} } public class Test1 : ITest1 { public string Name {get {return "Test1";}} } public class NewTest : Test1, ITest2 { public string Name {get {return "NewTest";}} // (1) }
例えば、上記のようなクラスが合ったときに、下記はどのような出力になるか?
NewTest org = new NewTest(); Console.WriteLine(((ITest1)org).Name); Console.WriteLine(((ITest2)org).Name);
最初の出力は、Test1である。クラスNewTestを修正して最初の出力をNewTestにするにはどうすればよいだろうか?回答は、ちょっと気持ち悪い書き方になる。
尚、上記の(1)のpublicをとると、また違う結果が得られる。