Кіріспе
үлестірілген объектілік байланыста қолданылуы. Скелеттік бағдарламалау – бұл қарапайым жоғары деңгейдегі бағдарламалық құрылымдарға және «қуыршақ код» деп аталатын кодтарға негізделген компьютерлік бағдарламалау стилі. Бағдарламалық скелеттер псевдокодқа ұқсайды, бірақ кодты талдауға, компиляциялауға және сынауға мүмкіндік береді. Қуыршақ код бағдарламаның қаңқасына өңдеуді симуляциялау және компиляция қателерін болдырмау үшін енгізіледі. Бұл бос функциялардың жариялануын немесе кодтың күтілетін жауабы белгілі болған қарапайым сынақ жағдайы үшін ғана дұрыс нәтиже беретін функцияларды қамтуы мүмкін. Скелеттік бағдарламалау жоғарыдан төменге қарай жобалау тәсілін жеңілдетеді, онда толық жоғары деңгейдегі құрылымдары бар ішінара жұмыс істейтін жүйе жобаланып, кодталады, содан кейін бұл жүйе жобаның талаптарын орындау үшін біртіндеп кеңейтіледі. Бағдарламалық скелеттер кейде алгоритмдерді жоғары деңгейде сипаттау үшін де қолданылады. Бағдарламаның қаңқасы сонымен қатар проблемалардың кең ауқымында жиі қолданылатын синтаксис пен құрылымдарды көрсететін үлгі ретінде де пайдаланылуы мүмкін. Скелеттік бағдарламалар объектіге бағытталған бағдарламалауда қолданылатын шаблондық әдіс жобалау үлгісінде қолданылады. Объектіге бағытталған бағдарламалауда қуыршақ код абстрактілі әдіске, әдіс түйіншегіне немесе қуыршақ объектіге сәйкес келеді. Java қашықтықтан әдіс шақыру (Java RMI) терминологиясында, клиенттік жақтағы түйін серверлік жақтағы скелетпен байланысады. Сыныптың скелеті – бағдарламалық жасақтауда қолданылатын сыныптың контуры. Ол сыныптың рөлдерін сипаттайды және айнымалылар мен әдістердің мақсаттарын сипаттайды, бірақ оларды іске асырмайды. Сынып кейінірек скелеттен іске асырылады. Скелет интерфейс немесе абстрактілі сынып ретінде де белгілі болуы мүмкін, полиморфты парадигманы ұстанатын тілдерде.
Skeleton programming is a style of computer programming based on simple high level program structures and so called dummy code. Program skeletons resemble pseudocode, but allow parsing, compilation and testing of the code. Dummy code is inserted in a program skeleton to simulate processing and avoid compilation error messages. It may involve empty function declarations, or functions that return a correct result only for a simple test case where the expected response of the code is known. Skeleton programming facilitates a top down design approach, where a partially functional system with complete high level structures is designed and coded, and this system is then progressively expanded to fulfill the requirements of the project. Program skeletons are also sometimes used for high level descriptions of algorithms. A program skeleton may also be utilized as a template that reflects syntax and structures commonly used in a wide class of problems. Skeleton programs are utilized in the template method design pattern used in object oriented programming. In object oriented programming, dummy code corresponds to an abstract method, a method stub or a mock object. In the Java remote method invocation (Java RMI) nomenclature, a stub communicates on the client side with a skeleton on the server side. A class skeleton is an outline of a class that is used in software engineering. It contains a description of the class's roles, and describes the purposes of the variables and methods, but does not implement them. The class is later implemented from the skeleton. The skeleton can also be known as either an interface or an abstract class, with languages that follow a polymorphic paradigm.
Өмірбаян
Қазіргі заманғы бағдарламалық қамтамасыз ету көптеген себептерге байланысты күрделі болып келеді. Бұл оны бір ғана бағдарламашы жасамайтын немесе басқа модульдер мен бөліктерді бөлек импорттау қажеттігін білдіреді. Бағдарламалар өздері де тым күрделі болуы мүмкін, мысалы, бір айнымалыға бірнеше әдіспен бір уақытта қол жеткізу немесе тіпті дисплейлер үшін пиксельдерді жасау сияқты. Скелеттік код бағдарламалаушыларға компиляция кезінде мүмкіндігінше аз қателермен кодты әзірлеуге көмектесу үшін қолданылады. Скелеттік код көбінесе параллель бағдарламалауда кездеседі, бірақ басқа жағдайларда да қолданылады, мысалы, бағдарламалау тілдеріндегі құжаттама жасау үшін. Бұл әлеуетті түрде шатастыратын әдістің негізгі функционалдығын жеңілдетуге көмектеседі. Сондай-ақ, үлкен бағдарламаның кішігірім функциясы уақытша толыққанды жұмыс істемей тұрып, жұмыс істеуіне мүмкіндік береді. Бұл бағдарламалау әдісі толыққанды функцияны жазуға қарағанда оңай, себебі мұндай скелеттік функциялар негізгі функционалдықты қамтымайды және дамыту кезінде пайдалану үшін тікелей кодталуы мүмкін. Олар әдетте әдістің басталуын қамтамасыз ету үшін синтаксистік тұрғыдан дұрыс кодты, сондай-ақ бағдарламаның жұмысын түсіндіретін түсініктемелерді қамтиды. Кез келген мәтінді скелеттік код деп атау міндетті емес.
Псевдокодпен байланыс
Псевдокод көбінесе жаңа бағдарламалық құралды әзірлеу кезінде кездеседі. Ол үлкен жүйедегі нақты бір функцияның қарапайым тілдегі сипаттамасы немесе тіпті толық бағдарламаның бейнесі болуы мүмкін. Псевдокод скелеттік бағдарламалауға ұқсас, алайда псевдокод бағдарламалаудың негізінен бейресми әдісі болып табылады. Дүмми код та осыған ұқсас, онда код тек орын сақтау үшін немесе сыныпта немесе интерфейсте әдістің болуын көрсету үшін қолданылады. Компьютерлік бағдарламашылар псевдокодқа қатты тәуелді, тіпті ол олардың психологиясына өлшенетін әсер етеді. Объектіге бағытталған тілдер өз іске асыруларында иерархиялық құрылымға баса назар аударады, бұл басқа тілдердегі қарапайым жоғарыдан төменге қарайғы тәсілден өзгеше. Объектілер деректер мен айнымалыларды сақтайды, бұл көбінесе тиімді бағдарлама жазуға мүмкіндік береді. Бұл объектілердің ішкі айнымалыларға қол жеткізе алатын жеке функциялары бар, олар әдістер деп аталады. Әрбір әдіс бірдей форматта анықталады, әдістің аты және интеграцияланған даму ортасында қолданылатын синтаксис блоктың жоғарғы бөлігінде анық көрінеді. Java-ның ауқымына, дерек түрлеріне және мұрагерлікке назар аударуымен, бұл синтаксис жаңа, тіпті барлық бағдарламашылар үшін де өте пайдалы. Бұдан кейін әдістің жұмысының толыққанды түсіндірмесі беріледі, ал қателер төменде көрсетілген. Python өзінің кіріктірілген әдістерін құжаттау үшін ұқсас тәсілді қолданады, бірақ ауқым мен дерек түрлеріне қатысты тілдің талаптарының жоқтығын көрсетеді. Бұл құжаттамада әрбір әдістің синтаксисі, қысқаша сипаттамасы және әдістің немесе функцияның әдеттегі қолданылу мысалы келтірілген. Мысалда берілген скелеттік код бағдарламашыларға функцияны жылдам түсінуге көмектеседі.
Сыныптың анықтамасы
Үшінші тарап әзірлеушілері жазған сыныптар, көбінесе кітапханалардың құрамында, өз бағдарламалауын скелет код түрінде көрсетеді. Бұл кітапханаға жаңа келгендерге функциялар мен әдістердің қалай жұмыс істейтінін түсінуге көмектеседі. P5.js өз құжаттамалық беттерінде белгілі бір кіріктірілген функциялардың күтілетін қолданылуын түсіндіру үшін осы форматты пайдаланады. Бұл, алайда, бағдарламалау тілінің құжаттамасынан өзгеше, себебі әдістің барлық мүмкін қолданылуларын көрсетудің орнына, параметрлерді көрсету үшін скелет код қолданылады. Табиғи тіл интерфейстері (NLIs) көбінесе бағдарламашылардың кіріс деректерді алуға тырысатын жағдайларда кездеседі, бұл кіріс әдетте қарапайым тілмен беріледі (бағдарламалау тіліне тән терминологияны қолданбай) және одан бағдарлама немесе әдіс жасау үшін пайдаланылады. Мұндай жүзеге асыруда, функцияның фонында қалай жұмыс істейтінін көрсету үшін шағын скелет код қолданылады. Басқа NLI түрлері әртүрлі кіріс түрлерін пайдаланады, мысалы, басқа тілдерде сөйлейтін пайдаланушылардан алынған мәліметтерден бастап, қол жестілеріне негізделген кіріс деректерге дейін, нәтижеде ұқсас нәтижеге жетуге болады. Бағдарламалау тілдері негізінен ағылшын тілінде жасалғандықтан, басқа тілдерде сөйлейтін адамдар үшін жаңа бағдарламалық құралдарды жасау қиын болуы мүмкін. NLI кейбір зерттеулерде осындай жағдайларда адамдарға көмектесу үшін қолданылған. Аталған зерттеу NLI арқылы Java тілінде жазылған сыныптарды көрсетті. Бұл синтаксистік ережелерді үйрену қажеттілігін жойды, бірақ сынып негізгі скелет кодты пайдалана отырып жазылғанын білдірді.
Параллельді бағдарламалау
Параллельді бағдарламалау – тиімділікті арттыру мақсатымен бірнеше функцияны бір уақытта орындау. Бұл бағдарламаларды жасау әдетте өте қиын, себебі олардың күрделілігі және қолданылатын аппараттық құралдармен байланысы тығыз. Көптеген бағдарламашылар осы негізгі мүмкіндіктерді іске асыруға тырысты, бірақ нәтижелер әртүрлі болды. Алгоритмдік қаңқалық фреймворктер параллельді бағдарламалауда кейінірек дамыту үшін сұранысқа алынған әдістерді абстрактілі түрде сипаттау үшін қолданылады. Фреймворктер бір типпен ғана шектелмейді, және олардың әрқайсысы бағдарламашының бағдарламасының тиімділігін арттыру үшін әртүрлі мақсаттарға қызмет етеді. Оларды үш негізгі түрге бөлуге болады: деректерді параллель, тапсырмаларды параллель және ажыратымдылық.
Параллель деректер
Бұл скелет алгоритмдері үлкен деректерге негізделген бағдарламалық құралдарды жасау үшін қолданылады, әдетте кейінірек пайдалану үшін деректер арасындағы байланыстарды анықтайды. Деректерді параллель өңдеу алгоритмдеріне ‘maps’, ‘forks’ және ‘reduces’ немесе ‘scans’ жатады. ‘Maps’ – деректерді параллель өңдеу алгоритмдерінің ең көп қолданылатын түрі, және әдетте үлкен деректер жиынтығында бір операцияны орындауды қамтиды. Тиімділікті арттыру үшін, бірнеше деректер жиынтығына бұл операция бір уақытта қолданылады, содан кейін деректер соңында қайта құрылымдалады. ‘Forks’ ‘maps’-ке ұқсас, бірақ олар белгілі бір дерек түрлері үшін басқа операцияны қолданады. Бұл көп деректі параллель өңдеу деп аталады. ‘Reduces’ немесе ‘scans’ деректер жиынтығына префикстерді қолдану үшін қолданылады, содан кейін деректерге операция қолданылады. Олар ‘maps’-тен өзгеше, себебі әдіс орындалып жатқан кезде ішінара нәтижелер жиынтығына ие.
Параллель тапсырма
Бұл операциялар, аты айтқандай, тапсырмалармен жұмыс істейді. Бұл алгоритмдердің әрбір түрі тапсырмалар арасындағы мінез-құлқының өзгеруіне байланысты ерекшеленеді. Тапсырмалық параллель алгоритмдерге ‘sequentials’, ‘farms’, ‘pipes’, ‘if’, ‘for’ және ‘while’ жатады. ‘Sequential’ ішкі жиынталған скелет алгоритмдерін жабады және тоқтатады. Скелеттер құрамына кіретін әдістер мен бағдарламалар бағдарламаның жабылу алдындағы аяқталу аспектілері ретінде қосылады. ‘Farms’ тапсырмалар тобы, жұмысшы, немесе басқа функцияның басшысы немесе орындаушысы ретінде танылады. Ол берілген тапсырмаларды бірнеше жіптерге көшіру арқылы және оларды бір уақытта орындау арқылы аяқтайды. Бұл белгілі бір жіпке жүктемені бөледі, нәтижесінде жіптер арасында басшы/орындаушы қатынасы құрылады. ‘Pipes’ – әр әдіс немесе функция тізбектей орындалатын алгоритмдердің дәстүрлі түрі. Бұл бағдарламашы кодты жазған ретімен сәйкес келеді. Бұл өнімділікті және жылдамдықты арттыру үшін, әдетте, кіріс деректері жиынтығында әртүрлі тапсырмаларды бір уақытта есептеу арқылы параллельдеу арқылы жүзеге асырылады. Әрбір бір уақытта орындалатын есептеу кезең деп аталады. ‘Pipes’ алгоритмі ішкі жиынталған болуы мүмкін, әрқайсысы жылдамдықты және кезеңдер санын арттыру үшін жауапкершілікті бөліп береді. ‘If’ бағдарламаға тапсырмаларды шартты түрде бөлу мүмкіндігін береді, онда скелет код жиыны екі негізгі бөлікке бөлінеді. Бағдарламаға шартты оператор беріледі, соның арқасында орындалуға тиіс алгоритм анықталады. ‘For’ тапсырманы бағдарламашы белгілеген рет санымен орындайды, бұл кодтың тиімді жиынтығын қамтамасыз етеді. Кодтың орындалу саны алдын ала белгіленген мән болып табылады, ол орындалу барысында өзгертілмейтінін көрсетеді. Тапсырма берілген рет санымен аяқталуы керек. ‘While’ алгоритмі ‘for’ алгоритмінің жұмысына өте ұқсас, онда тапсырма бірнеше рет орындалады. Алайда, ‘while’ алгоритмдерінде бағдарлама шартты оператор орындалғанға дейін тапсырманы бірнеше рет есептейді. Бұл ‘while’ алгоритмінің әр орындалуда тапсырманы әртүрлі рет санымен орындай алатынын білдіреді.
Қаулылық қаңқалар
Бұл қаңқалар жоғарыда табылған әдеттегі қаңқалардан өте ерекше. «Шешім табу» алгоритмдері белгілі бір мәселені шешу үшін әдістердің үйлесімін пайдаланады. Алгоритмге берілген мәселе «мәселелер отбасы» болуы мүмкін. Осы қаңқалардың екі негізгі түрі бар: «бөліп талқандау» немесе «таратып шектеу». «Бөліп талқандау» мәселені шешу үшін карта қаңқасын негіз ретінде пайдаланады және оны while қаңқасымен біріктіреді. Карта алгоритмдерінде деректерге функциялар бірдей уақытта қолданылады. «Бөліп талқандау» алгоритмінде ұсынылған деректер жиынына карта қаңқасын қолданатын функция қолданылады, бірақ оны «while» алгоритмін пайдаланып рекурсивті түрде қолдануға болады. «While» тоқтатылады, тек егер мәселе толығымен шешілген болса. «Таратып шектеу» алгоритмі де карта алгоритмдерін пайдаланады, бірақ тапсырмаларды бір уақытта орындау үшін «while» алгоритмін қолданудың орнына, бұл алгоритм тапсырмаларды тармақтарға бөледі. Әр тармақтың нақты мақсаты немесе «шектеуі» бар, онда шартты оператор оны тоқтатуға себеп болады.