Кіріспе

Бағдарламалау парадигмасы, бағдарламашының ниетін кодтайтын. Компьютерлік бағдарламалауда, Қасақана бағдарламалау – Чарльз Симоний әзірлеген бағдарламалау парадигмасы. Ол бағдарламашылардың (немесе пайдаланушылардың) жұмысын жоспарлағандағы нақты ниетін бағдарламалық кодқа енгізеді. Бағдарламашының ойлаған деңгейіндегі абстракцияны пайдалану арқылы компьютерлік бағдарламаларды жасау және қолдау оңайлайды. Ниеттерді және олардың қалай орындалатынын бөліп қарастыру арқасында бағдарламалық жасақтама модульді болады және қайта пайдалануға болатын кодты көбірек жасауға мүмкіндік береді. Қасақана бағдарламалауды бұрынғы Microsoft бас архитекторларының бірі Чарльз Симоний әзірледі. Ол Microsoft Research командасын басқарды, олар парадигманы жасады және «Қасақана бағдарламалау» (Intentional Programming) үшін IP деп аталатын интеграцияланған даму ортасын (IDE) құрды. Microsoft 2000-шы жылдардың басында Java-ны басып озу үшін C# және .NET-ті енгізіп жатқандықтан, Қасақана бағдарламалау парадигмасын өнімге айналдырмауға шешім қабылдады. Чарльз Симоний Microsoft-тың келісімімен өз идеясын Microsoft-тан алып, оны өзі коммерцияландыруға бекінді. Ол осы мақсатта Intentional Software компаниясын құрды. Microsoft, Симоний Microsoft-та жұмыс істеген кезінде алған Қасақана бағдарламалау патенттерін Intentional Software-ге лицензиялады, бірақ бастапқы кодты бермеді. Microsoft Research-те жасалған Қасақана бағдарламалау туралы толық мәліметтер Generative Programming: Methods, Tools, and Applications кітабының 11-тарауында келтірілген.

Даму циклі

Симонйидің көзқарасы бойынша, қасақана бағдарламалау парадигмасы арқылы жаңа қолданбаны жасау мынадай жолмен жүзеге асырылады. Бағдарламашы белгілі бір мәселелік сала үшін (мысалы, өнімділік қолданбалары немесе өмір сақтандыру) бизнес білімінің схемасы мен нотациясын қолдайтын WYSIWYG сияқты орта құрайды. Пайдаланушылар осы ортаны өз ниеттерін жоғары деңгейдегі абстракцияда жазу үшін пайдаланады. Орта осы ниеттерді өңдей алады және пайдаланушыға семантикалық тұрғыдан байрақ құжаттар жасауға көмектеседі, оларды өңдеуге және орындауға болады, бұл электрондық кестеге ұқсас. Жазылған білім бағалаушымен орындалады немесе соңғы бағдарламаны жасау үшін компиляцияланады. Кез келген өзгерістер тек WYSIWYG деңгейінде ғана жасалады. Сөз өңдегіштерге, электрондық кестелерге немесе презентациялық бағдарламалық құралдарға қарағанда, қасақана ортада білдірілетін ниеттердің құрылымы мен мағынасы жақсы қолдауға ие, сондай-ақ пайдаланушының неге қол жеткізуге тырысатынын толықрақ көрсететін интерактивті құжаттарды жасауға мүмкіндік береді. Егер мазмұн бағдарламалық код болса, орта зиялы IDE-ге айналатын ерекше жағдай туындайды.

Ресурстық кодты сақтау мен ұсынуды бөлу

