ОБ’ЄКТИ, КЛАСИ, МЕТОДИ І ПОВІДОМЛЕННЯ

Нижче представлені деякі основні терміни та концепції обєктного підходу, а саме – самі обєкти (Природно), обєктні класи, методи і повідомлення Там, де це можливо і доречно, дані поняття порівнюються з більш знайомими поняттями Фактично в дуже приблизною формі обєктну термінологію цілком можна співвіднести з термінологією традиційного програмування (рис 253)

Рис 253 Обєктна термінологія (зведення)

Застереження Перш ніж перейти до докладного висвітлення даної теми, необхідно попередити читача, що надалі не слід очікувати скрупульозної точності викладу, притаманною реляційної теорії Дійсно, багато обєктні концепції (або їх опублікування визначення) виражені не дуже точно, щодо формулювання їх визначень єдності думок не досягнуто, і розбіжності виникають навіть з фундаментальних питань (в цьому можна переконатися, прочитавши роботи

1 Для цього рішення потрібне застосування типів, визначених користувачем Мова SQL до часу появи на ринку перших обєктних систем не підтримував типи, визначені користувачем тепер така підтримка в них передбачена Насправді, мова SQL в даний час підтримує декілька засобів, завдяки яким він стає певною мірою обєктно-орієнтованим. Але ми навмисно відкладемо обговорення цих коштів до наступної глави

[2510], [2539] і [2542]) Наприклад, не існує абстрактної, формально певної обєктної моделі даних, немає згоди навіть стосовно до неформальної моделі (Тому в даній книзі термін обєктна модель наводиться в лапках) Також, як це не дивно, немає чіткого розмежування між рівнями абстракції, в зокрема (ключевого) розмежування між самою моделлю та її реалізацією

Читача слід також попередити про те, що, виходячи зі сказаного вище, визначення і пояснення, запропоновані в цій главі, НЕ є загальновизнаними, а також НЕ обовязково повністю відповідають принципам роботи всіх реальних обєктних систем Дійсно, майже всі пропоновані тут визначення і тлумачення можуть бути (і, ймовірно, будуть) піддані критиці з боку інших фахівців у цій галузі

Огляд обєктної технології

Питання: Що таке обєкт Відповідь: Все що завгодно

Основний догмат обєктного підходу-обєктом є все що завгодно (Або іноді кажуть все що завгодно – обєкт першого класу ) Одні обєкти є незмінними як приклад можна привести цілі числа (наприклад, 3, 42) і символьні рядки (наприклад, Mozart, Hayduke Lives”) Інші обєкти – змінювані прикладами можуть служити обєкти, що представляють відділи і службовців, які згадувалися на початку розділу 251 Згідно традиційної термінології, незмінні обєкти відповідаютьзначенням, а змінювані – переменним2, Де розглядаються значення і змінні можуть мати довільну складність (тобто такі обєкти можуть містити будь-яку кількість типів даних, наявних у звичайних мовах програмування, і конструкторів цих типів – чисел, рядків, списків, масивів, стеків і тд)

Примітка У деяких системах термін обєкт вживається тільки стосовно до змінюваному обєкту, а термін значення, або іноді літерал, – Стосовно до незмінного обєкту Навіть у тих системах, в яких термін обєкт використовується як у першому, так і в другому випадках, слід памятати про те, що неформально, за винятком особливо обумовлених ситуацій, під ним мається на увазі змінюваний обєкт, якщо явно не вказано інше

Кожен обєкт має тип (У обєктної термінології – клас) Окремі обєкти іноді називаються екземплярами обєктів (або просто екземплярами), щоб їх можна

було відрізнити від відповідного обєктного типу або класу Зверніть увагу на те, що термін тип тут використовується в сенсі, прийнятому в традиційному програмуванні (як у розділі 5), зокрема, цей термін охоплює і набір операторів (У обєктної термінології – методів), які можуть застосовуватися до обєктів розглянутого типу Оператори тільки читання і оператори поновлення називаються, відповідно, спостерігачами (Observer) і модифікаторами (mutator)

Примітка Насправді, в деяких обєктних системах поняття типів і класів розрізняються Такі системи коротко будуть розглянуті в розділі 253, але поки ми будемо використовувати ці поняття як взаємозамінні

2 Зауважимо, однак, що термін змінна без додаткового уточнення в обєктних контексті часто використовується для позначення, в дуже вузькому сенсі цього слова, деякої змінної (або локальної змінної, або змінної примірника), яка містить ідентифікатор обєкта (Про що піде мова далі в цьому розділі)

Обєкти інкапсульовані Це означає, що фізичне уявлення, тобто внутрішня структура обєкта, наприклад, обєкта DEPT (Відділ), залишається прихованою від користувачів Насправді, користувачеві відомо тільки те, що обєкт здатний виконувати деякі операції (Методи) Наприклад, до обєктів DEPT можуть застосовуватися методи HIRE_EMP (Найняти співробітника), FIRE_EMP (ЗВІЛЬНИТИ співробітника), CUT_BUDGET (Урізати бюджет) і тд Також зверніть увагу на те, що до даних обєктів можуть застосовуватися ТІЛЬКИ ті ​​операції, які згадані серед цих методів Доступ до внутрішнього уявлення таких обєктів дозволений тільки коду, за допомогою якого ці методи реалізовані, тобто, вживаючи жаргон, можна сказати, що ці і тільки ці методи можуть зламати інкапсульований обєкт 3, але, безумовно, даний код також невидимий для користувачів

Слід зазначити, що в літературі, присвяченій обєктному програмування, поняття інкапсуляції фактично трактується в чому по-різному Один з підходів, що представляється найбільш обгрунтованим, прийнятий в цій книзі, полягає в тому, що обєкт вважається інкапсульованим тоді і тільки тоді, коли він є скалярним в тому сенсі, який був зазначений в розділі 5 (це означає, що він не має компонентів, доступних користувачеві) У звязку з цим терміни інкапсульований і скалярний позначають повністю одне і те ж поняття Тому слід зазначити, що, згідно з цим визначенням, деякі обєкти колекцій (див розділ 253), безумовно, не можна назвати скалярними, і тому інкапсулірованнимі На відміну від цього, деякі автори категорично заявляють, що всі обєкти інкапсульовані, а така позиція неминуче веде до суттєвих суперечностей Інші автори вважають, що поняття інкапсуляції означає не тільки приховування внутрішньої структури обєкта, але і фізичну увязку відповідних методів з обєктом або класом розглянутого обєкта (тобто фізичне включення методів до складу обєкта) На думку автора, в останній інтерпретації не враховуються відмінності між моделлю і реалізацією безумовно, саме ця плутанина є ще однією з причин, по якій (як зазначено в розділі 5) автор воліє взагалі не використовувати термін інкапсуляція, але в цій главі нам, безумовно, доведеться час від часу стикатися з цим терміном

Перевага інкапсуляції полягає в тому, що вона дозволяє змінювати внутрішнє подання обєктів, виключаючи необхідність переробляти додатки, в яких використовуються ці обєкти Безумовно, це можливо за умови, що будь-яке таке зміна внутрішнього подання супроводжується відповідною зміною коду, за допомогою якого реалізуються приємним до обєкта методи Інакше кажучи, інкапсуляція увазі фізичну незалежність від даних

Тепер опишемо инкапсуляцию в термінах незалежності від даних, що має сенс з точки зору баз даних, хоча в літературі з обєктної технології це поняття зазвичай описується інакше Ми визначимо інкапсульовані обєкти як такі, що закриту область памяті і відкритий інтерфейс

3 Як було зазначено в розділах 5 і 20, автор рекомендує дотримуватися більш суворих вимог Це означає, що порушувати правила інкапсуляції має бути дозволено тільки тим операторам, які приписані моделлю (зокрема, селекторам і операторам ТНЕ_) всі інші оператори повинні бути реалізовані в термінах цих операторів При розробці коду необхідно дотримуватися всі обережності Але оскільки немає згоди в частині визначення обєктної моделі, фахівці з обєктним системам не прийшли до єдиної думки і щодо того, якими мають бути оператори, приписані моделлю.

■&nbsp&nbsp&nbsp&nbsp Закрита область памятіскладається ззмінних екземпляра,які також іноді називаються членами або атрибутами Їх значення представляють внутрішній стан даного обєкта У істинно обєктної системі змінні екземпляра є повністю захищеними і прихованими від користувачів, однак, як було сказано вище, вони доступні для коду, за допомогою якого реалізовані методи Тут слід додати, що багато обєктні системиНЕє чистими в цьому сенсі, оскільки дозволяють користувачам доступ до деяких змінним екземпляра До цього питання ми ще повернемося в наступному підрозділі

■&nbsp&nbsp Відкритий інтерфейс складається з визначень інтерфейсів для методів даного обєкта Ці визначення відповідають тому, що у главі 20 було названо сигнатурами специфікації Але, як буде показано нижче, в обєктних системах звичайно потрібно, щоб такі сигнатури були повязані лише з одним конкретним цільовим типом або класом А в главі 20 ні про що подібне не було й мови, але ми не вважаємо, що така вимога необхідно або обовязково [33] Як вже зазначалося, код, який реалізує методи обєкту, як і змінні екземпляра, прихований від користувача

Примітка Точніше кажучи, відкритий інтерфейс являє собою частину визначення класу розглянутого обєкта, а не частина самого цього обєкта (Як би то не було, відкритий інтерфейс є загальним для всіх обєктів даного класу, а не конкретним кодом в деякому окремому обєкті) І для визначення класу даний обєкт є його окремою екземпляром (як елемент каталогу у звичайній реляційної системі) Очевидно, що відкритий інтерфейс для даного обєкта є загальним для всіх обєктів класу, екземпляром якого є даний обєкт, і тому має сенс ввести відкритий інтерфейс до складу класу, що визначає обєкт

Методи викликаються за допомогою повідомлень, які, по суті, євикликами функцій і мають єдиний синтаксично виділений формальний параметр – одержувач, або мета Наприклад, нижче наводиться повідомлення, записане з використанням гіпотетичного синтаксису і призначене для передачі вказівки про прийом співробітника Е на роботу у відділ D

D HIRE_EMP (Е)

Параметри D і Е будуть розглянуті в підрозділі Порівняння класів примірників і колекцій розділу 253 Одержувачем в цьому прикладі є обєкт відділу, вказаний як параметр D Згідно синтаксису традиційних мов програмування (вірніше, тих мов, в яких всі фактичні параметри обробляються однаковим чином), це ж повідомлення могло бути сформульовано таким образом4

HIRE_EMP (D, Е)

4 Виділення одного фактичного параметра в якості особливого може спростити виконання системою процесу звязування на етапі прогону, який був описаний в главі 20 Однак такий підхід має і цілий ряд недоліків [33] не останнім з них можна назвати те, що для програміста, який розробляє конкретний метод, ускладнюється робота з написання коду реалізації Ще один недолік полягає в тому, що вибір цільового фактичного параметра (зрозуміло, в тому випадку, якщо є з чого вибирати, тобто якщо є декілька фактичних параметрів) здійснюється довільно

Для зручності в будь обєктної системі зазвичай заздалегідь передбачений деякий набір вбудованих класів і методів Зокрема, в ній майже завжди присутні такі класи, як INTEGER (з методами =, <", "+", "-" і тд), CHAR (С методами =, <", "| |", SUBSTR і т.д.), а також інші класи. Безумовно, в системі надаються можливості і для досвідчених користувачів, які можуть створити власні класи і методи.

Змінні примірника

Розглянемо більш детально концепцію змінних екземпляра, відносно якої у фахівців все ще немає єдності думок Як стверджувалося раніше, в істинно обєктної системі змінні екземпляра повинні бути повністю приховані від користувача, але, на жаль, більшість систем не є дійсно обєктними Тому на практиці необхідно розрізняти відкриті і закриті змінні екземпляра останні дійсно приховані для зовнішнього світу, тоді як перші-ні

Припустимо, що є обєктний клас відрізків прямих (line segment —  Is)

Будемо вважати, що кожен відрізок має початок (точка BEGIN) і кінець (точка END) (нагадаємо, що аналогічний приклад використовувався в розділі 5) Щоб отримати значення координат цих точок для заданого сегмента Is, зазвичай використовуються вислови на зразок Is BEGIN і IsEND Таким чином, BEGIN і END – відкриті змінні

примірника (відзначимо, що за визначенням доступ до таких змінних повинен здійснюватися за допомогою спеціального синтаксису – зазвичай використовується крапка після імені обєкта, як у нашому прикладі) Якщо фізична уявлення відрізків прямих замінити, наприклад, комбінацією координат середньої точки (MIDPOINT), довжини відрізка (LENGTH) і його нахилу (SLOPE), будь-яка програма, яка містить такі вирази, як 1sBEGIN і 1sEND, перестане працювати Іншими словами, буде втрачена незалежність від даних

Зверніть увагу на те, що відкриті змінні примірника не є логічно необхідними Припустимо, що для отримання значень змінних екземпляра відрізкапрямийвизначено методи GET_BEGIN, GET_END, GET_MIDPOINT, GET_LENGTH і GET_SLOPE Тоді користувач зможе отримати значення координат початку, кінця, середньої точки відрізкаIs,  його довжини і нахилу, викликавши методи GET_BEGIN{1s) ,    GET_END(1s),    GET_MIDPOINT(1s),   GET_LENGTH(1s) І GET_SLOPE (1s), Відповідно Але в цьому випадку вже не має значення, яке дійсне фізичне уявлення відрізка – цілком достатньо, щоб при кожному його зміні відповідним чином були змінені і методи GET Більше того, не було б помилкою, якби користувачеві дозволялося застосовувати вислови на зразок 1sBEGIN в якості скорочення для вираження виклику методу GET_BEGIN (1s) Зверніть увагу на те, що для використання такого скорочення обєкт зовсім НЕ обовязково повинен містити відкриту змінну примірника BEGIN На жаль, в реальних системах зазвичай не дотримуються такого підходу Як правило, всі відкриті змінні екземпляра фактично відображають фізичне уявлення обєкта (принаймні, частково, хоча можуть існувати і деякі додаткові змінні екземпляра, які є дійсно закритими і прихованими) Тому у відповідності зі сформованою практикою будемо вважати, що, якщо не вказано інше, обєкти надають певні відкриті змінні екземпляра, хоча це поняття логічно зайве

У звязку зі сказаним вище необхідно розглянути ще один практичний випадок Припустимо, що певні фактичні параметри (які користувач в першому наближенні може вважати параметрами змінної примірника) потрібні для створення обєктів деякого конкретного класса5 Однак з цього зовсім НЕ слід, що подібні змінні екземпляра можуть застосовуватися для будь-яких цілей Нехай, наприклад, для створення обєкта відрізка прямої необхідні значення координат точок BEGIN і END Але це не означає, що завжди можна буде скласти запит, наприклад, для отримання відомостей про всі відрізках прямих, які мають одні і ті ж задані координати точки BEGIN Можливість виконання такого запиту залежить від того, чи був визначений відповідний для цього випадку метод

Нарешті, слід зазначити, що деякі системи підтримують особливий вид закритих змінних екземпляра, званих захищеними Якщо обєкти класу з мають захищену змінну примірника р, то ця змінна доступна тільки для методів, визначених для класу з, і для методів, визначених для будь-якого підкласу (На будь-якому рівні) класу С Підкласи коротко описані в підрозділі 253

Ідентифікатор обєкта

Кожен обєкт має унікальним ідентифікатором обєкта (Object ID – OID) Такі примітивні (Незмінні) обєкти, як ціле число 42, єсамоідентифікує, тобто вони самі є власними ідентифікаторами обєкта

► Змінні обєкти, навпаки, мають в якості ідентифікаторів адреси (Концептуальні) Ці адреси можна використовувати у всій базі даних як покажчики(Концептуальні) на відповідні обєкти Адреси обєктів користувачеві безпосередньо не надаються, але вони можуть бути присвоєні, наприклад, змінним програми і змінним примірників в інших обєктах Обговорення цього питання буде продовжено в розділах 253 і 254

До речі, відзначимо, що іноді можна зустріти твердження про те, що з точки зору користувача перевага обєктних систем полягає в абсолютній ідентичності

двох різних обєктів, тобто вони можуть бути дублікатами по відношенню один до одного, але відрізнятися своїми ідентифікаторами Однак з точки зору автора цієї книги подібне твердження брехливе Бо яким же чином користувач дійсно зможе

зовні розрізнити обидва обєкти (Більш докладно це питання описаний в [63], [66] і особливо-в [2517])

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*