Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектування інформаційних систем.doc
Скачиваний:
95
Добавлен:
21.09.2019
Размер:
28.77 Mб
Скачать

14.1. Еволюція об'єктної моделі

14.1.1. Основні положення об'єктної моделі

Методи структурного проектування допомагають спростити процес розроблення складних систем за рахунок використання алгоритмів як готових будівельних блоків. Аналогічно, методи об'єктно-орієнтованого проектування створені, аби допомогти розробникам застосовувати потужні наглядні засоби об'єктного і об'єктно-орієнтованого програмування, що використовує в якості блоків класи і об'єкти.

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

ООАП відображають еволюційний, а не революційний розвиток проектування; нова методологія не перекреслює попередні методи, а будується з врахуванням попереднього досвіду. На жаль, більшість програмістів в даний час формально і неформально натреновані на вживання лише методів структурного проектування. Зрозуміло, багато хороших проектувальників створили і продовжують удосконалювати велику кількість програмних систем на основі цієї методології. Проте алгоритмічна декомпозиція допомагає лише до певної межі, і звернення до об'єктно-орієнтованої декомпозиції необхідне. Більш того, при спробах використовувати такі мови, як C++ або Ada, як традиційні, алгоритмічно орієнтовані, ми не лише втрачаємо їх внутрішній потенціал - швидше за все результат буде навіть гірше, ніж при використанні звичайних мов С і Pascal. Дати електродриль тесляру, який не чув про електрику, означає використовувати її як молоток. Він зігне декілька цвяхів і розіб'є собі пальці, тому що електродриль мало придатна для заміни молотка.

14.1.2. OOP, OOП і ООА

Успадкувавши від багатьох попередників, об'єктний підхід, на жаль, перейняв і заплутану термінологію. Програміст в Smalltalk користується терміном метод, в C++ - терміном віртуальна функція, в CLOS - узагальнена функція. У Object Pascal використовується термін приведення типів, а в мові Ada те ж саме називається перетворення типів. Аби зменшити плутанину, слід визначити, які властивості є об'єктно-орієнтованими, а які - ні. Визначення найвживаніших термінів і понять ви знайдете в глосарії в кінці книги.

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

Термін "об'єкт" з'явився практично незалежно в різних областях, пов'язаних з комп'ютерами, і майже одночасно на початку 70-х років для позначення того, що може мати різні прояви, залишаючись цілісним. Для того, щоб зменшити складність програмних систем, об'єктами називалися компоненти системи або фрагменти знань. Об'єктно-орієнтований підхід був пов'язаний з такими подіями:

  • прогрес в області архітектури ЕОМ;

  • розвиток мов програмування, таких як Simula, Smalltalk, CLU, Ada;

  • розвиток методології програмування, включаючи принципи модульності і приховування даних.

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

  • розвиток теорії баз даних;

  • дослідження в області штучного інтелекту;

  • досягнення філософії і теорії пізнання.

Поняття "об'єкт" вперше було використане більше 20 років тому під час конструювання комп'ютерів з descriptor-based і capability-based архітектурами. У цих роботах робилися спроби відійти від традиційної архітектури фон Неймана і здолати бар'єр між високим рівнем програмної абстракції і низьким рівнем ЕОМ. На думку прибічників цих підходів, тоді були створені якісніші засоби, що забезпечують: краще виявлення помилок, велику ефективність реалізації програм, скорочення набору інструкцій, спрощення компіляції, зниження об'єму необхідної пам'яті. Ряд комп'ютерів має об'єктно-орієнтовану архітектуру.

