Автор работы: Пользователь скрыл имя, 28 Февраля 2014 в 06:48, курсовая работа
В настоящее время еще не принят единый стандарт для разработки объектных СУБД.
Цель данной курсовой работы – рассмотреть теоретические аспекты проектирования объектных баз данных.
Для достижения цели курсовой работы поставлены следующие задачи:
Подобрать и изучить литературу по данной теме;
Исследовать состояние и разработанность данной темы;
Введение
Основная часть
Общие понятия объектных СУБД
Объектно-ориентированные СУБД
Объектно-реляционные СУБД
Заключение
Глоссарий
Список использованных источников
Таким образом, идентичность гарантируется тем, что объект всегда можно единственным образом обозначить, что автоматически гарантирует целостность сущностей.
Ниже перечислены основные преимущества использования идентификаторов OID для обозначения объектов.
• Эффективность. Для хранения идентификаторов OID внутри составного объекта требуется очень мало места. Обычно они меньше текстовых имен, внешних ключей или семантических ссылок.
• Быстродействие. Идентификатор OID указывает на фактический адрес или
место внутри таблицы, в котором находится адрес данного объекта. Это означает, что объекты могут быть быстро обнаружены, независимо от места
их текущего хранения: в оперативной памяти или на жестком диске.
• Невозможность изменения пользователем. Если идентификаторы OID генерируются системой и скрыты от пользователей, или, по крайней мере, доступны только для чтения, то в такой системе проще обеспечить целостность сущностей и связей. Более того, это позволяет пользователю не заботиться о поддержании целостности данных.
• Независимость от содержания данных. Идентификаторы OID не зависят от
данных, содержащихся в объектах, которые они обозначают. Это позволяет
изменять значение любого атрибута объекта, но при этом данный объект остается тем же и имеет прежний идентификатор OID.
Методы и сообщения. Объект инкапсулирует данные и функции и представляет собой автономную конструкцию. В объектной технологии функции обычно называют методами. Методы определяют правила поведения объекта. Они могут использоваться для изменения состояния объекта за счет изменения значений его атрибутов или для создания запросов к значениям отдельных атрибутов. Например, могут быть предусмотрены методы для добавления сведений о новом объекте недвижимости, предназначенном для сдачи в аренду в некотором отделении, для обновления сведений о зарплате сотрудников или для вывода сведений о конкретном сотруднике.
Сообщения являются средством взаимодействия объектов. Сообщение представляет собой запрос, направленный одним объектом (отправителем) другому объекту (получателю) и требующий, чтобы объект-получатель выполнил один из своих методов. Один и тог же объект может быть одновременно и отправителем, и получателем. Доступ к методу обычно обозначается точкой. Например, для выполнения метода updateSalary (обновить зарплату) объекта Staff с передачей ему параметра 1000 следует использовать такой синтаксис:
staffObject.updateSalary(1000)
В обычном языке программирования сообщение записывается как вызов функции:
updateSalary(staffObject, 1000)
Классы. В объектно-ориентированных системах классы играют роль шаблона для определения набора подобных объектов. Таким образом, объекты, которые имеют один и тот же набор атрибутов и отвечают на одни и те же сообщения, могут быть сгруппированы в виде класса. Атрибуты и связанные с ними методы определяются один раз для всего класса, а не отдельно для каждого объекта. Например, все объекты отделений компании описываются единственным классом Branch. Объекты некоторого класса называются его экземплярами (instance). Каждый экземпляр обладает своими собственными значениями каждого из атрибутов, но совместно с другими экземплярами данного класса использует для этих атрибутов одни и те же имена и методы. В литературе термины "класс" и "тип" часто используются как синонимы, хотя некоторые авторы указывают на различие между ними. Термин "тип" более соответствует понятию абстрактного типа данных. В языках программирования переменная объявляется с указанием ее типа. Компилятор может использовать эту информацию для проверки выполняемых с переменной операций на совместимость с ее типом, что позволяет гарантировать допустимость программных конструкций. С другой стороны, класс является шаблоном для создания объектов и предоставляет методы, которые могут применяться к этим объектам.
В некоторых объектно-ориентированных системах класс также является объектом и обладает своими собственными атрибутами и методами, которые называются атрибутами класса и методами класса. Атрибуты класса описывают общие характеристики этого класса, например средние или итоговые значения.
В частности, в классе Branch может быть предусмотрен атрибут класса для обозначения общего количества отделений компании. Методы класса используются для изменения или опроса состояния атрибутов класса. Существуют также специальные методы класса для создания новых экземпляров класса и удаления ненужных экземпляров. В объектно-ориентированном языке новый экземпляр обычно создается с помощью команды new. Подобные методы создания и удаления экземпляров с освобождением занятого ими пространства памяти называют конструкторами и деструкторами. Передаваемые методу класса сообщения перенаправляются к классу, а не к экземпляру класса. При этом предполагается, что класс является экземпляром класса более высокого уровня, который называется метаклассом.
Подклассы, суперклассы и наследование. Некоторые объекты могут иметь подобные, но не идентичные атрибуты и методы. Если степень такого подобия достаточно высока, то имеет смысл совместно использовать некоторые свойства (атрибуты и методы). Наследование (inheritance) позволяет определять один класс на основе общего класса. Такие менее общие классы называются подклассами, а более общие — суперклассами. Процесс образования суперкласса называется обобщением (generalization), а процесс образования подкласса — специализацией. По умолчанию подкласс наследует все свойства своего суперкласса и в дополнение к ним определяет свои собственные уникальные свойства. Однако в подклассе могут быть также переопределены унаследованные свойства. Все экземпляры подкласса являются также экземплярами суперкласса. Более того, согласно принципу подстановки, для любого метода и конструкции вместо экземпляра суперкласса всегда можно использовать экземпляр его подкласса.
Понятия подкласса, суперкласса и наследования аналогичны таким же понятиям в модели "сущность-связь" за исключением того, что в объектно-ориентированной модели наследование относится как к состоянию, так и к правилам поведения. Связь между подклассом и суперклассом обычно называется связью типа АКО (A Kind Of), например суперкласс Manager связан с подклассом Staff связью АКО. Связь между экземпляром и его классом иногда называют связью типа IS-А, например, экземпляр Сьюзен Бранд связан с классом Manager связью IS-A.
Существует несколько видов наследования: единичное (single), множественное (multiple), повторное (repeated) и избирательное (selective). Например, подклассы Manager и SalesStaff наследуют свойства суперкласса Staff. Термин единичное наследование означает, что подклассы наследуют свойства не более, чем одного суперкласса. Суперкласс staff сам по себе может быть подклассом суперкласса Person (человек), образуя, таким образом, иерархию классов.
Перекрытие и перегрузка. Как указано выше, свойства, а именно атрибуты и методы, автоматически наследуются подклассами от их суперклассов. Однако свойство суперкласса в подклассе можно переопределить заново. В этом случае используется именно то определение свойства, которое приводится в подклассе, а сам этот процесс называется перекрытием. Например, в классе Staff может быть определен метод повышения зарплаты за счет выплаты комиссионных:
method void giveCommiselon(float branchProfit)
{salary = salary + 0.02 * branchProfit;}
Однако для класса Manager может потребоваться выполнять те же расчеты исходя из другого процента комиссионных. Это можно сделать за счет переопределения или перекрытия метода giveCommission в самом подклассе Manager:
method void giveCommission(float branchProfit)
{salary = salary + 0.05 * branchProfit;}
Способность сокращения количества общих свойств нескольких классов за счет переноса их во вновь образованные для этого суперклассы и последующего совместного использования существенно снижает избыточность данных внутри системы и поэтому может рассматриваться как одно из основных преимуществ объектно-ориентированного подхода. Возможность перекрытия является важной характеристикой наследования, поскольку позволяет легко управлять отдельными классами с минимальным воздействием на остальную часть системы.
Перекрытие является частным случаем общего понятия перегрузки
(overloading). Перегрузка позволяет повторно использовать имя метода в одном или в разных определениях класса. Это означает, что одно сообщение может вызывать на выполнение разные функции, в зависимости от того, какой объект получает его и какие параметры передаются методу. Например, многие классы могут иметь один и тот же метод, предназначенный для вывода сведений о разных объектах. Ниже приведен метод вывода на печать данных из объекта Branch:
method void print( ) {
printf("Branch number: %s\n", branchNo);
printf("Street: %s\n", street);
printf{"City: %s\n", city);
printf("Postcode: %s\n", postcode);}
Перегрузка способствует существенному упрощению приложения, поскольку позволяет использовать одно и то же имя для одной и той же операции, независимо от того класса, в котором она представлена. Таким образом, конкретное значение этой операции определяется на основе контекста. Это позволяет избежать необходимости постоянно создавать уникальные имена для методов (например, printBranchDetails и printstaffDetails), которые выполняют практически те же функции.
Полиморфизм и динамическое связывание. Рolymorphism, в переводе с греческого, означает "наличие многих форм". Существуют три типа полиморфизма: полиморфизм операций, включения и параметрический полиморфизм. Перегрузка, показанная в предыдущем примере, является разновидностью полиморфизма операций (operation polymorphism); его называют также произвольным полиморфизмом. Метод, определенный в суперклассе и унаследованный в его подклассе, является примером применения полиморфизма включения (inclusion polymorphism). Параметрический полиморфизм (parametric polymorphism), или универсальность (genericity), означает использование типов в качестве параметров в объявлениях универсального типа или класса.
Процесс выбора соответствующего метода, основанный на типе объекта, называется связыванием (binding). Если определение типа объекта может быть отложено (во время компиляции) до наступления времени исполнения, то такой выбор называется динамическим (dynamic), или поздним (late), связыванием.
Составные объекты. Часто возникают ситуации, когда объект состоит из подчиненных объектов, или компонентов. Составным называется объект, который выглядит как единый объект в "реальном мире", но содержит другие объекты в виде набора составных связей типа A-Part-Of, или АРО (часть). Такие встроенные объекты сами могут быть составными с образованием иерархии типа АРО. В объектно-ориентированной системе встроенные объекты можно применять одним из следующих двух способов. Во-первых, за счет инкапсуляции внутри составного объекта с образованием части составного объекта. В этом случае структура встроенного объекта образует часть структуры составного объекта и доступ к ней можно получить только с помощью методов составного объекта. Во-вторых, встроенный объект может рассматриваться как независимый от составного объекта. И в этом случае в родительском объекте хранится не сам объект, а лишь его идентификатор OID. Такой способ называется совместным использованием ссылок (referential sharing) . Встроенный объект обладает своей собственной структурой и методами, а также может принадлежать нескольким родительским объектам. Эти типы составных объектов иногда называют структурированными составными объектами, так как их состав известен системе. Термин неструктурированный составной объект используется для обозначения составного объекта, структура которого может интерпретироваться только прикладной программой. В контексте баз данных неструктурированные составные объекты иногда называются большими двоичными объектами, или объектами BLOB.
2.2 Объектно-ориентированная модель данных
Первой формализованной и общепризнанной моделью данных была реляционная модель Кодда. В этой модели, как и во всех следующих, выделялись три аспекта - структурный, целостный и манипуляционный. Структуры данных в реляционной модели основываются на плоских нормализованных отношениях, ограничения целостности выражаются с помощью средств логики первого порядка и, наконец, манипулирование данными осуществляется на основе реляционной алгебры или равносильного ей реляционного исчисления. Как отмечают многие исследователи, своим успехом реляционная модель данных во многом обязана тому, что опиралась на строгий математический аппарат теории множеств, отношений и логики первого порядка. Разработчики любой конкретной реляционной системы считали своим долгом показать соответствие своей конкретной модели данных общей реляционной модели, которая выступала в качестве меры "реляционности" системы.
Основные трудности объектно-ориентированного моделирования данных проистекают из того, что такого развитого математического аппарата, на который могла бы опираться общая объектно-ориентированная модель данных, не существует. Поэтому до сих пор нет базовой объектно-ориентированной модели. С другой стороны, некоторые авторы утверждают, что общая объектно-ориентированная модель данных в классическом смысле и не может быть определена по причине непригодности классического понятия модели данных к парадигме объектной ориентированности.
Один из наиболее известных теоретиков в области моделей данных Бери предлагает в общих чертах формальную основу объектно-ориентированной базы данных (ООБД). Далеко не полную и не являющуюся моделью данных в традиционном смысле, но позволяющую исследователям и разработчикам систем ООБД, по крайней мере, говорить на одном языке.
Во-первых, следуя практике многих ООБД, предлагается выделить два уровня моделирования объектов: нижний (структурный) и верхний (поведенческий). На структурном уровне поддерживаются сложные объекты, их идентификация и разновидности связи IS-A. База данных - это набор элементов данных, связанных отношениями «входит в класс» или «является атрибутом». Таким образом, БД может рассматриваться как ориентированный граф. Важным моментом является поддержание наряду с понятием объекта понятия значения.
Важным аспектом является четкое разделение схемы БД и самой БД. В качестве первичных концепций схемного уровня ООБД выступают типы и классы. Отмечается, что во всех системах, использующих только одно понятие (либо тип, либо класс), это понятие неизбежно перегружено: тип предполагает наличие некоторого множества значений, определяемого структурой данных этого типа; класс также предполагает наличие множества объектов, но это множество определяется пользователем. Таким образом, типы и классы играют разную роль, и для строгости и недвусмысленности требуется одновременная поддержка обоих понятий.