Korisnik:Filipdj/Pristup koji u rešavanju problema imaju programske paradigme

Pristup koji u rešavanju problema imaju programske paradigme

uredi

Uvod u Programske Jezike

uredi

Programski jezici su alati koji omogućavaju ljudima da komuniciraju sa računarima i drugim računalnim sistemima kako bi izvršili zadatke ili rešavali probleme. Oni pružaju sintaksu i semantiku za pisanje uputstava koja računari mogu interpretirati i izvršiti. Programsko inženjerstvo, kao disciplina, istražuje metode za efikasno kreiranje, analizu i upravljanje ovim uputstvima.

Postoji mnogo vrsta programskih jezika, svaki sa svojim specifičnim paradigmatima i pristupima. Ovi jezici se mogu klasifikovati na osnovu različitih kriterijuma kao što su sintaksa, semantika, i način na koji se koriste za rešavanje problema. Dva osnovna pristupa koji se koriste u programiranju su imperativni i deklarativni. Dok imperativni jezici naglašavaju "kako" se zadatak izvršava, deklarativni jezici se fokusiraju na "šta" treba postići.

Deklarativni programski jezici

uredi

Deklarativni programski jezici predstavljaju pristup programiranju koji se fokusira na šta treba postići, a ne na kako to postići. U ovom pristupu, programer definiše željene rezultate ili stanje koje treba postići, dok sistem ili jezik preuzima odgovornost za konkretno izvođenje zadatka. Ovo se razlikuje od imperativnog programiranja, gde programer piše detaljne upute o koracima koji treba da se izvrše kako bi se postigao određeni rezultat. Deklarativni jezici često koriste visoke nivoe apstrakcije i apstraktne izraze za opisivanje problema, omogućavajući programerima da se fokusiraju na ono što žele da postignu, a ne na tehničke detalje o tome kako će se to postići.

Visoka Apstrakcija

uredi

Jedna od najvažnijih karakteristika deklarativnih jezika je visoka apstrakcija koju omogućavaju. U deklarativnom programiranju, programeri izrađuju rešenja na visokom nivou, bez brige o niskom nivou implementacije. Ovo znači da programeri mogu fokusirati svoje napore na logiku i cilj, umesto na konkretne operacije i korake.

  • Primer:

U SQL-u, upit za selektovanje podataka iz baze podataka je visok nivo apstrakcije. Programer ne mora znati kako baza podataka interno pretražuje tabele ili koristi indekse za optimizaciju upita. Umesto toga, samo specificira koji podaci su mu potrebni:

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

Ovaj nivo apstrakcije omogućava jednostavnu formu izražavanja namera bez potrebe za detaljnim opisivanjem procesa izvršenja.

Deklaracija Umesto Instrukcija

uredi

Deklarativni jezici se razlikuju od imperativnih jezika po tome što ne diktiraju specifične upute o tome kako se zadatak treba izvršiti. Umesto toga, oni se fokusiraju na definisanje odnosa, uslova i obrazaca.

  • Primer:

U logičkim jezicima poput Prologa, programeri definišu činjenice i pravila. Sistem koristi ove definicije za izvođenje zaključivanja i pronalaženje rešenja.

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

Umesto da definišete algoritam za pronalaženje očeva, jednostavno navodite pravilo koje opisuje šta znači biti otac, a sistem koristi logičku inferenciju za pronalaženje rešenja.

Nepromenljivi Podaci

uredi

Mnogi deklarativni jezici koriste nepromenljive podatke. Ovo znači da podaci ne mogu biti promenjeni nakon što su kreirani; umesto toga, novi podaci se kreiraju kao rezultat funkcija ili operacija. Ovaj pristup pojednostavljuje razmišljanje o stanju programa i omogućava bolje upravljanje podacima.

  • Primer: U funkcionalnim jezicima kao što je Haskell, podaci su nepromenljivi:
додајЈедан :: [Int] -> [Int]
додајЈедан = map(+1)

Ova funkcija ne menja originalnu listu; umesto toga, vraća novu listu u kojoj je svaki element povećan za 1. Ovaj pristup olakšava razumevanje i predviđanje efekata funkcija.

Automatsko Upravljanje Resursima

uredi

Deklarativni jezici često koriste sisteme koji automatski upravljaju resursima. Ovo uključuje optimizaciju izvršenja i upravljanje memorijom, što omogućava programerima da se fokusiraju na definisanje šta treba postići, a ne na tehničke detalje.

  • Primer: U SQL-u, sistem baze podataka automatski upravlja resursima potrebnim za izvršenje upita. Ovo može uključivati optimizaciju upita, korišćenje indeksa i upravljanje memorijom, sve bez da programer mora eksplicitno navesti te korake.

Modularnost i Ponovna Upotreba

uredi

Deklarativni jezici često omogućavaju kreiranje i korišćenje modularnih komponenti koje mogu biti višekratno korišćene. Ova modularnost doprinosi apstrakciji i ponovnoj upotrebi koda, čineći kod lakšim za održavanje i proširivanje.

  • Primer: U funkcionalnim jezicima kao što je Haskell, možete kreirati funkcije koje se mogu koristiti kao građevni blokovi za kompleksnije izraze:
квадратниКорен :: Double -> Double
квадратниКорен x = sqrt x

Ova funkcija može biti korišćena u različitim kontekstima i kombinovana sa drugim funkcijama kako bi se rešavali složeniji problemi.

Specijalizovani Konstruktori i Izrazi

uredi

Deklarativni jezici često uključuju specijalizovane konstruktore i izraze koji omogućavaju izražavanje kompleksnih ideja sa jednostavnim sintaksama. Ovi konstruktori omogućavaju programerima da izraze namere na veoma koncizan način.

  • Primer: U XSLT-u, možete koristiti obrazac za transformaciju XML dokumenata u različite formatne izlaze. Definišete obrazac za pretvorbu, dok sistem brine o konkretnoj realizaciji:
<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>
Suština
uredi

Deklarativni programski jezici predstavljaju značajan pristup u programskom inženjerstvu koji omogućava programerima da se fokusiraju na definisanje šta treba postići, a ne na detalje kako će se to postići. Ovaj pristup donosi visoku apstrakciju, smanjuje potrebu za direktnom manipulacijom stanjima, koristi nepromenljive podatke, i često omogućava automatsko upravljanje resursima. Deklarativni jezici pružaju moćne alate za izražavanje kompleksnih ideja na jednostavan način, olakšavajući razvoj, održavanje i proširivanje aplikacija. Kroz visoku modularnost i ponovnu upotrebu, oni omogućavaju efikasnije upravljanje kodom i olakšavaju rešavanje problema.