Please enable JavaScript.
Coggle requires JavaScript to display documents.
Парадигмы программирования - Coggle Diagram
Парадигмы программирования
Три основные
Объектно-ориентированное
Модификаторы доступа полей
private - для методов этого класса
protected - также для методов классов-наследников
public - также снаружи посредством экземпляра
Типы сущностей
Классы и их экземпляры
Абстрактные классы
Могут содержать неабстрактные члены - реализации по умолчанию
Не могут иметь экземпляры
Интерфейсы
Не содержат реализаций, что позволяет классам реализовывать сразу много интерфейсов
Взаимодействие между классами
Наследование (расширение)
Ассоциация (объект содержит объект)
Композиция (один создается внутри другого и не может без другого)
Агрегация (оба создаются независимо и связываются)
Множественное наследование
Проблема ромба (конфликт реализаций)
Заменяется ассоциацией (декоратор)
Антипаттерн
Полиморфизм - связывание отдельной реализации с каждым конкретным представителем
Побочный эффект ООП - избыточность существительных
Функциональное
Составляющие чистоты
Отсутствие циклов
Новое окружение для очередной итерации передается аргументом в рекурсивный вызов
Итерирование через рекурсии
Циклы не используются, т.к. в них меняются переменные
Неизменяемость переменных
Разграничение чистых (бизнес-логика) и грязных функций (IO)
Иммутабельность
Создание копий (концептуально) с нужными изменениями
В реализации используется
structural sharing
Потребность в сборщике мусора (вручную можно удалить используемый объект)
Лаконичность
Функции высшего порядка
Свертка
Отображение
Фильтрация
и т.д.
Каррирование упрощает композицию функций в Point-Free
Локальные функции
Замыкание - функция, помнящая локальное окружение при создании
Линзы - композируемые accessor'ы (пара геттер-сеттер) для доступа к полям структур
Применять, когда надежность важнее скорости разработки и производительности
Преимущества чистоты
Сочетаемость с ленивыми вычислениями: неважно, когда вызовется функция, если она без побочных эффектов
Простота понимания изолированных функций
Mutation detection
по изменению ссылки упрощает кэширование
Простое тестирование: не нужно имитировать окружение для функции, если она от него не зависит
Простая отладка: не нужно держать в голове функции, меняющие интересующий объект
Автоматический параллелизм без необходимости использования блокировок
Монады
Изменяемое состояние: каждая монада в цепочке принимает предыдущее состояние и возвращает новое
Выполнение в гарантированной последовательности
IO
Структурное
Ограничение на прямую передачу управления (goto)
=> Увеличение модульности кода
Использование блоков
Ветвления
Циклы
Процедуры
Дополнительные
Аспектно-ориентированное
Срез и совет содержатся в аспекте
Выполнение шаблонного кода (советов) в выбранных местах (срезах)
Реактивное (см. ReactiveX)
Сложившееся мнение
ООП методы сложнее анализировать, т.к. они определяются не только входом и выходом, а также могут иметь эффекты
Не все алгоритмы можно лаконично и быстро реализовать в ФП (без использования состояния)