SlideShare a Scribd company logo
FunkcionalnoFunkcionalno programiranjeprogramiranje
UvodUvod
-- Funkcionalno programiranje --
ETF Beograd 2017.
FunkcionalnoFunkcionalno programiranjeprogramiranje -- uvoduvod
• Razlike u odnosu na druge paradigme u programiranju
– nepromenljivi (nemutabilni) parametri funkcija
• funkcije služe za preslikavanje ulaznih podataka u izlazne
– funkcije su "građani prvog reda"
• postoje funkcijski literali, promenljive
• funkcije mogu biti prenete kao parametri drugih funkcija
• funkcije mogu da vrate funkcije kao svoje rezultate
• Scala
– objedinjuje koncepte OO, imperativ. i funkc. programiranja
– "skalira" sa potrebama programera
• može se koristiti za pisanje malih skripti
• može se koristiti za pisanje složenih softverskih sistema
-- Funkcionalno programiranje --
ETF Beograd 2017.
Genealoško stablo nekihGenealoško stablo nekih
programskih jezikaprogramskih jezika
http://www.slideshare.net/InfinITnetvaerk/a-history-of-nordic-compilers-and-autocodes
-- Funkcionalno programiranje --
ETF Beograd 2017.
Strukturiranost i namena jezikaStrukturiranost i namena jezika
http://erikengbrecht.blogspot.rs/2008/01/programming-language-continuum.html
-- Funkcionalno programiranje --
ETF Beograd 2017.
ParadigmeParadigme uu programiranjuprogramiranju
• Paradigma:
– ono šta služi kao obrazac ili model
– skup pretpostavki, koncepata, vrednosti – način razmišljanja
– ►obrazac koji služi kao pravac razmišljanja u programiranju
• Glavne paradigme• Glavne paradigme
– imperativno programiranje
– funkcionalno programiranje
– logičko programiranje
• Ortogonalno na glavne paradigme
– objektno-orijentisano programiranje
-- Funkcionalno programiranje --
ETF Beograd 2017.
Imperativno programiranjeImperativno programiranje
• Programira se upotrebom:
– promenljivih (varijabli)
– dodela
– kontrolnih struktura (uslovna grananja, ciklusi, ...)
• Dva načina konceptualizacije programa• Dva načina konceptualizacije programa
– sekvenca instrukcija (za von Neumann-ovu mašinu)
• programer navodi svaku instrukciju
– relacija između predikata
• uspostavljaju se logički uslovi nad podacima u vidu predikata, mat. formulacija
• Nedostaci:
– loša skalabilnost programa
– ograničenost principima koje je uveo von Neumann
-- Funkcionalno programiranje --
ETF Beograd 2017.
FunkcionalnoFunkcionalno programiranjeprogramiranje
• U užem smislu:
– programiranje bez promenljivih, dodela ili kontrolnih struktura
• U širem smislu:
– programiranje sa akcentom na upotrebi funkcija
• Funkcije postaju vrednosti koje se
– proizvode– proizvode
– konzumiraju
– sastavljaju
• Funkcionalan jezik pojednostavljuje ovakav pristup
– funkcije mogu biti definisane unutar drugih funkcija
– funkcije mogu biti parametri i rezultati drugih funkcija
– postoje osnovne operacije koje omogućavaju sastavljanje funkcija
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (1/4)Poređenje Java/Scala (1/4)
Java
Scala
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (2/4)Poređenje Java/Scala (2/4)
Person[] people;
Person[] minors;
Person[] adults;
...
{
ArrayList<Person> minorsList = new ArrayList<>();
ArrayList<Person> adultsList = new ArrayList<>();
for(int i = 0; i < people.length; i++)
(people[i].age < 18 ? minorsList : adultsList)
.add(people[i]);
Java
.add(people[i]);
minors = minorsList.toArray(people);
adults = adultsList.toArray(people);
}
Scala val people: Array[Person]
val (minors, adults) = people partition (_.age < 18)
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (3/4)Poređenje Java/Scala (3/4)
Person[] people;
Person[] minors;
Person[] adults;
...
{
ArrayList<Person> minorsList = new ArrayList<>();
ArrayList<Person> adultsList = new ArrayList<>();
for(int i = 0; i < people.length; i++)
(people[i].age < 18 ? minorsList : adultsList)
.add(people[i]);
Java
.add(people[i]);
minors = minorsList.toArray(people);
adults = adultsList.toArray(people);
}
// Kako paralelizovati?
Scala val people: Array[Person]
val (minors, adults) = people.par.par partition (_.age < 18)
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (4/4)Poređenje Java/Scala (4/4)
• Novije verzije Jave su donele koncepte
iz funkcionalnog programiranja
– lambda funkcije
– tokove (stream) za podršku paralelnoj obradi
• To ukazuje na trendove povećanog interesa za FP• To ukazuje na trendove povećanog interesa za FP
• Međutim
– sam jezik Java je i dalje veoma eksplicitan
– nije koncipiran oko ideje funkcionalnog programiranja
– nije proširljiv tako da proširenja deluju kao deo osnovnog jezika
-- Funkcionalno programiranje --
ETF Beograd 2017.
ScalaScala
• Jezik razvijen u EPFL (Martin Odersky)
– Poseduje sve konstrukte funkcionalnih jezika
– Statičko tipiziranje
– Objektno-orijentisan jezik
– Funkcioniše na JVM, interoperabilnost sa Javom
– Adaptiran za simbolički račun– Adaptiran za simbolički račun
– Adaptiran za paralelno izvršavanje
• Kao i svaki netrivijalni jezik, poseduje:
– primitivne izraze – najjednostavnije entitete kojima se manipuliše
– sredstvo kombinovanja – za sastavljanje složenih elemenata
od jednostavnih
– sredstvo apstrakcije – za imenovanje elemenata
i njihovo upravljanje kao da su osnovni
-- Funkcionalno programiranje --
ETF Beograd 2017.
Prednosti FPPrednosti FP
• Manje pisanja koda
– jednostavnije za razumevanje (ali zahteva veliko predznanje)
– jednostavnije za održavanje, povećava produktivnost
• Nema bočnih efekata
– podaci "ulaze" u funkcije, ali ih funkcije ne menjaju
– jednostavnije za razumevanje– jednostavnije za razumevanje
– reupotrebljivost koda
• Rekurzija
– prirodna kontrolna struktura u funkcionalnim jezicima
– alternativa za cikluse u imperativnim jezicima
-- Funkcionalno programiranje --
ETF Beograd 2017.
Mane FPMane FP
• Ulaz i izlaz
– prirodna je protočna obrada, ne odgovara stilu FP
• Složeniji razvoj interaktivnih aplikacija
– zasnivaju se na ciklusima zahtev/odgovor
– inicira korisnik
• Programi koji se izvršavaju u ciklusu su složeniji za razvoj• Programi koji se izvršavaju u ciklusu su složeniji za razvoj
• Manja efikasnost na modernom hardveru
– FP je dominantno bio zastupljen u akademiji, gde performanse nisu bile
od velikog značaja
• Nije orijentisano ka podacima
– dohvatanje, manipulisanja i vraćanje podataka (baze podataka)
– OO pristup je prirodniji
-- Funkcionalno programiranje --
ETF Beograd 2017.
RadnoRadno okruokruženježenje
• REPL (Read-Eval-Print-Loop)
• IDE (ScalaIDE, Eclipse, NetBeans, IntelliJ)
• http://www.scala-lang.org
-- Funkcionalno programiranje --
ETF Beograd 2017.

