Оптимизация решения задачи, наследование
Было такое задание "Написать программу, в которой описана иерархия классов: геометрические фигуры (ромб, параллелограмм, эллипс). Реализовать методы вычисления площади и периметра. Предусмотреть у класса наличие полей, методов и свойств. Использовать переопределение методов."
Создал базовый абстрактный класс геометрических фигур, от него наследовал два класса - параллелограмм и эллипс. Хочу понять, можно ли как-то улучшить/оптимизировать код, и понять, что можно убрать или добавить в абстрактном классе
abstract class GeometricFigure
{
public double SideLength { get; set; }
public abstract int NumberOfSides { get;}
public abstract void Print();
public abstract double GetPerimeter();
public abstract double GetSquare();
}
abstract class Parallelogram : GeometricFigure
{
public Parallelogram(double sideLength,double secondSideLength, double height)
{
SideLength = sideLength;
SecondSideLength = secondSideLength;
Height = height;
}
public double SecondSideLength { get; set; }
public double Height { get; set; }
public override int NumberOfSides
{
get { return 4; }
}
public override double GetPerimeter()
{
return 2 * (SideLength + SecondSideLength);
}
public override double GetSquare()
{
return SideLength * Height;
}
public override void Print()
{
Console.WriteLine($"Длина первой стороны: {SideLength}\nДлина второй стороны: {SecondSideLength}\nДлина высоты: {Height}");
}
}
class Rhombus : Parallelogram
{
public Rhombus(double sideLength, double secondSideLength, double height) : base(sideLength, secondSideLength, height)
{
}
public override double GetPerimeter()
{
return 4 * SideLength;
}
public override void Print()
{
Console.WriteLine($"Длина первой стороны: {SideLength}\nДлина второй стороны: {SecondSideLength}\nДлина высоты: {Height}");
}
}
class Ellipse : GeometricFigure
{
public Ellipse(double sideLength,double secondSideLength)
{
SideLength = sideLength;
SecondSideLength = secondSideLength;
}
const double PI = Math.PI;
public override int NumberOfSides
{
get { return 1; }
}
public double SecondSideLength { get; set; }
public override double GetPerimeter()
{
return 2 * PI * Math.Sqrt(Math.Pow(SideLength, 2) + Math.Pow(SecondSideLength, 2) / 2);
}
public override double GetSquare()
{
return PI * SideLength * SecondSideLength;
}
public override void Print()
{
Console.WriteLine($"Длина малой полуоси эллипса: {SideLength}\nДлина большой полуоси эллипса: {SecondSideLength}");
}
}