powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите спроектировать классы
25 сообщений из 27, страница 1 из 2
Помогите спроектировать классы
    #35216241
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди помогите создать классы для многомерных свойств
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Class Таксон.к1ц Extends (%Persistent, %Populate, %XML.Adaptor) [ ClassType = persistent, ProcedureBlock ]
{

Property наз As %String [ MultiDimensional ];

Property назЛ As %String[ MultiDimensional ];

}

узлов в глобале буит 14, но первые 4 уровня не изменяемые примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Set ^Таксон.к1цD( 1 )=$ListBuild("Животное","animal") // первый уровень
Set ^Таксон.к1цD( 1 , 1 )=$ListBuild("Многоклеточные","mnog") // второй уровень
Set ^Таксон.к1цD( 1 , 1 , 1 )=$ListBuild("Хордовые","xord") // третий
Set ^Таксон.к1цD( 1 , 1 , 1 , 1 )=$ListBuild("Позвоночные","pozv") //  4 
Set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 )=$ListBuild("Челюстноротые","chelust") //  5 
Set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Рыбы","Fish") //  6 
Set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Костные рыбы","Fish kost") //  7 
Set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Лучиперые","luch") //  8 
Set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Ганоидные","gan") //  9 
set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Осетрообразные","oset") //  10 
set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Осетровые","oset1") //  11 
set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Осетры","oset2") //  12 
set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 )=$ListBuild("Осетр","oset3") //  13 
set ^Таксон.к1цD( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 )=$ListBuild("Северокаспийская севрюга","sev") //  14 


и скажите, обязательно ли объявлять глобаль как класс?, что нужно чтобы глобаль хранилась в базе и надежно ли хранить данные в глобалях?
Как можно объявить в классах следующий под уровень?
Мне просто нужно выстроить иерархию
1 уровень - это класс Царство
2 уровень - это класс Подцарство
3 уровень - это класс Тип

и в зависимости от ситуации неокоторые уровни могут пропускаться
Например Царство->Тип а в уровне Подцарство нет данных.

Если что сформулировал не так прошу прощения.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35216334
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

В данном случае я не вижу особого выигрыша от использования иерархической
структуры хранения. Если бы я писал эту систему, сделал бы примерно так:

Class Таксон.ОбъектТаксонии Extends (%Persistent, %Populate, %XML.Adaptor) [
ClassType = persistent, ProcedureBlock ]
{

Property НазваниеПоРусски As %String;

Property НазваниеПоАнглийски As %String;

Property ВходитВ As Таксон.ОбъектТаксонии;

Property Уровень As Таксон.Уровень;

/// Это свойство - для ускорения поиска, например если нужно выбрать всех
хордовых. Его нужно вычислять при сохранении.
Property СписокВсехПредков As %String;

}

> и скажите, обязательно ли объявлять глобаль как класс?, что нужно чтобы
> глобаль хранилась в базе и надежно ли хранить данные в глобалях?
Как класс объявлять не обязательно, но и работать с данными тогда придется через
низкоуровневые интерфейсы (без SQL)

> Как можно объявить в классах следующий под уровень?
Для реализации нужной тебе структуры потребуется 14 классов и работа напильником.

Любви.
logist (Сергей Шутов)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35216552
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logistне вижу особого выигрыша от использования иерархической
структуры хранения.
Полностью поддерживаю.
Придумывать себе лишний гемор можно если обработка данных (даже прямым доступом) перестала укладываться (например) в сутки.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35216698
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, про сутки это конечно слишком.
Но хранить я все-таки предпочитаю стандартным способом, обычно больше не надо.

А вот если нужно как-то хитро обрабатывать, то можно уже вкачать в свои структуры и крутить-вертеть сколько надо. Но здесь не этот случай.
Сделаете слишком изощренное хранение(даже если оно будет удобным - а это не тот случай) - будете мучаться при появлении новых задач или изменении текущих.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35216897
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.хранить я все-таки предпочитаю стандартным способом, обычно больше не надо
Полностью поддерживаю.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217293
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
таким образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Class Таксон.ОбъектТаксонии Extends (%Persistent, %Populate, %XML.Adaptor) [ClassType = persistent, ProcedureBlock ]
{

Property НазваниеПоРусски As %String;

Property НазваниеПоАнглийски As %String;

Property ВходитВ As Таксон.ОбъектТаксонии;

Property Уровень As Таксон.Уровень;

/// Это свойство - для ускорения поиска, например если нужно выбрать всех
хордовых. Его нужно вычислять при сохранении.

Property СписокВсехПредков As %String;

}


