Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ООП и ФП в мейнстримовом программировании: ищем...

SECR 2018
October 13, 2018

ООП и ФП в мейнстримовом программировании: ищем баланс с C# и F#

SECR 2018
Виталий Камянский
старший разработчик, First Line Software

Как в языках C# и F# соседствуют функциональное и объектно-ориентированное программирование? Стоит ли делать выбор в пользу одной парадигмы или можно их успешно сочетать, и если да, то как? В рамках доклада планируется представить на конкретных примерах проектирования и инженерии, как данные подходы существуют в отдельности, и как они могут существовать вместе на разных уровнях enterprise приложения.

SECR 2018

October 13, 2018
Tweet

More Decks by SECR 2018

Other Decks in Programming

Transcript

  1. ФП приходит в C# Ноябрь 2007 Март 2017 Август 2017

    x => x + 1 A Extension(this A source){…} 2.0 Enumerable.Range(6, 10) new { Name = "Anonymous" } ("tuple", 1) switch(a) { case TypeA at when at.Name=="a": return “it is a“; … } var (name, num) = tuple; 6
  2. Быстрые вычисления: скорость 1 10 100 1000 10000 100000 1.00E+00

    1.00E+02 1.00E+04 1.00E+06 1.00E+08 1.00E+10 t имп. t дек. t дек. пар. 12
  3. Быстрые вычисления: скорость (часть 2) 1 10 100 1000 10000

    100000 1.00E+02 1.00E+04 1.00E+06 1.00E+08 1.00E+10 t имп. t дек. t дек. пар. t дек. стр. пар. 0 50 100 150 200 250 300 350 400 450 500 1.00E+00 1.00E+02 1.00E+04 1.00E+06 t исп. n страниц 20 млн. элементов 14
  4. Решения императивный подход декларативный подход объекты -> ООП пример: Windows

    Forms -> композиция с DSL пример: XAML / Autofac данные -> Процедурное программирование Циклы, ветвление, вызов подпрограмм, переменные общего доступа -> вычисления с DSL пример: SQL / LINQ 15
  5. Внутренние DSL: что нужно ещё? • Функции как данные •

    Возможность строить из функций pipeline 17
  6. Выводы • Экземпляры типа (данные) или класса (объекты)? – зависит

    от контекста операции • ФП – надёжные вычисления с чистыми функциями + функции как данные • Внутренние DSL – композиция сущностей + декларативность + удобство • Элементы ФП и DSL в ООП-языке делают ООП комфортнее и сами полезны • 2 языка: многополярность – один из подходов 21
  7. Ссылки • Исследование Stack Overflow 2018 https://insights.stackoverflow.com/survey/2018 • Tomas Petricek,

    Jon Skeet “Real-World Functional Programming” http://functional-programming.net/rwfp/ • Scott Wlaschin “Domain Modeling Made Functional” https://pragprog.com/book/swdddf/domain-modeling-made-functional • Bartosz Milewski “Category Theory for Programmers“ https://github.com/hmemcpy/milewski-ctfp-pdf 22