[Перевод] Почему наследование всегда было бессмысленным
|
|
Четверг, 22 Марта 2018 г. 08:48
+ в цитатник
Есть три типа наследования.
- Онтологическое наследование указывает на специализацию: вот эта штука — специфическая разновидность той штуки (футбольный мяч — это сфера и у неё такой-то радиус).
- Наследование абстрактного типа данных указывает на замещение: у этой штуки такие же свойства, как у той штуки, и такое-то поведение (это принцип подстановки Барбары Лисков).
- Наследование реализации связано с совместным использованием кода: эта штука принимает некоторые свойства той штуки и переопределяет или дополняет их таким-то образом. Наследование в моей статье «О наследовании» именно такого и только такого типа.
Это три разных и часто противоречивых отношения. Требовать любого или даже всех не представляет никаких сложностей. Но требование поддержки
одним механизмом двух или более из них — значит нарываться на проблемы.
Часто для наследования в ООП приводят контрпример отношений между квадратом и прямоугольником. Геометрически квадрат —
это специализация прямоугольника: все квадраты — прямоугольники, но не все прямоугольники — квадраты. Все
s в классе «Квадрат» являются прямоугольниками
s, у которых длина равна ширине. Но в иерархии типов это отношение обратное: вы можете использовать прямоугольник везде, где используется квадрат (указав прямоугольник с одинаковой шириной и высотой), но нельзя использовать квадрат везде, где используется прямоугольник (например, вы не можете изменить длину и ширину).
Читать дальше ->
https://habrahabr.ru/post/351730/
Метки:
author m1rko
программирование
smalltalk
наследование
принцип подстановки барбары лисков
ооп
классы
иерархия наследования
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-