- •1. Основы построения баз данных 11
- •2. Модели представления данных 22
- •3. ДатАлогические модели данных 38
- •4. Семантическое моделирование 101
- •5. Базы данных в сетях 155
- •6.Современное состояние и 177
- •1. Основы построения баз данных
- •1.1. Архитектура системы баз данных
- •1.2. Жизненный цикл базы данных
- •Контрольные вопросы и задания
- •2. Модели представления данных
- •2.1. Классификация моделей данных
- •2.2. Разновидности инфологических моделей данных
- •Контрольные вопросы и задания
- •3. ДатАлогические модели данных
- •3.1. Иерархические модели
- •Между предками и потомками автоматически поддерживается целостность ссылок. Основное правило: никакой потомок не может существовать без своего родителя, у некоторых родителей не может быть потомков.
- •3.2. Сетевые модели
- •3.3. Реляционные модели
- •3.3.1. Основные понятия реляционной модели
- •3.3.2. Реляционная алгебра
- •3.3.3. Язык запросов по образцу qbe
- •3.3.4. Структурированный язык запросов sql
- •Основные инструкции языка sql
- •Values ("3110", "чп Иванов п.Т.", null)
- •3.4. Проектирование реляционных баз данных
- •Контрольные вопросы и задания
- •4. Семантическое моделирование
- •4.1. Объектно-ориентированное проектирование
- •4.1.1. Представление объектов
- •4.1.2. Описания классов
- •4.1.3. Атрибуты в odl
- •4.1.4. Связи в odl
- •4.1.5. Обратные связи
- •4.1.6. Множественность связей
- •4.1.7. Типы в odl
- •4.1.8. Проектирование с использованием odl
- •Правильность
- •Устранение избыточности
- •4.1.9. Подклассы
- •4.1.10. Множественное наследование в odl
- •4.1.11. Моделирование ограничений
- •Ссылочная целостность
- •Прочие ограничения
- •4.1.12. Переход от объектно-ориентированной модели к реляционной
- •4.2. Диаграммы "сущность-связь"
- •4.2.1. Компоненты диаграмм "сущность-связь"
- •4.2.2. Множественность e/r-связей
- •Многосторонние связи
- •4.2.3. Роли в связях
- •4.2.4. Атрибуты связей
- •4.2.5. Конвертирование многосторонних связей в бинарные
- •4.2.6. Проектирование e/r моделей
- •Простота
- •Типы элементов проекта
- •Определения подклассов
- •Наследование в e/r-модели
- •Моделирование ограничений
- •Ссылочная целостность
- •Слабые множества сущностей
- •Переход от e/r-диаграмм к реляционным проектам
- •Контрольные вопросы и задания
- •5. Базы данных в сетях
- •5.1. Архитектура "клиент-сервер"
- •5.2. Распределенные базы данных
- •5.3. Базы данных в Интернет
- •Контрольные вопросы и задания
- •Контрольные вопросы и задания
- •Информационные ресурсы Internet
- •Словарь терминов
- •Список сокращений
- •Темы рефератов
4.1.10. Множественное наследование в odl
У класса может быть несколько подклассов, каждый из которых наследует свойства своего суперкласса, как было показано в предыдущем разделе. Более того, подклассы сами могут иметь подклассы, образуя иерархию классов, в которой каждый класс наследует свойства своих предшественников. Некоторые классы могут наследовать свойства из нескольких различных. Следующий пример иллюстрирует потенциальные возможности и проблемы, связанные с такой ситуацией.
Пример 4.9. Можно определить подкласс жилет класса Изделие:
1) interface Жилет: Изделие{
2) attribute string материал_спинки;
};
Все жилеты имеют атрибут, выражающий определяющий материал спины, а также все атрибуты и две связи, которыми обладают все изделия.
Теперь рассмотрим изделие "жилет из меха", являющееся и меховым изделием, и жилетом. Кроме обычных свойств класса Изделие, такие изделия должны иметь связь скорняжный_пошив и атрибут материал_спинки. Эту ситуацию можно описать, определив подкласс, являющийся подклассом обоих классов Меховое_изделие и Жилет:
interface Меховой_жилет: Меховое_изделие, Жилет{
};
Итак, объект Меховой жилет определяется для выражения всех свойств обоих подклассов Жилет и никаких свойств или связей, принадлежащих только меховым жилетам, не вводится. Объекты класса Меховой_жилет наследуют атрибут материал_спинки класса Жилет и связь скорняжный_пошив класса Меховое_изделие. Поскольку классы Жилет и Меховое_изделие, в свою очередь, наследуют атрибуты и две связи класса Изделие, класс Меховой_жилет наследует также и эти атрибуты и свойства. Однако он не наследует двух копий всех этих свойств, а наследует свойства из класса Изделие через любой из двух его непосредственных подклассов. Рис. 46 иллюстрирует связи подкласс-суперкласс, в которых участвуют четыре названных класса.
В общем случае можно определить класс С как подкласс любого числа других классов, поставив двоеточие и перечислив имена всех этих классов после описания имени интерфейса С. Пример 4.9 иллюстрирует именно такую форму связей. Когда класс С наследует свойства нескольких классов, потенциально возможен конфликт имен свойств. Два или более суперкласса класса С могут иметь атрибут или свойство с одним и тем же именем при том, что типы этих свойств различны.
Пример 4.10. Предположим, что класс Изделие имеет подклассы Кожаное_изделие и Меховое_изделие, каждый из которых имеет атрибут стиль. Но в классе Кожаное_изделие этот атрибут получает значения из набора {молодежный, всевозрастной}, а в классе Меховое_изделие – из набора {модный, традиционный}. Если затем вводится новый подкласс Кожано-меховое_изделие, суперклассами которого являются Кожаное_изделие и Меховое_изделие, тип наследуемого атрибута стиль в классе Кожано-меховое_изделие остается неясным.
Реализации ODL предлагают, по крайней мере, один из следующих механизмов, подсказывающих пользователю, как действовать в случае конфликта, возникающего из множественного наследования.
Можно указать, какое из двух определений данного свойства относится к подклассу. Так, в примере 4.10 считаем, что для изделия из кожи и меха важен не показатель модности, а целевая возрастная категория. Тогда устанавливается, что класс Кожано-меховое_изделие наследует атрибут стиль из суперкласса Кожаное_изделие, а не Меховое_изделие.
Можно присвоить в классе С новое имя одному из двух наследуемых свойств с одним и тем же именем. Если в примере 4.10 Кожано-меховое_изделие наследует атрибут стиль из класса Кожаное_изделие, в этом классе можно определить дополнительный атрибут фасон как результат замены имени атрибута стиль, наследуемого из класса Меховое_изделие.
В классе С можно заново определить некоторые свойства, определенные в его суперклассах. В примере 4.10 можно считать, что атрибут стиль не должен наследоваться напрямую из любого суперкласса, а переопределить этот атрибут как числовое значение, которое выражает степень удовлетворенности клиентов, выявленную путем их опроса.
Заметим, что даже в примере 4.9 есть конфликты: Кожано-меховое_изделие наследует из каждого непосредственного суперкласса (Меховое_изделие и Кожаное_изделие) свойства, в том числе назв_изделия и мастера, которые эти классы наследовали из класса Изделие. Но поскольку определения назв_изделия и других свойств идентичны в обоих суперклассах, выбирать используемое определение можно вообще любым способом.