A2 & Oberon GOOGLE trans to English      Помощь      Поиск      Пользователи  Файловый архив


 Страниц (1): [1]   

> Без описания
MaDzi
Отправлено: 07 Марта, 2009 - 14:19:16
Post Id



Member


Покинул форум
Сообщений всего: 102
Дата рег-ции: Дек. 2008  
Откуда: Саратов
Репутация: 0




Кто нибудь слышал про это?
http://trac.assembla.com/oberonr...dingBluebottleDB
 
 Top
sage Администратор
Отправлено: 08 Марта, 2009 - 15:24:46
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




Мне это попадалось в непереведённом виде.
А Вы похоже перевели Закатив глазки
После некоторых изменений у меня даже заработали эти модули.
MODULE MyPersonModule;
IMPORT
PS := PrevalenceSystem, XML, WebStd, Utilities := Strings, AosOut := KernelLog;

TYPE
Person* = OBJECT(PS.PersistentObject)
VAR name-: ARRAY 40 OF CHAR;

PROCEDURE Externalize(): XML.Content;
BEGIN RETURN WebStd.CreateXMLText(name)
END Externalize;

PROCEDURE Internalize(xml: XML.Content);
VAR s: Utilities.String;
BEGIN s := WebStd.GetXMLCharContent(xml(XML.Container))
END Internalize;

PROCEDURE GetReferrencedObjects*() : PS.PersistentObjectList;
BEGIN RETURN NIL
END GetReferrencedObjects;

PROCEDURE SetName*(CONST s : ARRAY OF CHAR);
BEGIN
AosOut.String("Setting Name : "); AosOut.String(s); AosOut.Ln;
BeginModification;
COPY(s, name);
EndModification;
END SetName;

END Person;

(* implementation of the above object type Person *)
VAR personTypeDesc : PS.PersistentObjectDescriptor;

PROCEDURE AddPersistentPerson*(CONST s : ARRAY OF CHAR);
VAR
person : Person;
BEGIN
NEW(person);
PS.AddPersistentObjectToRootSet(person, personTypeDesc);
person.SetName(s);
END AddPersistentPerson;

PROCEDURE GetPersistentObjectDescriptors*(): PS.PersistentObjectDescSet;
VAR descSet : PS.PersistentObjectDescSet;
descs: ARRAY 1 OF PS.PersistentObjectDescriptor;
BEGIN
descs[0] := personTypeDesc; NEW(descSet, descs); RETURN descSet
END GetPersistentObjectDescriptors;

PROCEDURE CreateNewPerson*(): PS.PersistentObject;
VAR obj: Person;
BEGIN NEW(obj); RETURN obj
END CreateNewPerson;

BEGIN
NEW(personTypeDesc, "MyPersonModule", "Person", CreateNewPerson);
END MyPersonModule.
MODULE TestPrev;

IMPORT
PS := PrevalenceSystem, AosOut := KernelLog, PM := MyPersonModule, AosCommands := Commands;

PROCEDURE AddPerson*(context : AosCommands.Context);
VAR
name: ARRAY 40 OF CHAR;
BEGIN
context.arg.SkipWhitespace(); context.arg.Token(name);
PM.AddPersistentPerson(name);
AosOut.String(name);
AosOut.Ln;
END AddPerson;

PROCEDURE PersonFilter(obj: PS.PersistentObject) : BOOLEAN;
BEGIN RETURN (obj IS PM.Person)
END PersonFilter;

PROCEDURE ShowAll*;
VAR
l: PS.PersistentObjectList;
i : LONGINT;
BEGIN
l := PS.FindPersistentObjects(PersonFilter);
FOR i := 0 TO LEN(l) - 1 DO
AosOut.String(l[i](PM.Person).name);
AosOut.Ln;
END;
END ShowAll;

END TestPrev.

TestPrev.AddPerson Person1 ~
TestPrev.AddPerson Person2 ~
TestPrev.AddPerson Person3 ~
TestPrev.ShowAll ~

PC.Compile \s \pPrevalence/ MyPersonModule.Mod TestPrev.Mod ~
SystemTools.Free TestPrev MyPersonModule WebStd PrevalenceSystem ~
Ещё нужно добавить секцию в Configuration.XML:
		<Section name="PrevalenceSystem">
<Section name="PersistentObjectModules">
<Setting name="MyPersonModule" value="MyPersonModule"/>
</Section>
</Section>
Всё замечательно работает до первой выгрузки PrevalenceSystem. Огорчение
Выгрузка тоже не происходит гладко Огорчение
 
 Top
sage Администратор
Отправлено: 08 Марта, 2009 - 19:50:20
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




Похоже всё заработало как надо!
Проблема была в методе Person.Internalize
Его можно переписать так:
		PROCEDURE Internalize(xml: XML.Content);
VAR
chars: XML.ArrayChars;
s: Utilities.String;
BEGIN
IF xml # NIL THEN
chars := xml(XML.ArrayChars);
s := chars.GetStr();
COPY(s^, name)
END
END Internalize;

(Добавление)
Если я правильно понял, фактически пример показывает как работать с одной таблицей базы, скажем Persons.
Как в таком случае организовать две таблицы, связанные по полю ID, к примеру? С помощью механизма фильтров?
 
 Top
MaDzi
Отправлено: 08 Марта, 2009 - 22:13:35
Post Id



Member


Покинул форум
Сообщений всего: 102
Дата рег-ции: Дек. 2008  
Откуда: Саратов
Репутация: 0




Насколько я понимаю, две таблицы связываются на уровне объектов в памяти. Здесь классические реляционные принципы уже не работают.
 
 Top
sage Администратор
Отправлено: 14 Марта, 2009 - 15:19:09
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




MaDzi пишет:
Здесь классические реляционные принципы уже не работают.
Думаю классические релляционные принципы имеют место и в случае объектов в памяти. По сути дела, каждый объект с полями является ни чем инным как описанием одной таблицы в базе данных. Запись в базе соответствует экземпляру объекта. Поля объектов, являющиеся указателями, видимо выступают в роли связей между таблицами.
Реляционные приципы ведь служили для уменьшения объёма базы данных, путём исключения дублирования одинаковых данных в разных таблицах.
Продумывая набор объектов при описании какой-либо предметной области мы так или иначе можем и должны в какой-то степени руководствоваться релляционными принципами для минимизации используемой памяти.

Пример из реальной жизни:
http://a2os.org.ua/forums/topic....43065#1236943065
 
 Top
BohdanT Администратор
Отправлено: 14 Марта, 2009 - 15:24:05
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




sage пишет:
Пример из реальной жизни:

вот блин.... Ха-ха
 
 Top
MaDzi
Отправлено: 14 Марта, 2009 - 18:05:54
Post Id



Member


Покинул форум
Сообщений всего: 102
Дата рег-ции: Дек. 2008  
Откуда: Саратов
Репутация: 0




sage пишет:
MaDzi пишет:
Здесь классические реляционные принципы уже не работают.
Думаю классические релляционные принципы имеют место и в случае объектов в памяти. По сути дела, каждый объект с полями является ни чем инным как описанием одной таблицы в базе данных. Запись в базе соответствует экземпляру объекта. Поля объектов, являющиеся указателями, видимо выступают в роли связей между таблицами.
Реляционные приципы ведь служили для уменьшения объёма базы данных, путём исключения дублирования одинаковых данных в разных таблицах.
Продумывая набор объектов при описании какой-либо предметной области мы так или иначе можем и должны в какой-то степени руководствоваться релляционными принципами для минимизации используемой памяти.

Пример из реальной жизни:
http://a2os.org.ua/forums/topic....43065#1236943065

Позвольте не согласиться. Некоторые из правил Кодда, несомненно, имеют место быть, но их не достаточно, чтобы говорить о реляционной модели. Преимущество объектной модели - в гибкости и отказе от необходимости всё держать в таблицах. Если нет таблиц, то это уже объектная, а ещё лучше если иерархическая модель.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« Документы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Locations of visitors to this page
[Valid RSS]

RSS

Valid CSS!


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0257]     [ Gzipped ]