Re[6]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.09.25 12:23
Оценка: 1 (1)
Здравствуйте, Doom100500, Вы писали:

D>Там кто-то сказал, что в плюсах не проектировалось закрытое наследование. Мне возразили, что то, что я привёл — это приватное. А что такое приватное?

Речь шла о закрытых иерархиях.
Это когда у вас есть несколько конкретных типов (например, ConstantExpression, BinaryExpression, UnaryExpression), и есть некоторый общий тип, к которому они все приводимы.
И у вас есть гарантия того, что если вы видите экземпляр общего типа, он является экземпляром одного из этих типов и ничем больше (поэтому у нас есть возможность выполнять exhaustiveness checking).
В ФП это обычно моделируется алгебраическим типом, когда вы пишете type Expression = ConstantExpression | BinaryExpression | UnaryExpression;.
В ООП довольно сложно изобразить такую штуку, потому что в нём мы обычно вот эту приводимость обеспечиваем при помощи наследования конкретных типов от абстрактного базового.
И вот тут и возникает некоторая проблема — как запретить порождать других наследников от Expression? В каком-нибудь дотнете это достигается package visibility для Expression.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.