Концептуално програмирање
Концептуално програмирање је програмска парадигма фокусирана на то како концепти, које је осмислио програмер, могу да се пренесу на репрезентацију у виду кода. Овај приступ је први пут представљен 2001. године од стране Кристофа де Динечина у виду XL програмског језика.
Псеудо-метрика
уредиКонцептуално програмирање користи псеудо-метрику да оцени квалитет кода. Зове се псеудо-метрика јер повезује концепт простора и простор кода, са јасним разумевањем да концепт простора не може да се стриктно формализује довољно да би се дефинисао у стварној метрици. Псеудо-метрика концептуалног програмирања укључује:
- Синтактични шум - који мери одступања између концепта и синтаксе коришћене како би се сам концепт представио. На пример, ознака тачка зарез (;) на крају сваке линије кода у C-у може да се посматра као синтактички шум, јер нема свој еквивалент у концепту простора.
- Семантички шум - који мери одступања између очекиваног значења или понашања концепта и стварног значења или понашања у коду. На пример, чињеница да може доћи до оверфлоwа интегер типова података је тип семантичке буке.
- Проток - мери колико концептуалног простора дати код може да прикаже. На пример, преоптерећен оператор сабирања у C-у има већи проток него АДД инструкција у асемблеру, јер оператор у C-у може да представља и сабирање у оквиру флоатинг-поинт бројева, не само у оквиру целих (интегер) бројева.
- Однос сигнала и буке - мери која фракција кода је коришћена за приказ стварних концепата, у супротности са имплементацијом информација.
Правило еквиваленције, слом еквиваленције
уредиПравило еквиваленције је достигнуто када је понашање кода исто као и оригинални концепт. Ова еквиваленција се може "сломити" у многим случајевима. Интегер оверфлоw слама еквиваленцију између математичког концепта целих бројева и компјутеризоване апроксимације концепта. Многи начини да се сломи еквиваленција имају специфична имена, јер су веома чести:
- Грешка домена је стање где се код извршава ван домена еквиваленције, што представља домен у ком су концепт и имплементација идентични. Ово је на пример интегер оверфлоw.
- Концепт кастовања (рекастовања) је преписка концепта у виду другачијег концепта јер оригинални концепт не може да се прикаже уз помоћ алата. У C-у, коришћење показивача за излазне аргументе ( јер C не подржава експлицитне излазне аргументе) представља пример концепта кастовања.
- Инверзиа приоритета је форма синтактичког или семантичког шума уведена у неким језицима. Зове се инверзија приоритета јер језик има предност у односу на концепт. У Смаллталк програмском језику, све је објекат, и то правило доводи до нежељених последица, као нпр. да израз 2+3*5 не поштује уобичајени редослед операција. У овом случају Смаллталк ће као резултат овог израза вратити 25 уместо 17.
Методологија
уредиКако би се писао код, концептуално програмирање предлаже следеће кораке:
- Идентификовати и дефинисати релевантне концепте у концептуалном простору.
- Идентификовати традиционалну нотацију за концепте, или смислити употребљиву нотацију.
- Идентификовати комбинацију програмских конструкција које дозвољавају да концепти буду представљени у виду кода, што укључује проналажење нотације кода која се поклапа са нотацијом идентификованом у претходном кораку сто је ближе могуће.
- Написати код који чува, што је више могуће, очекивано понашање и семантику релевантних аспеката оригиналног концепта.
Језици
уредиXL је једини програмски језик до сад који је експлицитно креиран за концептуално програмирање, мада концептуално програмирање може да се примени у било ком језику, са различитим мерама успеха. Лисп и Фортх, и сви њихови наследници, су примери језика који су постојали пре саме идеје концептуалног програмирања, а који се могу користити за концептуално програмирање.
Слични радови
уредиПостоје пројекти који користе сличну идеју да се направи код вишег нивоа апстракције. То су: