Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
розділ_1_28_08_15.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆
      1. Структурність і модульність

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

C КВАДРАТНИЙ КОРІНЬ З ДІЙСНОГО ЧИСЛА

REAL FUCTION ROOT (A)

S=A

IF (A.EQ.0) GO TO 20

10 T=(S+A/S)*.5

IF (ABS((T-S)/T).LE.1.Е-6) GO TO 20

S=T

GO TO 10

20 ROOT=S

END

В 1968 році голландський вчений Е.Дейкстра вперше звернув увагу на проблеми, що виникають у програмах з неконтрольованими переходами, в 1970 році проголосив новий напрямок, який він назвав структур(ова)ним програмуванням. Структурне програмування — це варіант процедурного, що вживає три типи структур керування: послідовне виконання дій, розгалуження і цикл. Не дивно, що Фортран не підтримував цю парадигму — в наборі його засобів не було циклів за умовами. Починаючи з Алголу, а особливо в Паскалі, цикли стають основним засобом організації обчислень в програмі:

function

root(a:real,eps:real): real;

var s, t: real;

begin

s:=a*0.5;

repeat

t:=s;

s:=(s+a/s)*O.5;

until abs(s-t)/s<eps do

root:=s;

end

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

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

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

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

Поняття модуля як абстракції даних було вперше запропоноване Парнасом у 1972 році, правда на той час уже існувала мова програмування Симула 67, в якій використовувалася парадигма об’єктів. У найбільш повному виді поняття абстракції даних було реалізоване в мові програмування Модула-2.

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

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

Цей же квадратний корінь можна знайти у відповідному рядку чотиризначних математичних таблиць Брадіса. У першому випадку вся складність зосереджена в алгоритмі, який необхідно було придумати і запрограмувати (що ми й зробили у наведеному вище прикладі програми на Паскалі). У другому — в структурах даних, тобто в таблицях, які професор В.М.Брадіс повинен був попередньо розрахувати.

Ось приклад тексту в Модулі 2, який дає певне уявлення про поділ модуля на дві частини — визначення і реалізацію:

definition module Months;

type Month=

(jan, feb, mch, apr, may, jun,

jul, aug, sep, oct, nov, dec);

procedure length(m: Month): Cardinal;

end Month;

implementation module Month;

var

len: array Month of Cardinal;

procedure length(m: Month) : Cardinal;

begin

return len[m];

end length;

begin

len[jan]:=31; len[feb]:=28;

len[mch]:=31; len[apr]:=30;

len[may]:=31; len[jun]:=30;

len[jul]:=31; len[aug]:=31;

len[sep]:=30; len[oct]:=31;

len[nov]:=30; len[dec]:=31;

end Month.

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