Цитата:
Сообщение от
axm2017
ps и понять конечно где правильно писать final
final изначально пришел из Java.
в Java все методы были виртуальными по умолчанию.
это значит, что их надо вызывать через таблицу виртуальных методов.
в то далекое время руководство Sun Microsystems болело идеей "Джаву в каждый утюг" (примерно как сейчас руководство Майкрософт болеет идееей "Всё в облака"). Поэтому вопрос вызова джава кода из всяких девайсов, С, С++, ASM казался очень-очень актуальным.
изначально модификатор final был сугубо техническим, применялся к методам и менял сигнатуру вызова метода - не через виртуальную таблицу, а напрямую. как побочный эффект - такой метод нельзя было наследовать.
потом, когда болезнь стала менее актуальной, final стали применять к классам. а потом и к пропертям класса, а потом и к переменным метода. Теперь модификатор final в Джаве трактуется как const.
то, что final запрещает наследовать, на практике стали использовать гораздо позже, когда в джаве появились enum.
=============
классическая аксапта до CIL использует очень древнуюю виртуальную машину Java. Final там никаким боком. Поэтому использовали его достаточно хаотически. Насколько я понимаю, единственное его оправданное применение - это классы, которые реализованы в ядре. Типа TextBuffer. Но и то не уверен.
final в x++ не дает заметных преимуществ в скорости работы.
проверено
=============
лично я оставляю модфикатор final в коде X++ во взаимосвязанных классах.
когда изменение в одном неизбежно должно повлечь изменение в другом.
причем появление final обильно комментирую.
как правило, это код, который работает с внешними dll, .net или com.
final конечно же не помешает моим коллегам поменять класс или отнаследоваться.
он просто повышает вероятность, что натолкнувшись на ошибки компиляции и матюкнувшись на криворукого автора, коллеги таки прочтут комментарий.
на проектах никаких других гарантий final в X++ не дает
=============
также модификаторы final/private часто использую при рефакторинге в своих иерархий классов. типа наваял 3-5-10 дочерних классов, потом подумал (как обычно) и изменил методы внутре. если при этом нужно удалить какой-то базовый метод, то очень даже удобно сначала пометить его как final или private и сделать инкрементную компиляцию - компилятор выдает ошибки в дочерних методах, которые надо изменить.
=============
Цитата:
Сообщение от
DSPIC
2. Я бы Private вообще исключил из любого языка программирования и уже точно из AX: Ну не возможно заранее предсказать, что твой метод не нужно будет переопределять.
ну... исключать наверное не стоит.
но то, что вендор оставляет private/final, говорит лишь о том, что вендор ни фига не понимает какой продукт и для кого он делает.
и просто убивает аксапту и делает из него совершенно другой продукт для других людей. что ж, это его право.
https://coub.com/view/itbtz