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

Құрылымдық бағдарламалау Бұл бағдарламалау парадигмасы а-ның анықтығын, сапасын және даму уақытын жақсартуға бағытталған компьютерлік бағдарлама таңдаудың құрылымдық басқару ағынының құрылымдарын кең қолдану арқылы (if / then / else ) және қайталау (while және үшін ), блоктық құрылымдар, және ішкі бағдарламалар.

Ол 1950 жылдардың соңында пайда болды АЛГОЛ 58 және ALGOL 60 бағдарламалау тілдері,[1] екіншісімен бірге блоктық құрылымдарды қолдау. Алғашында академиялық ортада, кейінірек практиктер арасында танымал болуына және кеңінен қабылдануына ықпал ететін факторларға қазіргі кезде белгілі болған нәрсені табу кіреді. бағдарламаның құрылымдық теоремасы 1966 жылы,[2] және ықпалды басылым »Зиянды деп саналатын мәлімдемеге өтіңіз «ашық хат 1968 жылы голландиялық компьютертанушы Эдсгер В. Дейкстра, «құрылымдық бағдарламалау» терминін кім ұсынды.[3]

Құрылымдық бағдарламалау көбінесе ауытқулар кезінде қолданылады, бұл кейбір нақты жағдайларда, мысалы, қашан ерекше жағдайларды өңдеу орындалуы керек.

Элементтер

Басқару құрылымдары

Келесі бағдарламаның құрылымдық теоремасы, барлық бағдарламалар құрамдас ретінде көрінеді басқару құрылымдары:

  • «Жүйелі»; реттілікпен орындалған бұйрықтар немесе ішкі бағдарламалар.
  • «Таңдау»; оператордың бір немесе бірнеше саны бағдарламаның күйіне байланысты орындалады. Бұл әдетте кілт сөздер сияқты егер..сосын..басқа..сенд.
  • «Қайталау»; оператор немесе блок бағдарлама белгілі бір күйге жеткенше орындалады немесе операциялар жиынтықтың барлық элементтеріне қолданылғанға дейін. Бұл, әдетте, сияқты кілт сөздермен өрнектеледі уақыт, қайталау, үшін немесе жаса .. дейін. Көбіне әр циклде тек бір кіру нүктесі болуы ұсынылады (және бастапқы құрылымдық бағдарламалауда, тек бір шығу нүктесі бар, және оны бірнеше тілдер қолданады).
  • «Рекурсия»; өтініш тоқтату шарттары орындалғанға дейін өзін бірнеше рет шақыру арқылы орындалады. Іс жүзінде қайталанатын циклдарға ұқсас болғанымен, рекурсивті циклдар есептеу тиімділігі жоғары болуы мүмкін және каскадтық стек ретінде басқаша жүзеге асырылады.
Графикалық бейнесі үш негізгі өрнек - реттілік, таңдау және қайталау - қолдану NS диаграммалары (көк) және ағындық диаграммалар (жасыл).

Бағдарламалар

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

Блоктар

Блоктар тұжырымдар топтарын бір тұжырым ретінде қарастыруға мүмкіндік беру үшін қолданылады. Блок құрылымды тілдерде құрылымдарды формальды түрде жабуға арналған синтаксис бар, мысалы, if-операторы жақшаға алынған егер..fi сияқты ALGOL 68, немесе жақшаға алынған код бөлімі БАСТАҢЫЗ ..., сияқты PL / I және Паскаль, бос кеңістік шегініс Python - немесе бұйра жақшалар {...} туралы C және көптеген кейінгі тілдер.

Бағдарламаланған құрылымдық тілдер

