SlideShare una empresa de Scribd logo
1 de 32
Programovací paradigmata
Marian Benčat
Marian Benčat
• Programátor 
• „Ten hater“
2
O přednášce
• Co nezazní?
• OOP je nejlepší
• Funkcionální programování je nejlepší
• …. je nejlepší….
„good luck for those, who are left behind“
3
Prozření
„V kariéře každého dobrého programátora nastane
okamžik, kdy si uvědomí, že neexistuje nejlepší tool.“
4
Rychlé rozdělení paradigmat
• Imperativní
• OOP
• Procedurální
• Deklarativní
• Funkcionální
• Logické
5
Deklarativní vs. Imperativní
• Funkcionální se zaměřuje na to „co“ chceme udělat
• Imperativní na to „jak“ to chceme udělat P1
6
OOP a setkání s reálnými projekty
• Abstrakce
• ORM
• DAL (Data access layer) P2
Enkapsulace
ORM
UI
Výkon? P3
7
8
Na vysoké škole…
„Má to garbage collector, tak se nemusíš zajímat o paměť“, říkali…
….
„Bude to sranda“, říkali…
9
Anemic vs Rich Domain Model
• Anemic
• Doménové modely pouze nosiči dat (PDO, DTO, OPDO, POD,..)
• Logika v servisách (manažerech)
• OOP papaláši považováno za anti-pattern
• RDM
• Doménové modely obsahují veškerou logiku a jsou nosiči dat (enkapsulace)
• Servisy slouží pouze jako „UI fasády“
• OOP papaláši vyzdvihován
10
RDM
11
Anemic
12
Anemic vs Rich Domain Model
• A co na to SOLID?
• Single responsibility principle
• Open/closed principle
• Liskov substitution principle
• Interface segregation principle
• Dependency inversion principle
13
Anemic?
• API
• Expose databáze
14
Funkcionální programování - principy
• Pure functions
• Immutability
• Honest code
• Stateless
• Avoid-primitive obsession
• Composition P1
• Rail-way programming
15
Pure functions
• Output = fce(Input)
• Pro stejné vstupy dostáváme vždy
stejné výstupy
• Není závislá na ničem jiném, než jsou
vstupy
• Nemá žádné side effecty
• Pointa v odstranění stavu
• Výhody:
• Testovatelnost
• Exceptions rejuvenate
16
Side effecty a exception recovery
- Funcionalita vykoná side effect (Stream, store, queue,..)
- Vyvolá exception
- Chceme to zkusit znovu
- Co skryté závislosti?
17
Immutability
• Po vytvoření nelze objekt už měnit
• Eliminuje side efekty
• Jde to vždy? Co FS? Co Databáze?
• Immutable core x mutable shell
• Nevýhody?
• Výkon
• Překážky
18
19http://enterprisecraftsmanship.com/2016/05/12/immutable-architecture/
Immutable conflict
Immutable core:
Void Add(car);
ChangeRequest<Car> Add(car);
Mutable shell:
db.save(List<ChangeRequest<T>>);
Integrační testy? Pustíme immutable shellem a
vyflusnuté artefakty můžeme otestovat
20
Honest functions
• int Divide(int a, int b) {
if (b==0) throw new ArgumentException();
return a / b;
}
• int Max(int [] arr) { // Max(); -> -infinite 
var max = Int.Min;
for(…) {
if(…) max = arr[i];
}
return max;
}
21
Honest functions
• int Divide(int a, int b); // throws exceptions
• int Max(int [] arr);
• int? Max(int [] arr);
• void Save(Car car);
• To vždycky klapne 
22
Honest functions
23
Exceptions vs. GOTO
24
• Kdy použít exceptiony?
• Je tedy GOTO špatné?
Honest functions
25
Honest functions
26
Ne příliš patrné problémy se stavem
27
Ne příliš patrné problémy se stavem
28
Primitive obsession
29
Primitive obsession
30
Railway-oriented programming
31
type Result<'TSuccess, 'TFailure> =
| Success of 'TSuccess
| Failure of 'Tfailure
Promise
.then(succ=>{
},
err=> {
} );
Railway-oriented programming
32
http://enterprisecraftsmanship.com/201
5/03/20/functional-c-handling-failures-
input-errors/

Más contenido relacionado

Más de Péhápkaři

Más de Péhápkaři (20)

PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]
 
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
 
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
 
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
 
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...
 
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
 
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
 
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
 
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
 
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
 
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
 
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
 
Karel Škopek - WordPress + Laravel = &lt;3 (4. sraz přátel Symfony v Praze)
Karel Škopek - WordPress + Laravel = &lt;3 (4. sraz přátel Symfony v Praze)Karel Škopek - WordPress + Laravel = &lt;3 (4. sraz přátel Symfony v Praze)
Karel Škopek - WordPress + Laravel = &lt;3 (4. sraz přátel Symfony v Praze)
 
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
 
Tomáš Fejfar - Elk - Víc než jen logy (4. sraz přátel Symfony v Praze)
Tomáš Fejfar - Elk - Víc než jen logy (4. sraz přátel Symfony v Praze)Tomáš Fejfar - Elk - Víc než jen logy (4. sraz přátel Symfony v Praze)
Tomáš Fejfar - Elk - Víc než jen logy (4. sraz přátel Symfony v Praze)
 
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
 
Jan Klat - Skrz.cz - Jak rozjet největší vyhledávač slev na Symfony? (2. sraz...
Jan Klat - Skrz.cz - Jak rozjet největší vyhledávač slev na Symfony? (2. sraz...Jan Klat - Skrz.cz - Jak rozjet největší vyhledávač slev na Symfony? (2. sraz...
Jan Klat - Skrz.cz - Jak rozjet největší vyhledávač slev na Symfony? (2. sraz...
 
Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symf...
Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symf...Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symf...
Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symf...
 
Tomáš Votruba - Jak přežít Symfony 3 (1. sraz přátel Symfony v Praze)
Tomáš Votruba - Jak přežít Symfony 3 (1. sraz přátel Symfony v Praze)Tomáš Votruba - Jak přežít Symfony 3 (1. sraz přátel Symfony v Praze)
Tomáš Votruba - Jak přežít Symfony 3 (1. sraz přátel Symfony v Praze)
 

Čtvrtkon #53 - Marian Benčat