В большинстве ответов (когда они обобщены) говорится, что запечатанные / завершенные классы являются инструментом для защиты других программистов от потенциальных ошибок. Существует размытая грань между осмысленной защитой и бессмысленными ограничениями. Но поскольку программист - это тот, кто должен понимать программу, я не вижу никаких причин ограничивать его от повторного использования частей класса. Большинство из вас говорят о занятиях. Но это все об объектах!
В своем первом посте DrPizza утверждает, что разработка наследуемого класса означает ожидание возможных расширений. Правильно ли я понимаю, что вы думаете, что класс должен быть наследуемым только в том случае, если он, вероятно, будет расширен хорошо? Похоже, вы были использованы для разработки программного обеспечения из самых абстрактных классов. Позвольте мне кратко объяснить, как я думаю при проектировании:
Начиная с очень конкретных объектов, я нахожу общие характеристики и, таким образом, их функциональность, и абстрагирую их от суперкласса этих конкретных объектов. Это способ уменьшить дублирование кода.
Если не разрабатывать какой-то конкретный продукт, например, фреймворк, я должен заботиться о моем коде, а не о другом (виртуальном) коде. Тот факт, что другие могут посчитать полезным повторное использование моего кода, является хорошим бонусом, а не моей основной целью. Если они решат сделать это, они несут ответственность за обеспечение действительности расширений. Это касается всей команды. Предварительный дизайн имеет решающее значение для производительности.
Возвращаясь к моей идее: ваши объекты должны в первую очередь служить вашим целям, а не некоторым возможным функциональным возможностям их подтипов. Ваша цель - решить данную проблему. В объектно-ориентированных языках используется тот факт, что многие проблемы (или, скорее всего, их подзадачи) похожи, и поэтому существующий код можно использовать для ускорения дальнейшей разработки.
Запечатывание класса заставляет людей, которые могли бы воспользоваться существующим кодом БЕЗ ФАКТИЧЕСКОГО ИЗМЕНЕНИЯ ВАШЕГО ПРОДУКТА, заново изобретать колесо. (Это ключевая идея моего тезиса: наследование класса не меняет его! Это кажется довольно пешеходным и очевидным, но его обычно игнорируют).
Люди часто боятся, что их «открытые» классы будут извращены к чему-то, что не сможет заменить его восходящих. И что? Почему ты должен заботиться? Никакой инструмент не может помешать плохому программисту создавать плохое программное обеспечение!
Я не пытаюсь обозначить наследуемые классы как абсолютно правильный способ проектирования, рассмотрите это скорее как объяснение моей склонности к наследуемым классам. В этом прелесть программирования - практически бесконечный набор правильных решений, у каждого из которых есть свои плюсы и минусы. Ваши комментарии и аргументы приветствуются.
И, наконец, мой ответ на первоначальный вопрос: я бы завершил работу над классом, чтобы другие знали, что я считаю этот класс иерархическим деревом классов и не вижу абсолютно никакой возможности, чтобы он мог стать родительским узлом. (И если кто-то думает, что это действительно возможно, то либо я ошибся, либо меня не поймут).