Құрылымдық бағдарламалауды кез-келген бағдарламалау тілінде жасауға болады, дегенмен а-ны қолданған жөн процедуралық бағдарламалау тілі. Бастапқыда құрылымдық бағдарламалау үшін қолданылатын кейбір тілдерге мыналар жатады: АЛГОЛ, Паскаль, PL / I және Ада, бірақ сол уақыттан бері жаңа процедуралық бағдарламалау тілдерінің көпшілігінде құрылымдық бағдарламалауды ынталандыру мүмкіндіктері бар, ал кейде мақсатты түрде қалдырылған мүмкіндіктер, атап айтқанда GOTO - жасау үшін құрылымданбаған бағдарламалау қиынырақ. Құрылымдық бағдарламалау (кейде модульдік бағдарламалау деп те аталады)[дәйексөз қажет ]) тиімді және түсіну мен өзгертуді жеңілдету үшін жазылған бағдарламада логикалық құрылымды қолданады.


Тарих

Теориялық негіз

The бағдарламаның құрылымдық теоремасы құрылымдық бағдарламалаудың теориялық негізін ұсынады. Онда бағдарламаларды біріктірудің үш тәсілі - кезектілік, таңдау және итерация кез келгенін білдіру үшін жеткілікті екендігі айтылған есептелетін функция. Бұл байқау құрылымдалған бағдарламалау қозғалысынан туындаған жоқ; Бұл құрылымдар сипаттауға жеткілікті нұсқау циклі а Орталық процессор, сонымен қатар а Тьюринг машинасы. Сондықтан, процессор әрдайым «құрылымдалған бағдарламаны» осы мағынада орындайды, тіпті егер ол жадыдан оқитын нұсқаулар құрылымдық бағдарламаның бөлігі болмаса да. Алайда, авторлар, әдетте, Бом мен Джакопинидің 1966 жылғы еңбегіне нәтиже береді, мүмкін Dijkstra осы қағаздың өзін келтірді.[4] Бағдарламаның құрылымдық теоремасы пайдалы құрылымдалған бағдарламаны қалай жазуға және талдауға арналмаған. Бұл мәселелер 1960-шы жылдардың аяғы мен 70-ші жылдардың басында шешілді Dijkstra, Роберт В. Флойд, Тони Хоар, Оле-Йохан Даль, және Дэвид Грис.

Пікірсайыс

P. J. Plauger, an ерте асырап алушы құрылымдық бағдарламалау туралы, оның құрылымдық бағдарлама теоремасына реакциясын сипаттады:

Біз түрлендірушілер бұл қызықты жаңалықтарды жаңадан құрастырылмаған монтаждау тіліндегі бағдарламашылардың бұралаң қисықтарын алға тартып: «Мен мұны құра алмаймын» дейтін мұрындарының астына жіберді. Бом мен Джакопинидің дәлелдемелері де, құрылымдық кодты жазудағы бірнеше рет жасаған жетістіктеріміз оларды өздеріне сенуге дайын болғаннан бір күн бұрын әкелмеді.[5]

Дональд Кнут бағдарламалар дәлелдеуді ескере отырып жазылуы керек деген қағиданы қабылдады, бірақ ол келіспеді (және әлі де келіспейді)[дәйексөз қажет ]) GOTO мәлімдемесін алып тастаумен. 1974 жылы жазылған «Гот мәлімдемелерімен құрылымдалған бағдарламалау»,[6] ол мысал келтірді, ол тікелей секіру дәлелділікті жоғалтпай айқын әрі тиімді кодқа әкеледі деп санады. Кнут құрылымдық шектеулерді әлсіретуді ұсынды: Бағдарламаны салу мүмкіндігі болуы керек схема алға қарай барлық тармақтармен, барлық артқа тармақтармен оң жақта және бір-бірімен қиылыспайтын бұтақтармен. Білетіндердің көпшілігі құрастырушылар және графтар теориясы тек рұқсат беруді жақтады қысқартылатын ағындық графиктер[ретінде анықталған кезде? ].[ДДСҰ? ]

