Successfully reported this slideshow.
Your SlideShare is downloading. ×

Not-So-Object Oriented Programming

Ad

Programowanie nie do końca obiektowe
…czyli kilka sposobów na przeżycie bez klas.
Przemek Smyrdek

Ad

Jak programujemy?
Imperatywnie Deklaratywnie
Proceduralnie LogicznieObiektowo Funkcyjnie

Ad

Obiektowo jest wporzo.
Klasy odwzorowują obiekty biznesowe
Działanie metod jest przewidywalne
OOP wspiera dobre praktyki

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 54 Ad
1 of 54 Ad

Not-So-Object Oriented Programming

Download to read offline

Introduction to functional programming. Learn more about background of this approach, see pros and cons or just try to be nice ;) Some demos from RxJS and F# included.

Introduction to functional programming. Learn more about background of this approach, see pros and cons or just try to be nice ;) Some demos from RxJS and F# included.

Advertisement
Advertisement

More Related Content

Advertisement

Not-So-Object Oriented Programming

  1. 1. Programowanie nie do końca obiektowe …czyli kilka sposobów na przeżycie bez klas. Przemek Smyrdek
  2. 2. Jak programujemy? Imperatywnie Deklaratywnie Proceduralnie LogicznieObiektowo Funkcyjnie
  3. 3. Obiektowo jest wporzo. Klasy odwzorowują obiekty biznesowe Działanie metod jest przewidywalne OOP wspiera dobre praktyki
  4. 4. To prawda, ale…
  5. 5. Ukryte wejścia / wyjścia Efekty uboczne
  6. 6. Stan algorytmu / klasy / etc.
  7. 7. Modyfikacja (mutacja) parametrów
  8. 8. Obiektowo jest wporzo? Klasy odwzorowują obiekty biznesowe (a o wszystkim decyduje ich aktualny stan) Działanie metod jest przewidywalne (ale nie ma problemu żeby wykonać coś „na boku”) OOP wspiera dobre praktyki (ale nie zabrania złych)
  9. 9. Funkcyjnie? No coś słyszałem, ale…
  10. 10. No coś słyszałem, ale… …w sumie po co, skoro C# / Ruby / Java mi wystarczy? …w sumie po co, skoro od zawsze robiłem w jQuery i działało? …w sumie po co, skoro nie znam a i tak mi płacą? …w sumie po co, skoro…
  11. 11. Problem nr 1 – system edukacji
  12. 12. „To, że ciągle robisz coś w określony sposób wcale nie oznacza, że jest to najlepszy sposób na robienie tego czegoś.” Problem nr 2 – przyzwyczajenia
  13. 13. „JS jest złym językiem, bo nie ma klas.” Problem nr 3 – OOP jako lek na wszystko
  14. 14. Warto poszerzać horyzonty
  15. 15. Co zdiagnozowaliśmy do tej pory? efekty uboczne globalny stan modyfikacja parametrów
  16. 16. A gdyby tak użyć funkcji matematycznych… y = f(x)
  17. 17. f(2) = 12 Przewidywalne zachowanie Mapowanie wejścia na wyjście Wysoki poziom abstrakcji
  18. 18. Dziedzina Abstrakcja
  19. 19. 1 2 3 4 5 … 3 5 7 9 11 … f(x) = 2x + 1
  20. 20. 1 2 3 4 5 … 3 5 7 9 11 … public int MultiplyAndAddOne(int input) { int multiplied = input * 2; int addOneResult = multiplied + 1; return addOneResult; }
  21. 21. 1 2 3 4 5 … 3 5 7 9 11 … public int MultiplyAndAddOne(int input) { switch(input) { case 1: return 3; case 2: return 5; case 3: return 7; … } }
  22. 22. Brak efektów ubocznych (no side-effects) Brak mutacji parametru (immutability) Funkcja jest bezstanowa (stateless) public int MultiplyAndAddOne(int input) { switch(input) { case 1: return 3; case 2: return 5; case 3: return 7; … } }
  23. 23. => Przewidywalne zachowanie => Łatwe testowanie => Zmiana nawyków public int MultiplyAndAddOne(int input) { switch(input) { case 1: return 3; case 2: return 5; case 3: return 7; … } }
  24. 24. map filter reduce … Funkcyjnie, czyli co zrobić, a nie jak zrobić:
  25. 25. map
  26. 26. filter
  27. 27. reduce
  28. 28. Funkcja to obiekt pierwszej klasy
  29. 29. Przypisanie funkcji
  30. 30. Funkcja jako parametr
  31. 31. Funkcja zwracana z innej funkcji
  32. 32. Języki funkcyjne Czysto funkcyjne Mieszane
  33. 33. Programowanie funkcyjne x 2
  34. 34. F# • Microsoft, 2005 • Pozwala na tworzenie kodu w wielu paradygmatach • Mocno typowany • Oparty o platformę .NET • Visual Studio • Pipes, pattern matching, async
  35. 35. F# - DEMO
  36. 36. Reactive Extensions • „Reactive Functional Programming” • Programowanie reaktywne – wykorzystanie wzorca Obserwator • Cross-platform (.NET, JS, Java, …) • Kompozycja oparta o strumienie danych • Async
  37. 37. Rx.Observable
  38. 38. https://github.com/Reactive-Extensions/Rx.NET
  39. 39. https://medium.com/google-developer-experts/angular-introduction-to-reactive-extensions-rxjs-a86a7430a61f var observer = rx.Observer.create( function onNext(result){ console.log(result); }, function onError(err){ console.log(err); }, function onCompleted(){ console.log('Completed'); } ); observable.subscribe(observer);
  40. 40. Strumień eventów czas’click’ ’click’ ’click’’click’’click’’click’
  41. 41. Map, reduce, filter!
  42. 42. map ’click’ ’click’ ’click’’click’’click’’click’ 1 1 11 1 1 map
  43. 43. var onesStream = Rx.Observable .fromEvent(button, ’click’) .map( () => 1 ); onesStream.subscribe(function(value) { … });
  44. 44. Rx - DEMO
  45. 45. https://glebbahmutov.com/draw-cycle/
  46. 46. http://rxmarbles.com/
  47. 47. Pułapki Wdrożenie „czystego” FP w zespole może okazać się zbyt kosztowne O wiele mniejsza baza zasobów w porównaniu do OOP Problematyczna optymalizacja
  48. 48. Dobre praktyki OOP / FP SRP / Minimalizowanie efektów ubocznych (no side-effects) Przewidywalne zachowanie funkcji (immutability) Minimalizowanie globalnego stanu (stateless)
  49. 49. „To, że ciągle robisz coś w określony sposób wcale nie oznacza, że jest to najlepszy sposób na robienie tego czegoś.”
  50. 50. Credits: http://fsharpforfunandprofit.com/posts/thinking-functionally-intro/ https://www.youtube.com/watch?v=1zj7M1LnJV4 https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 http://wazniak.mimuw.edu.pl/index.php?title=Programowanie_funkcyjne http://blog.reactandbethankful.com/posts/2015/09/15/understanding-the-functional-revolution/ http://www.mpscholten.de/javascript/2016/01/15/javascript-in-2016-functional-programming-is-getting-here-to-stay.html http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html https://glebbahmutov.com/draw-cycle/ http://reactivex.io/intro.html http://fsharp.org/about/index.html http://www.scs.stanford.edu/16wi-cs240h/slides/fb-slides.html https://brianmckenna.org/blog/howtostopfp and more…
  51. 51. Dzięki :)

