powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Супер всего один :( ?
25 сообщений из 27, страница 1 из 2
Супер всего один :( ?
    #36629161
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Допустим есть классы A, B, C.
Класс B был создан на основе супера А.
Некоторое время мы создавали экземпляры В... в любой момент мы могли сделать выборку
Код: plaintext
Select * from A
и в результате видеть там и экземпляры В.

Шло время... нам потребовалось внести коррективу и у В появился новый супер С.
Но теперь при
Код: plaintext
Select * from C
Мы не видим там экземпляров В.

1) Это нормально, как вы считаете?
2) Если нет, то, что я делаю неправильно?
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629176
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это фича.

Наследование хранения (глобалов, где оно будет храниться, индексов и т.д.) идет только от первого суперкласса.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629190
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н. ,
а в ваших проектах пригодилось бы распространение наследование хранения на все суперы?

З.Ы.
:(
Капец...
Только думал, что всё прекрасно, а тут оказывается есть "фичи".
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629247
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я технически не представляю себе это.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629405
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZLOI13З.Ы.
:(
Капец...
Только думал, что всё прекрасно, а тут оказывается есть "фичи".

Можете привести пример систем где есть подобные фичи ? Поди документ-ориентед причем на самом деле у всех документов там один невидимый предок ?
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629668
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.
Я технически не представляю себе это.

Но если можно для всех первых родителей, то почему нельзя для всех?
Ладно, Видимо вы знаете структуру Cache глубоко, поэтому вам виднее, конечно, и я не вижу каких-то камней. Теперь надо будет искать альтернативу Cache. Но чувствую, что её нет.

Ptn
Можете привести пример систем где есть подобные фичи ? Поди документ-ориентед причем на самом деле у всех документов там один невидимый предок ?
Если нет альтернативы, это не означает, что это нормально.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629677
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну смотрите

Класс А хранится в хранилище ^AD
Класс С хранится в хранилище ^CD

Где предлагаете хранить класс ^B?

Запросы для класса C делаются на основе данных о его структуре, а не данных о структуре его наследников, правильно? Значит делая запрос по классу С мы не знаем, что один из унаследованных классов хранится в хранилище ^AD, поэтому он запросе будет невиден.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629684
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Ну смотрите
Класс А хранится в хранилище ^AD
Класс С хранится в хранилище ^CD
Где предлагаете хранить класс ^B?
Запросы для класса C делаются на основе данных о его структуре, а не данных о структуре его наследников, правильно? Значит делая запрос по классу С мы не знаем, что один из унаследованных классов хранится в хранилище ^AD, поэтому он запросе будет невиден.
^В у нас хранится в ^AD?
Тогда очевидно надо хранить ссылки на него в ^CD. Он же ведь не боком для С, тот ведь тоже папа, как и А.
В общем я понял, что инфраструктура Cache не позволяет реализовать то, что мне нужно. Обидно, что потратил время на изучение сей системы. Ушёл от реляционной модели как раз потому что там многие вещи нельзя было реализовать или только с большими сложностями.
Получается, чтобы найти экземпляры какого-то класса, надо прошерстить все классы на предмет входимости его к ним в суперы, сформировать запрос с их участием и убрать дублированные.
Т.е. и работа со строками здесь и циклы и куча запросов... :(
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629707
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну попробуйте наследовать все от одного класса, будет все в одном хранилище.

А если вы так завязаны на объектной парадигме, то почему так упираете на SQL?
Там тогда все в методах реализовывать (правда помедленнее будет через объекты, но IS вроде говорили, что сильно оптимизировали работу с ними)
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629715
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще,
после
>>Шло время... нам потребовалось внести коррективу и у В появился новый супер С.
Создает ощущение, что у вас давно работает промышленная система на каше

после
>>Обидно, что потратил время на изучение сей системы. Ушёл от реляционной модели
кажется, что вы что-то про каше почитали и что-то маленько попробовали, но до конца в ней не разобрались

Есть подозрение, что вы немного преувеличиваете свои потери.
Если бы вы работали с каше реально и дольше, то увидели, что там очень много вещей, которые сделаны ЛОГИЧНО, а не ТАК КАК МНЕ ХОЧЕТСЯ.
И, я считаю, это правильно. И это не проблема каше, это проблема того, кто не понимает логику ;-)
И более того, это свойство, наверное, всех серьезных систем.

При работе реальными, уже конкретными проектами часто получается так, что разработчики идут на поводу "хотелок" заказчика, которые с его точки зрения совершенно незначительные и абсолютно нормальные, а с точки зрения системы ломающие логику, создающие заплатки или заложенные мины в будущем. Я думаю, каше не из этих :-)

Ни в коем случае не хотел вас обидеть.
В вашем случае скорее всего решение просто в другом, а не в множественном наследовании.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629730
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Ну попробуйте наследовать все от одного класса, будет все в одном хранилище.
А если вы так завязаны на объектной парадигме, то почему так упираете на SQL?
Там тогда все в методах реализовывать (правда помедленнее будет через объекты, но IS вроде говорили, что сильно оптимизировали работу с ними)
Ну у меня примерно так и получается. Есть общий класс Entity от него прочие идут, например, Document, ну а от документа наследуется схема и т.д.

Но вот допустим у меня есть класс от Entity, но он ещё и реальный объект. Т.е. имеет координаты и массу. Вот допустим есть у меня проект автоматизации (я пишу расширение для автокада, чтобы ускорить процесс проектирования систем АСУ ТП), хочу я узнать какие объекты реального мира в нём участвуют, чтобы допустим по их координатам и 3д моделям создать общую 3д модель всего проекта. Чтобы получить все экземпляры классы которых наследуются от реального объекта придётся перетрести все ClassDefinition, сформировать единый запрос, выкинуть дубли и т.д. Причём Super - это строка, т.е. придётся ещё со строками работать. Конечно, всё это реализуемо, но не так просто, как хотелось бы, вот я о чём.

На SQL я не упираюсь, просто как пример привёл.

Вообще хочется создать систему, чтобы она хранила не просто данные, а полную информацию о сущностях, с которыми оперирует система, их отношения и проч. И чтобы потом можно было внести информацию из справочников и использовать её как систему принятия решений. Ну типа чтобы она могла сама предложить установить такие-то лотки на таких-то стенах, провести такой-то кабель, потому что помещение скажем с высокой влажностью и там ЭМ помехи высокие. И всё это на основе знаний о данном помещении, его плане, лотках, правилах установки лотков и т.д. Просто я сначала делал систему на основе РСУБД и меня достало добавлять новые сущности и переписывать запросы при малейшем изменении системы. Всё упёрлось в создание объектно-реляционной структуры БД, тогда я и решил найти готовые реализации ОО подхода.

Мне не нравится, что в Cache мало информации об отношениях между классами, Super - это строка... а почему не массив строк? Почему нет списка дочерних классов, это тоже бы не хило помогло при написании методов. Вообще удивительно, что никто из мамонтов (Misrosoft) не занимается развитием ООСУБД.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629738
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.
>>Обидно, что потратил время на изучение сей системы. Ушёл от реляционной модели
кажется, что вы что-то про каше почитали и что-то маленько попробовали, но до конца в ней не разобрались
...
И более того, это свойство, наверное, всех серьезных систем.

Согласен. Я просто попробовал. Написал несколько приложений. Не правильно излагаю свои мысли, пожалуй. С этим проблема. Пока всё в начале и я хочу быть уверенным, что в будущем не будет фатальных проблем.

Просто по мере роста системы её классы будут расширятся новыми свойствами, отношениями, старые будут заменяться и т.д. Вот мне понравилось, что я уже сейчас смог сделать универсальную форму для создания/редактирования объектов. Используя РСУБД я бы такого не смог. Однозначно.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629740
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

Ну и спасибо за ваши комменты. У меня совсем нет желания спорить, мне нужна помощь.
Кстати, а какого рода вы систему разрабатываете на Кашэ?
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629774
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СибирьЭнерго, система работы с населением. Там много всего, гораздо больше, чем кажется на первый взгляд.
Разрабатывали не мы, мы только дорабатываем и поддерживаем, правда объем переработок уже, пожалуй, превысил объем начальной системы ;-) Как минимум один из первоначальных разработчиков на форуме есть.

