Upload
pehapkari
View
92
Download
2
Embed Size (px)
Citation preview
Programovací paradigmata
Marian Benčat
2
Marian Benčat• Programátor • „Ten hater“
3
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“
4
Prozření
„V kariéře každého dobrého programátora nastane okamžik, kdy si uvědomí, že neexistuje nejlepší tool.“
5
Rychlé rozdělení paradigmat• Imperativní• OOP• Procedurální
• Deklarativní• Funkcionální• Logické
6
Deklarativní vs. Imperativní• Funkcionální se zaměřuje na to „co“ chceme udělat• Imperativní na to „jak“ to chceme udělat P1
7
OOP a setkání s reálnými projekty• Abstrakce • ORM• DAL (Data access layer) P2
EnkapsulaceORMUI
Výkon? P3
8
9
Na vysoké škole…
„Má to garbage collector, tak se nemusíš zajímat o paměť“, říkali…….
„Bude to sranda“, říkali…
10
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
11
RDM
12
Anemic
13
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
14
Anemic?• API• Expose databáze
15
Funkcionální programování - principy• Pure functions• Immutability• Honest code• Stateless• Avoid-primitive obsession• Composition P1
• Rail-way programming
16
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
17
Side effecty a exception recovery- Funcionalita vykoná side effect (Stream, store, queue,..)
- Vyvolá exception- Chceme to zkusit znovu- Co skryté závislosti?
18
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
19http://enterprisecraftsmanship.com/2016/05/12/immutable-architecture/
20
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
21
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;}
22
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
23
Honest functions
24
Exceptions vs. GOTO• Kdy použít exceptiony?• Je tedy GOTO špatné?
25
Honest functions
26
Honest functions
27
Ne příliš patrné problémy se stavem
28
Ne příliš patrné problémy se stavem
29
Primitive obsession
30
Primitive obsession
31
Railway-oriented programmingtype Result<'TSuccess, 'TFailure> = | Success of 'TSuccess | Failure of 'Tfailure Promise.then(succ=>{},err=> {
} );
32
Railway-oriented programming
http://enterprisecraftsmanship.com/2015/03/20/functional-c-handling-failures-input-errors/