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

Олександр Васильович Леоненков

Самовчитель UML

Анотація

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

Олександр Васильович Леоненков

Самовчитель UML

РОЗДІЛ 1

Вступ

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

1.1. Методологія процедурно‑ орієнтованого програмування

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

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

Примітка

Прийнято вважати, що сам термін алгоритм походить від імені середньовічного математика Аль‑ Хорезми, який в 825  р. описав правила виконання арифметичних дій в десятковій системі счислення.

З цієї точки зору вся історія математики тісно пов'язана з розробкою тих або інших алгоритмів рішення актуальних для своєї епохи задач. Більш того, саме поняття алгоритму стало предметом відповідної теорії – теорії алгоритмів, яка займається вивченням загальних властивостей алгоритмів. З часом зміст цієї теорії став настільки абстрактним, що відповідні результати розуміли тільки фахівці. Як дань цієї традиції якийсь період часу мови програмування називалися алгоритмічними, а перший графічний засіб документування програм одержав назву блок-схеми алгоритму. Відповідна система графічних позначень була зафіксована в ГОСТ 19.701‑ 90, який регламентував використовування умовних позначень в схемах алгоритмів, програм, даних і систем.

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

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

Важливою властивістю таких програм є необхідність завершення всіх дій попередньої процедури для початку дій подальшої процедури. Зміна порядку виконання цих дій навіть в межах однієї процедури зажадала включення в мови програмування спеціальних умовних операторів типу if‑ then‑ eise і Goto для реалізації галуження обчислювального процесу залежно від проміжних результатів рішення задачі.

Мал. 1.1. Графічне представлення програми у вигляді послідовності процедур

Примітка

Поява і інтенсивне використовування умовних операторів і оператора безумовного переходу стала предметом гострих дискусій серед фахівців по програмуванню. Річ у тому, що безконтрольне вживання в програмі оператора безумовного переходу goto здатне серйозно ускладнити розуміння коду. Відповідні програми сталі порівнювати із спагетті, називаючи їх bowl spaghetti, маючи у вигляді численні переходи від одного фрагмента програми до іншого, або, що ще гірше, повернення від кінцевих операторів програми до її початкових операторів. Ситуація здавалася настільки драматичною, що в літературі зазвучали заклики виключити оператор goto з язиків програмування. Саме з того часу прийнято вважати хорошим стилем програмування – програмування без goto.

Розглянуті ідеї сприяли становленню деякої системи поглядів на процес розробки програм і написання програмних кодів, яка Одержала назву методології структурного програмування. Основою даної методології є процедурна декомпозиція програмної системи і організація окремих модулів у вигляді сукупності виконуваних процедур. В рамках даній методології одержало розвиток низхідне проектування програм або програмування «зверху‑ вниз». Період найбільшої популярності ідей структурного програмування доводиться на кінець 70‑ х‑ начало 80-х років.

Як допоміжний засіб структуризації програмного коду було рекомендовано використовування відступів на початку кожного рядка, які повинні виділяти вкладені цикли і умовні оператори. Все це покликане сприяти розумінню або читабельності самої програми. Дане правило з часом було реалізовано в сучасних інструментаріях розробки програм. Нижче наводиться приклад лістингу програми на язиці Pascal, який ілюструє цю особливість написання програм.

Лістинг 1.1 . Приклад фрагмента програми на Pascal, розробленої з використанням правил структурного програмування

Procedure FirstOpt;

Begin

FuncRaz(Free, Rn);

For i:=1 to N do

RvarRec[i]:=Rn[i];

FvarRec:=Freс;

NumIt:=0;

Repeat

NumIt:=NumIt+1;

V:=Freс;

for j:=1 to До do

for 1:=1 to M do

begin

S:=0.0;

T:=0.0;

for i:=1 to N do

begin

T:=T+sqr(W1[i,j])*Xpr[i,1];

S:=S+sqr(W1[i,j]);

end;

Zentr[j,1]:=T/S;

end;

for j:=1 to До do

for i:=1 to N do

begin

S:=0.0;

P:=0.0;

Q:=0.0;

for l:=1 to M do

S:=S+sqr(Xpr[i,l]‑ Zentr[j,l]);

P:=1.0/S;

end;

Q:=0.0;

D:=0;

for i:=1 to N do

for j:=1 to До do

if Abs(W1[i,j]‑ W2[i,j]) ‑ = Eps

then D:=1;

for i:=l to N do

for j:=1 to До do

W1[i,j]:=W2[i,j];

Until (D=0) or (NumIt=NumMax);

End;

В цей період основним показником складності розробки програм вважали її розмір. Цілком серйозно обговорювалися такі оцінки складності програм, як кількість рядків програмного коду. Правда, при цьому робилися деякі припущення щодо синтаксису самих рядків, які повинні були задовольняти певним правилам. Загальна трудомісткість розробки програм оцінювалася спеціальною одиницею вимірювання – «людино-місяць» або «людино ‑ рік». А професіоналізм програміста напряму зв'язувався з кількістю рядків програмного коду, який він міг написати і відладити протягом, скажімо, місяця.

Примітка

Зараз спроби оцінити професіоналізм програміста кількістю рядків програмного коду можуть викликати лише усмішку співбесідника. Дійсно, використовуючи вбудовані майстри сучасних інструментаріїв розробки (MS Visual C++ або Inprise/Borland Delphi), навіть новачок може за лічені секунди послідовним натисненням кнопок діалогових меню створити працездатний додаток, що містить сотні рядків програмного коду і що складається з десятка окремих файлів проекту.