Өздігінен рекурсивті процедуралар. Рекурсивті бағдарлама өзін өзі шақырса, өздігінен рекурсивті болады. Мысалы, факторлық функцияның анықтамасы өздігінен рекурсивті болып табылады. Ішкі шақыру P0 деп есептейік; онда келесі қоңырау P1, P2, P3 және т.б. Қоңырау негізгі жағдай анықталған кезде тоқтатылады және нәтиже келудің кері тәртібімен қайтарылады. Нәтижені алғаннан кейін, сәйкес орта мен шақыру стегі демптен жойылады және басқару алдыңғы шақырудың келесі нұсқауына қайта ауысады.
Өзара рекурсивті процедуралар. Бағдарламалық модуль өзара рекурсияны қолдауы мүмкін. Бұл POU өзінен басқа бір немесе бірнеше POU-ға қоңыраулар тізбегін бастайтынын және соңында тізбектегі соңғы қоңырау бірінші POU-ны қайта шақыратынын білдіреді. Математикалық түрде шақырулар тізбегін P0, P1, ... PN (N > 0) түрінде көрсетуге болады; демек Pi(0 < i < n) бағдарламалық бірлігі P0 бағдарламалық блогына немесе PN бағдарламалық блогына тең емес, ал P0 бағдарламалық блогы PN бағдарламалық блогына тең. Құрылымдардың төрт түрі бар:
1) иерархиялық құрылым – ағаш тәрізді;
2) бағытталған ациклдік граф ретінде құрылымы;
3) өзіндік рекурсияны білдіретін нөлдік ұзындық циклі;
4) өзара рекурсияны білдіретін нөлдік емес ұзындық циклі.
Модульдер. Модуль - бұл мәлімдеме айналасында логикалық инкапсуляцияны қамтамасыз ететін, бір немесе бірнеше деректер абстракцияларын және сәйкес ішкі бағдарламаларды (немесе объектіге бағытталған бағдарламалау терминологиясындағы әдістерді) модельдейтін, деректер абстракциялары бойынша кейбір маңызды операцияларды орындайтын абстракция. Жарнамалар болуы мүмкін:
1) ақпаратты немесе функцияны басқа модульден импорттау;
2) тұрақты мәндердің немесе пайдаланушы анықтайтын түрлердің немесе айнымалылардың мәлімдемелері;
3) қалған жүйе немесе басқа ендірілген модульдер үшін процедуралардың, функциялардың, объектілердің және интерфейстің анықтамалары.
Модуль анықтамасы сыртқы мәлімдемелерді жергілікті аумақтан тыс ұстайтын айқын логикалық шекараны қамтамасыз етеді. Модуль ішіндегі мәлімдеме табиғи аумаққа ие және экспортталған болса, ол модульден тыс көрінбейді. Модульді жүйенің семантикасын өзгертпей-ақ сол интерфейсі бар басқа эквивалентті модульмен ауыстыруға болады.
Анық модульдер әдетте кейінірек кітапхана ретінде пайдалану үшін есептеуге немесе сақтауға болатын дерексіз деректер түрін басқаруға арналған барлық жалпы операцияларды қамтиды. Модуль басқа модульге немесе бағдарламаға жүктелгенде немесе импорттағанда, экспортталған дерексіз деректер түрлері мен олардың барлық кітапханалары да қолжетімді болады. Модульді абстракциялаудың негізгі мақсаты мыналарды қамтамасыз ету болып табылады:
1) қайталанатын атаулары бар жүйелер;
2) жүйенің қалған бөлігінен тәуелсіздік;
3) айнымалылар мен ішкі бағдарламалар сияқты сипатталған элементтердің импорт-экспорт механизмін пайдалана отырып, модуль интерфейсі арқылы жүйенің басқа компоненттерімен реттелетін өзара әрекеттесу.
Императивті тілдегі ішкі бағдарламалардан немесе көптеген объектілі-бағытталған тілдердегі мұрагерлік механизмнен айырмашылығы, интерфейс экспорт-импорт механизмімен қатаң реттеледі. Модуль ішінде жарияланған элемент анық экспорттардан басқа модульден тыс қолжетімді емес және басқа модуль оны тікелей импорттамайынша жарияланған элементті және басқа модульдерден анық экспортталған элементті пайдалана алмайды. Модульдерден ақпаратты импорттаудың екі тәсілі бар. Бірінші әдіс белгіленген модульден экспортталған әрбір элементті импорттауды қамтиды. Екінші әдіс - белгіленген модульден элементтердің белгілі бір тізімін экспорттау. Модуль экспорт-импорт механизмі жергілікті емес айнымалылар мен мұрагерлік механизмге қарағанда жақсы реттеуді қамтамасыз етеді. Модуль ішінде ақпарат ішкі бағдарламалар мен объектілер арасында жергілікті айнымалылар, ғаламдық айнымалылар және тасымалдау параметрлері арқылы беріледі.
Модульді жүйенің басқа бөліктерінен тәуелсіз әзірлеуге, құрастыруға және мұрағаттауға болады. Модуль үшін дерексіз синтаксис төменде берілген
<модуль> ::= модулі <идентификатор>
[экспорттау {<бағдарлама-модуль>}*]
[{импорт {<бағдарлама-модуль>}*
<идентификатор>}*]
{<декларация>}*
{<бағдарлама-модуль>}*
{<модуль>}* кірістірілген модульдердің % анықтамасы
end <идентификатор>
Модульдер жадқа басқа бағдарламалармен жүктелсе белсенді болады. Модуль кейбір сұраулармен немесе күтілетін нәтижемен есептеуді орындау үшін басқаруды уақытша басқа модульге тасымалдауы мүмкін. Модульдегі бағдарлама осы модульдің ортасында бар ақпарат негізінде орындалады.
Егер күрделі функция тым үлкен болса, оны бірнеше модульдерге таратуға болады, ал жоғары деңгейлі функция басқа модульдердегі кірістірілген функцияларды шақыра алады.
Модульдердің шектеулерінің бірі – тасымалдау механизмдері арқылы екі модуль арасында берілетін ақпараттың болмауы.
Экспорттың тізімі де айтарлықтай кеңейеді. Модульдер бөлек бағаланса да, бағдарламашылар айнымалылар мен операторлар арасындағы типті салыстыруды сақтауы керек. Айнымалы типтер символдық файлда сақталады, модульдер арасындағы дәйекті жұмысты қамтамасыз ету үшін пайдаланылатын метафайл. Таңдамалы модуль бағаланған сайын - енгізілген модульді пайдаланатын модуль - түрдің үйлесімділігі таңба файлында тексеріледі.
Достарыңызбен бөлісу: |