Бағдарламалаудың құрылымдық теоретиктері 1970 жылдан кейін ірі одақтасқа ие болды IBM зерттеуші Харлан Миллс бағдарламалаудың құрылымдық теориясының интерпретациясын индекстеу жүйесін жасауға қолданды The New York Times зерттеу файлы. Жоба үлкен инженерлік сәттілікке ие болды, ал басқа компаниялардың менеджерлері оны құрылымдық бағдарламалауды қолдауға сілтеме жасады, бірақ Дайкстра Миллс түсіндірмесінің жарияланған жұмыстардан өзгешелігін сынға алды.[дәйексөз қажет ]

1987 жылдың аяғында информатика журналында құрылымдық бағдарламалау туралы мәселе көтеру мүмкін болды. Франк Рубин сол жылы мұны «» GOTO зиянды деп санады «зиянды деп санады» деген ашық хатпен жасады.[7] Көптеген қарсылықтар, соның ішінде Рейбинді де, басқа жазушылардың оған жауап беру кезінде жасаған жеңілдіктерін де қатты сынға алған Дайкстраның жауабы.

Нәтиже

20 ғасырдың аяғында компьютерлік ғалымдардың барлығы дерлік құрылымдық бағдарламалау ұғымдарын үйреніп, қолданудың пайдалы екеніне сенімді болды. Сияқты бағдарламалау құрылымдары жетіспейтін жоғары деңгейлі бағдарламалау тілдері FORTRAN, COBOL, және НЕГІЗГІ, енді оларды алыңыз.

Жалпы ауытқулар

Қазір goto негізінен құрылымдау құрылымымен (if / then / else) және қайталаумен (while and for) ауыстырылса, бірнеше тілдер тек құрылымдалған. Көптеген тілдерде кездесетін ең көп таралған ауытқу - а қолдану қайтару мәлімдемесі ішкі бағдарламадан ерте шығу үшін. Бұл құрылымдалған бағдарламалауға қажет жалғыз шығу нүктесінің орнына бірнеше шығу нүктелерін тудырады. Таза құрылымдалған бағдарламалауда ыңғайсыз жағдайларды өңдеуге арналған басқа құрылымдар бар.

Ерте шығу

Құрылымдық бағдарламалаудан ең көп таралған ауытқу - бұл функциялардан немесе циклден ерте шығу. Функциялар деңгейінде бұл а қайту мәлімдеме. Ілмектер деңгейінде бұл а үзіліс мәлімдеме (циклды тоқтату) немесе жалғастыру мәлімдеме (ағымдағы қайталануды тоқтатыңыз, келесі қайталануға өтіңіз). Құрылымдық бағдарламалау кезінде бұларды қосымша тармақтар немесе тесттер қосу арқылы көбейтуге болады, бірақ ішкі кодтан алынған қайтарымдар үшін бұл айтарлықтай қиындықтар тудыруы мүмкін. C осы конструкциялардың ерте және көрнекті мысалы. Кейбір жаңа тілдерде «белгіленген үзілістер» де бар, бұл тек ішкі циклден гөрі көп нәрсені шығаруға мүмкіндік береді. Ерекшеліктер де ерте шығуға мүмкіндік береді, бірақ одан әрі салдары болады және осылайша төменде қарастырылады.

Бірнеше шығу әр түрлі себептермен туындауы мүмкін, көбінесе подпрограммада енді жұмыс жоқ (егер мәнді қайтарса, ол есептеулерді аяқтады) немесе оны жалғастыруға мүмкіндік бермейтін «ерекше» жағдайлар туындады, демек қажет ерекше жағдайларды өңдеу.

Ерте шығу кезінде ең көп кездесетін мәселе - тазалау немесе қорытынды мәлімдемелер орындалмауы - мысалы, бөлінген жады бөлінбейді немесе ашық файлдар жабылмайды, соның салдарынан жадтың ағуы немесе ресурстардың ағып кетуі. Мұны әр қайту учаскесінде жасау керек, ол сынғыш және қателіктерге әкелуі мүмкін. Мысалы, кейінгі дамуда қайтару туралы мәлімдемені әзірлеуші ​​елемеуі мүмкін, ал ішкі бағдарламаның соңында орындалатын әрекет (мысалы, із мәлімдеме) барлық жағдайда орындалмауы мүмкін. Стандартты сияқты қайтару мәлімдемесі жоқ тілдер Паскаль және 7. Тұқым, мұндай проблема жоқ.

Қазіргі заманғы тілдердің көпшілігі осындай ағып кетудің алдын алу үшін тіл деңгейінде қолдау көрсетеді;[8] толық талқылауды қараңыз ресурстарды басқару. Көбінесе бұл блоктан шыққан кезде орындалады, бұл блоктан шыққан кезде белгілі бір кодтың іске қосылуына кепілдік береді; бұл тазалау блогына ие құрылымдық балама және а бару. Бұл көбінесе ретінде белгілі көріңіз ... ақыры, бөлігін қарастырды ерекше жағдайларды өңдеу. Бірнеше жағдайда қайту мәлімдемелер енгізу көріңіз ... ақыры, ерекше жағдайлар көрінуі мүмкін. Ресурстарды басқарудың әртүрлі әдістері бар. Негізінен C ++ тілінде кездесетін балама тәсіл Ресурстарды сатып алу инициализация болып табылады, ресурстарды бөлу үшін локальды айнымалыларға деструкторларды шақыру үшін функциядан шығу кезінде әдеттегі стек ашуды қолданады (айнымалы дислокация).

Кент Бек, Мартин Фаулер және бірлескен авторлар өздерінің дәлелдерін келтірді қайта өңдеу шартты шарттарды орналастырған кітаптарды белгілі бір типтегі жалпақ құрылымға қарағанда түсіну қиын болуы мүмкін күзет ережелері. Олардың 2009 жылғы кітабында «бір шығу нүктесі шынымен де пайдалы ереже емес. Айқындық - басты қағида: егер әдіс бір шығу нүктесімен айқынырақ болса, бір шығу нүктесін қолданыңыз; әйтпесе олай етпеңіз» деп толық жазылған. Олар тек кірістірілген шартты шарттардан тұратын функцияны қорғалған қайтару (немесе лақтыру) мәлімдемелерінің бірізділігіне түрлендіруге арналған аспаздық кітаптың шешімін ұсынады, содан кейін жалпы жағдайға арналған кодты сақтауға арналған бір қорғалмаған блок, ал қорғалған операторлар сирек кездесетіндермен (немесе қателіктермен) айналысуы керек.[9] Herb Sutter және Андрей Александреску сонымен қатар 2004 жылғы C ++ кеңестер кітабында бір шығу нүктесі ескірген талап екенін дәлелдейді.[10]

Оның 2004 жылғы оқулығында, Дэвид Уатт «бір кіру көп шығуды басқару ағындары жиі қажет» деп жазады. Тенненттің негіздік ұғымын қолдану секвенсер, Ватт қазіргі бағдарламалау тілдерінде кездесетін басқару ағынының құрылымдарын біркелкі сипаттайды және секвенсорлардың жекелеген түрлерінің басқаларға қарағанда көп шығу басқару ағындарының контекстінде неге артық болатындығын түсіндіруге тырысады. Уотт шектеусіз гото (секвен секвенерлер) жаман деп жазады, себебі секіру мақсаты оқырман секірудің мақсаты болып табылатын нақты затбелгіні немесе мекен-жайды тауып, тексергенге дейін бағдарламаның оқырманына өзін-өзі түсіндірмейді. Керісінше, Ватт қайту секвенсорының тұжырымдамалық мақсаты өзінің контекстінен анық, оның тағайындалған орнын тексермей-ақ дәлелдейді. Уотт секвенсорлар класы ретінде белгілі деп жазады қашу секвенсорлары, «мәтіндік қоршау командасы немесе процедурасының орындалуын тоқтататын секвенсор» ретінде анықталған, циклдардың үзілістерін де (көп деңгейлі үзілістерді қоса) және қайтару операторларын қамтиды. Ватт сонымен қатар сек секвенерлері (gotos) С тәрізді тілдерде біршама шектелген болса, онда мақсат жергілікті блоктың ішіндегі немесе сыртқы блоктан тұратын болуы керек, бұл тек шектеудің өзі үшін gotos ниетін жасау үшін жеткіліксіз екендігін ескертеді. -сипаттау және сондықтан олар әлі де өндіре алады «спагетти коды «. Ватт сонымен қатар ерекше секвенерлердің қашу және секіру секвенсорларынан айырмашылығын зерттейді; бұл осы мақаланың келесі бөлімінде түсіндіріледі.[11]