Қасақана бағдарламалаудың пайдасының кілті – домендік код, яғни ниеттерді бейнелейтін код, бастапқы код мәтіндік файлдарында емес, ағаш тәрізді құрылымда сақталады (бинариялық немесе XML пішінде болуы мүмкін). Ортаны сақтау форматымен тығыз байланыстыру дерекқор нормалауының бірнеше пайдалы мүмкіндіктерін бастапқы кодқа енгізеді. Әр анықтамаға бірегей идентификатор беріп, айнымалылар мен операторлардың атауларын тек бір жерде сақтау арқылы артық ақпарат жойылады. Бұл декларацияларды сілтемелерден ажыратуды жеңілдетеді, ал орта оларды әртүрлі көрсетуге мүмкіндік береді. Бағдарламадағы бос орын бастапқы кодтың бөлігі ретінде сақталмайды, сондықтан жоба үстінде жұмыс істейтін әр бағдарламашы бастапқы кодтың кіріспесін қалауынша өзгерте алады. Одан да радикальды визуализациялау әдістеріне мыналар жатады: операторлар тізімін ішкі қораптар түрінде көрсету, шартты өрнектерді логикалық қақпалар ретінде өңдеу немесе атауларды қытай тілінде қайта жазу. Жүйе C++ және Java сияқты танымал тілдер үшін нормаланған тілді пайдаланады, сонымен қатар орта қолданушыларына Эйфель және басқа тілдердің идеяларын олармен үйлестіруге мүмкіндік береді. Бұл техникалар көбінесе тілге бағытталған бағдарламалау және доменге қатысты бағдарламалау сияқты ұғымдармен бірге қарастырылады, сонымен қатар генеративтік бағдарламалауда жаңа мүмкіндіктер ұсынады. Бұл әдістер дамытушыларға жаңа тілдер үшін толық компилятор мен редактор жасауға қажетті ресурстарды жұмсамай, доменге қатысты құрылымдарды енгізу үшін тіл ортасын кеңейтуге мүмкіндік береді.

Жеке тұлға

ИС бірегейлік тұжырымдамасына назар аударады. Көптеген бағдарламалау тілдері бастапқы кодты қарапайым мәтін ретінде ұсынатындықтан, нысандар атаулармен анықталады және олардың бірегейлігі компилятормен анықталуы тиіс. Мысалы, бірдей символдық атау әртүрлі айнымалыларды, процедураларды тіпті түрлерді атау үшін қолданылуы мүмкін. Көп беттен тұратын кодта немесе, жалпыға қолжетімді атаулар үшін, бірнеше файлда қандай символ нақты нысанға сілтеме жасайтынын анықтау өте қиын болуы мүмкін. Атау өзгертілсе, оны пайдаланатын кодты мұқият тексеру қажет. Керісінше, IP жүйесінде барлық анықтамалар символдық атауларды ғана емес, сонымен қатар нысандарға бірегей жеке идентификаторларды да тағайындайды. Бұл IP әзірлеу ортасында, айнымалыға немесе процедураға жасалған әрбір сілтеме – тек атау емес, бастапқы нысанға жасалған сілтеме екенін білдіреді. Мұның басты артықшылығы – нысан қайта аталса, бағдарламадағы оған жасалған барлық сілтемелер күшінде қалады (бұл анықтамалық тұтастық деп аталады). Сондай-ақ, егер бір атау әртүрлі кеңістіктердегі бірегей анықтамалар үшін қолданылса (мысалы, ".to string"), бірдей атаумен, бірақ әртүрлі бірегейлікпен сілтемелер қайта аталмайды, бұл кейде қазіргі редакторларда іздеу/ауыстыру операциялары кезінде болады. Бұл мүмкіндік бағдарламаның көп тілді нұсқаларын жасауды жеңілдетеді; ол барлық анықтамалар үшін ағылшын тіліндегі атаулар жиынтығын, сондай-ақ жапон тіліндегі атаулар жиынтығын қалаған кезде ауыстыруға мүмкіндік береді. Бағдарламадағы әрбір анықталған нысан үшін бірегей бірегейлік болуы автоматтандырылған рефакторинг тапсырмаларын орындауды, сондай-ақ нұсқаларды басқару жүйелерінде кодты тексеруді жеңілдетеді. Мысалы, көптеген қазіргі кодты бірлесіп жасау жүйелерінде (мысалы, Git), егер екі бағдарламашы қақтығыс тудыратын өзгерістер жасаса (яғни, бір бағдарламашы функцияны қайта атаса, ал екіншісі сол функциядағы бір жолды өзгертсе), нұсқаларды басқару жүйесі бір бағдарламашы жаңа функция жасады деп, ал екіншісі ескі функцияны өзгертті деп ойлайды. IP нұсқаларды басқару жүйесінде, бір бағдарламашы тек атауын өзгерткенін, ал екіншісі кодты өзгерткенін анықтайды.