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

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

Avatar for SECR 2018 SECR 2018
October 13, 2018

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

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

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

Avatar for SECR 2018

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