Editor's Notes

  • Przemek Smyrdek, EUVIC
    Lekki wstęp do programowania funkcyjnego i reaktywnego, trochę o F#, Rx.JS oraz o dobrych i złych wzorcach w programowaniu.
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Przewidywalność
    Łatwe testowanie
  • Przewidywalność
    Łatwe testowanie
  • Ci którzy nie podnieśli rąk być może myślą w ten sposób – no coś słyszałem, ale…

    I w sumie nigdy nie było czasu albo chęci na poznanie tematu szerzej.

  • TOP 39 szkół w USA na 2014 – Pierwszy język programowania jakiego uczą

    Scratch – darmowy interaktywny język do nauki programowania poprzez wizualizację

    Jedynie funkcyjny Scheme (skim) – 5 na 39 szkół
  • Przykład rozwoju aplikacji JS’owych

    jQuery -> MVVM (Knockout) -> MVC (Angular) -> Functional (React)
  • Zamiast zrozumieć powody dla których dany język lub sposób programowania wygląda tak a nie inaczej, najprostszym wyjściem jest zanegować sens jego istnienia.
  • Nie obiecuję że od dzisiaj wszyscy zaczniecie programować w ten sposób. Ja sam programuję głównie w C#, bardzo mocno trzymam się programowania obiektowego ale uważam, że warto poszerzać swoje horyzonty

    Zanim krótki wstęp i więcej konkretów to chciałbym żebyśmy zostali na trochę w tej „niewiedzy” i popatrzyli z czego ona wynika – 3 główne problemy
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Podsumowując to co wiemy do tej pory możemy już wprowadzić podział
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Programowanie reaktywne – reactive functional programming

    R
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu
  • Imperatywnie – zbiór poleceń, linijka po linijce

    Deklaratywnie – operowanie na logice wyższego poziomu

×