В вашем случае не совсем понял, что у вас не получается, я так понял, что у вас так и так все наследуется от класса А?

Не совсем понятно, что значит в каше мало информации о взаимодействии классов?
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629785
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZLOI13,

Такая реализация хранения данных в БД.
Было много обсуждений о специфике множественного наследования когда Каше только вышла и еще как-то не устоялось, что там будет внутри.
Чисто логически большинство, насколько я помню (или потому что я так думал), пришли к выводу, что множественное наследование имеет смысл только для методов.
Множественное наследование структур хранения данных и хранимых свойств приводит к множеству логических проблем как при первоначальном проектировании, так и при внесении изменений в готовый проект.
Самое простое - одинаковые имена свойств в суперклассах - уже приводит к фейерверку фантастических предположений, как это будет работать.
То есть дополнительно наследовать имеет смысл только классы - библиотеки методов.
И лучше следить за именами методов, чтобы не было одинаковых в наборе суперклассов. А то опять фантазии, зависящие от версии Каше.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629786
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысли вслух:
Судя по встроенной системе документации на классы, получить список наследников не представляется большой проблемой...
Множественное наследование в большинстве распространенных ОО языков не поддерживается, а тут база данных...
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629794
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.СибирьЭнерго, система работы с населением. Там много всего, гораздо больше, чем кажется на первый взгляд.
Разрабатывали не мы, мы только дорабатываем и поддерживаем, правда объем переработок уже, пожалуй, превысил объем начальной системы ;-) Как минимум один из первоначальных разработчиков на форуме есть.

Круто :)
А у вас есть какая-то концептуальная схема вашего проекта? Имеется ввиду вы пользуетесь каким-то средствами моделирования?

Блок А.Н.
В вашем случае не совсем понял, что у вас не получается, я так понял, что у вас так и так все наследуется от класса А?

Да, наверное,тут вопрос в реализации, если я не буду ошибаться в последовательности суперов, то и проблем не будет. Да, зря я начал панику.

Блок А.Н.
Не совсем понятно, что значит в каше мало информации о взаимодействии классов?
Упс, SubclassOf для этого есть. Не посмотрел в запросах ClassDefinition. :\
Ладно, буду ковырять дальше. Извините, что запаниковал. Спасибо за комменты.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629795
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И точно, в версии 2008 у %Dictionary.ClassDefinition есть запрос
SubclassOf(super As %String, initval As %String = "")
Selects Name As %String(MAXLEN=256) As ClassName
The SubclassOf query produces a list of classes that are subclasses of the super class starting the search at initval. For example this allows you to find all the subclasses of %CSP.Page very easily.
:)
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629796
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, всем спасибо за ваши замечания.
Просто я малость растерялся, потому что не знаю как правильно.

Хочется чтобы в базе были все онтологии, с которыми будет работать система. И столько вариантов их реализации, что голова кругом.

Постараюсь больше глупости не писать.

Хороших вам выходных :)
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629815
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерко в помощь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Class User.A Extends %Persistent {
///Список подклассов в виде $LB списка
///аналогично можно сделать в виде %ListOfDatatypes или др
ClassMethod GetChildren() as %String [CodeMode=generator]{
	s %code= 0  
	s rs=##class(%ResultSet).%New("%Dictionary.ClassDefinition:SubclassOf")
	d rs.Execute(%class)
	s list="",first= 1 
	while rs.Next() {
		s child=$G(rs.Data("Name"))	
		s:'first list=list_"," s:first first= 0   ;простой, а не ansi список
		s list=list_child
	}
	d rs.Close(),rs.%Close()
	$$$GENERATE("  q $LFS("""_list_""", "","") ")
	Q $$$OK
}
}
Код: plaintext
1.
Class User.B Extends User.A { }
Код: plaintext
1.
Class User.С Extends User.B { }
Тест:
Код: plaintext
1.
 w !,"count(A): ",$LL(##class(User.A).GetChildren()), !,"count(B): ",$LL(##class(User.B).GetChildren())
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629829
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,
угу у меня нечто подобное получилось.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629911
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZLOI13Но если можно для всех первых родителей, то почему нельзя для всех?

Почему нельзя ? Можно - вводите одного мега -супер-предка и вуаля. Вот только будьбе готовы что если вам захотеться вынести объекты таблицы С в отдельную базу/машину у вас ничего не получиться.

Вы поймите простую вещь когда вы пишете SELECT вы работаете с реляционной СУБД которая знать ничего не знает про ООП.

Без единого супер предка ваше требование означает хранить ДВЕ записи для ОДНОГО объекта - одну в таблице потомков А, вторую в таблице потомков С.

А две записи для РСУБД - это уже лажа. Все подобные техники одним ООП реализуются только на бумаге и в ряде случаем в оперативной памяти в момент выполнения.

На уровне СУБД требуемое решается отдельными архитектурными решениями - например введением таблицы индекса по все документам/ классом.

Либо просто приложение строиться таким образом что бы необходимость в одновременных запросах select * from A и select * from С не возникало.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629914
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintМысли вслух:
Судя по встроенной системе документации на классы, получить список наследников не представляется большой проблемой...

Не представляет сложности построить граф и в момент выполнения выяснить предков и потомков на уровне метаданных - то есть вы на уровне имен классов узнаете кто от кого наследуется.

Но как только вы опускаетесь до данных - до конкретных экземляров классов - будьте готовы к работе с разными таблицами.

doublefintМножественное наследование в большинстве распространенных ОО языков не поддерживается, а тут база данных...

На самом деле можно написать интеллектуальный запрос - который будет выяснять всех классы потомки и делать запросы самостоятельно.

Например select DocumentNum,Summ from С выясняет что его потомки на уровне кода (то есть ООП) имеются в таблице класса А и собственно таблицы С

и сам выполняеться

select DocumentNum,Summ from C
union
select DocumentNum,Summ from A where x__classname="~B~"

Но это имеет смысл только для заранее известных запросов. Оформляется в виде Query MyUinionExtent в классе C и пользуетесь через %ResultSet или call в ODBC
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629917
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZLOI13Имеется ввиду вы пользуетесь каким-то средствами моделирования?

Полгода рисовали схемки в Rational Rose в начале проекта - прикольно, но IMXO оно того не стоило.
...
Рейтинг: 0 / 0
Супер всего один :( ?
    #36629929
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn, палитесь, вопрос мне был

Нет, не используем, тз на доработку тоже далеко не всегда есть, обычно приходят и говорят - "вот тут у вас проблема". Мы говорим "ага, понятно", и переделываем. А если нам кажется, что нам предлагают сделать что-то нехорошее и противоестественное, или оно вносит какую-то нелогичность в систему, а потом мы сами же будет виноваты, то можем потребовать и ТЗ.
К слову сказать, это больше способ отсрочить выполнение и заставить человека разобраться, чего же он хочет. В итоге делаем стараемся делать все "по понятиям" а не "по документам". Так получается лучше и быстрее. Правда у нас группа маленькая.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Супер всего один :( ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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