Как поддерживать инварианты прямоугольника и квадрата, тогда?
у тебя, например, есть конструктор для квадрата, есть конструктор для прямоугольника и есть конструктор для треугольника -- на выходе -- иммутабельные списки треугольников, что ты тут хочешь поддерживать?