Жоғарыда айтылғандардан айырмашылығы, Бертран Мейер сияқты өзінің 2009 оқулығында нұсқаулар сияқты жазылған үзіліс және жалғастыру «тек ескі бару қойдың киімінде »деп атап, оларды қолданбауға қатаң кеңес берді.[12]

Ерекше жағдайларды өңдеу

Кодтау қателігі негізінде Ariane 501 апаты, бағдарламалық жасақтама әзірлеушісі Джим Бонанг функциялардан шығарылған кез-келген ерекшеліктер бір шығу парадигмасын бұзады деп санайды және барлық процедуралық ерекшеліктерге тыйым салу керек деп санайды. C ++ синтаксисінде бұл барлық функционалды қолтаңбаларды ретінде жариялау арқылы жасалады басқа (C ++ 11 бастап) немесе лақтыру ().[13] Бонанг C ++ стандартына сәйкес келетін барлық шығудың жолдарын келесі жолдар бойынша жазуды ұсынады:

bool MyCheck1() лақтыру() {
  bool жетістік = жалған;
  тырысу {
    // Ерекше жағдайларды тудыруы мүмкін нәрсе жасаңыз.
    егер (!MyCheck2()) {
      лақтыру SomeInternalException();
    }
    // Жоғарыда айтылғандарға ұқсас басқа код.
    жетістік = шын;
  } аулау (...) {
    // Барлық ерекшеліктер тіркелді және тіркелді.
  }
  қайту жетістік;
}

Питер Ричи сонымен қатар, негізінен, жалғыз екенін де атап өтті лақтыру алдында қайту функциясы бір шығу принципінің бұзылуын құрайды, бірақ Дайкстра ережелері ерекше өңдеу бағдарламалау тілдерінде парадигмаға айналғанға дейін жазылған деп айтады, сондықтан ол бір қайтару нүктесінен басқа кез келген лақтыру нүктесіне рұқсат беруді ұсынады . Ол жалғыз шығу үшін ерекше жағдайларды орайтын шешімдердің ұялау тереңдігі жоғары болатынын, сондықтан оларды түсіну қиынға соғатынын атап өтті, тіпті ерекше шешімдерді қолдайтын бағдарламалау тілдеріне осындай шешімдерді қолдануды ұсынғандарды айыптайды жүк культі ойлау.[14]

