1 Бағдарламалау парадигмалары және бағдарламалардың жалпы қасиеттері



бет5/12
Дата31.08.2023
өлшемі186 Kb.
#180035
1   2   3   4   5   6   7   8   9   ...   12
Байланысты:
2023-МУК-4. Бағдарламалардағы абстракциялар

Шартты операторлар. Шартты конструкциялар бағдарламалау тілдерінде бірдей құрылымға ие. Шартты оператордың негізгі дизайны абстрактілі синтаксистің келесі ережесімен ұсынылған:


<Шартты оператор>:: =
if' ('<шарт>') ' then < оператор>
[else < оператор>];
<шарт>:: = < шарт> & & < шарт> / < шарт> ||
<шарт> / not <шарт> |
<арифметикалық-өрнек>
<арифметикалық-өрнек> / true | false
::= '>' | '<' | '>=' | '=<' | '=='

Әр түрлі тілдерде әр түрлі сақталған сөздер қолданылады.


Таңдаудың тағы бір дизайны-таңдау операторы. Таңдау операторының құрылымы келесідей:

іс (<өрнек>) of :


< < - мәндер жиынтығы 1>: <-командалар тізбегі 1>;

< < - мәндер жиынтығы>: < - командалар тізбегі>;
otherwise: <командалар тізбегі+1>
end case

Таңдау операторында өрнек есептеледі. Көп мәнді нәтиже болуы мүмкін, сонымен қатар әр Шығыс мәні немесе шығыс мәндері үшін әр түрлі әрекеттер тізбегін алуға болады. Әр түрлі әрекеттер тізбегі бар барлық нұсқалар орындалады, ал соңында барлық басқа нұсқалар орындалмаса қолданылатын catch-all операторы бар.


Таңдау операторы өрнекті бағалау негізінде бір таңдау жасалғаннан кейін детерминирленгеніне назар аударыңыз.
Итерациялық конструкциялар және итераторлар. Итерациялық конструкциялар үш негізгі санатқа бөлінеді:
1) белгілі бір итерация;
2) белгісіз итерация;
3) итераторлар.
Анықталған және анықталмаған итерациялар деректер элемент­терінің жиынтығы массивтер мен векторлар сияқты индекстелген деректер құрылымдарының көмегімен бір мәнді түрде құрастырылғанын көрсетеді. Керісінше, итераторлар деректер элементін тізім ретінде өңдейді, осылайша жеке элементтер мен жеке элементтерге қол жеткізу механизмдері бағдарламашыға қолжетімді болмауы мүмкін. Итератор тізімнен келесі элементті шығарады және тізімдегі әрбір элементтің үстіндегі әрекеттерді ретімен орындайды. Итеративті конструкциялардың барлық үш класында қатеге немесе ерекшелікке байланысты бағдарламаның орындалуы үзілген жағдайларды қоспағанда, бір рет кіру және бір рет шығу нүктелері бар. Белгілі бір итерациялар бағдарламашыға операторлар блогын орындау кезінде бастапқы байланыстыру, соңғы байланыстыру, айнымалы индекс мәні және қадам шамасы сияқты цикл параметрлеріне өзгерістер енгізуге мүмкіндік бермейді.
Олардың барлығы алдын-ала бекітілген. Алайда, іске асыру машинасы келесі итерациялық циклге ауысқан кезде Айнымалы индекс мәнін қадам мәніне автоматты түрде өзгертеді. Белгілі бір итерацияға арналған дерексіз синтаксис келесідей:

for (<индекстелетін айнымалы> =


<бастапқы өрнек>'; ' < ақырғы өрнек>'; ' < өрнек қадамы>)
<блок>

Жоғарыдағы құрылыста бастапқы өрнек < бастапқы өрнек> бастапқы мәнді, соңғы өрнек <соңғы өрнек> соңғы мәнді, ал өрнек қадамы < өрнек қадамы> Итерация қадамын көрсетеді. Өрнектер циклге кірер алдында бағаланады, циклдарда циклдің үзілуіне немесе одан шығуына себеп болатын жағдайларды қоспағанда, тек бір кіріс және әдетте бір шығыс болады. Белгілі бір итерация өрнектер тізімінен индекстелген мәнді ала алады. Белгісіз итерация дизайны келесі көріністі алады:


for ' ('<индекстелетін-айнымалы> in <өрнектер тізімі>')'


<блок>

Белгілі бір итерация реттелмеген жиыннан индикаторды да ала алады. Жиынды пайдаланудың артықшылығы-индекс кез келген тәртіпте пайда болуы мүмкін және оның құрылымы болуы міндетті емес. Белгілі бір итерацияның дизайны келесі түрге ие:


for ' ('<индекстелетін-айнымалы> in < жиын>')'


<блок>

Белгісіз итерацияда кірістірілген оператор блогы берілген шарттарға жеткенше есептеуді жалғастырады. Индекстің мәні алдын-ала белгіленген тәртіппен үнемі өзгеріп отыратын белгілі бір итерациядан айырмашылығы, белгісіз итерацияда кез-келген предикат шарт бола алады. Сонымен қатар, предикатпен байланысты айнымалылардың мәндері кірістірілген операторлар блогында шектеусіз өзгеруі мүмкін. Осы қасиеттің арқасында белгісіз итерациялар шексіз цикл құра алады.


Деректер абстракцияларын қайталап өңдеуді қажет ететін кез-келген тапсырманың моделіне функционалды эквивалентті анықталмаған итерациялардың екі түрі бар. Белгісіз итерациялар-бұл қайталау-бұғаттау циклі деп аталатын WHILE циклі және DO-WHILE циклі. WHILE циклінің дерексіз синтаксисі:


::= while '('<шарт>') '' {'<блок операторлары>'}'

Repeat-UNTIL циклінің дерексіз синтаксисі:




:: = repeat <блок-операторлар> until <шарт> |
do < блок-операторлар> while <шарт>

WHILE циклі кірістірілген блокты < блок операторларын> нөл немесе одан да көп рет орындайды, ал repeat-UNTIL циклі кірістірілген блокты <блок операторларын> кем дегенде бір рет орындайды.


REPEAT-UNTIL конструкциясы мен do-WHILE конструкциясы тең және бір ғана айырмашылықпен бірдей нәтижеге жетеді: REPEAT-UNTIL конструкциясы шарт ақиқат болғанша операторлар блогын циклдік түрде орындайды, ал do-WHILE синтаксисі операторлар блогын шарт ақиқат болғанша циклдік түрде орындайды.. Көп циклді итерациялық циклдің дерексіз синтаксисі:


< бірнеше шығысы бар итерациялық цикл>:: =
loop {<шартты-шығу>';
<командалар тізбегі>}
end-loop
<шартты-шығу>:: = if < шарт> шығу;

Мұндай дерексіз синтаксис цикл операторларының блогында бірнеше шығу шарттары бар екенін білдіреді және егер шарт орындалмаса, басқару циклден шығады.


Тізімге негізделген бағдарламалауды қолдайтын декларативті тілдер немесе кеңейтілетін деректер абстракцияларын қолданатын тілдер итераторларды қолданады. Итератор кеңейтілетін деректер элементтерінің жиынтығында қадамдар жасайды, келесі деректер элементін жинайды және деректер элементінде кейбір әрекеттерді орындайды. Процесс жиынтықтағы әрбір деректер элементі үшін қайталанады. Итераторды қолданудың басты артықшылығы-нақты индекстің болуы талап етілмейді және деректердің абстракцияларын іске асыру деңгейінің егжей-тегжейлері бағдарламашыдан жасырылады; жалғыз шектеу-келесі циклде келесі элементті шығару.
Итераторға арналған дерексіз синтаксис келесідей:


<итератор>:: = foreach < айнымалы> in <реттелген-жиынтық>
<блок>

Функционалды тілдерде < блок> келесі деректер элементіне қолданылатын функцияны анықтауға ауыстырылады. Итераторлардың негізгі схемасының кемшіліктері-итератор деректерді абстракциялаудың әр элементінен біртіндеп өтеді, бұл қайталанатын құрылымдарға ұқсамайды, мұнда индекс элементтерге таңдамалы қол жеткізу үшін қолданылады. C++ және Java тілдері итераторды өзгермелі деректер құрылымы ретінде пайдаланады, ол кезектесіп деректер мәндерін бере алады және келесі элементтің бар-жоғын тексере алады.


Блок құрылымы. Блоктар бағдарламалық модульге салынған. Бағдарламалық жасақтама модульдерінен айырмашылығы, блоктар идентификаторға байланбайды және оларды қарапайым қоңырау шалу мүмкін емес. Блоктық құрылымдар, жалпы алғанда, бір кіріс пен бір шығысқа ие, сонымен қатар арнайы функцияларға ие. Құрылымның нашарлауын және нәтижесінде қабылдауды болдырмау үшін операторларды ерікті түрде топтастыру ұсынылмайды.
Блокты құрылымдау тек кірістірілген блоктардан шығу немесе қателерді өңдеу кезінде ерекшеліктерді басқару үшін "go to" операторларының санын шектеуге мүмкіндік береді.
Блоктарға жарнамалар жиынтығы (мүмкін нөлдік), содан кейін командалар жиынтығы (мүмкін нөлдік) кіреді. Хабарландырулардың ауқымы блоктың ішінде орналасқан, бұл барлық айнымалылар мен дерексіз деректер тек begin end немесе бұйра жақшалар сияқты сақталған сөздермен белгіленген блок шекараларында көрінеді дегенді білдіреді. Бұл сақталған сөздер қолданылатын бағдарламалау тіліне байланысты. Блокқа бірнеше блок салынуы мүмкін. Кірістірілген блоктар сыртқы блоктың әсеріне түседі, яғни ішкі блоктың жарнамаларына қайшы келмейтін сыртқы блоктағы жарнамалар ішкі блокта көрінеді.
Атаулар қайшылығы жағдайында ішкі блоктың хабарландыруларының артықшылығы болады, ал сыртқы блоктан тиісті хабарландырулар ішкі блокта жасырылады. Сыртқы блоктың ішіндегі кірістірілген бір деңгейлі блоктар (және олардың ұрпақтары) қоршаған ортаны алмастырмайды. Блокты кірістіру деңгейлерін ағаш түрінде ұсынуға болады, түбірлік түйін - бағдарламалық модуль, ал кірістірілген блоктар - түйіндер-ұрпақтар. Жадта қолданылатын бір деңгейлі блокты орталарды бөлу қасиеті жұмыс уақытында бірнеше рет қолданылады. Бір деңгейлі блоктардан кейін анықталған блоктар (және олардың ұрпақтары) (және олардың ұрпақтары), Егер бұрын анықталған бір деңгейлі блоктың көру аймағы келесі бір деңгейлі блок орындалғанға дейін жабылса, сол жад аймағына сілтеме жасай алады.


Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   12




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет