|
Программирование >> Реляционные базы данных
title. Его типом является string - строка символов неизвестной длины. Предполагается, что значением атрибута title в jho6om объею-е Movie будет название фильма. Два следующих атрибута (year и length), описанные иа строках 3 и 4, имеют тип нелых чисел и представляют год создания фильма и его длину в минутах. На строке 5 описан атрибут (ilmType, показываюии!!!, фильм цветной или черно-белый Его тип - перечень с именем Film. Значения а1.ибута перечня выбираются из списка . леро-ло/?, в данном примере - color и blackAndWhite. Определенный таким образом объект Movie можно считать записью, или кортежем, состоящим из четырех компонбитов, по одному для каждого атриб5та. Например; ( Унесенные ветром , 1939. 231, цветной) являегся обьектом Movie. D Пример 2.2. В примере 2.1 атрибуты имеют атомарные типы Могуг быть атрибуты, типами которых яшщются структуры, множества или множества структур. с5н будут рассмотрены в разделе 2.1.7. Здесь пригюдится пример с неатомарным типом. Определим класс Star; 1) interface Star ( 2) attribute stnng name; 3) attribute Struct Addr; (string street, string city) address, Строчка 2 определяет атрибут name (имя кинозвезды), являющийся строкой. Строчка 3 определяет атрибут address, имеющий тип структуры записи. Имя этого атриб)та Addr, а его тип состоит из двух полей: street и city. Оба поля являются строками. В общем случае в ODL можно определить типы сгруктуры записи с помощью ключевого слова Stmcl и фигурных скобок, выделяющих список имен нолей и их тины. □ 2.1.4 Связи в ODL Изучение атрибугов объекта играет большую роль, однако иногда важнее знать то, как он связан с объектами того же самого или другого класса. Пример 2.3. Предположим, что к описанию класса Movie из примера 2.1 добавляется свойство, представляющее множество кинозвезд. Поскольку сами кинозвезды являются классом, описанным в примере 2 2, информацию о них нельзя сделать атрибутом Movie, так как типы этрибугов не должны быть классами или строиться 113 классов Множество кинозвезд, занятых в фильме,- это связь между классами Movie и Star, которая выражается строкой relationship Set<Star> stars. в описании к-пасса Movie. Эта строка .может появит1ЛЯ на рис. 2.4 после любой из с [рок - с I по 5. Она означает, что в каждом объекте класса Movie есть множество ссылок на объекты к.тасса Star. Множество ссылок называется stars. Ключевое слово relstionship опре.аеляет. что stars содержит ссылки на другие объекты, а ключетюе слово Set. предшествующее <Stars>, показывает, чго stars ссылс1ется на множество объектов Stars, л не на единственный объект В обшсм случае в ODL тип. яв1яю-lUHiicH множеством элементов другого типа 7 . определяется ключевым словом Set ii угловыми скобками, выделяющими тип Т. 2.1 Ввелениев001 25 В физических терминах множество stars можно было бы представить списком указателей на объекты Star; сами объекты Star физически не появлялись бы в объекте Movie. Однако на фазе проектирования БД физическое предогацлекие неизвестно и важным аспектом связи является то, что из объекта Movie легко иайти кинозвезд, играющих В данном фильме. □ В примере 2.3 показана связь множества объектов (кинозвезд) с единственным объектом (фильмом). Можно установить и связь единственного объекта с объектом описываемого класса. Предположим, например, что в примере 2.3 был задан тип связи Star, а не Set<Star>, с помощью строки relationship Star starOf, Это значит, что с каждым фильмом связан единственный объект Star. Такой способ здесь не очень подходит, так как в фильме обычно играют несколько кинозвезд. Однако во многих других примерах связь с единственным значением вполне приемлема. 2.1.5 Обратные связи Можно определять не только кинозвезд, занятых в данном фильме, но и фильмы, в которых играл данный актер. Для получения такой информации в объектах Star можно добавить строку relationship Set<Movie> starredin; к описанию класса Star из примера 2.2. Однако в такой строке и сходном описании Movie не учитывается очень важный аспект связи между фильмами н кинозвездами, а именно; если кинозвезда S находится в множестве stars для фильма М, то М на--содится в множестве starredin для кинозвезды S. Это соотношение связей между множествами stars и starredin выражается тем, что в описании каждой связи указывается ключевое слово inverse И имя другой связи. Если одна из связей находится в другом классе, как это обычно и бывает, ссьииса на нее делается с помощью имени этого класса, за которым следуют двойное двоеточие (::) и имя связи. Пример 2.4. Чтобы определить связь starredin класса Star как обращение связи stars в классе Movie, изменим описание класса Star следующим образом (рис. 2 5): 1) interface Star { 2) attribute string name; 3) attribute Struct Addr {string street, string city} address; 4) relationship Set<Movie> starredin inverse Movie :: stars; Ph . 2.5. Kno Star, псксеывокхдий свпзь и ее обращение В строке 4 выражено не только описание связи stanedin, но и то, что данная связь имеет инверсию Movie .stars. Поскольку связь stars определена в другом классе, ее имени предшествуют двойное двоеточие и имя этого класса (Movie). Такая нотация широко применяется при ссылках на свойства различных классов. □ В примере 2.4 две обратные связи, каждая из которых соединяет объект (фильм или кинозвезду) с .множссгвом объектов. Как упоминалось ранее, есть связи II другого типа, соеднняюшис объект с единственным объектом другого класса. Понятие обращения связи при этом не изменяется. Общее правило: если связь Д для класса С соединяет с объектом х класса С множество объектов j,. >> .... у , то обратная к ней связь соединяет с каждым объект х (возможно, наряду с другими объектами). Иногда это помогает показать связь Л к-пасса С с классом D и виде списка пар, или кортежей, отношения. Каждаи пара сосгоит из объекта х из класса С и связанного с ним объекта у из класса Л Если ft имеет тиге SeJ<D>, существует несколько пар с одним и тем же С-значеннем. Если R имеет тип D, существует только одна пара с заданным С-значением. Тогда обращение Л есть множество пар с обращенными компонентами: Заметим, что это правило действует, даже если Си/) яапяются одним и тем же классом. Существуют связи класса с самим собой, например связь быть ребенком класса люди с самим собой. о требовяпии к обращениям связей Абстрактный язык проектирования ODL требует, чтобы связи были обратимы. Суть этого требования: если есть путь от объекта (например, фильма) к связанному с ним объекту (в частности, к кинозаезде), то существует и обратный путь - от кинозвезды к фильмам, в которых она играла. Например, имея кинозвезду Чарльттаи Хэстона, можно проверить объекты фильмов и определить кинозвезд, которые в них играли, а затем перечислить фильмы, в которых играл Хэстон. ODL требует, чтобы такому процессу обращения присваивалось имя связи. Известно, что при преобразовании ODL в реальный язык программирования, например С+-(, имеется возможность размещать ссылки только в объектах фильм , и не допускаются ссьщки на фильмы в объектах кинозвезда . Поэтому погружение ODL в С++ допускает существование однонаправленных соязей. Поскольку же мы рассматриваем проектирование, а не реализацию, предполагается, что связи обратимы.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |