- •1.2. Алгоритм
- •1.3. Предмет науки програмування
- •1.4. Застосування мов програмування
- •1.5. Стандартизація мов програмування
- •1.6. Середовище розробки
- •1.7. Тестування і верифікація програм
- •Лекція 2. Алгоритми і обчислення
- •2.1. Алгоритми
- •2.2. Обчислювальні машини
- •2.3. Основи фон-нейманівської архітектури
- •Лекція 3. Парадигми програмування
- •3.1. Базові парадигми програмування
- •Процедурне програмування
- •Абстрактна семантика процедурних програм.
- •Денотаційна семантика.
- •Операційна семантика
- •Структурність і модульність
- •3. 3. Модульне програмування
- •3.4. Об’єктно-орієнтовне програмування
- •3.5. Функціональне програмування
- •3.6. Логічне програмування
- •3.6. Алгебраїчна парадигма
- •Висновок
- •Лекція 4. Огляд основних мов програмування
- •4.1. Мова Picmkalkul Конрада Цузе
- •4.1.1. Історичні передумови
- •4.1.2. Огляд мови
- •4.2. Мінімальне програмування на апаратному рівні: псевдокоди
- •4.2.1. Мова Short Code
- •4.2.2. Система Speedcoding
- •4.2.3. Система "компіляції" univac
- •4.2.4. Суміжна робота
- •4.3. Комп'ютер ibm 704 і мова fortran
- •4.3.1. Історична ретроспектива
- •4.3.2. Процес розробки
- •4.3.3. Огляд мови fortran I
- •4.3.4. Огляд мови fortran II
- •4.3.5. Мови fortran IV, fortran 77 і fortran 90
- •4.4. Функціональне програмування: мова lisp
- •4.4.1. Витоки робіт в області штучного інтелекту та обробка списків
- •4.4.2. Процес розробки мови lisp
- •4.4.3. Огляд мови
- •4.4.5. Два нащадки мови lisp
- •4.4.6. Споріднені мови
- •4.5. Перший крок до удосконалення: мова algol 60
- •4.5.1. Історична ретроспектива
- •4.5.2. Початкова стадія розробки
- •4.5.3. Огляд мови algol 58
- •4.5.4. Прийняття звіту про мову algol 58
- •4.5.5. Процес розробки мови algol 60
- •4.5.6. Огляд мови algol 60
- •4.5.7. Оцінка мови algol 60
- •Лекція 5. Трансляція і формальні граматики
- •5.1. Транслятори
- •5.2. Процес трансляції
- •5.3. Формальні граматики. Нбф-граматика
- •Лекція 6. Java - мова ооп
- •6.2. Основні властивості програм і перші приклади
- •6.3. Арифметичні і побітові оператори мови Java
Лекція 3. Парадигми програмування
Приведемо цитату із тлумачного словника.
Парадигма – набір теорій, стандартів і методів, які спільно представляють собою спосіб бачення світу.
По аналогії з цим прийнято вважати, що парадигма в програмуванні – спосіб концептуалізації, який визначає, яким чином потрібно проводити обчислення, та як має бути структурована та організована робота комп’ютера по реалізації цих обчислень.
Відомо декілька основних парадигм програмування, важливими із яких є парадигми директивного, об’єктно-орієнтованого і функціонально-логічного програмування. Для підтримки програмування в відповідності з тою чи іншою парадигмою розроблені спеціальні алгоритмічні мови.
Pascal є прикладом мови директивного програмування (directive programming), коли розробка програми використовує процесно-орієнтовану модель, тобто намагається створити код, який певним чином впливає на дані. Активним началом при цьому підході вважається програма (код), яка повинна виконати всі необхідні дії для досягнення потрібного результатів над пасивними даними.
Цей підхід представляється цілком природним для людини, яка тільки начинає вивчати програмування, і історично виник одним із перших.
Наразі став поширеним об'єктно-орієнтований (object oriented) підхід, що реалізовується, наприклад, мовами C++ і Java. В ньому, навпаки, первинними вважаються об’єкти (дані), які можуть активно взаємодіяти за допомогою механізму передачи повідомлень (називається також і механізмом виклику методів). Функція програміста в цьому випадку подібна ролі бога при створені Всесвіту – він повинен придумати і реалізувати такі об’єкти, взаємодія яких після старту програми приведе до досягненню необхідного кінцевого результату.
Функціональне і логічне програмування використовується мовами типу Lisp, Haskell і Prolog. Ця парадигма базується на принципово іншій трактовці поняття програми. Тут головним є точне формулювання задачі, а вибір і вживання необхідного для її алгоритму рішення покладається на виконуючу систему, а не на програміста.
Уточнимо базові парадигми з позиції синтаксису та семантики мови програмування.
Синтаксис мови описується систему правил написання різних мовних конструкцій, а семантика мови програмування визначає смисл цих конструкцій. Синтаксис мови програмування може бути описано за допомогою НБФ-нотацій.
3.1. Базові парадигми програмування
Слово парадигма грецького походження означає спосіб міркувань, дій або концепцій в певній галузі знань. В останні десятиліття, починаючи з 1979 року, коли американський вчений Р.Флойд опублікував статтю “Paradigms of Programming”, термін парадигми надто часто вживається в програмуванні, а тому варто зупинитися на ньому окремо.
Поняття програми
істотно залежить від її виконавця. Так
речення “знайдіть корені квадратного
рівняння
”
служить прикладом програми, виконавцем
якої може бути учень або студент. Причому
різні виконавці виконають цю програму
по-різному: один, користуючись теоремою
Вієта, інший через дискримінант. Це
приклад декларативної (описової)
парадигми. Програма відповідає на
питання що? — що шукати? що будувати? що
рахувати? В той же час вибір відповіді
на питання як? залишається у межах
компетенції виконавця.
Характерну особливість програми можна визначити як імперативність: “спочатку роби одне, а потім інше”. Вона служить прикладом імперативної (наказової) парадигми програмування. Як правило, імперативна парадигма передбачає менш кваліфікованого виконавця. Відповідно більша відповідальність лягає на програміста, адже він повинен дати більш детальний рецепт розв’язування задачі. Декларативне програмування — це щось на зразок скатертини-самобранки, тоді як імперативне потребує майстерності Попелюшки.
Поділ світу програмування на що? і як? відображає також природній перебіг процесу розв’язування задач.
Спочатку визначаємося з тим, що треба зробити — декларативна програма.
Потім з’ясовуємо наявність виконавця, здатного нас зрозуміти.
Далі оцінюємо його характеристики та порівнюємо їх з поставленими вимогами.
Якщо придатного виконавця немає, пробуємо побудувати імперативну програму, що складатиметься з більш простих дій.
Цікаво, що сама поява електронних обчислювальних машин зобов’язана схожому процесу.
Всередині кожної з двох основних парадигм виділяють парадигми менші.
Декларативні парадигми дозволяють нам точніше висловлюватися про наказові програми. Зауважимо, що сам професор Дж.Бекус — винахідник першої мови наказового програмування Фортран — успішно працював над пошуком нових парадигм, зокрема декларативної парадигми функціонального програмування.
Одночасне застосування кількох парадигм, або мультипарадигменність дозволяє нам глянути на задачу під різними кутами зору, завдяки чому збільшуються шанси пошуку кращого рішення.
Підкреслимо, що парадигма програмування — це спосіб мислення розробника програми. Мова програмування може підтримувати або не підтримувати ту чи іншу парадигму. В першому випадку застосування парадигми стає зручним, тобто простим, безпечним і ефективним. Ми розглянемо три основних наказових парадигми — процедурне, об’єктне (модульне) і об’єктно-орієнтоване (ієрархічне) програмування і одну допоміжну — узагальнене програмування. Наприклад, всіі вони підтримуються мовою програмування С++, яка розвинулася з мови процедурного програмування С.
Огляд поширених мов програмування і відповідних парадигм подано на наступному рисунку:
