Вход | Регистрация
 

&Вместо - это что? Что такое аннотация в классическом понимании в программировании?

&Вместо - это что? Что такое аннотация в классическом понимании в программировании?
Я
   yumuh
 
08.04.19 - 10:04
Прочитал это
https://wonderland.v8.1c.ru/blog/razvitie-mekhanizma-rasshireniy-konfiguratsii-15/

Как статья связана с полиморфизмом, наследованием, инкапсуляцией?
 
 
   Aleksey
 
1 - 08.04.19 - 10:05
а должна быть связь?
   yumuh
 
2 - 08.04.19 - 10:06
(1) знал бы, не спросил)
   VladZ
 
3 - 08.04.19 - 10:09
(0) "Как статья связана с полиморфизмом, наследованием, инкапсуляцией?" - Кто сказал, что должна быть связь?
   Mort
 
4 - 08.04.19 - 10:11
public override OnSomething(...)
   Вафель
 
5 - 08.04.19 - 10:12
так это же наследование в чистом виде
   Garykom
 
6 - 08.04.19 - 10:14
   1Сергей
 
7 - 08.04.19 - 10:18
&Заместо
   Garykom
 
8 - 08.04.19 - 10:19
(6)+ Но в 1С это не совсем переопределение а свое изобретение для функционального программирования.

&Вместо выполняется всегда в отличие от ООП где метод выполняется в зависимости от объекта.
Вот если разработчики в 1С добавят возможность вызывать исходный метод, хотя есть расширение где он перекрыт, каким то специальным вызовом будет похоже.
   Asmody
 
9 - 08.04.19 - 10:22
Аннотации - это метаметки в коде, которые могут содержать информацию для анализа, компиляции и выполнения кода.

В данном случае аннотация указывает, что метод расширения должна выполняться _вместо_ метода конфигурации.
   Толянчик
 
10 - 08.04.19 - 10:30
А почему конструктор аутоматически добавляет к аннтоации &Вместо инструкцию ПродолжитьВызов()? Что это означает?
   yumuh
 
11 - 08.04.19 - 10:31
понял. Всем спасибо!
   Sysanin_1ц
 
12 - 08.04.19 - 13:18
(11) С точки зрения классических ЯП (Питон в частности) подобные аннотации можно отнести к категории декораторов функций. Но 1С как обычно идет своим путем (велосипедом, граблями нужное подчеркнуть), поэтому механизм расширений можно рассматривать как сильно усеченный вариант наследования
   Сияющий в темноте
 
13 - 08.04.19 - 13:55
это не совсем наследование.
мы можем делать оперативную замену функций в коде,причем даже внутренних,для которых наследования в классических языках нет.
это скорее попытка использования указателей на функции и их замена у обьекта.

просто,есть функции методы обьекта,которые можно переопределить,создав новый обьект,а есть поля обьекта,с указателями на функции,которые можно менять в рантайм.
расширение же есть замена или добавление в вызов функции на этапе компилляции кода.
общий модуль-это не обьект и не интерфейс,а просто набор кода.
   Вафель
 
14 - 08.04.19 - 14:44
(13) так наследование есть, а инкапсуляции нет
   Вафель
 
15 - 08.04.19 - 14:45
(12) ну уж точно не декораторы это.
когда же это override был декоратором?
   Sysanin_1ц
 
16 - 08.04.19 - 15:17
(15) В Питоне декоратор переопределяет функцию
   Толянчик
 
17 - 08.04.19 - 15:24
Простой пример как всё в 1С сделано через жпо. Мне нужно несколько печатных форм УПД с небольшими изменениями типовой. Все процедуры печати лежат в ОМ, точка входа функция ПечатьКомплектаУПД. Это экспортная функция, но процедура, где идёт заполнение параметров табличного документа ВывестиСчетФактуруВТабличныйДокумент, не экспортная. Т.е. мне надо для каждой печатной формы всё это барахло затаскивать в обработку, только ради того чтобы добавить пару реквизитов в печатную форму. А сделать несколько расширений чтобы кастомно менять для каждой обработки печати, я не могу, т.к. применяются они все.
   Casey1984
 
18 - 09.04.19 - 07:44
(17) Зачем несколько расширений? В одном расширении допилить функцию, чтоб в зависимости от печатной формы она делала нужные вещи, нельзя?
   Провинциальный 1сник
 
19 - 09.04.19 - 08:18
(17) Это жпо началось относительно недавно, раньше в типовых было более адекватно разделено на общие и экспортные функции, что позволяло сторонним разработчикам использовать методы платформы. Сейчас же, похоже, цель поставлена прямо противоположная - максимально усложнить работу постороннего кода с типовыми механизмами. Взять хотя бы экспортные процедуры для работы с объектом, но принимающие в качестве параметра форму, при том что форма используется лишь чтобы получить объект - сплошь и рядом такое.
   Толянчик
 
20 - 09.04.19 - 08:22
(18) И будет очередной колхоз из множества Если ИначеЕсли. А мы тут за наследование говорим.
   Толянчик
 
