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