sedminТут у меня мнение совпадает с мнением Артура (зачеркнутым).
Здесь, правда, возможны варианты.
Если рассматривать концепцию абстрактных классов, то я не против рассмотрения ТипЗначенияСтр() и ЗаменитьБазовыйОбъект() как чисто виртуальных и, соответственно, возможности их переопределения.
Для классов, которые могут быть инстанциированы (а у нас сейчас все такие), служебные функции не должны иметь возможность переопределения, потому что это приведет к различному поведению суперкласса в случае, когда он создан сам по себе и когда он создан в составе иерархии.
Здесь надо продумать реализацию RTTI, возможно как раз ТипЗначенияСтр() мы и будем использовать как основу RTTI - тогда это также особый случай, который никак не влияет на наше решение по остальным служебным функциям.
Цитата:2. Относительно виртуальных методов. Надо признать, что в скриптовых языках, таких, например, как Питон, все методы являются виртуальными. Это только с строгих языках, таких как С++ и Ява введены механизмы, которые позволят отслеживать подобные вещи. Язык 1С и 1С++ (не надо лукавить) надо отнести к нестрогим скриптовым языкам.
И надо оставить в отношении виртуальных методов все как есть, и не считать их появление и использование багом.
До появления 1CPP 1С был чисто объектным и братья Нуралиевы на семинарах задавали сакраментальные вопросы типа "ну, давайте, расскажите нам, что такое ООП и зачем оно вам нужно".
Сейчас мы имеем первичную реализации логики ООП, которая имеет определенные нарушения принципов ООП.
Другое дело, что мы привыкли к этой логике и готовы ее защищать. Потому что это удобно.
В этом есть здравый смысл. Вообще, по концепции ООП и эффективности ее конкретной реализации можно ведь говорить долго.
Меня, если честно, до сих пор поражает список литературы, приведенный Бучем в его книге. Там примерно 50 листов.
Однако дело не в механизмах, которые введены в С++ (С++, кстати, гибок именно за счет позднего связывания), а в нашем решении.
Мы можем сделать проще (хоть вообще все классы в один контекст объединим с произвольным доступом к методам и свойствам).
Мы можем приблизиться к классической схеме ООП и механизмы контроля мы можем обеспечить не хуже, чем в С++.
Правда, только на этапе выполнения.
Просто вопрос не в кажущейся простоте и не в упертом соблюдении принципов.
Цель (для меня) в конечном итоге - обеспечение удобной разработки в небольших проектах и безопасного кода в крупных.
Т.е. по сути - экономия времени, потому как все прочие величины так или иначе переводятся во время.