static void ProblemOfRepresentative() { Rect rect = new Rect { Height = 2, Width = 5 }; int rectArea = AreaCalc.CalcSquare(rect); Console.WriteLine($"Rect area = {rectArea}"); //проблема "is a", квадрат является частным случаем //прямоугольника и по логике может наследоваться от //него. Но при объявлении инстанции класса квадрат, //мы можем задать ему неправильные стороны. Это ошибка //при проектировании. Problem of representative Rect square = new Square { Width = 2, Height = 10 }; }
static void IsAEvil() { //квадрат частный случай прямоугольник //следовательно квадрат можно унаследовать от прямоугольника Rect rect = new Rect { Height = 2, Width = 5 }; int rectarea = AreaCalc.CalculateSquare(rect); Console.WriteLine($"React area = {rectarea}"); //наследование //значит можно объявить базовым классом //А проинициализировать наследником //можем сделать разные стороны у квадрата :(( Rect square = new Squre { Height = 2, Width = 10 }; AreaCalc.CalculateSquare(square); //нерепрезантивное наследование //реальность не соответсвует ООП //лучше использовать интрефейс IShape rect2 = new Rect2() { Height = 2, Width = 6 }; IShape square2 = new Squre2() { SideLength = 5 }; rect2.CalcSquare(); square2.CalcSquare(); }