U knjizi "Funkcionalni dizajn", poznati softverski inženjer Robert C. Martin (poznat kao "Ujka Bob") objašnjava primenu funkcionalnog programiranja za izgradnju boljih sistema za krajnje korisnike. Martin poredi konvencionalne objektno-orijentisane strukture koda u Javi sa onima koje omogućava funkcionalno programiranje, identifikuje optimalne uloge za svaki pristup i demonstrira kako unaprediti sistem pažljivim korišćenjem oba pristupa u odgovarajućim kontekstima.
Martinov pristup je pragmatičan, s naglaskom na rešavanju stvarnih problema umesto teorijskog razmatranja. Kroz pristupačne primere, programeri će razumeti kako im jednostavan, semantički bogat jezik Clojure, može pomoći da unaprede čistoću koda, dizajn, disciplinu i rezultate. Martin istražuje poznate SOLID principe i Dizajnerske obrasce Četvoročlane Grupe iz funkcionalne perspektive, te otkriva zašto obrasci i dalje imaju veliku vrednost za funkcionalne programere i kako ih koristiti radi postizanja izuzetnih rezultata.
- Razumevanje osnova funkcionalnog programiranja uključuje koncepte kao što su nemutabilnost (immutability), perzistentni podaci, rekurzija, iteracija, lenjost (laziness) i stanje (statefulness)
- Kontrast funkcionalnog i objektnog pristupa programiranju kroz stručno osmišljene studije slučaja
- Istraživanje funkcionalnih dizajnerskih tehnika za tok podataka
- Korišćenje klasičnih SOLID principa za pisanje boljeg Clojure koda
- Usavršavanje pragmatičnih pristupa funkcionalnom testiranju, korisničkim interfejsima i konkurentnosti
- Upotreba dizajnerskih obrazaca u funkcionalnim okruženjima
- Vodjenje kroz izgradnju enterprise-level Clojure aplikacije
“Funkcionalni dizajn" je kalsik, od samog početka. Bob ističe kako elementi funkcionalnog programiranja čine dizajn softvera jednostavnim, ali i pragmatičnim. On to čini na način koji je prihvatljiv i koristan za programere koji već imaju iskustvo sa C#, C++, ili Javom.” Janet A. Carr, Independent Clojure Consultant
Predgovor xiii
Uvod xv
Zahvalnosti xxi
O autoru xxiii
DEO I: Osnove funkcionalnog programiranja 1
Poglavlje 1: Nepromenljivost 3
- Šta je funkcionalno programiranje? 4
- Problem sa dodeljivanjem 7
- Pa zašto ga nazivamo funkcionalno? 10
- Bez promene stanja? 12
- Nepromenljivost 15
Poglavlje 2: Trajnost podataka 17
- O varanju 19
- Pravljenje kopija 20
- Strukturno deljenje 23
Poglavlje 3: Rekurzija i iteracija 27
- Iteracija 28
- Veoma kratak vodič za Clojure 29
- Iteracija 32
- TCO, Clojure i JVM 32
- Rekurzija 32
Poglavlje 4: Lenjost 37
- Lenjo akumuliranje 40
- U redu, ali zašto? 41
- Završetak 42
Poglavlje 5: Čuvanje stanja 43
- Kada moramo da izvršimo promenu 47
- Softverska transakcijska memorija (STM) 48
- Život je težak, softver je još teži
Deo II: Komparativna analiza 53
Poglavlje 6: Prosti činioci 55
- Verzija za Javu 56
- Verzija za Clojure 60
- Zaključak 63
Poglavlje 7: Igra kuglanja 65
- Verzija za Javu 66
- Verzija za Clojure 71
- Zaključak 75
Poglavlje 8: Ogovaranje među vozačima autobusa 77
- Java rešenje 78
- Klasa Driver 84
- Klasa Route 85
- Klasa Stop 85
- Klasa Rumor 86
- Klasa Simulation 87
- Clojure 88
- Zaključak 93
Poglavlje 9: Objektno-orijentisano programiranje 95
- Funkcionalan platni spisak 98
- Prostori imena i izvorne datoteke 107
- Zaključak
Poglavlje 10: Tipovi 109
Deo III: Funkcionalni dizajn 115
Poglavlje 11: Protok podataka 117
Poglavlje 12: SOLID 125
- Princip jedinstvene odgovornosti (SRP) 126
- Princip otvorenosti i zatvorenosti (OCP) 131
- Funkcije 133
- Objekti sa virtuelnim tabelama 134
- Multimetodi 135
- Nezavisna implementacija 136
- Liskovin princip zamene (LSP) 138
- ISA pravilo 142
- Nipošto! 145
- Pravilo reprezentacije 146
- Princip razdvajanja interfejsa (ISP) 147
- Nemojte da zavisite od stvari koje vam nisu potrebne 150
- Zašto? 151
- Zaključak 151
- Princip inverzije zavisnosti (DIP) 152
- Povratak u prošlost 155
- Kršenje DIP principa 165
- Zaključak
Deo IV: Funkcionalni pragmatizam 181
Poglavlje 13: Testovi 183
- A REPL? Šta ćemo sa tim? 184
- Šta je sa lažnim objektima? 184
- Testiranje zasnovano na svojstvima 186
- Tehnika dijagnostike 190
- Funkcionalno 197
Poglavlje 14: Grafički korisnički interfejs 199
- Crtanje uz pomoć kornjače za biblioteku Quil
Poglavlje 15: Konkurentnost 215
Deo V: Projektni obrasci 227
Poglavlje 16: Pregled projektnih obrazaca 229
- Obrasci u funkcionalnom programiranju 233
- Obrazac Apstraktan poslužitelj 233
- Obrazac Adapter 236
- Da li je to zaista objekat adapter? 241
- Obrazac Komanda 242
- Obrazac Sastav 249
- Obrazac Dekorater 260
- Obrazac Posetilac 264
- Zatvoriti ili Clojure? 267
- Problem 90 stepeni 270
- Obrazac Apstraktna fabrika 274
- Ponovo 90 stepeni 279
- Sigurnost tipova? 281
- Zaključak 281
Dodatak: OO otrov? 282
Deo VI: Studija slučaja 285
Poglavlje 17: Wa-Tor 287
- Počeši se 309
- Tuš je rešenje problema 312
- Faza intenzivne reprodukcije 322
- Šta ćemo sa ajkulama? 324
- Zaključak 335
Pogovor 337
Indeks 339