명령형 프로그래밍: How
선언형 프로그래밍: What
1. OOP
Об'єкт: має стан і поведінку
Властивості об'єкта: стан об'єкта (Knowing), поведінка об'єкта (Doing)
Doing обробляє стан Knowing або змінює його
SOLID:
- SRP(Single Responsibility Principle): принцип єдиної відповідальності
- OCP(Open/Closed Principle): принцип відкритості/закритості
- LSP(Liskov Substitution Principle): принцип заміщення Ліскова
- ISP(Interface Segregation Principle): принцип розподілу інтерфейсів
- DIP(Dependency Inversion Principle): принцип інверсії залежностей
Інкапсуляція: приховування реалізації об'єкта від зовнішнього світу
- Ключове: збереження цілісності та послідовності об'єкта
- Цілісність: дані об'єкта не повинні бути пошкоджені, вони завжди повинні бути в правильному стані
- Дані об'єкта мають бути приватними, а їх зміна має здійснюватися через методи або геттер/сеттер!
- Послідовність: об'єкт повинен завжди перебувати в передбачуваному стані, що відповідає правилам системи
Наслідування: можливість визначати нові класи, використовуючи існуючі
Переваги: збільшення повторного використання коду, можливість реалізації поліформізму через переозначення
Недоліки: порушення інкапсуляції, погане використання переозначення може порушити LSP. Тісна взаємозалежність між класами може знизити гнучкість і розширюваність
Абстракція: процес перетворення складних функцій на простіші
Поліформізм: здатність методів з однаковими іменами поводитись по-різному залежно від об'єкта
ПОРАДА:
- Реалізуйте через класи для наслідування (BV, BVC)
- Використовуйте наслідування лише у випадках чітко визначених відносин "has-a"
- У батьківських класах реалізовуйте тільки необхідні функції
2. POP
Парадигма, яка виникла для вирішення недоліків OOP
- Можливість приховування через private
- Легкість спільного використання даних між об'єктами
- Сумісність з існуючими фреймворками (UIKit)
3. FP
Парадигма, яка розділяє процес зміни стану та його відсутність
- Дія: також відома як побічний ефект, функція, результат якої змінюється в залежності від часу виконання та кількості викликів
Наприклад) Отримання даних з бази даних, звертання до внутрішніх змінних тощо
Ключове в дії: все, що впливає на зовнішній світ або залежить від нього
- Обчислення: також відоме як чиста функція, функція, яка завжди дає однаковий результат при однакових вхідних даних
Наприклад) функції вищих порядків, такі як map, filter, reduce, логіка аутентифікації користувача тощо
- Дані: факти, які записуються у відповідь на події
=> Парадигма, яка розділяє дію та обчислення
- Розділяйте методи для дії та обчислення!
- Використовуйте Copy On Write для копіювання параметрів або значень!
- Розглядайте можливість розділення дії та обчислення, якщо вони змішані в одній функції!
==>> Ключове: мінімізувати дії та якнайбільше використовувати обчислення і дані!
Мультіпарадигмальні мови програмування
Кожна мова прагне об'єднати переваги різних парадигм програмування!
Наприклад) BVC, використання функцій вищих порядків (map, filter, reduce) в одному контексті
=> Важливо не те, який конкретний підхід є кращим або гіршим, а те, як використовувати ці концепції у відповідних ситуаціях!
Перекладено з: Programming Paradigm