Огляд парадигми імперативного програмування 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Огляд парадигми імперативного програмування



Процедурна парадигма відноситься до парадигми імперативного програмування, в яку входять і інші.

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

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

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

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

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

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

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

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

Приклади мов: перші мови скриптів, Fortran, Basic, Асемблери.

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

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

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

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

Приклади мов програмування: всі імперативні мови 2-го і 3-го поколінь підтримують цю парадигму. C/С++, Кобол, Паскаль тощо.

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

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

 

Модульне програмування.

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

- можна окремо розробляти (різними людьми);

- можна окремо зберігати і компілювати.

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

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

При модульному програмуванні полегшується тестування і повторне використання коду; допускається розподілена розробка програм (розробка автономних модулів окремими програмістами), а також розподілене виконання.

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

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

Модулі можуть зберігатися як у бінарному вигляді, так і початковому. Забезпечується багаторазове використання модулів. Ідея збіркового програмування отримала розвиток у парадигмі компонентного програмування. На відміну від компонентного – збіркове програмування не потребує компонентної моделі (каркасу).

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

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

Теоретично доведено (незалежно Дейкстрой і Глушковим В.М.), що будь-який алгоритм можна реалізувати лише з трьох структур, які називаються базовими конструкціями структурного програмування: це послідовність, розгалуження і цикл.

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

Розгалуження задає виконання того чи іншого оператора залежно від виконання якої-небудь умови. Реалізується за допомогою операторів if та switch.

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


Рис. 1.2. Базові конструкції структурного програмування

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

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

у С# їм відповідає чотири види циклів (while, do, for, foreach) і два види розгалужень (if та switch).

Блоки обчислень, які потрібно повторювати оформлюються у вигляді процедур.

Розробка програм виконується зверху-вниз.

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

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

Парадигма структурного програмування домінувала у 70-і 80-і роки минулого сторіччя до появи об'єктно-орієнтованої парадигми.

Структурний підхід до проектування застосовується в ORACLE, SSADM і ін. та добре підходить для ієрархічних систем.

Приклади мов: у всі сучасні мови імперативного програмування введені елементи і обмеження структуризації, наприклад, Pascal, Ada, Fortran, Cobol, Basic.

У C# ідеї структурного програмування використовуються на найнижчому рівні — при написанні методів класів.

Приклади конструкцій структурного програмування на мові C#

Послідовність:

static void Main(string[] args)

{

Console.WriteLine("Введите x- угол в радианах");

double x = double.Parse(Console.ReadLine());

Console.WriteLine("Введите показатель степени n");

int n = int.Parse(Console.ReadLine());

//вызов метода вычисления sin(x) через ряд

double my_sinus = Calc_sin(x,n);

//вызов метода из класса Math

double sinus = Math.Sin(x);

double delta = sinus - my_sinus;

Console.WriteLine("my_sinus= {0},sin={1},delta={2}", my_sinus, sinus, delta);

Console.ReadKey();

}

 

Розгалуження

if (!IsNumeric(s1))

{

throw new Exception("Перший член виразу - не число");

}

Switch (op)

{

case ("+"):

result = digit1 + digit2;

break;

case ("-"):

result = digit1 - digit2;

break;

case ("/"):

result = digit1 / digit2;

break;

case ("*"):

result = digit1 * digit2;

break;

default:

throw new Exception("Невідома операція");

}//switch

 

Цикл

for (int i = 0; i < n; i++)

{

result=result+(Math.Pow((-1),i)*Math.Pow(x,(2*i+1)))/F(2*i+1);

}

 

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



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 488; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.239.148 (0.016 с.)