Главная » Delphi » Delphi 2006 – Программное связывание объектов ЕСО

0

Теперь мы рассмотрим, как программно связывать друг с другом объекты, между классами которых установлена ассоциативная связь. Между классами Star и Planet на диаграмме модели установим ассоциативную связь с кратностью «один ко многим». Сторону связи, пристыкованную к классу Star, назовем ToStar, а противоположную сторону —ToPlanet. Названия сторон вводятся в свойстве Name вложенных свойств End1 и End2 ассоциативной связи (рис. 9.15).

Рис. 9.15. Настройка ассоциативной связи

программный обработчик нажатия на эту кнопку. В нем создадим экземпляр класса Planet и свяжем его с текущим элементом таблицы «Звезды».

В обработчике выполняются следующие действия.

1.                Проверяется соответствие типа выделенного в таблице элемента типу Star.

2.                Создается новый экземпляр класса Planet. Он автоматически добавится в таблицу «Планеты».

3.                Этот экземпляр связывается с элементом, выбранным в таблице «Звезды».

procedure TWinForm.Button2_Click(sender: System.Object; e: System. Event Args) ;

var NewPlanet: Planet; // Новая создаваемая планета SelStar: Star; // Выбранная в таблице звезда

begin

if cmhStar.Element.AsObject is Star then begin

SelStar := Star( cmhStar.Element.AsObject );

// создаем новую планету: NewPlanet := Planet.Create(EcoSpace);

// формируем связь планеты со звездой:

NewPlanet.ToStar := SelStar;

end;

end;

Ha последнем операторе остановимся поподробнее.

NewPlanet.ToStar := SelStar;

Свойство ToStar экземпляра класса Planet — это название стороны ассоциативной связи, стыкующей класс Planet с классом Star в соотношении «многие к одному». Оно имеется у каждого объекта класса Planet и было автоматически добавлено в этот класс после того, как мы сформировали данную связь. На диаграмме модели мы присвоили названия ToStar и ToPlanet двум концам ассоциативной связи с помощью Инспектора объектов. Программно же эта связь реализована в виде «оконечных» свойств — полей связанных классов. Сама по себе ассоциативная связь как отдельный объект в программе не существует.

Ассоциативное связывание объекта SelStar с объектом NewPlanet в программном коде реализуется с помощью обычного оператора присваивания. Связь настраивается автоматически с учетом кратности «один ко многим», заданной на диаграмме. Среда времени выполнения ЕСО в ходе такого динамического связывания выполнит настройки для обеих сторон ассоциативной связи. Объект NewPlanet свяжется с объектом SelStar через свое свойство ToStar, а свойство ToPlanet объекта SelStar, в свою очередь, получит в качестве значения ссылку на объект NewPlanet.

Вместо последнего оператора

NewPlanet.ToStar := SelStar;

можно записать противоположное действие

SelStar.Planets.Add(NewPlanet);

Итоговый результат окажется прежним в силу двунаправленности связей между объектами ЕСО. Только в данном случае выполняется не обычное присваивание, а вызывается метод Add. Ведь свойство ToPlanet хранит не скалярный элемент, а список узлов, связанных с объектом SelStar. Этот список отражает множественную часть ассоциативного отношения «многие к одному», поэтому обращаться к нему надо как к коллекции элементов.

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии