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

5.2. Теоретичне програмування

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

Авторами української теоретичної школи програмування, створеної В.М. Глушковим, запропоновані нові парадигми, а саме:

- алгебраїчне та інсерційне програмування (А.А.Летичевський і ін.) [24-26];

- експлікативне та номінативне програмування (В.Н.Редько, М.С.Нікітченко), які використовують логічний і математичний апарат для абстрактного конструювання програм [27-29];

- алгебро-алгоритмічне програмування (Г.О. Цейтлін), що поєднує алгебраїчний апарат і теорію алгоритмів [30-31 ].

5.3. Контрольні питання і завдання

1. Охарактеризуйте структурні методи програмування.

2. Наведіть основні особливості і можливості об'єктно-орієнтованого програмування.

3. Які діаграми є в мові UML для візуального проектування програм?

4. Наведіть основні типи компонентів і шляхи їхнього використання.

5. Назвіть базові поняття в компонентному програмуванні.

6. Визначте основні поняття й етапи життєвого циклу у компонентному програмуванні.

7. Визначте основні елементи аспектно-орієнтованого програмування.

8. Визначте основні елементи агентного програмування.

9. Визначте об'єкти генерувального програмування і наведіть призначення.

10. Що таке простір проблем і простір рішень?

11. Наведіть теоретичні методи програмування.

12. Охарактеризуйте алгебраїчне програмування.

13. Що таке алгоритміка і її алгебра?

14. Покажіть сутність переходу до інших алгебр.

6. Оптимізація програм

6.1 Основні поняття.

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

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

Усі ці переваги свідчать на користь застосування оптимізації. Єдиним, але істотним недоліком оптимізації є необхідність ретельного її опрацювання при створенні компілятора. Використовувані методи оптимізації ні при яких умовах не повинні приводити до зміни "змісту" вихідної програми (тобто до таких ситуацій, коли результат виконання програми змінюється після її оптимізації). На жаль, не всі методи оптимізації, використовувані розробниками компіляторів, можуть бути теоретично обґрунтовані і доведені для всіх можливих видів вихідних програм. Тому більшість компіляторів передбачає можливість відключати ті чи інші з можливих методів оптимізації. (Часто при оптимізації компілятори видають попередження розробнику програми, якщо та чи інша її ділянка викликає підозри щодо правильності його "змісту"). Застосування оптимізації також є недоцільним у процесі налагодження розроблюваної програми.

Розрізняються дві основні категорії оптимізуючих перетворень:

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

  • перетворення результуючої об'єктної програми.

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

Методи перетворення програми залежать від типів синтаксичних конструкцій вихідної мови. Теоретично розроблені методи оптимізації для багатьох типових конструкцій мов програмування. Далі будуть розглянуті тільки методи оптимізації лінійних ділянок - вони зустрічаються в будь-якій програмі і складають істотну частину програмного коду.

Лінійна ділянка програми - це виконувана один по одному послідовність операцій, що має один вхід і один вихід. Найчастіше лінійна ділянка містить послідовність арифметичних операцій і операторів присвоєння значень змінним.

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

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