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