CftClub.ru
Клуб специалистов ЦФТ-Банк

ООП-транслятор: отображение типов - плыву...

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеВт Ноя 19, 2013 10:09   ООП-транслятор: отображение типов - плыву... Ответить с цитатой
Полезность: Нет оценки
Здравствуйте.

В нашем словаре есть некий класс [FOND_FILTER].
Галочки 'может иметь экземпляры' и 'Использовать доступ к экземплярам' - НЕ стоят. Стоит флажок 'Структура'.

PL-plus код:
Код:
procedure MyExecute (
   P_FOND1          ::[FOND_FILTER],
   P_FOND2          [FOND_FILTER]    ) is

Транслируется в
Код:
procedure MYEXECUTE(P_FOND1 IN number,P_FOND2 IN Z#FOND_FILTER#INTERFACE.CLASS#FOND_FILTER) is


С моей делитантской точки зрения:
1) [FOND_FILTER] и ::[FOND_FILTER] - одно и то же. Озадачила различная трансляция
2) Т.к. у класса НЕ стоит галочка 'может иметь экземпляры', то трансляция в number смысла НЕ имеет. Почему бы сразу не транслировать в структуру?
Еще вопросы к профи:
1) Как гарантированно описать параметр функции с типом структура ( в моем случае - с типом Z#FOND_FILTER#INTERFACE.CLASS#FOND_FILTER) ?
2) На последних версиях поведение транслятора такое же? Страшновато - вдруг потом код перестанет работать
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Ноя 19, 2013 11:00   Re: ООП-транслятор: отображение типов - плыву... Ответить с цитатой
Полезность: 1
Damir пишет:

С моей делитантской точки зрения:
1) [FOND_FILTER] и ::[FOND_FILTER] - одно и то же. Озадачила различная трансляция


[FOND_FILTER] и::[FOND_FILTER] это разное. Первое - структура, второе - ссылка на статический экземпляр.
Пример есть в файле PLPHINTS.TXT из поставки ТЯ
Цитата:
Пример:
v1 [AC_FIN]; -- собственно тип [AC_FIN]
v2 ref [AC_FIN]; ссылка на [AC_FIN]
v3 ::[AC_FIN]; -- выражение для ссылки на статический экземпляр [AC_FIN]



Damir пишет:

2) Т.к. у класса НЕ стоит галочка 'может иметь экземпляры', то трансляция в number смысла НЕ имеет. Почему бы сразу не транслировать в структуру?

Отсутствие структуры не мешает иметь поле ID

Damir пишет:

Еще вопросы к профи:
1) Как гарантированно описать параметр функции с типом структура ( в моем случае - с типом Z#FOND_FILTER#INTERFACE.CLASS#FOND_FILTER) ?


[FOND_FILTER]

Damir пишет:

2) На последних версиях поведение транслятора такое же? Страшновато - вдруг потом код перестанет работать

На последних так же.
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеВт Ноя 19, 2013 11:11   Re: ООП-транслятор: отображение типов - плыву... Ответить с цитатой
Полезность: Нет оценки
Спасибо!
Доходчиво и оперативно Smile

Я символом '::' пользовался чтобы визуально отличить ТИП от ПОЛЯ класса (в операции, например).
А оно еще и 'ссылка на статический экземпляр'.
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеСр Ноя 20, 2013 06:02   Re: ООП-транслятор: отображение типов - плыву... Ответить с цитатой
Полезность: Нет оценки
Damir пишет:
Я символом '::' пользовался чтобы визуально отличить ТИП от ПОЛЯ класса (в операции, например).
А оно еще и 'ссылка на статический экземпляр'.

Таки выскажу свое субъективное мнение.
Это уже к делу не относится - просто мысли вслух...

Оператор '::' в С++ имеет смысловую нагрузку 'область видимости'.
Так я им и пользовался - для указания 'глобальной' области видимости.
Т.е. если в некотором классе я заведу реквизит [AC_FIN], то в операции этого класса будет тяжело отличить реквизит [AC_FIN] от класса [AC_FIN]. Использование '::' для указания, что это является (глобальным) типом было бы уместно.

Для объявления "ссылки на статический экземпляр" - ну если это "ссылка на экземпляр" то логично было бы в объявлении видеть "ref" и еще как-то помечать 'особенность' экземпляра (статичность).
Варианты могут быть различные:

v3 ref static [AC_FIN];
v3 ref [AC_FIN]::;

Да и запрос
select ac(ac) in ::[AC_FIN] where ac%id =999
отрабатывает сейчас правильно (интерпретирует :: как область видимости) - не к статическому экземпляру обращается.
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеСр Ноя 20, 2013 08:28   Re: ООП-транслятор: отображение типов - плыву... Ответить с цитатой
Полезность: Нет оценки
Damir пишет:
Damir пишет:
Я символом '::' пользовался чтобы визуально отличить ТИП от ПОЛЯ класса (в операции, например).
А оно еще и 'ссылка на статический экземпляр'.

Таки выскажу свое субъективное мнение.
Это уже к делу не относится - просто мысли вслух...

Оператор '::' в С++ имеет смысловую нагрузку 'область видимости'.
Так я им и пользовался - для указания 'глобальной' области видимости.
Т.е. если в некотором классе я заведу реквизит [AC_FIN], то в операции этого класса будет тяжело отличить реквизит [AC_FIN] от класса [AC_FIN]. Использование '::' для указания, что это является (глобальным) типом было бы уместно.

Для объявления "ссылки на статический экземпляр" - ну если это "ссылка на экземпляр" то логично было бы в объявлении видеть "ref" и еще как-то помечать 'особенность' экземпляра (статичность).
Варианты могут быть различные:

v3 ref static [AC_FIN];
v3 ref [AC_FIN]::;

Да и запрос
select ac(ac) in ::[AC_FIN] where ac%id =999
отрабатывает сейчас правильно (интерпретирует :: как область видимости) - не к статическому экземпляру обращается.


в этом суровом мире много всякой необъяснимой фигни, это одна из них... архаизм и не более.
стоит это принять, запомнить и использовать, каждый раз чертыхаясь. Very Happy
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru