Принципи проектування програм (реферат)

Реферат на тему:

Принципи проектування програм

План

Принципи проектування програм.

Базові елементи програми

Практичні правила проектування програм.

Література

Спробуємо визначити, як слід проектувати програму. Чи існують методи,
які дозволяють організувати створення програми таким чином, щоб вона
була зрозумілою не тільки комп’ютеру, але й програмісту, який її
використовує або здійснює супроводження?

У програмуванні відомі 2 основні підходи до проектування програм [14,
15]:

нисхідний (top-down, згори донизу, аналітичний);

висхідний (down-top, знизу догори, синтетичний).

Аналітичне програмування (інколи згадується як “систематичне
програмування” або “ієрархічне програмування”) є загальним методом
боротьби зі складностями шляхом покрокових уточнень. Він починається з
ясної постановки задачі, яку треба розв’язати, і розвивається далі
шляхом розбиття її на підзадачі, приводячи врешті решт до таких задач,
розв’язок яких легко виразити через базові поняття. Без особливих
обмежень можна вважати, що потрібний ступінь деталізації досягнуто, якщо
кожна підзадача може бути реалізована окремим модулем (підпрограмою) –
це і буде базовим поняттям проекту. Аналітичне програмування орієнтоване
на проблему: ми шукаємо розв’язок задачі і на кожному кроці даємо повний
опис розв’язку (з відповідною мірою деталізації).

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

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

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

Слід зауважити, що у абсолютно чистому вигляді жоден з цих підходів не
може бути життєздатною технологією проектування. Реальна стратегія
полягає в розумному поєднанні цих підходів. При цьому варто пам’ятати,
що програмування “згори донизу” (аналітичне) застосовується здебільшого
для розв’язання конкретних прикладних задач, а програмування “знизу
догори” (синтетичне) — для написання операційних систем і системних
бібліотек.

Після створення проекту в цілому розглянемо окремий модуль.

2. Базові елементи програми

Базовими елементами програми називаються такі основні логічні структури:

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

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

повторення — цикл, у якому група операторів може виконуватися знову,
якщо справедлива задана умова.

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

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

3. Практичні правила проектування програм.

При створенні проекту програми будемо користуватись наступними
правилами.

Чітке визначення поставленої задачі (ще до етапа програмування).

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

При визначенні задачі слід добиватися точності.

Вибір алгоритму.

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

Хороший алгоритм — це необхідна, але не достатня умова хорошої програми.

Приклад демонструє істотно різну кількість перевірок в алгоритмах, які
перевіряють, чи є n простим числом:

Перевіряємо: n=10 n=100 n=1000

2, 3, 4, 5, …, n

(всі числа до n) 8 98 998

2, 3, 5, 7, …, n

(всі непарні числа до n)

5

50

500

2, 3, 5, …, [?n]

(всі непарні числа до [?n])

2

5

16

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

Вибір мови програмування.

Якщо мова програмування не нав’язана замовником і існує можливість її
вибору, слід мати на увазі, що всі існуючі мови програмування можна
розділити на наступні групи:

універсальні мови програмування високого рівня;

спеціалізовані мови розробника програмного забезпечення;

спеціалізовані мови користувача;

мови низького (системного) рівня.

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

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

Крім них до групи універсальних мов програмування відносяться,
наприклад, Basic, Visual Basic, Ada, Modula, кожна з яких має свої
особливості, а отже, і свою область застосування.

Спеціалізовані мови розробника програмного забезпечення використовуються
для створення лише спеціалізованого програмного забезпечення. Такими є:
мови баз даних (Fox-Pro, SQL та програмні системи Access, Oracle,
Paradox), мови програмування прикладних програм для мереж (Java-Script,
VBScript) та інші.

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

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

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

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

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

Приклад:

(* гірший варіант *)

for i := 1 to 25 do

a[i] := 0.0; (* кращий варіант *)

const n = 25;

for i := 1 to n do

a[i] := 0.0;

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

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

Використання бібліотечних підпрограм.

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

Не слід переписувати функцію обчислення квадратного кореня!

В нагоді також можуть стати відкриті розробки колег, якщо вони ретельно
відтестовані, а також підпрограми, наведені у літературних джерелах (ці
останні обов’язково слід перевіряти перед використанням).

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

Встановлення мети проекту.

При створенні програмного проекту неможливо досягти найкращих критеріїв
якості

одночасно по всіх показниках. Тому слід визначити головну мету проекту.
Можливі варіанти:

високий рівень надійності;

певний обмежений термін виконання;

мінімізація часу або вартості;

зручність і простота використання;

ефективність (по об’єму пам’яті або швидкодії);

відкритість розробки (можливість введення модифікацій);

зменшення складності (принцип KISS – keep it simple, stupid!(англ.) –
зроби це простіше, дурнику!)

і так далі.

Мету проекту слід встановлювати заздалегідь і точно.

Забезпечення правильності програми.

Сформульовані вище вимоги є практично вимогами до якості програми. Для
забезпечення останнього використовуються в основному 2 підходи:

ретельне тестування (повноти тестування практично неможливо досягти в
загальному випадку);

створення проекту, в якому помилки одразу зведені до мінімуму
(використовується метод захисного програмування – див. розділ 8.1.1).

Документування.

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

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

ЛІТЕРАТУРА

Н. Вирт. Систематическое программирование. – М.: Мир, 1977. – 183 с.

Ален И. Голуб. С и С++. Правила программирования. – М.: БИНОМ, 1996. –
272 с.

У. Дал, Э. Дейкстра, К. Хоор. Структурное программирование. – М.: Мир,
1973. – 247 с.

Э. Дейкстра. Дисциплина программирования. – М.: Мир, 1978. – 275 с.

Д. Ван Тассел. Стиль, разработка, эффективность, отладка и испытание
программ. – М.: Мир, 1985. – 332 с.

М. Зелковиц, А. Шоу, Дж. Гэннон. Принципы разработки программного
обеспечения. – М.: Мир, 1982. – 368 с.

Г. С. Иванова. Основы программирования: Учебник для вузов. – М.: Изд-во
МГТУ им. Н.Э. Баумана, 2002. – 416 с.

Г. С. Иванова. Технология программирования: Учебник для вузов. – М.:
Изд-во МГТУ им. Н.Э. Баумана, 2002. – 320 с.

Вхід

Вивід результату

Введення та перевірка

вхідних даних

Обробка даних

(розв’язок задачі)

повторити ?

вихід

ні

так

S1

S2

S1

S2

так

так

ні

?

так

S1

ні

?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *