Құрылымдық бағдарламалау

Көлемі жағынан орташа бағдарламаларды құруда құрылымдық бағдарламалау қолданылады. Оның негізгі идеясы, оны шешу алгоритмы ағымдағы мәтінге анық көрінуі үшін шешілетін тапсырманың құрылымын бағдарлама құрылымы көрсетуі тиіс. Ол үшін жай үш оператордың көмегімен құрылатын бағдарлама құралдары ғана емес, сонымен қатар алгоритмнің құрылымын нақты бейнелейтін құралдар қажет. Осы мақсатпен бағдарламалауда ішкі бағдарлама ұғымы еңгізілген. Ішкі бағдарлама қажетті әрекетті орындаушы және ағымдағы кодтың басқа бөліктеріне тәуелді емес операторлар жиынтығы. Бағдарлама бірнеше кішкене ішкі бағдарламаларға бөлінеді, олардың әрқайсысы ағымдағы тапсырмамен қарастырылған әрекеттердің бірін орындайды. Құрылымдық бағдарламалау идеясы 70 жылдары IBM компаниясында пайда болды, оны әзірлеуде атақты ғалымдар Э. Дейкстра, Х. Милс, Э. Кнут, С. Хоор қатысты. Құрылымдық бағдарламалау бағдарламалық өнімнің модульдық құрылымына және әртүрлі бағдарламалық модульдердің мәліметтерін өңдеу алгоритмдерінің типтік басқару құрылымдарына негізделген. Құрылымды басқару типтері: * реттілік; * альтернатива (таңдау шарты); * цикл. Құрылымдық бағдарламалауға жататын бағдарлама әзірлеудің екі әдістемесі кең таралған: # «жоғарыдан төменге» бағдарламалау; # «төменнен жоғарыға» бағдарламалау. «Жоғарыдан төменге» бағдарламалау бағдарламаны әзірлеудің бұл әдістемесінде әзірлеу мәселені шешу мақсатын анықтаудан басталып, одан кейін нақты бағдарламамен аяқталады. Ең алдымен ең ауқымды тапсырмаларды шешетін бірнеше ішкі бағдарламалар ерекшеленеді, одан кейін осы модульдердің әрқайсысы өз кезегінде басқа бірнеше басқа ішкі бағдарламаларға бөлініп барлық тапсырма жүзеге асқанша дейін жалғаса береді. Бұл жағдайда бағдарлама жоғарыдан төменге қарай құрастырылады, басты бағдарламадан ең төменгі ішкі бағдарламаларға дейін, сондай ақ әрбір деңгейде тек қарапайым инструкциялар, циклдар және шартты тармақталулар қолданылады. «Төменнен жоғарыға» бағдарламалау, бұл жалпы сызбаның жұмысы аяқталмай жатып, ішкі бағдарламаларды (процедуралар, функциялар) әзірлеуден бастайтын бағдарлама әзірлеудің әдістемесі. Бұл әдістеме алдыңғы әдістемеге қарағанда тиімсіз болып саналады, өйткені жиі қолайсыз нәтижелерге, қайта жөндеулерге және әзірлеудің уақытын созуға әкеліп соғады. Ішкі бағдаламалардың ең маңызды мінездемесі оларды қайта қолдану мүмкіндігі. Ішкі бағдаламалардың екі түрі бар процедуралар және функциялар. Олардың айырмашылығы, процедура операторлар тобын жай орындайды, ал функция сонымен бірге қандай да бір мәнді есептейді және оны басты бағдарламаға қайтадан жібереді (мәнді қайтарады). Ол мәннің арнайы типі болады. Ішкі бағдарламаның жұмысы мағыналы болу үшін, оған сыртқы бағдарламалардан мәліметтер алу керек. Мәліметтер ішкі бағдарламада параметрлер немесе аргументтер түрінде жіберіледі, олар әдетте айнымалылар сияқты оның бастапқы бөлігінде сипатталады. Ішкі бағдарламалар қажетті параметрлермен олардың жай атауын жазу арқылы шақырылады. Ішкі бағдарламалар оларды шақыру кезінде ғана белсенді болады. Ішкі бағдарламаның ішіндегі операторлар, егер олар нақты шақырылса ғана орындалады. Кейбір бағдарламалау тілдерінде ішкі бағдарламаларды өзінің ішінен шақыртуға болады. Мұндай тәсіл рекурсия деп аталады. Ол бағдарламаның бір орында тұрып қалуына әкелуі мүмкін. Құрылымдық бағдарламалаудың артықшылықтары: * Бағдарламалардың сенімділігі артады (жақсы құрылымдау және жобалау арқылы бағдарлама тестілеуге жеңіл болады және іске қосуда қиындықтар туғызбайды); * Бағдарламаның тиімділігі артады (бағдарламаны құрылымдау қателерді тез табуға және түзетуге мүмкіндік береді, ал жеке ішкі бағдарламаларды басқаларына қарамастан өзгертуге болады); * Бағдарлама әзірлеудің уақыты және бағасы азаяды; * Бағдарламаны оқу жақсарады. Сонымен, құрылымдық бағдарламалау бағдарламалық кешендерді әзірлеуде келесі принциптерге негізделеді: * Бағдарламалау жоғарыдан төменге жүзеге асуы тиіс; * Барлық жоба ішкі бағдарламаларға бөлінуі тиіс; * Ішкі бағдарлама үш негізгі құрылымнан тұруы тиіс, ол ретпен орындау, тармақталу (if, case) және қайталау (for, while, repeat); * Бағдарламаның кез келген нүктесіне көшу операторы қолданылмайды (goto); * Құжаттама бағдарламалаумен бірге бағдарламаға коментарийлермен бірге бір уақытта құрылуы тиіс. Құрылымдық бағдарламалау алгоритмдік мінездемесі бар математикалық есептерді шығаруда тиімді қолданылады. Программалау процесін жақсартатын және кең қолданылатын әдістердің бірі – құрылымдық программалау. Құрылымдық программалаудың 3 бөлігі (құраушысы) бар: 1. Модульдік программалау 2. Құрылымдық кодтау 3. Жоғарыдан төменге қарай жобалау Модульдік программалау дегеніміз – программаны логикалық бөліктерге бөлу процесі. Программа бірнеше модульдерге бөлінеді және мына 2 мақсат орындалуы тиіс: 1) модулдің дұрыс болуы және оның контекстерден тәуелсіз болуы қажет; 2) модулдің ішкі жұмыстарын білмей тұра әр түрлі модулдерден программа құру мүмкіндігінің болуы қажет. Мысал ретінде стандарт математикалық функциялардың есептелу программасын қарастыруға болады. Программист sin(x) функциясын программаның кез-келген жерінде қолдана алады және оған функцияның есептелуіне қай әдістің қолданып тұрғанын білудің қажеттілігі жоқ. Модуль өлшемі 60 жолдан аспауы керек және модульдер өзара тәуелсіз болуы керек. Байланысқан элементтерді бір модульге, байланыспаған элементтерді әр түрлі модульге жинау керек. Модульдерді қолдана отырып программа күрделілігін төмендетуге болады. Pascal тілінде модуль процедуралар мен функциялардың көмегімен құрылады, Cи тілінде функциялардың көмегімен құрылады. Құрылымдық кодтау деп программада басқарушы конструкциялардың–шартты операторлардың, циклдің (параметрлі, цикл-әзір, цикл-дейін) қолданылуын айтады. Шартсыз көшу операторы программада сирек қолданылуы керек немесе шартты оператордың, циклдің көмегімен өзгертілуі керек. Программаны жоғарыдан төмен қарай жобалаудың өз иерархиялық құрылымы бар және қысқа есеп қойылымынан басталады. Одан кейін есеп бірнеше ұсақ ішкі есептерге бөлінеді. Ішкі есептердің өзі де ішкі есептерге бөлінуі мүмкін. Әр қадамда ішкі есептің орындайтын негізгі функциялары анықталуы керек. Бөлу процесі әр ішкі есеп қарапайым болғанға дейін, яғни әр ішкі есепке бір модуль сәйкес келгенше созылады.