Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмізація та програмування.docx
Скачиваний:
84
Добавлен:
17.05.2015
Размер:
1.35 Mб
Скачать

Імперативне програмування

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

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

Щоб спростити програмування, монтажування мов було розроблено. Ці замінені функціями машинного коду з мнемоніки і адреса пам'яті з символічної етикетки. Асамблея мова програмування вважається низьким рівнем парадигми хоча це парадигма «другого покоління».

Навіть збірки мов 1960-х років фактично підтримали досить складні librarys, умовне покоління макро, попередня обробка можливостями, CALL (підпрограми), що дозволяє значно повторне використання коду та ізоляції від апаратних особливостей.

Асамблея була, і залишається, використовуватись для критичних за часом системах і часто у вбудованих системах.

Процедурне програмування

Наступна заздалегідь була розробка процедурних мов. Ці мови третього покоління (вперше описано, як мови високого рівня) використання лексики, пов'язаної з розв'язуванням задачі. Наприклад,

C - Розроблено близько 1970 року в Bell Labs

COBOL (Common Business Oriented Language) - використовує такі терміни, як файл, переміщати і копіювати.

FORTRAN (Formula Translation) - з використанням математичної термінології мови, вона була розроблена в основному для наукових і інженерних задач.

ALGOL (Algorithmic Language) - зосереджена на відповідну мову для визначення алгоритму, при цьому використовуючи математичну мову, термінології і орієнтації наукових та інженерних проблем, як FORTRAN.

BASIC (Beginners All purpose Symbolic Instruction Code) - була розроблена, щоб включити більше людей, щоб писали програми.

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

ООП

Об'є́ктно-орієнто́ване програмува́ння (ООП) — одна з парадигм програмування, яка розглядає програму як множину «об'єктів», що взаємодіють між собою. В ній використано декілька технологій від попередніх парадигм, зокрема успадкування, модульність, поліморфізм таінкапсуляцію. Попри те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих. Сьогодні багато мов програмування (зокрема, Java, C#, C++, Python, PHP, Ruby та Objective-C, ActionScript 3) підтримують ООП.

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

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

Грамотне програмування

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

Цікавим різновидом є ДП - концепція, методологія програмування і документування. Іноді це словосполучення помилково перекладають як літературне програмування. Термін і саму концепцію розробив Дональд Кнут в 1981 році при розробці системи комп'ютерної верстки TeX.

Спосіб зрозуміти ДП - згадати пояснення в курсах програмування, написані фразами на «псевдокоді» на «людській мові». Вони зрозумілі, коли сам код важкий, і приховують під однією фразою-«оператором» безліч інших вкладених абстракцій і / або програмного коду на безпосередньо машинній мові.

ДП в деякому розумінні є «програмування на псевдокоді» довільними фразами, які потім розкриваються як точні макро за допомогою утиліти з файлу-тексту, який включає в себе одночасно документовані текстові пояснення концепцій, сам код і псевдокод.

Сутність підходу

ДП є цілісний мета-підхід до написання програм, тобто «парадигма», застосовна на мета-рівні до будь якої (процедурної, функціональної, декларативної, об'єктно-орієнтованої) машинній програмі на будь-якому машинному мовою;

ДП є система макро, створювана з фраз на людській мові, які стають «метамовою» над конкретним мовою програмування. Користування цими фразами подібно поясненню алгоритмів на «псевдокоді», але в разі ГП вони стають точними «новими операторами» метамови;

програма і документація більше не пишуться як машинний код з примітками. Само конструювання програми йде в порядку, що визначається логікою думки (або пояснень), де макро на «псевдокоді» грають роль абстракцій (над абстракціями та / або кодом) для ясності думки. Змінюється кардинально порядок проходження в програмі, він не машинний, а той, який вимагає логіка;

технічно ДП робиться за допомогою утиліти, яка однією командою запускає препроцесор, розкриває всі макро і «сплутувалися», «заплутує» («tangle») логічний виклад в машинний код, який потім можна компіювати або запускати як зазвичай. Інша команда «сплітає» («weave») з цього загального для програми і пояснень файлу сформатував документацію (для друку, веба і т. д.).

Іншими словами, програма мислиться не як ієрархія, top-down або bottom-up, але як «взаимозависимая мережу концепцій» (звідси назва першої системи ДП - «Web») і створюється як «потік думки», що проходить по цій мережі в зв'язному, логичном вигляді, що зовні робить форму опису схожою на літературне есе. Програміст, таким чином, відмовляється від прив'язки до написаним машиною порядку.

Декларативне програмування

Імперативні мови програмування протиставляються функціональним і логічним мов програмування. Функціональні мови, наприклад, Haskell, не являють собою послідовність інструкцій і не мають глобального стану. Логічні мови програмування, такі як Prolog, зазвичай визначають що треба обчислити, а не як це треба робити.

Структурне програмування — методологія програмування запропонована в 1970-х роках голландським науковцем Дейкстрою (Edsger Wybe Dijkstra), була розроблена та доповнена Ніклаусом Віртом.

Згідно з цією методологією будь-яка програма - це структура створена на основі трьох основних конструкцій:

  • послідовне виконання - виконання операцій в тому порядку, в якому вони записані в тексті програми

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

  • цикл - виконання операції доти доки виконується задана умова (умова продовження циклу)

Кожна конструкція являє собою блок із одним входом і одним або кількома виходами.

Блок Слідування передбачає лінійне виконання операторів програми.

Блок Вибір являє собою точку прийняття рішення про подальший перебіг виконання операторів програми. Вибір здійснюється однією із трьох структур:

  • if (єдиний вибір)

  • if...else (подвійний вибір)

  • switch або case (множинний вибір)

Усі три структури при бажанні можна звести до однієї типу if.

Блок Повторення реалізується одним із трьох способів:

  • структура while

  • структура do/while

  • структура for

Усі три структури можна звести до структури while.

Структурована програма складається із вищеназваних блоків за двома правилами: пакетування (вихід одного блоку з'єднується із входом наступного) і вкладення (будь-який блок може бути замінений на керуючу структуру вибору або повторення).

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

Такі програми легко створюються і тестуються. Розробка програм займає менше часу. Програми прозоріші і легко піддаються переробці.

Функціональне програмування - розділ дискретної математики і парадигма програмування, в якій процес обчислення трактується як обчислення значеньфункцій в математичному розумінні останніх (на відміну від функцій як підпрограм в процедурному програмуванні).

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

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

Найвідомішим мовою логічного програмування є Prolog.

Першим мовою [джерело не вказано 871 день] логічного програмування була мова Planner, в якому була закладена можливість автоматичного виведення результату з даних і заданих правил перебору варіантів (сукупність яких називалася планом). Planner використовувався для того, щоб знизити вимоги до обчислювальних ресурсів (за допомогою методу backtracking) і забезпечити можливість виводу фактів, без активного використання стека. Потім була розроблена мова Prolog, який не вимагав плану перебору варіантів і був, в цьому сенсі, спрощенням мови Planner.

Від мови Planner також відбулися логічні мови програмування QA-4, Popler, Conniver і QLISP. Мови програмування Mercury, Visual Prolog, Oz і Fril відбулися вже від мови Prolog. На базі мови Planner було розроблено також декілька альтернативних мов логічного програмування, не заснованих на методі пошуку з поверненнями (backtracking), наприклад, Ether (див. огляд Шапіро [1989]).

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

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

Якщо B1 і ... і Вп, то Hлікує наслідки, як мета-скорочення процедур:, щоб показати / H вирішити, показати / B1 і вирішити ... і Вп.Наприклад, це відноситься до імплікації:Якщо ви натиснете на кнопку сигналу тривоги,то ви попередити водія про поїзд можливих надзвичайних як процедура:Щоб попередити водія про поїзд можливих надзвичайних ситуацій,натисніть на кнопку сигналу тривоги.Відзначимо, що це узгоджується з інтерпретацією ВНК конструктивної логіки, де наслідки можуть бути інтерпретовані як рішення задачі H даного рішення B1 ... Bn. Тим не менш, визначальною рисою логічного програмування є те, що множини формул можна розглядати як програми та пошук доказів можуть бути надані обчислювальний сенс. Це досягається шляхом обмеження логіки на "хороших" фрагмента таких як Хорна або спадкової формули Harrop. Див Д. Міллер і співавтор., 1991.