Программирование
Протокольно-ориентированное программирование в Swift
Протокольно-ориентированное программирование
Протокольно-ориентированное программирование (POP) — новый фреймворк, который решает проблемы с объектно-ориентированным программированием (ООП) и который был представлена на WWDC 2015.
Все языки программирования имеют понятие наследования. Одна из важнейших концепций языков объектно-ориентированного программирования — это концепция наследования. Swift не поддерживает множественное наследование. Это язык, поддерживающий одиночное наследование.
Мы не можем наследовать два разных класса, как показано в примере.
При этом объектно-ориентированные концепции не работают со структурами (structs) и перечислениями (enums). Например, структура не может наследовать от другой структуры, перечисление не может наследовать от другого перечисления. Следовательно, наследование, которое является одной из основных концепций в ООП, нельзя применять к типам значений, таким как struct, enum, но перечисления и структуры могут использоваться с протоколами.
protocol Walkable { | |
} | |
protocol Flyable { | |
} | |
struct Bird : Flyable,Walkable { | |
} |
Теперь давайте разберемся на примере, зачем нам нужны протоколы.
Протокольно-ориентированное программирование в Swift
Пингвин — это птица, но он не летает, как другие птицы. Все птицы ходят и летают, но пингвины плавают и ходят.
Прежде всего, мы создаем наш класс птиц и добавляем способности передвигаться.
class Bird { | |
func fly() { | |
} | |
func walk(){ | |
} | |
} |
Если мы наследуем класс птиц при создании Penguin, мы унаследуем функцию полета, не характерную для пингвина. Когда мы удалим функцию полета из класса птиц, мы удалим навык, который является общей чертой всех других птиц.
class Penguin: Bird { | |
func swim () { | |
} | |
} |
Подход POP (протокольно-ориентированное программирование) появился как решение таких проблем. Давайте определим фичи полета, ходьбы и плавания с помощью следующих протоколов.
protocol Walkable { | |
func walk() | |
} | |
protocol Swimmable { | |
func swim() | |
} | |
protocol Flyable { | |
func fly() | |
} |
Давайте унаследуем необходимые нам возможности от протоколов при создании нашего класса Penguin.
class Penguin : Walkable , Swimmable { | |
func swim() { | |
} | |
func walk() { | |
} | |
} |
Таким образом, мы унаследовали фичи, которые принадлежат только Penguin.
Протоколы можно использовать аналогично со структурами и перечислениями.
Классы, структуры и перечисления должны соответствовать требованиям, определенным в протоколах. Как и в примере выше, класс Penguin должен содержать методы swim и walk. У методов, определенных в протоколах, нет тела. Протоколы определяют то, что методы делать в классе, структуре или перечислении.
Определение переменной для протокола
Когда мы добавляем переменную в протокол Swift, нам нужно написать геттер и сеттер рядом с ней в фигурных скобках. Ключевые слова get и set рядом с переменной означают, что эту переменную можно как читать, так и изменять. Если мы не хотим, чтобы ее изменяли, мы должны просто добавить в скобках get.
protocol Bird { | |
var name: String { get set } | |
var canFly: Bool { get } | |
} |
Расширение протокола Swift
Мы можем добавлять расширения к протоколам. Нам не нужно использовать методы или переменные, которые мы добавили с расширением, в классах или структурах, которые мы наследуем.
Например, когда мы определяем функцию run в нашем классе Walkers, нам не нужно использовать эту функцию в классе penguin.
extension Walkable { | |
func run(){ | |
} | |
} | |
class Penguin : Walkable , Swimmable { | |
func swim() { | |
} | |
func walk() { | |
} | |
} |
Заключение
Протокольно-ориентированное программирование обращается к тем моментам, в которых ООП недостаточно для программистов, оно дает программисту больше свободы с расширением протокола.
Еще про протокольно-ориентированное программирование
- Протокольно-ориентированное программирование в Swift 5.1
- Туториал по протокольно-ориентированному программированию в Swift 5.1
- Введение в протокольно-ориентированное программирование
-
Программирование3 недели назад
Конец программирования в том виде, в котором мы его знаем
-
Видео и подкасты для разработчиков6 дней назад
Как устроена мобильная архитектура. Интервью с тех. лидером юнита «Mobile Architecture» из AvitoTech
-
Магазины приложений3 недели назад
Магазин игр Aptoide запустился на iOS в Европе
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.8