З об'єктно-орієнтованою архітектурою тісно пов'язані об'єктно-орієнтовані операційні системи (ОС). Дейкстра, працюючи над мультипрограмною системою THE, вперше ввів поняття машини з рівнями стану як засіб побудови системи. Серед перших об'єктно-орієнтованих ОС слід зазначити: Plessey/System 250 (для мультипроцесора Plessey 250), Hydra (для CMU C.mmp), CALTSS (для CDC 6400), CAP (для комп'ютера Cambridge CAP), UCLA Secure UNIX (для PDP 11/45 і 11/70), STAROS (для CMU Cm*), Medusa (також для CMU Cm*) і iMAX (для Intel 432).

Найзначніший вклад в розвиток об'єктного підходу внесений об'єктними і об'єктно-орієнтованими мовами програмування. Вперше поняття класів і об'єктів введені в мові Simula 67. Система Flex і діалекти Smalltalk-72, що слідували за нею -74, -76 і, нарешті -80, взявши за основу методи Simula, довели їх до логічного завершення, виконуючи всі дії на основі класів. У 1970-х роках створено ряд мов, що реалізовують ідею абстракції даних: Alphard, CLU, Euclid, Gypsy, Mesa і Modula. Потім методи, що використовуються в мовах Simula і Smalltalk, були використані в традиційних мовах високого рівня. Введення об'єктно-орієнтованого підходу в С привело до виникнення мов C++ і Objective С. На основі мови Pascal виникли Object Pascal, Eiffel і Ada. З'явилися діалекти LISP, такі, як Flavors, LOOPS і CLOS (Common LISP Object System), з можливостями мов Simula і Smalltalk.

Першим, хто вказав на необхідність побудови систем у вигляді структурованих абстракцій, був Дейкстра. Пізніше Парнас ввів ідею приховування інформації, а в 70-х роках ряд дослідників, головним чином Лісков, Жиль, Гуттаг, і Шоу розробили механізми абстрактних типів даних. Хоар доповнив ці підходи теорією типів і підкласів.

Технології побудови баз даних також здійснили свій вплив на об'єктний підхід, в першу чергу завдяки так званій моделі "сутність-відношення" (ER, entity-relationship). У моделях ER, вперше запропонованих Ченом, моделювання відбувається в термінах сутностей, їх атрибутів і відношень.

Розробники способів подання даних в області штучного інтелекту також внесли свій вклад в розуміння об'єктно-орієнтованих абстракцій. У 1975 р. Мінські висунув теорію фреймів для представлення реальних об'єктів в системах розпізнавання образів і природних мов. Фрейми стали використовуватися як архітектурна основа в різних інтелектуальних системах.

Об'єктний підхід відомий ще здавна. Грекам належить ідея про те, що світ можна розглядати в термінах як об'єктів, так і подій. А в XVII столітті Декарт відзначав, що люди зазвичай мають об'єктно-орієнтований погляд на світ. У XX столітті цю тему розвинув Ренд у своїй філософії об'єктивістської епістемології. Пізніше Мінські запропонував модель людського мислення, в якій розум людини розглядається як сукупність по-різному мислячих агентів. Він доводить, що лише спільна дія таких агентів приводить до осмисленої поведінки людини.

Об'єктно-орієнтоване програмування.

Об'єктно-орієнтоване програмування - це методологія програмування, заснована на представленні програми у вигляді сукупності об'єктів, кожний з яких є екземпляром певного класу, а класи утворюють ієрархію успадкування.

У цьому визначенні можна виділити три частини: 1) OOP використовує як базові елементи об'єкти, а не алгоритми (ієрархія "бути частиною"); 2) кожний об'єкт є екземпляром якого-небудь певного класу; 3) класи організовані ієрархічно (див. поняття про ієрархію "is_а"). Програма буде об'єктно-орієнтованою лише при дотриманні всіх трьох вказаних вимог. Зокрема, програмування, не засноване на ієрархічних відношеннях, не відноситься до OOP, а називається програмуванням на основі абстрактних типів даних.

Відповідно до цього визначення не всі мови програмування є об'єктно-орієнтованими. Якщо термін об'єктно-орієнтована мова взагалі що-небудь означає, то він повинен означати мову, що має засоби підтримки об'єктно-орієнтованого стилю програмування... Забезпечення такого стилю у свою чергу означає, що в мові зручно користуватися цим стилем. Якщо написання програм в стилі OOP вимагає спеціальних зусиль або воно неможливе зовсім, то ця мова не відповідає вимогам OOP. Теоретично можлива імітація об'єктно-орієнтованого програмування на звичайних мовах, таких, як Pascal і навіть COBOL або асемблер, але це вкрай складно. Мова програмування є об'єктно-орієнтованою тоді і лише тоді, коли виконуються наступні умови:

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

  • об'єкти відносяться до відповідних типів (класів),

  • nипи (класи) можуть успадковувати атрибути супертипів (суперкласів).

Підтримка успадкування в таких мовах означає можливість встановлення відношення "is-а" ("є", "це є" " - це"), наприклад, червона троянда - це квітка, а квітка - це рослина. Мови, що не мають таких механізмів, не можна віднести до об'єктно-орієнтованих. Карделлі і Вегнер назвали такі мови об'єктними, але не об'єктно-орієнтованими. Згідно цьому визначенню об'єктно-орієнтованими мовами є Smalltalk, Object Pascal, C++ і CLOS, а Ada - об'єктна мова. Але, оскільки об'єкти і класи є елементами обох груп мов, бажано для них використовувати методи об'єктно-орієнтованого проектування.

Об'єктно-орієнтоване проектування. Програмування перш за все має на увазі правильне і ефективне використання механізмів конкретних мов програмування. Проектування, навпаки, основну увагу приділяє правильній і ефективній структуризації складних систем.

Об'єктно-орієнтоване проектування - це методологія проектування, що об’єднює в собі процес об'єктної декомпозиції і прийоми подання логічної, фізичної, статичної і динамічної моделей проектованої системи.

У цьому означенні містяться дві важливі частини: об'єктно-орієнтоване проектування 1) ґрунтується на об'єктно-орієнтованій декомпозиції; 2) використовує різні прийоми представлення моделей, що відображають логічну (класи і об'єкти) та фізичну (модулі і процеси) структуру системи, а також її статичні і динамічні аспекти.

Саме об'єктно-орієнтована декомпозиція відрізняє об'єктно-орієнтоване проектування від структурного; у першому випадку логічна структура системи відображається абстракціями у вигляді класів і об'єктів, в другому - алгоритмами. Інколи ми використовуватимемо абревіатуру OOП, для позначення методу об'єктно-орієнтованого проектування.

Об'єктно-орієнтований аналіз. На об'єктну модель вплинула модель життєвого циклу програмного забезпечення. Традиційна техніка структурного аналізу заснована на потоках даних в системі. Об'єктно-орієнтований аналіз (або OOA, object-oriented analysis) направлений на створення моделей реальної дійсності на основі об'єктно-орієнтованого світогляду.

Об'єктно-орієнтований аналіз - це методологія, в якій вимоги до системи сприймаються з точки зору класів і об'єктів, виявлених в предметній області.

Як співвідносяться ООА, OOП і OOP? На результатах ООА формуються моделі, на яких ґрунтується OOП; OOП у свою чергу створює фундамент для остаточної реалізації системи з використанням методології OOP.