21 - 09.04.19 - 08:27
(19) методы платформы? методы конфигураций ты наверно хотел сказать
   Провинциальный 1сник
 
22 - 09.04.19 - 08:28
(21) Да, правильное уточнение. Имел в виду именно методы конфигураций..
   bolder
 
23 - 09.04.19 - 08:49
(19) Тоже столкнулся с такой фигней.Этож надо, использовать методы формы для общееобьектных задач!Зла не хватает,все переписывать.
   Salimbek
 
24 - 09.04.19 - 08:58
(17) А нельзя через &Вместо объявить нужную тебе процедуру глобального модуля (ВывестиСчетФактуруВТабличныйДокумент) как Экспортную?
   bolder
 
25 - 09.04.19 - 09:02
(0) По сути это ближе всего к директивам препроцессора.
   Толянчик
 
26 - 09.04.19 - 09:04
(24) Если уж ее менять в расширении, то проще сделать как говорит (18) Но при этом получится (20)
   bolder
 
27 - 09.04.19 - 09:04
(10) Мне тоже это интересно.Чего там продолжать то надо?
   Толянчик
 
28 - 09.04.19 - 09:08
(27) это какой-то дикий колхоз: если так напишешь, то всё равно выполнится переопределяемая процедура или функция, но ты можешь написать свой код до или после её вызова.
   Провинциальный 1сник
 
29 - 09.04.19 - 09:09
(28) По сути, эта возможность делает ненужными &После и &Перед, ибо полностью покрывает их функциональность.
   sqr4
 
30 - 09.04.19 - 09:11
(29) Это ты про "Вместо"?
 
 
   bolder
 
31 - 09.04.19 - 09:14
(28) Вот это прикол,зря они так...
   bolder
 
32 - 09.04.19 - 09:18
(30) Да нет, смотри(10).
   Cyberhawk
 
33 - 09.04.19 - 09:21
(27) (28) (31) Не слушайте (29) - для функций это не так, поэтому и сделали ПродолжитьВызов
   bolder
 
34 - 09.04.19 - 09:35
(33) Да, верно.Руки дошли открыть 2 ред.известной книжечки Е.Ю.Хрусталевой.Смысл ПродолжитьВызов() для процедур в едином контексте выполнения,а для функций это мегаудобно.
   Провинциальный 1сник
 
35 - 09.04.19 - 09:45
(33) Обоснуйте. Что можно сделать через &Перед и &После, что нельзя сделать через &Вместо с применением ПродолжитьВызов()?
   craxx
 
36 - 09.04.19 - 09:59
(0) никак не связана, 1С не является ООП в классическом смысле.
   Вафель
 
37 - 09.04.19 - 10:12
(35) 1сники не поймут, поэтому решили упростить )))
   Cyberhawk
 
38 - 09.04.19 - 10:31
(35) В общем случае сделать можно все, но походу ты не понял, какую именно часть Я оспаривал в твоем утверждении о ненужности :)
Для функций ведь нет технической возможности использовать аннотации "перед" и "после".
   Cyberhawk
 
39 - 09.04.19 - 10:33
(37) Вроде как для наглядности / простоты сделали для процедур "перед" и "после"
   Cyberhawk
 
40 - 09.04.19 - 10:33
Ибо внимание - самый ценный ресурс. Негоже его насиловать там, где этого можно избежать.
   Толянчик
 
41 - 09.04.19 - 10:41
(38) ты как обычно пукнул в лужу, а другие должны додумывать что же ты имел в виду
   Cyberhawk
 
42 - 09.04.19 - 10:50
(41) Конечно. Я раздаю удочки, а не кормлю рыбкой ))
   Толянчик
 
43 - 09.04.19 - 11:14
Все эти &Перед &После и ПродолжитьВызов годятся для модулей, разработчики которых предусматривают переопределение. Например как в БСП ОбменДаннымиПереопределяемый в процедуре ПолучитьПланыОбмена можно дописать свои планы обмена. Но покуда разработчики типовых делают как в (17) единственный вариант это делать &Вместо. А поскольку механизм сравнения по типу показа дважды измененных в расширениях отсутствует, польза от всего этого вундервафельства чуть менее чем никакая.
   Вафель
 
44 - 09.04.19 - 11:15
печ формы для реализации вообще через полное жпо сделаны.
доработке практически не поддаются
   Толянчик
 
45 - 09.04.19 - 11:15
+(43) Возможно станет получше в 8.3.15 https://wonderland.v8.1c.ru/blog/razvitie-mekhanizma-rasshireniy-konfiguratsii-15/
   Вафель
 
46 - 09.04.19 - 11:16
лучше бы разработчиков типовых пинали сильнее
   Вафель
 
47 - 09.04.19 - 11:17
и тот пример что они привели решается куда проще через "вместо"
   NorthWind
 
48 - 10.04.19 - 09:31
(0) немедленно вспомнился анекдот про лучшее средство для контрацепции - стакан воды. Соответственно задается вопрос - когда принимать, до или после? Ответ - вместо :)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.