More Related Content

PPTX
Mangan i hrom
PDF
Metoda oksidoredukcije, Permanganometrija
PPT
Лекція "Запалення" 2 частина
PDF
Фармакопеја Ph.jug.IV volumen II (Materia medica)
PPTX
L197 - Hemija - Dobijanje celuloze i proizvodnja hartije –Nikola Milenković -...
PDF
formulae-magistrales-et-reagentia III
PDF
Rjesenja hemija ii razred
DOC
81276659 valenca-i-oksidacioni-broj
Mangan i hrom
Metoda oksidoredukcije, Permanganometrija
Лекція "Запалення" 2 частина
Фармакопеја Ph.jug.IV volumen II (Materia medica)
L197 - Hemija - Dobijanje celuloze i proizvodnja hartije –Nikola Milenković -...
formulae-magistrales-et-reagentia III
Rjesenja hemija ii razred
81276659 valenca-i-oksidacioni-broj

What's hot (20)

PPTX
Ciklus limunske kiseline (Krebsov ciklus)
PDF
120457870 lipidi
PPT
Израчунавања у хемији (Стехиометрија)
PPSX
Lokalno liječenje dermatoza
PPSX
Naponski niz metala
PPTX
Karboksilne kiseline
PPT
хвороби периферичних нервів
PPSX
Oštećenje stanice
PDF
Kreativno rješavanje konflikta u učionici materijali
PPT
Дисоціація кислот, основ, солей
PDF
Nukleinske kiseline
PPSX
Disaharidi i polisaharidi
PDF
4. Fotosinteza i disanje.pdf
PPT
патофізіологія печінки
PDF
Prva pomoc prirucnik
PPSX
Metabolička acidoza i alkaloza
DOCX
Pamcenje i zaboravljanje
PPTX
Razlomci - pojam
PPTX
Metabolizam ugljenih-hidrata
PDF
Analitika anioni
Ciklus limunske kiseline (Krebsov ciklus)
120457870 lipidi
Израчунавања у хемији (Стехиометрија)
Lokalno liječenje dermatoza
Naponski niz metala
Karboksilne kiseline
хвороби периферичних нервів
Oštećenje stanice
Kreativno rješavanje konflikta u učionici materijali
Дисоціація кислот, основ, солей
Nukleinske kiseline
Disaharidi i polisaharidi
4. Fotosinteza i disanje.pdf
патофізіологія печінки
Prva pomoc prirucnik
Metabolička acidoza i alkaloza
Pamcenje i zaboravljanje
Razlomci - pojam
Metabolizam ugljenih-hidrata
Analitika anioni
Ad