Дэвид Уатт сонымен қатар секвенерлер шеңберіндегі ерекше жағдайларды өңдеуді талдайды (осы мақалада алдыңғы шығу туралы алдыңғы бөлімде келтірілген.) Ватт аномалиялық жағдайдың (әдетте арифметикамен мысалға келтірілгенін) атап өтті. толып кету немесе файл сияқты кіріс / шығыс сәтсіздіктері) - бұл «кейбір деңгейлік бағдарламалық жасақтамада анықталған, бірақ [ол үшін) өңдеуші жоғары деңгейлі бағдарламалық блокта табиғи түрде орналасқан» қате түрі. Мысалы, бағдарламада файлдарды оқуға арналған бірнеше қоңыраулар болуы мүмкін, бірақ файл табылмаған кезде орындалатын әрекет бағдарламадағы файлдың мағынасына (мақсатына) байланысты болады, демек, бұл әдеттен тыс жағдайды өңдеу тәртібі мүмкін емес төменгі деңгейлі жүйелік кодта орналасқан. Уоттстің айтуынша, қоңырау шалушыға мәртебелік жалаушаларын енгізу, мысалы, бір шығу құрылымдық бағдарламалау немесе тіпті (көп шығу) қайтару секвенсорлары қажет болады, бұл «қолданба коды күй жалауларының сынақтарына бейімделуге бейім» жағдайға әкеледі және «бағдарламашы күй жалауын сынау үшін ұмытшақтықпен немесе жалқаулықпен жіберіп алуы мүмкін. Шындығында, күй жалаушалары ұсынған қалыптан тыс жағдайлар ескерілмейді!» Оның атап өтуінше, мәртебелік жалаушаларды тексеруден айырмашылықтар керісінше әдепкі тәртіп, егер бағдарламашы ерекше жағдайда қандай-да бір түрде нақты түрде айналыспаса, мүмкін оны әдейі елемеу үшін код қосу арқылы бағдарламаның тоқтатылуына әкеледі. Осы дәлелдерге сүйене отырып, Уатт секіргіш секвенсорлар немесе секвенсерлер (алдыңғы бөлімде талқыланған) жоғарыда талқыланған семантикасы бар арнайы ерекшелік секвентері сияқты қолайлы емес деген қорытындыға келді.[15]

Лоден мен Ламберттің оқулығында ерекше жағдайларды өңдеу құрылымдық бағдарламалау құрылымдарынан ерекшеленетіндігі атап көрсетілген уақыт циклдар, өйткені басқаруды беру «бағдарламаның нақты тасымалдау жүзеге асырылатыннан гөрі басқа нүктесінде орнатылған. Тасымалдау жүзеге асатын жерде басқару іс жүзінде берілетін синтаксистік белгі болмауы мүмкін».[16] Информатика профессоры Арвинд Кумар Бансал ерекше жағдайларды өңдеуді жүзеге асыратын тілдерде, тіпті құрылымдарды басқаратындығын атап өтті үшінЕрекшеліктер болмаған кезде бір шығу қасиеті бар, енді ерекшеліктер болған жағдайда болмайды, өйткені ерекшелік басқару құрылымының кез-келген бөлігінде мерзімінен бұрын кетуді тудыруы мүмкін; мысалы, егер ішінде() ерекше жағдай жасайды for (init (); check (); increm ()), содан кейін () тексеруден кейін әдеттегі шығу нүктесіне жете алмайсыз.[17] Басқалардың бірнеше алдыңғы зерттеулеріне сілтеме жасай отырып (1999-2004 жж.) Және олардың нәтижелері, Вестли Веймер және Джордж Некула Ерекшеліктермен маңызды проблема олардың «бағдарламашылардың ойлауы қиын жасырын басқару ағынының жолдарын құруы» деп жазды.[18]:8:27

Кодты бір шығу нүктелерімен шектеу қажеттілігі параллельді есептеулерге бағытталған кейбір заманауи бағдарламалау орталарында пайда болады, мысалы. OpenMP. Сияқты OpenMP-дің әр түрлі параллель құрылымдары параллель до, параллель конструкцияның ішінен сыртынан ерте шығуына жол бермеңіз; бұл шектеуге барлық шығу тәсілдері кіреді, бастап үзіліс C ++ ерекшеліктеріне дейін, бірақ бұлардың барлығы параллель құрылымның ішінде рұқсат етіледі, егер секіру мақсаты оның ішінде болса.[19]

Бірнеше рет енгізу