в Этом свойстве что хранить? - Property ВходитВ As Таксон.ОбъектТаксонии;

в этом как я понял к какому уровню относится Property Уровень As Таксон.Уровень;

>/// Это свойство - для ускорения поиска, например если нужно выбрать всех хордовых. Его нужно вычислять при сохранении.
чуточку по подробнее пожалуйста.

в этом св-ве id всех предков да? - Property СписокВсехПредков As %String;

Просто основная особенность Cache (у меня Cache 5) многомерные массивы, и когда допустим встанешь на 4 уровне и изменишь имя Позвоночные допустим на Пресмыкающиеся и во всей иерархии это имя изменится.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217303
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и не надо замарачиваться с глобалами? правильно
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217318
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смотреть в релиционной модели т.е. таблица буит выглядить так

________________________________________
| id |назР | назЛ | входит | уровень| предки |
----------------------------------------------
| 4 | a | b | ? | 4 | 1,2 ,3|
----------------------------------------------
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217339
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смотреть в релиционной модели т.е. таблица буит выглядить так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
_______________________________________________
| id  |назР | назЛ | входит | уровень| предки   |
-------------------------------------------------
|   1   | a1 |   b1  |    ?   |    1     |          |
-------------------------------------------------
|   2   | a2 |   b2  |    ?   |    2     |   1        |
-------------------------------------------------
|   3   | a3 |   b3  |    ?   |    3     |   1  , 2     |
-------------------------------------------------
|   4   | a4 |   b4  |    ?   |    4     |   1  , 2  , 3  |
-------------------------------------------------
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217484
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RustamKсмотреть в релиционной модели т.е. таблица буит выглядить так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
_______________________________________________
| id  |назР | назЛ | входит | уровень| предки   |
-------------------------------------------------
|   1   | a1 |   b1  |    ?   |    1     |          |
-------------------------------------------------
|   2   | a2 |   b2  |    ?   |    2     |   1        |
-------------------------------------------------
|   3   | a3 |   b3  |    ?   |    3     |   1  , 2     |
-------------------------------------------------
|   4   | a4 |   b4  |    ?   |    4     |   1  , 2  , 3  |
-------------------------------------------------


Что за поле "входит"?

Точно ли нужно поле "уровень"? В такой форме при редактировании дерева будут аномалии обновления.
Зато возможно нужно толе "тип записи", (вид, род, царство)

Предков всех заводить не надо, как вы с этим потом сможете работать? Лучше одно поле на ближайшего предка, тогда можно будет работать с этим как со ссылкой.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217567
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПросто основная особенность Cache (у меня Cache 5) многомерные массивы
Нет. И вообще по-возможности избегайте многомерных полей в классах.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217631
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Class Taxon.Type Extends %Persistent
{

Property Name As %String(MAXLEN =  250 );

Index NameIndex On Name;

}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Class Taxon.Atom Extends %Persistent
{

Property Name As %String(MAXLEN =  250 );

Property RusName As %String(MAXLEN =  250 );

Property Up As Taxon.Atom;

Property Type As Taxon.Type;

Index NameIndex On Name;

Index RusNameIndex On RusName;

Index UpIndex On Up;

Index TypeIndex On Type;
}

Индексы возможно нужно переделать, но это зависит от использования.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217900
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.
Маленькая просьба поясни пожалуйста в свойствах что хранить
Код: plaintext
1.
2.
3.
Property Up As Taxon.Atom; // это для родителя?

Property Type As Taxon.Type;  // это уровень, да?

а индексы для чего?
Код: plaintext
1.
2.
3.
4.
5.
6.
Index NameIndex On Name;

Index RusNameIndex On RusName;

Index UpIndex On Up;

