Дизайн классов в C#

Недавно я побывал на собеседовании и получил следующий вопрос:

Вопрос: Со следующими объектами создайте диаграмму классов или код скелета:

Объектами являются:

garmentshirtpantfabricbuttonszip

The best I could do was this:


class Shirt : Fabric 
{
  Buttons buttons {get;set;}
  //Inherits all Fabric methods

  MakeShirt()  
  {
    //make a shirt here
  }
}

class Pant : Fabric
{
  Buttons buttons {get;set;}
  // Inherits all Fabric methods

  MakePant()
  {
     //Make a pant here
  }
}


class Fabric
{
  private MaterialType materialType {get;set;}
  private FabricType fabricType {get;set;}

  Fabric(MaterialType mType, FabricType fType)
  {
     this.materialType = mtype;
     this.fabricType = fType;
  }

  public GetFabricMaterial();
  public GetFabricType();

}

class Garment : IGarment
{
  Price price {get;set;}
  Audience audience {get;set;}
}

enum FabricType
{
  Fabric_Formal,
  Fabric_Casual,
}

enum MaterialType
{
   Fabric_Cotton,
   Fabric_Silk,
   Fabric_Wool, 
}

class Buttons
{
Color color {get;set;}
Shape shape {get;set;}
}

class Zip
{
Color color {get;set;}
Size size {get;set;}
}

Но все же я вижу много вещей, пропущенных из приведенного выше скелетного кода.

  1. Как я могу связать Garment с другими объектами (объектные отношения!?)
  2. Какой может быть тип возвращаемых функций MakeShirt() а также MakePant()?
  3. Отвечая на эти вопросы, какой подход лучше? Другими словами, как подойти к этому типу вопросов?

Любые вклады по этому вопросу приветствуются. (Если это не тот вопрос, который нужно задавать здесь, пожалуйста, дайте мне знать, чтобы переместить его на правильный сайт stackru!)

2 ответа

Решение

Я думаю, что вы думали над этим, я вижу это как это. Брюки и рубашки Garment, Одежда состоит из ткани.

Брюки на молнии, рубашки на пуговицах..

public enum Fabric { Cotton, Silk, Poly }

public abstract Garment{


    public Fabric Fabric {get; set; }
}

class Buttons
{
  Color color {get;set;}
  Shape shape {get;set;}
}
class Zip
{
   Color color {get;set;}
   Size size {get;set;}
}

public class Shirt : Garment{
   public Buttons Buttons { get; set;} 
}
public class Pants : Garment{
  public Zip Zip { get; set;}
}

Это больше упражнение в отношениях родитель / ребенок. Я бы подумал Garment ваш абстрактный базовый класс, из которого Shirt а также Pant унаследовать. Fabric, Buttons а также Zip все свойства Garment,

У меня не было бы определенных методов Make. Конструктор для определенных типов одежды должен подготовить тип одежды, а не после его инициализации.

Другие вопросы по тегам