Объектно-ориентированная парадигма. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объектно-ориентированная парадигма.



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

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

Структура:

Структура объектной модели описываются с помощью трех ключевых понятий:

  • инкапсуляция - каждый объект обладает некоторым внутренним состянием (хранит внутри себя запись данных), а также набором методов - процедур, с помощью которых (и только таким образом) можно получить доступ к данным, определяющим внутреннее состояние объекта, или изменить их. Таким образом, объекты можно рассматривать как самостоятельные сущности, отделенные от внешнего мира. Пример:
·   Class Point {         // вводим новый тип данных - объект "точка"·      X,Y: int;           // данные объекта - координаты точки·      .........·      Point(X: int, Y: int); // конструктор объекта - процедура, вызываемая при ·                                // определении переменной на базе объекта и ·                                // присваивающая значения его данным·      .........·      Draw();              // метод "нарисовать точку"·      Erase();             // метод "стереть точку"·      Move(newX,newY);     // метод "переместить точку" (изменяет данные объекта)·      int GetX();          // метод "получить значение поля X"·      int GetY();          // метод "получить значение поля Y"·      .........·                                // все методы должны быть описаны, например·                                // реализация метода Move:·      ·      Move(newX: int, newY: int) {·        X=newX;            // запись новых данных в объект·        Y=newY;            //·      }·    }                      // конец описания объекта· ·    Begin                  // основная процедура программы·  ·      Point A(0,0);        // создать новый объект и присвоить ему данные· ·      for i=1 to 100       // создать цикл·          A.Draw();        // нарисовать точку ·          A.Hide();        // стереть точку·          A.Move(i,i*10);  // присвоить экземпляру объекта новые данные·      endfor;              // · ·      print(A.GetX(),A.GetY()); // получить и напечатать данные объекта· End.

Из этого примера видно, что мы не можем напрямую обратиться к данным объекта, а должны вызывать метод Move для изменения его данных и GetX, GetY для считывания значений этих данных. Т.е. объект скрывает свою внутренню структуру, именно это свойство и называется "инкапсуляцией".

  • наследование - подразумевает возможность создавать из классов объектов новые классы объекты, которые наследуют структуру и методы своих предков, добавляя к ним черты, отражающие их собственную индивидуальность. Наследование может быть простым (один предок) и множественным (несколько предков). Пример:
·   Class Circle extend Point { // создаем новый объект "окружность", наследующий·                                   // свойства объекта "точка"·   Radius: int;              // добавляем новое поле "радиус", поля X и Y наследуются·                                   // от родительского объекта·   .............·   Circle(X:int,Y:int,Radius:int); // конструктор нового объекта·   .............·   Draw();                    // переопределяем некоторые методы·   Hide();                    // родительского объекта, метод Move наследуется·   .............·   ChangeRadius(Radius);      // вводим новый метод "изменить радиус"·   .............·   GetRadius();               // вводим новый метод "получить значение радиуса"·                                   // методы GetX и GetY наследуются от родительского·                                   // объекта }
  • полиморфизм - различные объекты могут по разному реагировать на одинаковые внешние события в зависимости от того, как реализованы их методы. Пример:
·  Begin·   Point A(100,100);·   Circle B(200,200,50);· ·   A.Draw();   // рисует точку·   B.Draw();   // рисует окружность End.

Целостность данных:

Для поддержания целостности объектно-ориентированный подход предлагает использовать следующие средства:

  • автоматическое поддержание отношений наследования
  • возможность объявить некоторые поля данных и методы объекта как "скрытые", не видимые для других объектов; такие поля и методы используются только методами самого объекта
  • создание процедур контроля целостности внутри объекта

Средства манипулирования данными:

К сожалению, в объектно-ориентированном программировании отсутствуют общие средства манипулирования данными, такие как реляционная алгебра или реляционное счисление. Работа с данными ведется с помощью одного из объектно-ориентированных языков программирования общего назначения, обычно это SmallTalk, C++ или Java.

Подведем теперь некоторые итоги:

В объектно-ориентированных базах данных, в отличие от реляционных, хранятся не записи, а объекты. ОО-подход представляет более совершенные средства для отображения реального мира, чем реляционная модель:

  • естественное представление данных. В реляционной модели все отношения принадлежат одному уровню, именно это осложняет преобразование иерархических связей модели "сущность-связь" в реляционную модель (см. параграф 5.5.3). ОО-модель можно рассматривать послойно, на разных уровнях абстракции.
  • имеется возможность определения новых типов данных и операций с ними.

В то же время, ОО-модели присущ и ряд недостатков:

  • осутствуют мощные непроцедурные средства извлечения объектов из базы. Все запросы приходится писать на процедурных языках, проблема их оптимизации возлагается на программиста.
  • вместо чисто декларативных ограничений целостности (типа явного объявления первичных и внешних ключей реляционных таблиц с помощью ключевых слов PRIMARY KEY и REFERENCES) или полудекларативных триггеров для обеспечения внутренней целостности приходится писать процедурный код.

Очевидно, что оба эти недостатка связаны с отсутствием развитых средств манипулирования данными. Эта задача решается двумя способами - расширение ОО-языков в сторону управления данными (стандарт ODMG), либо добавление объектных свойств в реляционные СУБД (SQL-3, а также так называемые объектно-реляционных СУБД).



Поделиться:


Последнее изменение этой страницы: 2021-04-04; просмотров: 65; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.203.172 (0.007 с.)