Site icon AppTractor

Протокольно-ориентированное программирование в Swift

Протокольно-ориентированное программирование

Протокольно-ориентированное программирование (POP) — новый фреймворк, который решает проблемы с объектно-ориентированным программированием (ООП) и который был представлена ​​на WWDC 2015.

Все языки программирования имеют понятие наследования. Одна из важнейших концепций языков объектно-ориентированного программирования — это концепция наследования. Swift не поддерживает множественное наследование. Это язык, поддерживающий одиночное наследование.

Мы не можем наследовать два разных класса, как показано в примере.

При этом объектно-ориентированные концепции не работают со структурами (structs) и перечислениями (enums). Например, структура не может наследовать от другой структуры, перечисление не может наследовать от другого перечисления. Следовательно, наследование, которое является одной из основных концепций в ООП, нельзя применять к типам значений, таким как struct, enum, но перечисления и структуры могут использоваться с протоколами.

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

Протокольно-ориентированное программирование в Swift

Пингвин — это птица, но он не летает, как другие птицы. Все птицы ходят и летают, но пингвины плавают и ходят.

Прежде всего, мы создаем наш класс птиц и добавляем способности передвигаться.

Если мы наследуем класс птиц при создании Penguin, мы унаследуем функцию полета, не характерную для пингвина. Когда мы удалим функцию полета из класса птиц, мы удалим навык, который является общей чертой всех других птиц.

Подход POP (протокольно-ориентированное программирование) появился как решение таких проблем. Давайте определим фичи полета, ходьбы и плавания с помощью следующих протоколов.

Давайте унаследуем необходимые нам возможности от протоколов при создании нашего класса Penguin.

Таким образом, мы унаследовали фичи, которые принадлежат только Penguin.

Протоколы можно использовать аналогично со структурами и перечислениями.

Классы, структуры и перечисления должны соответствовать требованиям, определенным в протоколах. Как и в примере выше, класс Penguin должен содержать методы swim и walk. У методов, определенных в протоколах, нет тела. Протоколы определяют то, что методы делать в классе, структуре или перечислении.

Определение переменной для протокола

Когда мы добавляем переменную в протокол Swift, нам нужно написать геттер и сеттер рядом с ней в фигурных скобках. Ключевые слова get и set рядом с переменной означают, что эту переменную можно как читать, так и изменять. Если мы не хотим, чтобы ее изменяли, мы должны просто добавить в скобках get.

Расширение протокола Swift

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

Например, когда мы определяем функцию run в нашем классе Walkers, нам не нужно использовать эту функцию в классе penguin.

Заключение

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

Источник

Еще про протокольно-ориентированное программирование

Exit mobile version