Index TypeIndex On Type;
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35217948
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RustamKа индексы для чего?
Не циклись на индексах... Делай их по мере надобности.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35219203
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RustamK
Property Up As Taxon.Atom; // это для родителя?

Да


RustamK
Property Type As Taxon.Type; // это уровень, да?

Не совсем. насколько я смутно помню там может быть такая иерархия типа Царство-Подцарство Тип-Вид-Подвид-Род....

Но например некоторых цепочек может не быть, например сразу Вид-Род.
Вот типа и значит тип в иерарции, то есть какая из этих ступенек. Цифрами не шифрую, т.к. вид может быть на 10 и на 8 ступеньке. Но биология я учил давно, могу ошибаться.

RustamK
а индексы для чего?

Для ускорения выборок
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35219208
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но как заметил krvsa индексы есть смысл делать уже после того, как будут известны запросы.
Я показал наиболее простой и универсальный вариант
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35219282
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.
А можешь подсказать какое нибуть готовое решения на явескрипте для генерации иерархического дерева. тем более, что Видов животных будет порятка 450 и подгружать придется по мере необходимости.
Мне нужно реализовать это как Web приложения.
За рание благодарен, очень сильно помог.
А если у меня последний уровень Вид будет хранить сведения о конкретном животном, описалово всякое о нем. Я могу сделать ссылку на него, правильно
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35219470
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое примерно делал, но решение для другой структуры классов, там еще много лишнего и сделано только для IE6. Приводить его полностью смысла нет. Если другие участники форума не помогут, то как будет время - может быть нарисую .
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35222622
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Class Taxon.Type Extends (%Persistent,%Populate)
{

Property Name As %String(MAXLEN =  250 );

Index NameIndex On Name;

}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Class Taxon.Atom Extends (%Persistent,%Populate)
{

Property Name As %String(MAXLEN =  250 );

Property RusName As %String(MAXLEN =  250 );

Property Up As Taxon.Atom;

Property Type As Taxon.Type;

Index NameIndex On Name;

Index RusNameIndex On RusName;

Index UpIndex On Up;

Index TypeIndex On Type;

}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<html>
<head><title>дерево</title>
<script language=javascript>
function loadNode(parentHTML,nID)
{var ret,phtml;
 phtml=document.getElementById(parentHTML);
 if (phtml.style.display=='none')
    {phtml.style.display='';
	 var ret=#call(..LoadNode(parentHTML,nID))#;
 
    }
 else 
    {phtml.style.display='none';
	 phtml.innerHTML='';
    }
}
</script>
</head>
<body>
<div style='width=100%'>
<div onclick=loadNode('nodeHead','') style='color:blue;cursor:hand'>...</div>
	<div id='nodeHead' style='display:none;'></div>
</div>
</body>
</html>
 <script language=cache method=LoadNode arguments="parentHTML:%String,nId:%String">
n name,psid,sname,uval
w !,parentHTML_".innerHTML='';"
&sql(declare node cursor for select id,name,rusname into :nid,:name,:rname from Taxon.Atom where (Up is null and :nId is null) or (Up=:nId) order by name)
&sql(open node)
&sql(fetch node)
w:SQLCODE= 100  !,parentHTML,".insertAdjacentHTML('beforeEnd','<li><span>(пусто)</span>');"
while SQLCODE= 0 
    {;w !,"alert("_parentHTML_");"
     w !,parentHTML,".insertAdjacentHTML('beforeEnd','<li><span onclick=loadNode(""n",nid,""",""",nid,""") style=""color:blue;cursor:hand;"">",name," (",rname,")</span>');"
     w !,parentHTML,".insertAdjacentHTML('beforeEnd','<div id=n",nid," style=""margin-left:15px;display:none;"">');"
	 &sql(fetch node)
    }
&sql(close node)
</script>

заполняем. Несколько вызовов на один класс - чтобы сформировалось дерево.
Код: plaintext
1.
2.
3.
4.
5.
d ##class(Taxon.Type).%Populate( 4 )
d ##class(Taxon.Atom).Populate( 1 )
d ##class(Taxon.Atom).Populate( 5 )
d ##class(Taxon.Atom).Populate( 50 )
d ##class(Taxon.Atom).Populate( 200 )
Работает именно так, как заказывали - подгрузка в нужное время.
Если у вас не заработает, то я скорее всего помочь не смогу, так как не знаю всех возможных глюков JS и отлаживаю его с трудом.
Проверялось в IE6, в опере например не работает. Получено обрезкой рабочего кода.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35222632
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка
Код: plaintext
w !,parentHTML,".insertAdjacentHTML('beforeEnd','<li><span onclick=loadNode(""n",nid,""",""",nid,""") style=""color:blue;cursor:hand;"">",..EscapeHTML(name)," (",..EscapeHTML(rname),")</span>');"

В первоначальном варианте впрямую выводятся поля из базы, в этом текстовые поля проходят ..EscapeHTML для замены кавычек, так более безопасно.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35227390
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как оптимально всего подняться с конкретного класса на самый вверх и вывести на страничку все данные с верху вниз.
Оптимальное решение сохранить id родителей и в обратном порядке вывести.Как использовать LB() или массив какой нить
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35227522
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Капец, вы сами то свои мысли понимаете? Перескажите на русском.
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35227595
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора как оптимально всего подняться с конкретного класса на самый вверх и вывести на страничку все данные с верху вниз.
Оптимальное решение сохранить id родителей и в обратном порядке вывести.Как использовать LB() или массив какой нить
Прошу не считать меня нудным,
но пока вы будете думать и выражать мысли так путано, вам будет очень тяжело написать рабочую программу.

Учитесь думать и высказываться точно и однозначно, человек еще может понять неоднозначность или задать наводящие вопросы, а компьютер - пока нет.

Программирование требует не только знаний и опыта, но и своего способа мышления.

Позволите, попробовать разобрать ваше высказывание с точки зрения русского языка

автора как оптимально всего подняться с конкретного класса на самый вверх и вывести на страничку все данные с верху вниз.

Что такое подняться с конкретного класса? Класс у нас один вроде (второй побочный не считаем).
Что такое "все данные" и как это связано с "поднятием"?

авторОптимальное решение сохранить id родителей и в обратном порядке вывести.Как использовать LB() или массив какой нить
Вы значение слово "оптимальное" примерно представляете?
Зачем вы подсовываете тем, у кого просите помощи свои обрывки мыслей о решении?
Думаете, они нам нужны или как-то помогут?

Подозреваю, вы хотели сказать - для данного конктетного id объекта нужно вывести всю иерархию объектов в порядке от родителей к потомкам? Так? Если так, что в чем проблема? Вы какой-нибудь язык программирования кроме каше знаете?
Или нужно что-то другое?
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35227792
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да вы правы, просто инет отрубили и все ни как немогу написать вопрос корректно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<script language="Cache" runat="server">
  n nId
  set nId=%request.Get("OBJID")
set stroka=""
while nId'=""
 {
 &sql(declare node cursor for select id,rusname,latname,up into :nid,:name,:rname,:upn from Taxon.Atom where  (ID=:nId) order by latname)
 &sql(open node)
 &sql(fetch node)
 while SQLCODE= 0 
    {
    w name," "
    w upn,"<br>"
    s stroka=$LB(upn)
  	 &sql(fetch node)
    }
 &sql(close node)
set nId=upn
//w $list(stroka, 1 )
 }
//SET X=$LISTBUILD(stroka)
//w $list(x, 1 )
</script>

автор Блок А.Н. Подозреваю, вы хотели сказать - для данного конктетного id объекта нужно вывести всю иерархию объектов в порядке от родителей к потомкам
совершенно верно согласно моему коду получается так,что
я получаю конкретный id
Код: plaintext
 set nId=%request.Get("OBJID")
и вывожу родительские, но получается в обратном порядке, пытаюсь создать список всех ID и вывести как надо
Пример приложил в картике
...
Рейтинг: 0 / 0
Помогите спроектировать классы
    #35227809
RustamK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть вопроса, как создать список? с этими id. У меня id суммируются
Код: plaintext
s stroka=stroka+","+upn
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите спроектировать классы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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