Вы когда-нибудь слышали об объектно-ориентированном программировании? Да, конечно. В настоящее время ООП очень распространено.

Но как насчет протокольно-ориентированного программирования?

Протоколно-ориентированное программирование (POP) было впервые представлено Apple на WWDC 2015 с Swift 2.0, и они назвали Swift POP, а не ООП, как другие распространенные языки: Java, Python, C #,…

Вы можете задаться вопросом: что, черт возьми, такое POP?

1. Что такое POP?

На самом деле у нас нет официального документа для определения POP, но это нормально. Давайте подробнее рассмотрим его название и сравним: Протокол - ориентированное программирование с объектным - ориентированное программирование. Ясно, что они имеют небольшое отличие от своего Префикса: Объект и Протокол. Теперь попробуйте представить и подумать об объектно-ориентированном программировании: что это такое? Почему мы называем это ООП?

В ООП мы проектируем и сосредотачиваемся на классе и его экземпляре, называемом Object, который может содержать данные, свойство, метод, реализацию и т. Д.

→ В объектно-ориентированном программировании мы фокусируемся на объекте.

→ Мы можем сделать вывод: протокол-ориентированное программирование, мы попробуем работать с протоколом.

"Вместо использования класса начните с протокола"

2. Пример POP?

Поскольку POP заменяет ООП, POP имеет много преимуществ перед ООП. В настоящее время в Swift я вижу, что люди предпочитают использовать Struct в сочетании с протоколом (обычно используется в POP), а не использовать Class (OOP). Все, что может делать Class, Struct тоже может, Struct на основе типа значения вместо ссылочного типа в классе → мы можем избежать утечки памяти, неявного совместного использования данных, взаимоблокировки (многопоточность),…

Дело не только в POP и OOP, мы перейдем к практическому примеру.

У меня есть класс Bird, Bird имеет 2 свойства: имя и перо.

Затем у меня есть 2 подкласса Bird, например, Parrot и Eagle.

Но теперь я хочу добавить Пингвина. Ой …….

Пингвин - птица, но у Пингвина нет пера, и он не может летать. Жаль моего маленького пингвина :(.

Как исправить сейчас? В ООП:

  • Разделиться на: Класс Птицы и Пингвина → Упс, плохая идея.
  • Создайте иллюстрацию протокола для Flyable → нам нужно переписать много кода
  • перейти на static func fly () → в случае, если у нас есть подкласс 10–100 ???

3. Добро пожаловать в POP:

Мы можем перепроектировать наш базовый код, изменив класс на протокол и структуру, чтобы решить эту проблему.

С Extension нам не нужно переписывать много кода, только когда нам нужно изменить или в каком-то особом поведении полета.

Как видите, Penguin не реализует Flyable и Featherable и не нарушает наш дизайн и структуру. Приветствую моего маленького счастливого Пингвина.

Вы можете попробовать добавить новую птицу, например страуса (не умеет летать, но у страуса есть перо), и увидите волшебство.

В заключение, я надеюсь, что с моим образцом вы сможете по-умному взглянуть на программирование, ориентированное на протокол. Конечно, POP - это просто концепция, вы можете применить ее, если хотите, или вам не нужно ее применять, в зависимости от вашего решения и вашей проблемы. Если вы хотите узнать больше об этой теме, есть несколько хороших ссылок: