Шкала ООП
Когда говорят про ООП, упоминают всякие солиды, наследование и прочее. И не говорят вот про что (а надо бы).
Если в языке присутствует ООП, то типизация объектов размывается. Только структуры и функции дают четкие типы; объекты, наоборот, разрушают их путем абстракций. Они замыливают глаз.
Скажем, у нас есть классы Dog
и Cat
, унаследованные от Animal
. Пока мы
передаем собак и котов явно, все хорошо. Но когда мы передаем их как животных
(Animal
), там может быть что угодно. В итоге на одни и те же данные смотришь
по-разному.
Если предположить, что Animal
наследуется еще от чего-то, то получится шкала
от Object
к Dog
/Cat
, и как смотреть на объект — зависит от контекста. В
некоторых случаях делают даун-каст и ап-каст: передают кота в виде объекта, а
потом проверяют: если это кот, то одно, если собака, то другое, иначе эксепшен.
Эту шкалу (Object
— Animal
— Mammal
— Dog
) важно держать в голове и
знать, где находишься сейчас. Лично мне она доставляет много хлопот, когда я
пишу на ООП-языках, например Джаве. Шкала — это не вкл/выкл, а некая доля,
позиция в в дереве, следить за которой сложнее.
Может быть, кто-то лучше выразил эту мысль, но либо я не слышал, либо забыл.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter