Показать сообщение отдельно
Старый 29.09.2021, 20:11   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 29.09.2021 в 20:21.
За это сообщение автора поблагодарили: S.Kuskov (5).