Сирек, кіші бағдарламалар бірнеше мүмкіндік береді кіру. Бұл көбінесе тек қайта- кіру корутин (немесе генератор / semicoroutine), мұнда кіші бағдарлама бақылауды береді (және мүмкін мән), бірақ оны тоқтаған жерде жалғастыруға болады. Бірқатар бар жалпы қолданыстар осындай бағдарламалау, атап айтқанда арналған ағындар (әсіресе енгізу / шығару), күй машиналары және параллель. Кодты орындау тұрғысынан ішкі бағдарламадан оралғаннан гөрі, короутиннен алынған құрылымдық бағдарламалауға жақынырақ, өйткені ішкі бағдарлама іс жүзінде аяқталмаған және қайта шақырылған кезде де жалғасады - бұл ерте шығу емес. Алайда, коруотиндер дегеніміз бірнеше ішкі бағдарламалардың орындалу жағдайы бар, яғни ішкі бағдарламалардың бір шақыру стегі емес - және осылайша күрделіліктің басқа формасы енгізіледі.

Ішкі бағдарламаның ішкі бағдарламаға кіруге рұқсат беруі өте сирек кездеседі, өйткені бұл жағдайда бағдарлама күйі (мысалы, айнымалы мәндер) инициализацияланбаған немесе көп мағыналы емес, және бұл goto-ға өте ұқсас.

Мемлекеттік машиналар

Кейбір бағдарламалар, атап айтқанда талдаушылар және байланыс хаттамалары, бірқатар бар мемлекеттер олар бір-бірін негізгі құрылымдарға оңай түсірілмейтін жолмен жүреді, ал кейбір бағдарламашылар күй-өзгерісті жаңа күйге секірумен жүзеге асырады. Күйді ауыстырудың бұл түрі көбінесе Linux ядросында қолданылады.[дәйексөз қажет ]

Алайда, бұл күйлерді әр күйді өзгертуді жеке кіші бағдарламаны құру арқылы және белсенді күйді көрсету үшін айнымалыны қолдану арқылы құрылымдауға болады (қараңыз) батут ). Сонымен қатар, оларды батуттан бас тартатын коруотиндер арқылы жүзеге асыруға болады.

Сондай-ақ қараңыз

Әдебиеттер тізімі

