nsutextbook (1037554), страница 15
Текст из файла (страница 15)
Работа со свойствами ссылками на хранимые объектыДанные, на которые указывает свойство ссылка, существуют как независимые объекты в оперативной памяти. Для установки связи между двумя объектами, объект, на который ссылаются, должен быть связан со свойством-ссылкой другого объекта. Как толькоэта связь установлена, можно изменять объект, на который ссылаются либо прямо, либоиспользуя точечный синтаксис.6.5.1. Связывание объекта со свойством ссылкойСуществует два способа ассоциирования объекта со свойством ссылкой. Если объектв памяти, можно использовать его OREF. Если он на диске, можно использовать его объектный идентификатор (ID).Для объекта в памяти используется следующий синтаксис:Set oref.PropertyName = RefOrefгде oref – ссылка OREF конкретного объекта, PropertyName – имя свойства-ссылки,RefOref – это ссылка OREF на объект, с которым устанавливается связь.Например, для назначения автомобилю Car владельца, объекта типа Person, используем следующий код:Set car.Owner = personгде car – ссылка OREF на объект Car и person ссылка OREF на объект Person.Если объект хранится на диске и имеет значение ID, используется следующий синтаксис:Do oref.PropertyNameSetObjectId(RefId)где oref – ссылка OREF на определенный объект, PropertyName – имя свойствассылки на объект, RefId – это ID объекта, на который ссылаются.
Для каждого свойствассылки существуют методы SetObject (использует значение OID) и SetObjectId (использует значение ID). Например, чтобы назначить владельца (ссылку на объект типа Person)конкретному автомобилю (объекту типа Car) используется следующий код:Do car.OwnerSetObjectId(PersonId)Где car ссылка OREF на объект Car и PersonId это значение ID сохраненного объектаPerson.Для извлечения значений свойств хранимых объектов используются методы GetObject и GetObjectId.656.5.2. Изменение свойств объектов, на которые есть ссылка, с использованием точечного синтаксисаКак только объект ассоциирован со ссылкой, он может быть изменен с использованием точечного синтаксиса:Set oref.PropertyName.RefPropertyName = valueГде oref – ссылка OREF на исходный объект, PropertyName – имя свойства-ссылкина другой объект, RefPropertyName – имя свойства связываемого по ссылке объекта, которое требуется изменить, и value – новое значение.Например, чтобы установить значение свойства Name объекта Owner через экземпляр объекта Car, используйте следующий код:Set car.Owner.Name = "Иванов Александр "Где car – это OREF-ссылка на объект класса Car и " Иванов Александр " значениесвойства.6.6.
Работа со свойствами ссылками на встраиваемые объектыВстраиваемые объекты существуют как самостоятельные объекты в оперативной памяти, но сохраняются как часть хранимых объектов на диске. Существует два способаизменения свойств встраиваемых объектов:• Создать экземпляр встроенного объекта и связать этот экземпляр со значением свойства объекта-контейнера.• С помощью точечного синтаксиса.6.6.1. Связывание объекта со свойством встроенного объектаПервый способ – это создать встроенный объект и заполнить его свойства:1. Создать экземпляр встроенного объекта с помощью метода класса %New;2.
Связать OREF встроенного объекта со свойством-контейнером, используяследующий синтаксис:Set oref.PropertyName = EmbeddedOrefгде oref – ссылка OREF на объект-контейнер, PropertyName – имя свойства объектаконтейнера типа встроенного объекта, EmbeddedOref – ссылка OREF на встраиваемыйобъект;3. Заполнить значениями свойства объекта, используя основной синтаксис дляустановки значений.Замечание: можно заполнять свойства встраиваемого объекта до связи его с объектом контейнером.Например, создается новый объект типа Address:Set address = ##class(Address).%New()Можно связать его со свойством Home объекта Person:Set person.Home = addressГде address – ссылка OREF на новый объект Address и person – это ссылка OREF наобъект Person.Установка значений свойств встраиваемого объекта выполняется с использованиемосновного синтаксиса:Set person.Home.State = "MA"6.6.2.
Изменение встраиваемых объектов с использованием точечного синтаксисаВторой способ – это задание свойств встраиваемого объекта без явного создания экземпляра:Set oref.PropertyName.EmbPropertyName = value66где oref ссылка OREF на объект, PropertyName имя свойство объекта-контейнера типа встраиваемого объекта, EmbPropertyName имя свойства встраиваемого объекта, которое нужно изменить.Например, изменить встроенный объект Home объекта Person можно так:SetSetSetSetperson.Home.Street = "One Memorial Drive"person.Home.City = "Cambridge"person.Home.State = "MA"person.Home.Zip = 02142где person – ссылка OREF на объект Person и его домашний адрес “One MemorialDrive, Cambridge, MA 02142”.6.7. Работа со свойствами-спискамиСписок это упорядоченная порция информации. Каждый элемент имеет свою позицию в списке.
Можно добавить элемент в список, либо изменить значение элемента списка. Добавление нового элемента в список как бы раздвигает его, т.е. вставка нового элемента во вторую позицию списка, приводит к тому, что второй элемент становится третьим, третий – четвертым и т.д.Существует два типа списков свойств:• Список типов данных• Список объектов.Список объектов может содержать либо встроенные объекты, либо хранимые объекты.
Эти списки пополняются данными разными способами.6.7.1. Работа со списком типов данныхМожно добавлять данные в список, используя следующий синтаксис:Do oref.PropertyName.Insert(data)Где oref – это ссылка OREF на объект, PropertyName – это имя свойства-списка, иdata – это данные. Например, можно добавить значение “желтый” в конец списка любимых цветов, используя код:Do person.FavoriteColors.Insert("желтый")где person – ссылка OREF на объект Person.Можно изменить значение элемента n, используя синтаксис:Do oref.PropertyName.SetAt(data,n)где oref – ссылка OREF на объект, PropertyName – это имя свойства-списка, data –это данные.
Например, можно изменить список любимых цветов, например:Do person.FavoriteColors.SetAt("желтый",2)Т.е. вместо второго элемента будет вставлено значение "желтый".Можно вставить данные в позицию n:Do oref.PropertyName.InsertAt(data,n)Вставка нового элемента списка как бы раздвигает список. Например, можно изменить список любимых цветов “красный”, “голубой”, “зеленый” следующим образом:“красный”, “желтый”, “голубой”, “зеленый” с помощью следующего оператора:Do person.FavoriteColors.InsertAt("желтый",2).6.7.2. Работа со списками встроенных объектовМожно заполнять списки встроенных объектов несколькими способами.
Можно создать новый объект, заполнить его данными, и затем добавить их в конец списка, используяследующий синтаксис:Do oref.PropertyName.Insert(ItemOref)67где oref – ссылка OREF на объект-контейнер, PropertyName – имя свойства-спискаконтейнера, ItemOref – это ссылка OREF на встроенный объект. Например, можно добавить новую запись о вакцинации Vaccination к объекту Patient, используя следующий код:Do pat.Vaccination.Insert(vac)где pat – ссылка OREF на объект Patient, vac – это ссылка OREF на объект Vaccination.Можно создать новый объект, заполнить его данными, и добавить его в позицию n,используя следующий синтаксис:Do oref.PropertyName.SetAt(ItemOref,n)где oref – ссылка OREF на объект-контейнер, PropertyName – это имя свойства-списка контейнера, ItemOref – это ссылка OREF на встроенный объект.
Если элемент с номером n уже существует, он получает новое значение, если не существует, он вставляется взаданную позицию списка. Например, можно изменить второй элемент списка вакцинаций:Do pat.Vaccination.SetAt(vac,2)pat – ссылка OREF на объект Patient, vac – это ссылка OREF на новый объектVaccination, который изменяет второй элемент списка.Можно создать новый объект, заполнить его данными, затем вставить его в позициюn списка, используя след синтаксис:Do oref.PropertyName.InsertAt(ItemOref,n)Вставка нового элемента как бы раздвигает список.
Например, можно добавить новую вакцинацию в третью позицию списка вакцинации Vaccination объекта Patient:Do pat.Vaccination.InsertAt(vac,3)где pat – ссылка OREF на объект Patient, vac ссылка OREF на объект Vaccination.6.7.3. Работа со списками хранимых объектовСинтаксис, описанный для заполнения списка встроенных объектов, также применим для списка хранимых объектов, если объекты находятся в памяти. К тому же, можнопополнять списки хранимых объектов объектами, не находящимися в памяти.Работа со списками выполняется разными способами. Можно добавить объект в конец списка, используя следующий синтаксис:Do oref.PropertyName.InsertObject(itemoid)где oref – ссылка OREF на объект, PropertyName это имя свойства-списка, и itemoid –это OID объекта.
Например, можно добавить информацию о новой собаке к списку любимцев:Do per.Pets.InsertObject(DogOid)Где per – это ссылка OREF на объект Person, Pets – свойство-список, DogOid это OIDобъекта класса Dog.Можно добавить объект в позицию n, используя следующий синтаксис:Do oref.PropertyName.SetObjectAt(ItemOid,n)где oref это ссылка OREF на объект, PropertyName это имя свойства-списка, ItemOidэто OID объекта. Например, можно добавить информацию о новой собаке в список, расположив ее в третьей позиции списка:Do per.Pets.SetObjectAt(DogOid,3)где per ссылка OREF на объект Person и DogOid это OID объекта класса Dog.Можно вставить объект в позицию n списка:Do oref.PropertyName.InsertObjectAt(ItemOid,n)Вставка нового элемента как бы раздвигает список.
Например, вставить информациюо новой собаке в начало списка любимцев:Do per.Pets.InsertObject(DogOid,1)Где per – ссылка OREF на объект Person и DogOid – это OID объекта класса Dog.686.7.4. Изменение свойств объектов в спискахТак как объект связан с некоторой позицией в списке, можно изменить его свойства,используя следующий синтаксис:Set oref.PropertyName.GetAt(n).ListPropertyName = dataгде oref – ссылка OREF на объект, содержащий список; PropertyName это имя свойства-списка, метод GetAt находит и возвращает значение элемента в позиции n.ListPropertyName это имя свойства для изменения, data это новые данные свойства.Например, чтобы изменить свойство name (имя) второй собаки из списка любимцев:Set per.Pets.GetAt(2).Name = "Rover"где per ссылка OREF на объект Person и Rover это новое имя любимца.6.8.