Корисник:Филипдј/Приступ који у решавању проблема имају програмске парадигме

Приступ који у решавању проблема имају програмске парадигме

уреди

Увод у Програмске Језике

уреди

Програмски језици су алати који омогућавају људима да комуницирају са рачунарима и другим рачуналним системима како би извршили задатке или решавали проблеме. Они пружају синтаксу и семантику за писање упутстава која рачунари могу интерпретирати и извршити. Програмско инжењерство, као дисциплина, истражује методе за ефикасно креирање, анализу и управљање овим упутствима.

Постоји много врста програмских језика, сваки са својим специфичним парадигматима и приступима. Ови језици се могу класификовати на основу различитих критеријума као што су синтакса, семантика, и начин на који се користе за решавање проблема. Два основна приступа који се користе у програмирању су императивни и декларативни. Док императивни језици наглашавају &qуот;како&qуот; се задатак извршава, декларативни језици се фокусирају на &qуот;шта&qуот; треба постићи.

Декларативни програмски језици

уреди

Декларативни програмски језици представљају приступ програмирању који се фокусира на шта треба постићи, а не на како то постићи. У овом приступу, програмер дефинише жељене резултате или стање које треба постићи, док систем или језик преузима одговорност за конкретно извођење задатка. Ово се разликује од императивног програмирања, где програмер пише детаљне упуте о корацима који треба да се изврше како би се постигао одређени резултат. Декларативни језици често користе високе нивое апстракције и апстрактне изразе за описивање проблема, омогућавајући програмерима да се фокусирају на оно што желе да постигну, а не на техничке детаље о томе како ће се то постићи.

Висока Апстракција

уреди

Једна од најважнијих карактеристика декларативних језика је висока апстракција коју омогућавају. У декларативном програмирању, програмери израђују решења на високом нивоу, без бриге о ниском нивоу имплементације. Ово значи да програмери могу фокусирати своје напоре на логику и циљ, уместо на конкретне операције и кораке.

  • Пример:

У SQL-u, упит за селектовање података из базе података је висок ниво апстракције. Програмер не мора знати како база података интерно претражује табеле или користи индексе за оптимизацију упита. Уместо тога, само специфицира који подаци су му потребни:

SELECT име, презиме 
FROM корисници 
WHERE старост > 30;

Овај ниво апстракције омогућава једноставну форму изражавања намера без потребе за детаљним описивањем процеса извршења.

Декларација Уместо Инструкција

уреди

Декларативни језици се разликују од императивних језика по томе што не диктирају специфичне упуте о томе како се задатак треба извршити. Уместо тога, они се фокусирају на дефинисање односа, услова и образаца.

  • Пример:

У логичким језицима попут Пролога, програмери дефинишу чињенице и правила. Систем користи ове дефиниције за извођење закључивања и проналажење решења.

родитељ(Јован, Марко).
родитељ(Јован, Ана).
отац(X, Y) :- родитељ(X, Y), муж(X).

Уместо да дефинишете алгоритам за проналажење очева, једноставно наводите правило које описује шта значи бити отац, а систем користи логичку инференцију за проналажење решења.

Непроменљиви Подаци

уреди

Многи декларативни језици користе непроменљиве податке. Ово значи да подаци не могу бити промењени након што су креирани; уместо тога, нови подаци се креирају као резултат функција или операција. Овај приступ поједностављује размишљање о стању програма и омогућава боље управљање подацима.

  • Пример: У функционалним језицима као што је Haskell, подаци су непроменљиви:
додајЈедан :: [Int] -> [Int]
додајЈедан = map(+1)

Ова функција не мења оригиналну листу; уместо тога, враћа нову листу у којој је сваки елемент повећан за 1. Овај приступ олакшава разумевање и предвиђање ефеката функција.

Аутоматско Управљање Ресурсима

уреди

Декларативни језици често користе системе који аутоматски управљају ресурсима. Ово укључује оптимизацију извршења и управљање меморијом, што омогућава програмерима да се фокусирају на дефинисање шта треба постићи, а не на техничке детаље.

  • Пример: У SQL-u, систем базе података аутоматски управља ресурсима потребним за извршење упита. Ово може укључивати оптимизацију упита, коришћење индекса и управљање меморијом, све без да програмер мора експлицитно навести те кораке.

Модуларност и Поновна Употреба

уреди

Декларативни језици често омогућавају креирање и коришћење модуларних компоненти које могу бити вишекратно коришћене. Ова модуларност доприноси апстракцији и поновној употреби кода, чинећи код лакшим за одржавање и проширивање.

  • Пример: У функционалним језицима као што је Haskell, можете креирати функције које се могу користити као грађевни блокови за комплексније изразе:
квадратниКорен :: Double -> Double
квадратниКорен x = sqrt x

Ова функција може бити коришћена у различитим контекстима и комбинована са другим функцијама како би се решавали сложенији проблеми.

Специјализовани Конструктори и Изрази

уреди

Декларативни језици често укључују специјализоване конструкторе и изразе који омогућавају изражавање комплексних идеја са једноставним синтаксама. Ови конструктори омогућавају програмерима да изразе намере на веома концизан начин.

  • Пример: У XSLT-u, можете користити образац за трансформацију XML докумената у различите форматне излазе. Дефинишете образац за претворбу, док систем брине о конкретној реализацији:
<xsl:template match="/">
 <html>
  <body>
   <h2>Lista knjiga</h2>
    <ul>
     <xsl:for-each select="knjige/knjiga">
      <li><xsl:value-of 
     select="naslov"/></li>
    </xsl:for-each>
   </ul>
  </body>
 </html>
</xsl:template>
Суштина
уреди

Декларативни програмски језици представљају значајан приступ у програмском инжењерству који омогућава програмерима да се фокусирају на дефинисање шта треба постићи, а не на детаље како ће се то постићи. Овај приступ доноси високу апстракцију, смањује потребу за директном манипулацијом стањима, користи непроменљиве податке, и често омогућава аутоматско управљање ресурсима. Декларативни језици пружају моћне алате за изражавање комплексних идеја на једноставан начин, олакшавајући развој, одржавање и проширивање апликација. Кроз високу модуларност и поновну употребу, они омогућавају ефикасније управљање кодом и олакшавају решавање проблема.