Viewers also liked (20)

PPT
Projektovanje web aplikacija
PPT
Uvod u softversko inženjerstvo
ODP
Šta je Bootstrap?
PPT
Starenje softvera
PPT
Uvod u objektno orijentisano programiranje i C++
PPT
Refaktorisanje
PPTX
Uvod u programiranje i programski jezik Python
PPTX
Terminski racun
PDF
Programiranje je samo pola price
PDF
Nabavka prezentacija
PDF
Repurposed machinery
PDF
AyleenLA Creative Marketing
DOC
Lwevoola C.V Jan 2013 (1)-
DOCX
Resume July 21
PPSX
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...
PPTX
Wordpress - Sistem za upravljanje sadržajem na webu
PDF
May The Nodejs Be With You
PPTX
Javascript #4 - Startit Centar Indjija
PPTX
Javascript #3 - StartIt centar Indjija
Projektovanje web aplikacija
Uvod u softversko inženjerstvo
Šta je Bootstrap?
Starenje softvera
Uvod u objektno orijentisano programiranje i C++
Refaktorisanje
Uvod u programiranje i programski jezik Python
Terminski racun
Programiranje je samo pola price
Nabavka prezentacija
Repurposed machinery
AyleenLA Creative Marketing
Lwevoola C.V Jan 2013 (1)-
Resume July 21
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...
Wordpress - Sistem za upravljanje sadržajem na webu
May The Nodejs Be With You
Javascript #4 - Startit Centar Indjija
Javascript #3 - StartIt centar Indjija
Ad

