aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MindBox.Lib/FlatShape.cs11
-rw-r--r--MindBox.Lib/ITwoDimensional.cs4
-rw-r--r--MindBox.Lib/Triangle.cs10
3 files changed, 23 insertions, 2 deletions
diff --git a/MindBox.Lib/FlatShape.cs b/MindBox.Lib/FlatShape.cs
index d168ddd..c906f83 100644
--- a/MindBox.Lib/FlatShape.cs
+++ b/MindBox.Lib/FlatShape.cs
@@ -1,7 +1,18 @@
namespace MindBox.Lib;
+/// <summary>
+/// Абстрактный класс, реализующий интерфейс двумерной фигуры.
+/// Посчитал нужным создать отдельный абстрактный класс, это более гибкое решение.
+/// Такой класс можно расширить другими интерфейсами, например IColorful - контракт для методов получения и/или изменения цвета фигуры.
+/// Прочие интерфейсы могут быть применимы не только к двумерным фигурам
+/// </summary>
public abstract class FlatShape : ITwoDimensional
{
+
+ /// <summary>
+ /// Поле для хранения вычисляемого значения площади.
+ /// Вычисляем значение только один раз.
+ /// </summary>
protected double? _area;
public abstract double GetArea();
}
diff --git a/MindBox.Lib/ITwoDimensional.cs b/MindBox.Lib/ITwoDimensional.cs
index 776e74f..37cba0f 100644
--- a/MindBox.Lib/ITwoDimensional.cs
+++ b/MindBox.Lib/ITwoDimensional.cs
@@ -1,5 +1,9 @@
namespace MindBox.Lib;
+/// <summary>
+/// Интерфейс для методов, которые можно применить для двумерной фигуры.
+/// Можно впоследствии дополнить методами вычисления периметра, etc
+/// </summary>
public interface ITwoDimensional
{
public double GetArea();
diff --git a/MindBox.Lib/Triangle.cs b/MindBox.Lib/Triangle.cs
index 54e8a85..58cdb91 100644
--- a/MindBox.Lib/Triangle.cs
+++ b/MindBox.Lib/Triangle.cs
@@ -2,6 +2,7 @@ namespace MindBox.Lib;
public class Triangle : FlatShape
{
+ // Может потребоваться хранить разные стороны в разных полях, но для нашей задачи это избыточно
private readonly double[] _sides;
public Triangle(double a, double b, double c)
@@ -16,6 +17,9 @@ public class Triangle : FlatShape
throw new ArgumentException($"Sides lengths are not valid: {a}, {b}, {c}");
}
}
+ /// <summary>
+ /// Вычисление площади реугольника по формуле Герона
+ /// </summary>
public override double GetArea()
{
if (_area != null)
@@ -31,14 +35,16 @@ public class Triangle : FlatShape
(semiPerimeter - _sides[2]));
return _area.Value;
}
- }
+ }
public bool IsRight()
{
var sorted = _sides.OrderByDescending(x => x);
+ // Самая длинная сторона: гипотенуза
double hypotenuse = sorted.First();
+ // Две другие - катеты
var catheti = sorted.Skip(1);
return hypotenuse * hypotenuse == catheti.Sum(x => x * x);
- }
+ }
}