В ООП нарушение контрактов нормальной практикой не является. Полиморфизм - это совсем другое, его роль как раз в выполнении контрактов.
Еще один минус в Вашу пользу, Вы плаваете в ооп, это явно заметно, зачем Вы пытаетесь оправдаться? Полиморфизм это не просто выполнение контракта, это способ выполнения контракта, и у разных классов он может быть разный, от сюда и приставка "поли". Что значит нарушить контракт, реализовать его неправильно? Но круг все контракты эллипса реализует правильно, и никаких новых контрактов не создает, так что правило подстановки работает корректно.
наследование квадрата от прямоугольника нарушает принцип подстановки
Не нарушает, а корректно его реализует. Вы почему-то решили что у квадрата нет ширины и высоты, но они у квадрата есть, просто они одинаковые.