Similar to Uvod u funkcionalno programiranje (11)

PPTX
PDF
Uvod u sql
PPTX
ICK7-L1.pptx
PDF
Iir oracle baza podataka xe
PDF
Pitanja kss (1)
PPSX
Decouple Goals
PPT
Programski jezici u IT
PPTX
Карактеристике ЈАVA програмског језика.pptx
PDF
Magistarska teza - prezentacija
PDF
2019 StartIT - Symfony i 12 factor arhitektura
PDF
Programski jezik C++ sa rešenim zadacim
Uvod u sql
ICK7-L1.pptx
Iir oracle baza podataka xe
Pitanja kss (1)
Decouple Goals
Programski jezici u IT
Карактеристике ЈАVA програмског језика.pptx
Magistarska teza - prezentacija
2019 StartIT - Symfony i 12 factor arhitektura
Programski jezik C++ sa rešenim zadacim

Uvod u funkcionalno programiranje

  • 2. FunkcionalnoFunkcionalno programiranjeprogramiranje -- uvoduvod • Razlike u odnosu na druge paradigme u programiranju – nepromenljivi (nemutabilni) parametri funkcija • funkcije služe za preslikavanje ulaznih podataka u izlazne – funkcije su "građani prvog reda" • postoje funkcijski literali, promenljive • funkcije mogu biti prenete kao parametri drugih funkcija • funkcije mogu da vrate funkcije kao svoje rezultate • Scala – objedinjuje koncepte OO, imperativ. i funkc. programiranja – "skalira" sa potrebama programera • može se koristiti za pisanje malih skripti • može se koristiti za pisanje složenih softverskih sistema -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 3. Genealoško stablo nekihGenealoško stablo nekih programskih jezikaprogramskih jezika http://www.slideshare.net/InfinITnetvaerk/a-history-of-nordic-compilers-and-autocodes -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 4. Strukturiranost i namena jezikaStrukturiranost i namena jezika http://erikengbrecht.blogspot.rs/2008/01/programming-language-continuum.html -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 5. ParadigmeParadigme uu programiranjuprogramiranju • Paradigma: – ono šta služi kao obrazac ili model – skup pretpostavki, koncepata, vrednosti – način razmišljanja – ►obrazac koji služi kao pravac razmišljanja u programiranju • Glavne paradigme• Glavne paradigme – imperativno programiranje – funkcionalno programiranje – logičko programiranje • Ortogonalno na glavne paradigme – objektno-orijentisano programiranje -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 6. Imperativno programiranjeImperativno programiranje • Programira se upotrebom: – promenljivih (varijabli) – dodela – kontrolnih struktura (uslovna grananja, ciklusi, ...) • Dva načina konceptualizacije programa• Dva načina konceptualizacije programa – sekvenca instrukcija (za von Neumann-ovu mašinu) • programer navodi svaku instrukciju – relacija između predikata • uspostavljaju se logički uslovi nad podacima u vidu predikata, mat. formulacija • Nedostaci: – loša skalabilnost programa – ograničenost principima koje je uveo von Neumann -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 7. FunkcionalnoFunkcionalno programiranjeprogramiranje • U užem smislu: – programiranje bez promenljivih, dodela ili kontrolnih struktura • U širem smislu: – programiranje sa akcentom na upotrebi funkcija • Funkcije postaju vrednosti koje se – proizvode– proizvode – konzumiraju – sastavljaju • Funkcionalan jezik pojednostavljuje ovakav pristup – funkcije mogu biti definisane unutar drugih funkcija – funkcije mogu biti parametri i rezultati drugih funkcija – postoje osnovne operacije koje omogućavaju sastavljanje funkcija -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 8. Poređenje Java/Scala (1/4)Poređenje Java/Scala (1/4) Java Scala -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 9. Poređenje Java/Scala (2/4)Poređenje Java/Scala (2/4) Person[] people; Person[] minors; Person[] adults; ... { ArrayList<Person> minorsList = new ArrayList<>(); ArrayList<Person> adultsList = new ArrayList<>(); for(int i = 0; i < people.length; i++) (people[i].age < 18 ? minorsList : adultsList) .add(people[i]); Java .add(people[i]); minors = minorsList.toArray(people); adults = adultsList.toArray(people); } Scala val people: Array[Person] val (minors, adults) = people partition (_.age < 18) -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 10. Poređenje Java/Scala (3/4)Poređenje Java/Scala (3/4) Person[] people; Person[] minors; Person[] adults; ... { ArrayList<Person> minorsList = new ArrayList<>(); ArrayList<Person> adultsList = new ArrayList<>(); for(int i = 0; i < people.length; i++) (people[i].age < 18 ? minorsList : adultsList) .add(people[i]); Java .add(people[i]); minors = minorsList.toArray(people); adults = adultsList.toArray(people); } // Kako paralelizovati? Scala val people: Array[Person] val (minors, adults) = people.par.par partition (_.age < 18) -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 11. Poređenje Java/Scala (4/4)Poređenje Java/Scala (4/4) • Novije verzije Jave su donele koncepte iz funkcionalnog programiranja – lambda funkcije – tokove (stream) za podršku paralelnoj obradi • To ukazuje na trendove povećanog interesa za FP• To ukazuje na trendove povećanog interesa za FP • Međutim – sam jezik Java je i dalje veoma eksplicitan – nije koncipiran oko ideje funkcionalnog programiranja – nije proširljiv tako da proširenja deluju kao deo osnovnog jezika -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 12. ScalaScala • Jezik razvijen u EPFL (Martin Odersky) – Poseduje sve konstrukte funkcionalnih jezika – Statičko tipiziranje – Objektno-orijentisan jezik – Funkcioniše na JVM, interoperabilnost sa Javom – Adaptiran za simbolički račun– Adaptiran za simbolički račun – Adaptiran za paralelno izvršavanje • Kao i svaki netrivijalni jezik, poseduje: – primitivne izraze – najjednostavnije entitete kojima se manipuliše – sredstvo kombinovanja – za sastavljanje složenih elemenata od jednostavnih – sredstvo apstrakcije – za imenovanje elemenata i njihovo upravljanje kao da su osnovni -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 13. Prednosti FPPrednosti FP • Manje pisanja koda – jednostavnije za razumevanje (ali zahteva veliko predznanje) – jednostavnije za održavanje, povećava produktivnost • Nema bočnih efekata – podaci "ulaze" u funkcije, ali ih funkcije ne menjaju – jednostavnije za razumevanje– jednostavnije za razumevanje – reupotrebljivost koda • Rekurzija – prirodna kontrolna struktura u funkcionalnim jezicima – alternativa za cikluse u imperativnim jezicima -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 14. Mane FPMane FP • Ulaz i izlaz – prirodna je protočna obrada, ne odgovara stilu FP • Složeniji razvoj interaktivnih aplikacija – zasnivaju se na ciklusima zahtev/odgovor – inicira korisnik • Programi koji se izvršavaju u ciklusu su složeniji za razvoj• Programi koji se izvršavaju u ciklusu su složeniji za razvoj • Manja efikasnost na modernom hardveru – FP je dominantno bio zastupljen u akademiji, gde performanse nisu bile od velikog značaja • Nije orijentisano ka podacima – dohvatanje, manipulisanja i vraćanje podataka (baze podataka) – OO pristup je prirodniji -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 15. RadnoRadno okruokruženježenje • REPL (Read-Eval-Print-Loop) • IDE (ScalaIDE, Eclipse, NetBeans, IntelliJ) • http://www.scala-lang.org -- Funkcionalno programiranje -- ETF Beograd 2017.