Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема7.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.06 Mб
Скачать

7.7.2. Алгоритм реалізації операції

Кожній операції, визначеній в уточненій об’єктній моделі, має бути поставлений у відповідність алгоритм, який реалізує цю операцію. При виборі алгоритму можна керуватися такими міркуваннями:

  • обчислювальна складність алгоритму: для алгоритмів, які застосовуються у доволі великих масивах даних, важливо, щоб оцінка їх обчислювальної складності була розумною; наприклад, навряд чи має сенс уникати побічності у посиланнях, особливо коли введення побічності істотно спрощує розуміння програми, тоді як заміна пухирчастого сортування з оцінкою складності n на алгоритм сортування з оцінкою n  log n завжди різко прискорює обчислення;

  • зрозумілість алгоритму та легкість його реалізації: для досягнення цього можна також піти на невелике зниження ефективності; наприклад, введення рекурсії завжди знижує швидкість виконання програми, але спрощує її розуміння (рис. 76);

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

Визначення функції n!

0!=1

n! = n * (n — 1)!

Нерекурсивний алгоритм Рекурсивний алгоритм

factorial (int n) fact (int n)

{ 

int i, f = 1; int f = 1;

for (i = n; i > 0; i --) if (n > 0)

f = f * i; f = f * fact (n — 1);

return(f); return (f);

} }

Рис. 76. Порівняння двох алгоритмів

Вибір алгоритмів пов’язаний із вибором структур даних, які обробляються цими алгоритмами. Вдалий вибір структур даних дозволяє істотно оптимізувати алгоритм. Ще одним способом спрощення та оптимізації алгоритмів є введення внутрішніх (допоміжних) класів. Ці класи не мають відповідностей у реальному світі; вони пов’язані з реалізацією, але можуть істотно спростити її ( приклади: клас «стек», клас «двозв’язний список» і т. ін.).

Нарешті, нерідко буває корисно внести деякі зміни до структури об’єктної моделі. Ці зміни зводяться до введення додаткових класів та до перерозподілення операцій між класами. Так, у прикладі, зображеному на рис.75, введення додаткового класу «фрагмент» істотно прискорює видачу зображення.

При розподіленні операцій за класами керуються такими міркуваннями:

  • якщо операція виконується лише над одним об’єктом, то вона визначається в класі, екземпляром якого є цей об’єкт;

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]