Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Дублирование функций для DS & DW / 24 сообщений из 24, страница 1 из 1
20.02.2004, 13:52
    #32416918
andy753
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Есть большое число функций, где в качестве параметров необходимо указывать DW-DS. Сейчас приходится дублировать с одним единственным изменением - в типе параметра. Поддерживать это хозяйство муторно. Что-то да забываешь продублировать. Да и библиотеки хорошо раздувает.

Посему - может кто сталкивался - пытался сделать так: передавать тип PowerObject или что-то тоже достаточно абстрактное а потом динамически вызывать функции (события)?

Сразу прошу пессимистов воздержаться от комментариев :) И так Вашу точку зрения знаю :)
...
Рейтинг: 0 / 0
20.02.2004, 17:29
    #32417338
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
А Вы не могли бы описать более конкретно, так сказать "на пальцах", то, что Вы хотели бы сделать?
А то уж всё больно сумбурно...
...
Рейтинг: 0 / 0
20.02.2004, 20:49
    #32417524
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
А что тут собственно может быть конкретнее?

Читайте тут:

http://www.romu.com/download/ROMUSoftware_PBDJ_Interfaces_2.pdf
...
Рейтинг: 0 / 0
23.02.2004, 20:59
    #32418672
andy753
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Филипп, спасибо. Посмотрю... появилась еще одна идея. Что в итоге выйдет - напишу...

Для Урваса - попробую на пальцах. Когда пишете собственную библиотеку по работе с ДВ - ДС. Проблема описывать общие функции по какому нибудь обработчику. Примитивный пример - функция get_item - которая возвращает any переменную нужного столбца и строки и нужного DW-DS. Ну и попробуйте это сделать одной функцией - общей. В общем случае - приходится дублировать функции, отличающихся только одним параметром. Вот я и ищу способ переделки уже большого числа функций. А еще и желательно и библиотеки классов.
...
Рейтинг: 0 / 0
24.02.2004, 09:35
    #32418867
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
а если сделать функцию внешней (например, глобальной) и вызывать её из событий?
...
Рейтинг: 0 / 0
24.02.2004, 09:45
    #32418879
andy753
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
А вы попробуйте :) И сразу вопрос поймете, надеюсь. Если будет проблемы с пониманием все таки - пишите на мыло. Я вам одну из функций пришлю.
...
Рейтинг: 0 / 0
24.02.2004, 12:04
    #32419152
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Попробую ответить...
Но сначала попытаюсь сформулировать Вашу задачу своими словами:
Я хочу создать пользовательский объект DataWindow c расширенной функциональностью, в самом примитивном случае позволяющей возвращать некой внешней функции одно-единственное значение из конкретной ячейки нашего объекта, адрес которой (строка и столбец передается из вызывающей функции).
Правильно ли я переформулировал задачу?

Если правильно, то в такой формулировке всё элементарно, но явно это не то, что требовалось. Что-то недосказано... А, видимо, заранее не известен тип возвращаемого значения. Что делать? А взять и вернуть в функцию не только значение типа ANY, но и тип этого значения. А как узнать тип? А Describe() на что??? В вызывающей функции добавить обработчик. Предположим, эта часть решена.
Что дальше? Оказывается вызывающая функция привязана к совершенно конкретному объекту, но разве это - тупик?! Что мешает создать массив DataWindow (а ещё лучше массив структур), по какому-то, одному Вам известному признаку, выбирать из массива необходимый объект, а затем

dw .FUNCTION DYNAMIC uf_myfunc(r,c)
...
Рейтинг: 0 / 0
24.02.2004, 12:36
    #32419212
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
>urvas
Да не так. У andy753 совершенно реальная задача.
Постановка (пример):
Создать объект, имеющий ф-ю of_Препарировать_строку( ... ) : int
где аргументы:
al_RowNum
a?_?? или datastore или datawindow
Придется писать ДВЕ ф-ии, для DW и для DS, а лень, однако.
...
Рейтинг: 0 / 0
24.02.2004, 12:47
    #32419228
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Коллега Guest!
А такое понятие Overloading Вам знакомо???
...
Рейтинг: 0 / 0
24.02.2004, 12:57
    #32419245
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
>urmas
Спасибо Коллега urmas. "Overloading", как и много других слов встречал :)
Я говорил не о внешнем представлении, а о минимизации собственно кода.
Да можно создать две ф-ии с разными типами арг-ов, но это будет ДВА тела,
а не одно.
Да можно использовать ShareData, any, typeof, classname, case .... но это, IMHO, криво и является обходом, а не решением задачи.

P.S.
1. Все вышесказанное прошу рассматривать строго как IMHO
2. Лень, однако :)
3. Мечта: вот был-бы один предок у DW и DS ....
...
Рейтинг: 0 / 0
24.02.2004, 13:17
    #32419304
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Уважаемый Guest!
Прошу не путать Бабеля с Бебелем, кобеля с кабелем, а меня с мифическим urmas'ом. Это - во-первых!
Во-вторых, о каких, собственно, ДВУХ функциях идет речь? Кому эти тела принадлежат? Код какого объекта Вы хотите минимизировать?
...
Рейтинг: 0 / 0
24.02.2004, 13:31
    #32419330
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Уважаемый urvas!
Приношу свои извинения за неправильно указанный NIC.
О постановке, на мой взгляд, все сказал автор, но повторюсь:
класс n_cst_additional_func
должен предоставлять:
of_Препарировать_строку( long al_Row, datawindow adw_DW) : int
of_Препарировать_строку( long al_Row, datastore ads_DS) : int
По функциональности оба метода равнозначны.

Код n_cst_additional_func желательно минимизировать.

