SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
Дизайн крупных приложений
на функциональных языках
Александр Гранин
graninas@gmail.com
1
Технические аспекты
разработки крупного ПО
Зеленый ✓ ✗ ?: в мейнстриме
Красный ✓ ✗ ?: в ФП-мире
2
GRASP ✓✓✗ SOLID ✓✓✗
Мейнстрим
ФП
3
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования
Мейнстрим
ФП
4
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Мейнстрим
ФП
5
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Мейнстрим
ФП
6
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Мейнстрим
ФП
7
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✗✓?
Мейнстрим
ФП
8
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Мейнстрим
ФП
9
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки
Мейнстрим
ФП
10
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Мейнстрим
ФП
11
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход
Мейнстрим
ФП
12
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
Мейнстрим
ФП
13
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Мейнстрим
ФП
14
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Мейнстрим
ФП
15
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.)
Мейнстрим
ФП
16
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Мейнстрим
ФП
17
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции
Мейнстрим
ФП
18
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Мейнстрим
ФП
19
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Проектирование ПО ✓?✓✗ UML ✓✗
Мейнстрим
ФП
20
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Проектирование ПО ✓?✓✗ UML ✓✗
Мейнстрим
ФП
21
GRASP ✓✓✗ SOLID ✓✓✗
Паттерны проектирования ✓✓?
Inversion of Control ✓✓? Dependency Injection ✓✓?
Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓?
Предметно-ориентированные языки ✗?✓ ✓✓✓
Комбинаторный подход ✗?✓ ✓✓✓
“Как это работает” ✓✗?✓ “Чем это является” ✗ ✓
Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗?
✓?
Надежные нетекущие абстракции ✗? ✓✓✓✗?
Проектирование ПО ✓?✓✗ UML ✓✗
Мейнстрим
ФП
22
Проектирование ПО на UML
23
Анализ требований:
Use Cases
User Scenarios (текст)
Sequence Diagrams
24
Object Diagrams
Сommunication
Diagrams
25
Class Diagrams
26
Class Diagrams
Все,
приплыли.
27
Проектирование большого ФП-
проекта
28
Анализ требований:
MindMaps
29
Карта
необходимости
30
Карта элементов
(перфекционизм,
молчать!)
31
Карта подсистем
32
33
34
35
Побочные эффекты, FRP,
интерпретаторы и eDSL
36
37
viewFlow :: GameNode -> ViewWire () ()
viewFlow node = modes Render (selector node) . (
pure () &&&
interpret node
. printEventVal
. filterE isActualEvent
. now . event
)
Пример FRP-кода (Haskell Netwire)
38
produce f = do
prodObj <- createProduct (f ^. energyCost) (f ^. scheme)
placeProduct prodObj (f ^. placementAlg)
return "Successfully produced."
producingScenario :: Eval String
producingScenario = do
f <- read fabric
if f ^. producing then produce f else return "Producing paused."
Пример eDSL игровых сценариев
39
Ссылки
40
● Дизайн и архитектура ПО в ФП
http://habrahabr.ru/post/211871/
● Large-scale design in Haskell? (SO)
http://stackoverflow.com/questions/3077866/lar
ge-scale-design-in-haskell
Всем спасибо!
Александр Гранин
graninas@gmail.com
41
commandInterpreter :: GameNode -> Event -> Command
commandInterpreter _ ViewAcc.EventClose = V.Finish
commandInterpreter _ _ = V.Render
Пример интерпретатора событий
42
data Command = Finish
| Render
| StartViewPointMoving ScreenPoint
| ViewPointMoving ScreenPoint
| StopViewPointMoving ScreenPoint
modifyView (StartViewPointMoving scrPt) view = ...
modifyView (ViewPointMoving scrPt) view = ...
modifyView (StopViewPointMoving scrPt) view = ...
Пример eDSL модели представления
43

Más contenido relacionado

Similar a Design of big applications in FP

Cps 2014 cinesoft
Cps 2014 cinesoftCps 2014 cinesoft
Cps 2014 cinesoft
CineSoft
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
COMAQA.BY
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend
 

