Дизайн классов в C#
Недавно я побывал на собеседовании и получил следующий вопрос:
Вопрос: Со следующими объектами создайте диаграмму классов или код скелета:
Объектами являются:
garment
shirt
pant
fabric
buttons
zip
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;}
}
Но все же я вижу много вещей, пропущенных из приведенного выше скелетного кода.
- Как я могу связать
Garment
с другими объектами (объектные отношения!?) - Какой может быть тип возвращаемых функций
MakeShirt()
а такжеMakePant()
? - Отвечая на эти вопросы, какой подход лучше? Другими словами, как подойти к этому типу вопросов?
Любые вклады по этому вопросу приветствуются. (Если это не тот вопрос, который нужно задавать здесь, пожалуйста, дайте мне знать, чтобы переместить его на правильный сайт 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. Конструктор для определенных типов одежды должен подготовить тип одежды, а не после его инициализации.