Намерно програмирањеУ програмирању, намерно програмирање је парадигма програмирања које је развио Чарлс Симоњи који кодира у софтверу изворног кода тачну намеру које програмери (или корисници) имају на уму када схватају тај рад. Користећи одговарајући ниво апстракције на коме програмер мисли, стварање и одржавање рачунарских програма постаје лакше. Раздвајајући забринутости од намера и после операције, софтвер постаје модуларан и омогућава већу вишекратну употребу софтверског кода. Намерно програмирање је развио бивши главни архитекта Мајкрософта Чарлс Симоњи, који је водио тим у Мајкрософт истраживању који је развио парадигму и изградио интегрисано развојно окружење (ИРО) под називом IP (за намерно програмирање) који показује парадигму. Мајкрософт је одлучио да не продукује намерно програмирање парадигме, као у раним 2000-им када је Мајкрософт избацио С# и .NET се супротставио Јава усвајању.[1] Чарлс Симоњи одлучује, уз сагласност Мајкрософта, да предузме своју идеју из Мајкрософта и комерцијализације сам. Он је основао компанију Намерни Софтвер да настави ово. Мајкрософт лиценцира намерно програмрање патената Симоња које је стекао док је био у Мајкрософту, али не и изворни код, у намерни софтвер. Преглед намерног програмирања како је развијено у Мајкрософт истраживању је дат у поглављу 11. књиге Генеративно програмирање: Методе, алати и апликације.[2] Развој циклусаКао што је предвиђено од Симоњиа, развија нову апликацију преко намерног програмирања парадигма средстава на следећи начин. Програмер гради WYSIWYG попут окружења које подржава шему и нотацију бизнис знања за дати проблем домен (као што су апликације продуктивности или животног осигурања). Корисници онда користите ову средину да заузму своје намере, које су снимљене на високом нивоу апстракције. Окружење може да ради на овим намерама и помаже корисницима да креирају семантички богатије документе који могу бити процесуирани и погубљени, сличне табели. Снимљена знања врши се од стране оцењивача или је састављено за генерисање коначног програма. Узастопне промене се врши на нивоу самог WYSIWYG-а. За разлику од процесора речи, табеле или презентације софтвера, намерна средина има већу подршке за структуру и семантику намера да се изразе, и може створити интерактивне документе који захватају богатије шта корисник жели да постигне. Посебан случај је када садржај програм кода и животне средине постаје интелигентан IDE.[3] Раздвајање складиштење и презентација изворног кодаКључ за користи намерног програмирања служи да домен код који захвата намере се не чува у изворном коду текстуалних фајлова, него у дрво-основном сладишту (може бити бинарни или XML). Тесна интеграција животне средине са формата за складиштење доноси неке од лепших особина нормализације базе података до изворног кода. Технолошки вишак се елиминише давањем дефиниције јединственом идентитету, и складиштењем имена променљивих и оператора у тачно једном месту. То суштински олакшава разлику декларације референци, а животна средина може да их покаже другачије. Размак у програму се такође не чува као део изворног кода, а сваки програмер који ради на пројекту може да изабере увлачење приказа извора. Веће радикалне визуелизације укључују приказивање листе изјава као угњежђене кутије, уређивање условних израза као логичке капије, или re-rendering имена у кинеском. Систем користи нормализовани језик за популарне језике као што су C++ и Java, док пушта корисничко окружење и комбинује их са идејама из Ајфела и других језика. Често се помиње у истом контексту као и језик-оријентисано програмирање преко домена-специфичног језика, и аспект оријентисано програмирање IP тврди да пружа неке продоре у генеративном програмирању. Ове технике омогућавају програмерима да продужи окружења језика за снимање домена специфичне конструкције без улагања у писање пуног компајлера и едитора за све нове језике. Пример програмирањеJava програм који испише бројева од 1 до 10, користећи коврџаву конзолну синтаксу, може да изгледа овако: for (int i = 1; i <= 10; i++) {
System.out.println("the number is " + i);
}
Код изнад садржи заједнички конструкт већине програмских језика, тако ограничену петљу, у овом случају заступа Али овај код не схвата намере програмера, односно да се У намерним програмским системима горе петља може бити представљена, на неком нивоу, као нешто што је очигледно као "штампање бројеве од 1 до 10". Систем ће онда користити намере за генерисање изворног кода, вероватно нешто веома слично коду горе. Кључна разлика је у томе што намерно програмирање система одржава семантички ниво, који изворном коду недостаје, а који може драматично олакшати читљивост у великим програмима. Иако већина језика садржи механизме за снимање одређених врста апстракција, IP, као Lisp породица језика, омогућава додавање потпуно нових механизама. Према томе, ако је програмер почео са језиком као што је C, он би могао да прошире језик са карактеристикама као што су оне у C++ без чекања на компајлер програмере да их додају. По аналогији, много више моћних механизам израза може се користити од стране програмера за класе и процедуре. ИдентитетIP се фокусира на појам идентитета. Будући да већина програмских језика представља изворни код као обичан текст, објекти су дефинисани именима, а њихова посебност мора да се извлачи од стране преводиоца. На пример, иста симболика имена може се користити за именовање различитих варијабли, процедура или чак типова. У коду који се протеже на неколико страница - или, за глобално видљивим именима, више датотека - може да постане веома тешко рећи на шта се симбол односи на који стварни објекат. Ако се назив промени, где се користи код мора пажљиво да се испитивати. Насупрот томе, у IP систему, све дефиниције не само додељуј симболичка имена, него и јединствене приватне идентификаторе за објекте. То значи да у развојном окружењу IP-а, свака референца на променљиву или процедуру није само име - то је веза са оригиналним ентитетом. Највећа предност овога је да ако је преименован ентитет, све референце на њему у програму остају на снази (познат као референцијални интегритет). То такође значи да уколико се исти назив користи за јединствене дефиниције у различитим именским (као што су ".то_стринг ()"), референцама са истим именом, али различитим идентитетом неће бити преименован, као што се понекад дешава с претраживањем/заменити у текућем уреднику. Ова функција такође олакшава више-језичне верзије програма; може имати низ имена на енглеском језику за све дефиниције, као и низ имена на јапанском језику који се могу мењати по вољи. Имајући јединствен идентитет за сваки објекат дефинисан у програму такође олакшава обављање аутоматско прављење задатака, као и поједностављује код чекирања у верзионисаном систему. На пример, у многим садашњим кодовима за сарадњу система (нпр CVS), када су два програмера починила промене које нису усаглашене (односно ако један програмер преименује функцију док је други мења једну од линија у тој функцији), верзионисани систем ће мислити да је један програмер створио нову функцију, док је други модификовао стару функцију. У IP-верзији система, он ће знати да је један програмер само променио име, а други променио код. Нивои детаљаIP системи такође нуде неколико нивоа детаља, омогућавајући програмеру да "увелича" или "умањи". У горњем примеру, програмер може да умањи дат ниво који ће рећи нешто као: <<штампај бројеве од 1 до 10>> Тако су IP системи само-документовани у великој мери, дозвољавајући програмеру да задржи добар висок ниво слике програма у целини. Слични радовиПостоје пројекти који експлоатишу сличне идеје да се створи код са вишег нивоа апстракције. Међу њима су:
Види још
Рефренце
Спољашње везе
|
Portal di Ensiklopedia Dunia