Similar a Design of big applications in FP (13)

#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
Cps 2014 cinesoft
Cps 2014 cinesoftCps 2014 cinesoft
Cps 2014 cinesoft
 
Фреймворк для регрессионного тестирования на основе WebDriver
Фреймворк для регрессионного тестирования на основе WebDriverФреймворк для регрессионного тестирования на основе WebDriver
Фреймворк для регрессионного тестирования на основе WebDriver
 
Software process framework
Software process frameworkSoftware process framework
Software process framework
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
 
Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"
 
Марина Апухтина: "SEO для IT: нюансы продвижения и чек-лист"
Марина Апухтина: "SEO для IT: нюансы продвижения и чек-лист"Марина Апухтина: "SEO для IT: нюансы продвижения и чек-лист"
Марина Апухтина: "SEO для IT: нюансы продвижения и чек-лист"
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter edition
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
DevNightDnepr 2015: «Взаимодействие менеджера и дизайнера: техническое задани...
DevNightDnepr 2015: «Взаимодействие менеджера и дизайнера: техническое задани...DevNightDnepr 2015: «Взаимодействие менеджера и дизайнера: техническое задани...
DevNightDnepr 2015: «Взаимодействие менеджера и дизайнера: техническое задани...
 
Bd
BdBd
Bd
 

Más de Alexander Granin

Más de Alexander Granin (20)

Concurrent applications with free monads and stm
Concurrent applications with free monads and stmConcurrent applications with free monads and stm
Concurrent applications with free monads and stm
 
Hierarchical free monads and software design in fp
Hierarchical free monads and software design in fpHierarchical free monads and software design in fp
Hierarchical free monads and software design in fp
 
Final tagless vs free monad
Final tagless vs free monadFinal tagless vs free monad
Final tagless vs free monad
 
Monadic parsers in C++
Monadic parsers in C++Monadic parsers in C++
Monadic parsers in C++
 
The present and the future of functional programming in c++
The present and the future of functional programming in c++The present and the future of functional programming in c++
The present and the future of functional programming in c++
 
О разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop developmentО разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop development
 
Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...
 
Принципы и практики разработки ПО / Principles and practices of software deve...
Принципы и практики разработки ПО / Principles and practices of software deve...Принципы и практики разработки ПО / Principles and practices of software deve...
Принципы и практики разработки ПО / Principles and practices of software deve...
 
Закон Деметры / Demetra's law
Закон Деметры / Demetra's lawЗакон Деметры / Demetra's law
Закон Деметры / Demetra's law
 
GitHub - зеркало разработчика
GitHub - зеркало разработчикаGitHub - зеркало разработчика
GitHub - зеркало разработчика
 
The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++
 
Functional programming in C++ LambdaNsk
Functional programming in C++ LambdaNskFunctional programming in C++ LambdaNsk
Functional programming in C++ LambdaNsk
 
Transition graph using free monads and existentials
Transition graph using free monads and existentialsTransition graph using free monads and existentials
Transition graph using free monads and existentials
 
Software transactional memory. pure functional approach
Software transactional memory. pure functional approachSoftware transactional memory. pure functional approach
Software transactional memory. pure functional approach
 
Вы не понимаете ФП / You don't understand FP
Вы не понимаете ФП / You don't understand FPВы не понимаете ФП / You don't understand FP
Вы не понимаете ФП / You don't understand FP
 
Functional "Life": parallel cellular automata and comonads
Functional "Life": parallel cellular automata and comonadsFunctional "Life": parallel cellular automata and comonads
Functional "Life": parallel cellular automata and comonads
 
Functional microscope - Lenses in C++
Functional microscope - Lenses in C++Functional microscope - Lenses in C++
Functional microscope - Lenses in C++
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
Линзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция даннымиЛинзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция данными
 
Линзы - комбинаторная манипуляция данными (Dev2Dev)
Линзы - комбинаторная манипуляция данными (Dev2Dev)Линзы - комбинаторная манипуляция данными (Dev2Dev)
Линзы - комбинаторная манипуляция данными (Dev2Dev)
 

Último

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 

Último (9)

Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 

Design of big applications in FP

  • 1. Дизайн крупных приложений на функциональных языках Александр Гранин graninas@gmail.com 1
  • 2. Технические аспекты разработки крупного ПО Зеленый ✓ ✗ ?: в мейнстриме Красный ✓ ✗ ?: в ФП-мире 2
  • 3. GRASP ✓✓✗ SOLID ✓✓✗ Мейнстрим ФП 3
  • 4. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования Мейнстрим ФП 4
  • 5. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Мейнстрим ФП 5
  • 6. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Мейнстрим ФП 6
  • 7. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Мейнстрим ФП 7
  • 8. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✗✓? Мейнстрим ФП 8
  • 9. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Мейнстрим ФП 9
  • 10. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки Мейнстрим ФП 10
  • 11. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Мейнстрим ФП 11
  • 12. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход Мейнстрим ФП 12
  • 13. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ Мейнстрим ФП 13
  • 14. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Мейнстрим ФП 14
  • 15. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Мейнстрим ФП 15
  • 16. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) Мейнстрим ФП 16
  • 17. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗? ✓? Мейнстрим ФП 17
  • 18. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗? ✓? Надежные нетекущие абстракции Мейнстрим ФП 18
  • 19. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗? ✓? Надежные нетекущие абстракции ✗? ✓✓✓✗? Мейнстрим ФП 19
  • 20. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗? ✓? Надежные нетекущие абстракции ✗? ✓✓✓✗? Проектирование ПО ✓?✓✗ UML ✓✗ Мейнстрим ФП 20
  • 21. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗? ✓? Надежные нетекущие абстракции ✗? ✓✓✓✗? Проектирование ПО ✓?✓✗ UML ✓✗ Мейнстрим ФП 21
  • 22. GRASP ✓✓✗ SOLID ✓✓✗ Паттерны проектирования ✓✓? Inversion of Control ✓✓? Dependency Injection ✓✓? Тестирование ✓✓✓✓ Отладка ✓✓✓✗✓? Предметно-ориентированные языки ✗?✓ ✓✓✓ Комбинаторный подход ✗?✓ ✓✓✓ “Как это работает” ✓✗?✓ “Чем это является” ✗ ✓ Продвинутые идеи (FRP, STM, Actor Model, DSL, etc.) ✗? ✓? Надежные нетекущие абстракции ✗? ✓✓✓✗? Проектирование ПО ✓?✓✗ UML ✓✗ Мейнстрим ФП 22
  • 24. Анализ требований: Use Cases User Scenarios (текст) Sequence Diagrams 24
  • 33. 33
  • 34. 34
  • 35. 35
  • 37. 37
  • 38. viewFlow :: GameNode -> ViewWire () () viewFlow node = modes Render (selector node) . ( pure () &&& interpret node . printEventVal . filterE isActualEvent . now . event ) Пример FRP-кода (Haskell Netwire) 38
  • 39. produce f = do prodObj <- createProduct (f ^. energyCost) (f ^. scheme) placeProduct prodObj (f ^. placementAlg) return "Successfully produced." producingScenario :: Eval String producingScenario = do f <- read fabric if f ^. producing then produce f else return "Producing paused." Пример eDSL игровых сценариев 39
  • 40. Ссылки 40 ● Дизайн и архитектура ПО в ФП http://habrahabr.ru/post/211871/ ● Large-scale design in Haskell? (SO) http://stackoverflow.com/questions/3077866/lar ge-scale-design-in-haskell
  • 42. commandInterpreter :: GameNode -> Event -> Command commandInterpreter _ ViewAcc.EventClose = V.Finish commandInterpreter _ _ = V.Render Пример интерпретатора событий 42
  • 43. data Command = Finish | Render | StartViewPointMoving ScreenPoint | ViewPointMoving ScreenPoint | StopViewPointMoving ScreenPoint modifyView (StartViewPointMoving scrPt) view = ... modifyView (ViewPointMoving scrPt) view = ... modifyView (StopViewPointMoving scrPt) view = ... Пример eDSL модели представления 43