История изменений
Исправление svyatozar, (текущая версия) :
Я привёл пример с квадратом только для того, чтобы показать что логика наследования в ООП весьма неочевидна и неоднозначна. И так понятно что квадрат не может наследовать прямоугольник.
И причина тому - тот факт что изменение ширины квадрата должно давать побочный эффект - изменение его длины, что недопустимо с точки зрения пользователя интерфейса «прямоугольник».
И это просто пример, на практике всё гораздо сложнее и вырвиглазнее: добавляют переменную «сторона» и методы, которые с ней работают. Переменные «длина» и «ширина» в квадрате уже ни на что не влияют. И так далее. Я насмотрелся такого безобразия в коде игры Unreal Tournament.
Исправление svyatozar, :
Я привёл пример с квадратом только для того, чтобы показать что логика наследования в ООП весьма неочевидна. И так понятно что квадрат не может наследовать прямоугольник.
И причина тому - тот факт что изменение ширины квадрата должно давать побочный эффект - изменение его длины, что недопустимо с точки зрения пользователя интерфейса «прямоугольник».
И это просто пример, на практике всё гораздо сложнее и вырвиглазнее: добавляют переменную «сторона» и методы, которые с ней работают. Переменные «длина» и «ширина» в квадрате уже ни на что не влияют. И так далее. Я насмотрелся такого безобразия в коде игры Unreal Tournament.
Исходная версия svyatozar, :
Я привёл пример с квадратом только для того, чтобы показать что логика наследования весьма не очевидна. И так понятно что квадрат не может наследовать прямоугольник.
И причина тому - тот факт что изменение ширины квадрата должно давать побочный эффект - изменение его длины, что недопустимо с точки зрения пользователя интерфейса «прямоугольник».
И это просто пример, на практике всё гораздо сложнее и вырвиглазнее: добавляют переменную «сторона» и методы, которые с ней работают. Переменные «длина» и «ширина» в квадрате уже ни на что не влияют. И так далее. Я насмотрелся такого безобразия в коде игры Unreal Tournament.