Читаем Изучаем Java EE 7 полностью

Примечание

Типы явного доступа также очень полезны, когда речь идет о наследовании. По умолчанию листовые сущности наследуют тип доступа от своей корневой сущности. В иерархии сущностей доступ к каждой из них возможен по-разному из других классов в иерархии. Включение аннотации @Access фактически приведет к тому, что режим доступа по умолчанию для иерархии будет локально переопределен.

<p>Отображение связей</p>

Мир объектно-ориентированного программирования изобилует классами и ассоциациями между классами. Эти ассоциации являются структурными в том смысле, что связывают объекты одного типа с объектами другого типа, позволяя одному объекту заставлять другой объект выполнять действия от своего имени. Между классами могут существовать ассоциации нескольких типов.

Прежде всего, у ассоциации есть направление. Она может быть однонаправленной (один объект может осуществлять навигацию по направлению к другому объекту) и двунаправленной (один объект может осуществлять навигацию по направлению к другому и наоборот). В Java для навигации по объектам используется точечный (.) синтаксис. Например, если написать customer.getAddress(). getCountry(), то будет осуществляться навигация от объекта Customer к объекту Address, а затем — к объекту Country.

В унифицированном языке моделирования (Unified Modeling Language — UML) для представления однонаправленной ассоциации между двумя классами используется стрелка, указывающая направление. На рис. 5.5 Class1 (источник) может осуществлять навигацию по направлению к Class2 (цель), но не наоборот.

Рис. 5.5. Однонаправленная ассоциация между двумя классами

Для индикации двунаправленной ассоциации стрелки не используются. Как показано на рис. 5.6, Class1 может осуществлять навигацию по направлению к Class2 и наоборот. В Java это представляется как наличие у Class1 атрибута типа Class2 и наличие у Class2 атрибута типа Class1.

Рис. 5.6. Двунаправленная ассоциация между двумя классами

Для ассоциации также характерна множественность (или кардинальность). На каждом из концов ассоциации можно указать, сколько ссылающихся объектов вовлечено в нее. На UML-диаграмме, приведенной на рис. 5.7, показано, что Class1 ссылается на нуль или более экземпляров Class2.

Рис. 5.7. Множественность ассоциаций классов

В UML кардинальность — это диапазон между минимальным и максимальным числами. Таким образом, 0..1 означает, что у вас будет минимум нуль объектов и максимум один объект; 1 означает, что у вас один и только один экземпляр; 1..* означает, что у вас может быть один или много экземпляров, а 3..6 означает, что у вас может быть от трех до шести объектов. В Java ассоциация, представляющая более одного объекта, задействует коллекции типа java.util.Collection, java.util.Set, java.util.List или даже java.util.Map.

В случае со связью имеет место владение (то есть владелец связи). При однонаправленной связи предполагается владение: нет сомнения, что на рис. 5.5 владельцем является Class1, однако при двунаправленной связи, как показано на рис. 5.6, владельца нужно указывать явным образом. В таком случае вы показываете владельца, который определяет физическое отображение и противоположную сторону (не владеющую сторону).

В следующих разделах вы увидите, как отображать коллекции объектов с использованием аннотаций JPA.

<p>Связи в реляционных базах данных</p>

В реляционном мире дело обстоит по-другому, поскольку, строго говоря, реляционная база данных — это коллекция отношений (также называемых таблицами), то есть все, что вы смоделируете, будет таблицей. При моделировании ассоциации у вас не будет списков, наборов или отображений — у вас будут таблицы. В JPA при наличии ассоциации между одним классом и другим в базе данных у вас будет ссылка на таблицу. Эту ссылку можно смоделировать двумя способами: с помощью внешнего ключа (столбца соединения) или с использованием таблицы соединения. В контексте базы данных столбец, ссылающийся на ключ другой таблицы, называется столбцом внешнего ключа.

В качестве примера предположим, что у клиента имеется один домашний адрес. В листингах 5.33 и 5.34 мы моделировали эту связь как встраиваемый объект, однако теперь превратим ее в связь «один к одному». При использовании Java у вас имелся бы класс Customer с атрибутом Address. В реляционном мире у вас могла бы быть таблица CUSTOMER, указывающая на ADDRESS с помощью столбца внешнего ключа (или столбца соединения), как показано на рис. 5.8.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных