Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
9
Добавлен:
19.09.2019
Размер:
4.01 Mб
Скачать
  1. Основні етапи і задачі об’єктно-орієнтованого проектування. Які артефакти розробляються на етапі оОпроектування?

Об'єктно-орієнтоване проектування (object-oriented design, OOD) - це підхід, в основі якого лежить уявлення про те, що програмну систему необхідно проектувати як сукупність взаємодіючих один з одним об'єктів, розглядаючи кожен об'єкт як екземпляр визначеного класу, причому класи утворюють ієрархію.

Програмування насамперед має на увазі правильне та ефективне використання механізмів конкретних мов програмування. Проектування, навпаки, основну увагу приділяє правильному та ефективному структуруванню складних систем.

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

У даному визначенні містяться дві важливі частини: об'єктно-орієнтоване проектування

1) базується на об'єктно-орієнтованій декомпозиції;

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

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

Завдання:

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

Етапи:

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

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

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

Артефакт - діаграма або документ, що описує певне поняття.

Артефакти:

- Діаграми взаємодій - ілюструє екземпляри класу та взаємодія між ними;

- Діаграми класів - опис імені, полів і методів класу, а також типів зв'язків (асоціація, агрегація, успадкування) між класами;

- Діаграми пакетів (програмні модулі, класи, які в них описані, взаємодії між модулями);

- Діаграми розміщень.

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

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

Рис .. Об'єктно-орієнтовані моделі.

17. Які інструментальні програмні засоби використовуються для розробки та подання результатів аналізу та проектування програмного забезпечення? Які з цих засобів надають можливості кодогенерації та реінженірінга програмного забезпечення?

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

У даному визначенні можна виділити три частини:

1) OOP використовує як базові елементи об'єкти, а не алгоритми;

2) кожен об'єкт є екземпляром якого-небудь певного класу;

3) класи організовані ієрархічно.

Програма буде об’єктно-орієнтованою тільки при дотриманні всіх трьох зазначених вимог. Зокрема, програмування, не засноване на ієрархічних відносинах, не відноситься до OOP, а називається програмуванням на основі абстрактних типів даних.

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

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

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

  • Типи (класи) можуть успадковувати атрибути супертипів (суперкласів)" [34].

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

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

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

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

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

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