Поскольку все это уже напоминает flame, позволю себе откланяться
и не занимать Уважаемое сообщество.

P.S.
а ведь там "....Бабеля с Бебелем,..." был и Гегель ;)
...
Рейтинг: 0 / 0
24.02.2004, 13:36
    #32419343
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Кстати, о птичках!
Т.е., о DataWindow и DataStore.
Насколько я понимаю, DataStore - это УРЕЗАННЫЙ DataWindow c ПОСТОЯННО ВЫКЛЮЧЕННЫМ Visible. Так какая ж апатитская сила может ВЫНУДИТЬ нас использовать и тот и другой объект, вместо использования одного-единственного - DataWindow???
...
Рейтинг: 0 / 0
24.02.2004, 13:53
    #32419376
Ermak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
2 Guest
авторДа можно использовать ShareData, any, typeof, classname, case .... но это, IMHO, криво и является обходом, а не решением задачи.
P.S.
...
3. Мечта: вот был-бы один предок у DW и DS ....

Вообще-то общим предком является PowerObject.
А почему typeof() есть криво?
...
Рейтинг: 0 / 0
24.02.2004, 13:56
    #32419383
andy753
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Спасибо всем! Информации для размышления более чем Филиппу отдельно, интересный вариант, я чесно говоря так не собирался реализовывать.

TO urvas: спасибо за столь рьяное участие. Насчет "... DataStore - это УРЕЗАННЫЙ DataWindow c ПОСТОЯННО ВЫКЛЮЧЕННЫМ Visible ..." боюсь Вы не совсем правильно понимаете. DS является наследником невизуального класса, а DW является наследником окна и соответственно, с присущими ему уникальными свойствами и функционалом. У них конечно есть общий предок PowerObject - но он настолько дальний, что делать с ним особо и нечего. Совсем "динамический" код это конечно здорово, но тогда много ошибок останется в рантайме - а это не очень хотелось бы.

Засим предлагаю, закрыть обсуждение. Еще раз - ВСЕМ СПАСИБО!
...
Рейтинг: 0 / 0
24.02.2004, 13:59
    #32419387
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Обратимся к первоисточнику:

A DataStore is a nonvisual DataWindow control. DataStores act just like DataWindow controls except that many of the visual properties associated with DataWindow controls do not apply to DataStores. Because you can print DataStores, PowerBuilder provides some events and functions for DataStores that pertain to the visual presentation of the data.
However, graph functions such as CategoryCount, CategoryName, GetData, SeriesCount, and so forth depend on the visual graph control, which is not created for a DataStore object. These functions return an error value or an empty string when used with DataStores.
...
Рейтинг: 0 / 0
24.02.2004, 14:13
    #32419424
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
to urvas
А вы читали те две статьи, ссылку на 2-ю из которых привел Филипп?
...
Рейтинг: 0 / 0
24.02.2004, 14:54
    #32419534
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Да, читал!
Только Вашего вопроса, извините, Марк, не понял...
...
Рейтинг: 0 / 0
24.02.2004, 15:21
    #32419576
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
А я про CreateFrom говорю, или тогда я не понял к чему вы цитату привели.
...
Рейтинг: 0 / 0
24.02.2004, 19:13
    #32420010
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
urvas , ваши обращения к "первоисточнику" хороши, но к сожалению первоисточник не всегда поспевает за действительностью. Она такова, что начиная с РВ8 имплементация DS начала резко меняться, DS теперь не обязан иметь window handle (в силу чего, если PBVM бежит под EAServerом, то можно bind thread отключать, дабы DS local thread storage не использовал, а в дальнейшем тоже самое и не под EAServerом тоже самое можно будет делать). Datawindow с другой стороны - это ВСЕГДА window (в смысле Windows(tm)).
А вот подобные заявления: авторТак какая ж апатитская сила может ВЫНУДИТЬ нас использовать и тот и другой объект, вместо использования одного-единственного - DataWindow??? выдают непонимание темы обсуждения, так что вы это, решите для себя...
...
Рейтинг: 0 / 0
25.02.2004, 13:55
    #32420821
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Более того, Филипп! Смею уверить Вас, что мои заявления, да ещё будучи вырванными из контекста задачи, кроме всего прочего, могут ещё выдать мои и группу крови, и резус-фактор, и уровень IQ, и чего ещё.
Но! Я убежден, что в рамках поставленной задачи, когда кому-то муторно, а кому-то просто лень поддерживать несколько различных типов объектов, идея применять только DataWindow имеет не только полное право на существование, но, заметьте, и вполне работоспособна, не смотря на классовые различия, сословные противоречия и, особенно, отсутствия возможности CreateFrom...
...
Рейтинг: 0 / 0
25.02.2004, 22:18
    #32421684
andy753
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
К сожалению, Вы не правы urvas, наше приложение использует довольно активно Ягуар, но там можно использовать исключительно DS :)
...
Рейтинг: 0 / 0
26.02.2004, 09:33
    #32421875
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Уважаемый andy753!
Очень жаль, что про Ягуар выяснилось только на третьем десятке сообщений, по-моему, это очень принципиальный момент. Знай об этом раньше, я бы вообще не стал ничего говорить и спрашивать, т.к. АБСОЛЮТНО на ничего не знаю об этом кошаке...
...
Рейтинг: 0 / 0
26.02.2004, 09:38
    #32421883
andy753
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование функций для DS & DW
Код: plaintext
 "....Есть большое число функций, где в качестве параметров необходимо указывать DW-DS...." 


Обратите внимание на слово Н Е О Б Х О Д И М О !!! Все остальное без комментариев.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Дублирование функций для DS & DW / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]