Особине декларативног програмирања
Декларативно програмирање је парадигма програмирања у којој програмер дефинише шта програм треба да уради, а не како да то постигне. За разлику од императивног програмирања, које се фокусира на кораке које треба предузети како би се решио проблем, декларативно програмирање подразумева описивање жељеног резултата, док све остало (како ће то бити постигнуто) остаје на окружењу или интерпретатору. Ова парадигма омогућава програмерима да се фокусирају на проблеме вишег нивоа, чинећи код лакшим за разумевање, одржавање и проширење.
Кључне особине декларативног програмирања
[уреди]Апстракција контроле
[уреди]У декларативном програмском окружењу, детаљи о томе како ће се нешто извршити, као што су редослед операција или конкретне имплементације, апстраховани су од самог програма. Програмер се не бави техничким аспектима имплементације, већ само дефинише крајњи резултат. На пример, у CКЈУЕЛ-у програмер описује који подаци су му потребни, а не начин на који ће се подаци из базе обрађивати или сортирати.
Оптимизација извршења
[уреди]Декларативни језици често остављају могућност оптимизације кода на интерпретатору или окружењу у којем програм ради. На пример, СКЈУЕЛ упити могу бити аутоматски оптимизовани од стране система за управљање базама података (ДБМС), што програмеру омогућава да се фокусира на формулисање упита, а не на детаљну оптимизацију.
Фокус на декларацију стања, а не на процедуру
[уреди]Декларативни приступ подразумева да се програм не бави директним описивањем како ће се нешто десити (нпр. каква ће бити процедура за решавање проблема), већ само описује какво стање или резултат треба да буде постигнут. То омогућава већу флексибилност и лакшу измену у будућности.
Богатство израза и декларација
[уреди]У декларативним језицима, као што су СКЈУЕЛ и ХТМЛ, изрази који дефинишу структуру и однос података су веома лако разумљиви и лако се модификују. На пример, у СКЈУЕЛ-у програмер дефинише упит као скуп услова и операција над подацима, али не разматра ниједан конкретан корак који ће се користити за претраживање или сортирање података.
Декларативни језици
[уреди]- СКЈУЕЛ – Језик за рад са релационим базама података, где програмер описује који подаци су му потребни (упити), али не разматра како се подаци претражују или сортирају.
- ХТМЛ – Језик за структуру веб страница, где се описује који елементи треба да буду на страници, али не и како ће се ти елементи рендеровати.
- Функционално програмски језици као што су Хаскел и Ерланг – користе декларативне принципе за рад са функцијама и подацима, често избегавајући промену стања.
Предности и недостаци декларативног програмирања
[уреди]Предности:
[уреди]- Читљивост и лакше одржавање: Код је лакши за разумевање и одржавање, јер програмер описује само шта жели да постигне, не бавећи се детаљима имплементације.
- Лакша оптимизација: Окружје може аутоматски оптимизовати код (на пример, СКЈУЕЛ упити се аутоматски оптимизују за брже извршавање).
Недостаци:
[уреди]- Мала контрола над перформансама: Програмер не може увек да контролише како ће бити изведене оптимизације, што може довести до неефикасности у неким случајевима.
- Сложеност за комплексне задаке: За веома сложене и нестандардне задатке, декларативни приступ може бити мање флексибилан и теже примењив.
Карактеристика | Декларативно програмирање | Императивно програмирање |
---|---|---|
Опис процеса | Описује шта треба урадити, не и како | Описује конкретне кораке који требају бити предузети |
Фокус | На резултату и стању система | На корацима који воде до резултата |
Примена | Управљање подацима, графички интерфејс, web development | Системи са високом потребом за контролом извршења |
Контрола над перформансама | Ограничена, оптимизацију ради окружење | Велика контрола над перформансама |
Пример декларативне парадигме
[уреди]- СКЈУЕЛ : За извођење упита у релационим базама података, програмер може написати:
SELECT * FROM корисници WHERE старост > 18;
Овде се дефинише шта треба добити (сви корисници старији од 18), али не и како ће упит бити извршен.
- ХТМЛ : Структура веб странице може бити изражена као:
<html>
<head><title>Моја веб страница</title></head>
<body><h1>Добродошли!</h1></body>
</html>
Овде, програмер дефинише структуру странице, али не разматра начин на који ће веб прегледач рендеровати страницу.
Историјат декларативног програмирања
[уреди]Декларативно програмирање почиње са раним логичким језицима као што је ЛИСП из 1958. године, који је омогућио већу апстракцију у програмирању. Током 1970-их, Пролог (1972) је популаризовао декларативни приступ у решавању логичких проблема. У 1980-им, развој СКЈУЕЛ језика за рад са базама података додатно је унапредио декларативне методе. Данас се декларативни принципи користе у широком спектру области, од веб развоја (ХТМЛ, ЦСС) до управљања подацима и функционалног програмирања.
Погледај такође
[уреди]Литература
[уреди]- Тарнер, Д. А. (2000). Увод у функционално програмирање кроз ламда рачун. Прентице Хол.
- Члипала, А. (2013). Сертифицирано програмирање са зависним типовима. МИТ Прес.
- Харел, Д. (1987). О моћи простих програмских језика. Спрингер-Верлаг.
- Мејнинг, Џ., и Сандерс, С. (2016). SQL: Потпуна референца. МекГрав-Хил.
- Мејер, Е. (1984). Декларативно програмирање: принципи и пракса. Вили.