Правильная иерархия для классов форм - PullRequest
0 голосов
/ 21 июня 2020

У меня есть задача, в которой мне нужно сделать хорошо спроектированную иерархию для классов разной геометрии c фигуры:

  • круг
  • окружность
  • кольцо
  • прямоугольник
  • треугольник
  • et c.

Сначала я сделал абстрактный класс Figure следующим образом:

abstract class Figure
{
    public abstract double Area { get; }

    public abstract double GetArea();
}

Я планировал, что каждый другой класс, описывающий конкретную фигуру, будет наследником класса Figure. И идея Area в Figure работает прямо перед тем моментом, когда я понимаю, что Circumference не имеет Area.

И я не могу решить, что делать дальше. : описывает другой абстрактный класс AbstractCircle, удалите это свойство и метод Area из Figure или просто установите Area = 0 в Circumference. Или, может быть, просто сделать Circumference наследником Circle, а затем установить Area = 0?

Это логически правильно? Я имею ввиду, будет ли этот лог c понятен людям, которые будут читать эту программу?

Буду рад увидеть советы и комментарии.

1 Ответ

0 голосов
/ 21 июня 2020

Похоже, вы на правильном пути. Давайте посмотрим на различные геометрические c фигуры, которые вы пытаетесь классифицировать:

  • круг - (это форма)
  • окружность - (это свойство формы)
  • кольцо - (это форма)
  • прямоугольник - (это форма)
  • треугольник - (это форма)

Все это формы, за исключением окружности. Как и area, длина окружности - это свойство формы. Каждая двумерная форма может иметь окружность, которая будет реализована по-разному для каждой формы. Таким образом, ваш класс Figure не должен реализовываться в circumference. Скорее, circumference должен быть свойством вашего abstract class:

abstract class Figure
{
    public abstract double Area { get; }    
    public abstract double GetArea();
    public abstract double Circumference { get; }
}

Теперь все ваши геометрические c формы могут реализовать этот класс, не сталкиваясь с трудностями, которые вы видели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...