2011-01-11 118 views
0

讓我們考慮一下,我想創建以下層次:分層級設計

動物 - >類(哺乳動物,兩棲動物,...) - >家庭(貓科,犬科,...) - >種(貓,老虎,...)。

每個子類都依賴於前一個子類。

任何有關創建類似樹的類的最佳方法的建議?

這只是我在手,但解決方案將幫助我很多問題的一個例子...

感謝

真正的問題是這樣的:

我要解析一個以下類型的消息0102060800FF。

首先,01告訴我我有一個特定類型的消息。 鑑於這種類型,我必須在特定的表中查找值02,依此類推......

我想要一個由其父項過濾的子層次結構的可能值。我不確定我是否足夠清楚。

感謝

+1

更具體的示例可能有所幫助。 – svrist 2011-01-11 17:08:02

+0

在你的問題中,你只是定義了面向對象編程的目的以及繼承。從你的問題我很困惑,你想做什麼。你是否試圖想出一個類來直觀地顯示這樣的圖表?還是你在談論你的程序中的數據對象的結構? – 2011-01-11 17:10:01

回答

1

這些天,贊成構成比繼承。這裏有一個例子 - 需要更多的邏輯檢查,以確保您添加到正確的層次結構中,等等。

public class Class 
{ 
    private readonly IList<Animal> animals = new List<Animal>(); 

    public IEnumerable<Animal> Animals 
    { 
     get 
     { 
      return this.animals; 
     } 
    } 

    public void AddAnimal(Animal animal) 
    { 
     if (animal == null) 
     { 
      throw new ArgumentNullException("animal"); 
     } 

     this.animals.Add(animal); 
    } 

    //// etc. 
} 

public class Family 
{ 
    private readonly IList<Animal> animals = new List<Animal>(); 

    public IEnumerable<Animal> Animals 
    { 
     get 
     { 
      return this.animals; 
     } 
    } 

    public void AddAnimal(Animal animal) 
    { 
     if (animal == null) 
     { 
      throw new ArgumentNullException("animal"); 
     } 

     this.animals.Add(animal); 
    } 

    //// etc. 
} 

public class Species 
{ 
    private readonly IList<Animal> animals = new List<Animal>(); 

    public IEnumerable<Animal> Animals 
    { 
     get 
     { 
      return this.animals; 
     } 
    } 

    public void AddAnimal(Animal animal) 
    { 
     if (animal == null) 
     { 
      throw new ArgumentNullException("animal"); 
     } 

     this.animals.Add(animal); 
    } 

    //// etc. 
} 

public class Animal 
{ 
    private readonly Class @class; 
    private readonly Family family; 
    private readonly Species species; 

    public Animal(Class @class, Family family, Species species) 
    { 
     if (@class == null) 
     { 
      throw new ArgumentNullException("@class"); 
     } 

     if (family == null) 
     { 
      throw new ArgumentNullException("family"); 
     } 

     if (species == null) 
     { 
      throw new ArgumentNullException("species"); 
     } 

     [email protected] = @class; 
     this.family = family; 
     this.species = species; 
     [email protected](this); 
     this.family.AddAnimal(this); 
     this.species.AddAnimal(this); 
    } 

    public Class Class 
    { 
     get 
     { 
      return [email protected]; 
     } 
    } 


    public Family Family 
    { 
     get 
     { 
      return this.family; 
     } 
    } 


    public Species Species 
    { 
     get 
     { 
      return this.species; 
     } 
    } 
} 
1

每節課下來實際的動物是一個抽象類。 Tiger是一個具體的類,它繼承了抽象類Felidae,抽象類Mammalia等。

如果你想獲得真正的喜歡,你可以使用接口,如IPredator,IWarmBlooded;將它們定義爲功能。