Дәйексөздер

  1. ^ Кларк, Лесли Б. Уилсон, Роберт Дж.; Роберт, Кларк (2000). Салыстырмалы бағдарламалау тілдері (3-ші басылым). Харлоу, Англия: Аддисон-Уэсли. б. 20. ISBN  9780201710120. Мұрағатталды түпнұсқадан 26 қараша 2015 ж. Алынған 25 қараша 2015.
  2. ^ Бом, Коррадо; Джузеппе Жакопини (1966 ж. Мамыр). «Екі диаграмма, тюрингтік машиналар және тек екі формация ережесі бар тілдер» (PDF). ACM байланысы. 9 (5): 366–371. CiteSeerX  10.1.1.119.9119. дои:10.1145/355592.365646. S2CID  10236439. Мұрағатталды (PDF) түпнұсқадан 2015-09-23.
  3. ^ Dijkstra 1968 ж, «Go to операторын шектеусіз қолдану бірден-бір нәтиже болып табылады, сондықтан процесстің барысын сипаттайтын координаттардың мағыналы жиынтығын табу өте қиын болады. ... тұжырымға бару өте қарапайым, бұл біреудің бағдарламасын бұзуға шақыру тым көп ».
  4. ^ Dijkstra, E. W. (наурыз 1968). «Редакторға хаттар: зиянды деп саналатын өтінішке бару». ACM байланысы. 11 (3): 147–148. дои:10.1145/362929.362947. ISSN  0001-0782. S2CID  17469809.
  5. ^ Плаугер, П. Дж. (1993 ж. 12 ақпан). Мақсат бойынша бағдарламалау, бағдарламалық жасақтама эсселері (1 басылым). Prentice-Hall. б.25. ISBN  978-0-13-721374-0.
  6. ^ Дональд Кнут - мәлімдемелерге өту арқылы құрылымдалған бағдарламалау Мұрағатталды 2013-10-23 Wayback Machine
  7. ^ Фрэнк Рубин (1987 ж. Наурыз). ""GOTO зиянды деп саналады «зиянды деп саналады» (PDF). ACM байланысы. 30 (3): 195–196. дои:10.1145/214748.315722. S2CID  6853038. Архивтелген түпнұсқа (PDF) 2009-03-20.
  8. ^ Ақсақал, Джексон және Либлит 2008.
  9. ^ Джей Филдс; Шейн Харви; Мартин Фаулер; Кент Бек (2009). Қайта өңдеу: Ruby Edition. Pearson білімі. 274–279 бет. ISBN  978-0-321-60350-0.
  10. ^ Herb Sutter; Андрей Александреску (2004). C ++ кодтау стандарттары: 101 ережелер, нұсқаулар және үздік тәжірибелер. Pearson білімі. ISBN  978-0-13-265442-5. «4-мысал: Бір жазба, бір шығу (» SESE «). Тарихи тұрғыдан алғанда, кейбір кодтау стандарттары әр функцияның дәл бір шығуын талап етеді, яғни бір қайтару тұжырымын білдіреді. Мұндай талап ерекшеліктер мен деструкторларды қолдайтын тілдерде ескірген. әдетте көптеген жасырын шығу жолдары бар. «)
  11. ^ Дэвид Энтони Уотт; Уильям Финдлей (2004). Бағдарламалау тілдік дизайн тұжырымдамалары. Джон Вили және ұлдары. 215-221 бб. ISBN  978-0-470-85320-7.
  12. ^ Бертран Мейер (2009). Сабақтың сенсоры: нысандармен және келісімшарттармен жақсы бағдарламалауды үйрену. Springer Science & Business Media. б. 189. ISBN  978-3-540-92144-8.
  13. ^ «PragPub сәуір 2012 ж. - прагматикалық қорғаныс - прагматикалық кітап сөресі». pragprog.com. Мұрағатталды түпнұсқадан 2017 жылғы 10 шілдеде. Алынған 6 мамыр 2018.
  14. ^ «Бір жазба, бір шығу, ол объектіге бағытталған тілдерде қолданылуы керек пе? - Питер Ричидің MVP блогы». Мұрағатталды түпнұсқадан 2012-11-14 жж. Алынған 2014-07-15.
  15. ^ Дэвид Энтони Уотт; Уильям Финдлей (2004). Бағдарламалау тілдік дизайн тұжырымдамалары. Джон Вили және ұлдары. 221–222 бб. ISBN  978-0-470-85320-7.
  16. ^ Лоуден; Кеннет А.Ламберт (2011). Бағдарламалау тілдері: принциптері мен практикасы (3 басылым). Cengage Learning. б. 423. ISBN  978-1-111-52941-3.
  17. ^ Арвинд Кумар Бансал (2013). Бағдарламалау тілдеріне кіріспе. CRC Press. б. 135. ISBN  978-1-4665-6514-2.
  18. ^ Weimer, W & Necula, G.C. (2008). «Ерекше жағдайлар және бағдарламаның сенімділігі» (PDF). Бағдарламалау тілдері мен жүйелері бойынша ACM транзакциялары. 30 (2). Мұрағатталды (PDF) түпнұсқасынан 2015-09-23.
  19. ^ Рохит Чандра (2001). OpenMP-де параллель бағдарламалау. Морган Кауфман. б. 45. ISBN  978-1-55860-671-5.

Дереккөздер

Сыртқы сілтемелер

  • BPS құрылымы - қатарлас жүйелерді құруға арналған құрал (бағдарламалар, процестік модельдер)
  • Дж.Дарлинтон; М.Ганем; H. W. To (1993), «Құрылымдық параллель бағдарламалау», Жаппай параллель компьютерлерге арналған бағдарламалау модельдерінде. IEEE Computer Society Press. 1993 ж: 160–169, CiteSeerX  10.1.1.37.4610