54
Protocol-Oriented Programming

Александр Зимин (Alexander Zimin) - Protocol-Oriented Programming

Embed Size (px)

Citation preview

Protocol-Oriented Programming

Зимин Александр iOS разработчик

UX дизайнер

Причины

3

4

Класс

4

• Инкапсуляция

Класс

4

• Инкапсуляция

• Уровни доступа

Класс

4

• Инкапсуляция

• Уровни доступа

• Абстракция

Класс

4

• Инкапсуляция

• Уровни доступа

• Абстракция

• Пространство имен

Класс

4

• Инкапсуляция

• Уровни доступа

• Абстракция

• Пространство имен

• Синтаксис

Класс

4

• Инкапсуляция

• Уровни доступа

• Абстракция

• Пространство имен

• Синтаксис

• Расширяемость

Класс

5

• Инкапсуляция

• Уровни доступа

• Абстракция

• Пространство имен

• Синтаксис

• Расширяемость

Тип

6

Именно класс

6

• Ссылки

Именно класс

6

• Ссылки

• Наследование

Именно класс

7

Аудиосистема

7

Аудиосистема

7

Аудиосистема

Эквалайзер

7

Аудиосистема

Музыка Телевизор

Эквалайзер

7

Аудиосистема

Музыка Телевизор

Эквалайзер

7

Аудиосистема

Музыка Телевизор

Эквалайзер

7

Аудиосистема

Музыка Телевизор

Эквалайзер

Неявная дележка одного объекта

7

Аудиосистема

Музыка Телевизор

Эквалайзер

Implicit data sharing

8

Наследование

8

• Один суперкласс

Наследование

8

• Один суперкласс

• Избирательность

Наследование

8

• Один суперкласс

• Избирательность

• Нагруженность

Наследование

8

• Один суперкласс

• Избирательность

• Нагруженность

• Неизменяемость

Наследование

8

• Один суперкласс

• Избирательность

• Нагруженность

• Неизменяемость

• Неясность

Наследование

9

9

class Compared { func isEqualTo(other: Compared) -> Bool { fatalError("implements me!") }}

9

class Compared { func isEqualTo(other: Compared) -> Bool { fatalError("implements me!") }}

class Text : Compared { var text: String = "" … }

9

class Compared { func isEqualTo(other: Compared) -> Bool { fatalError("implements me!") }}

class Text : Compared { var text: String = "" … }

class Number : Compared { var value: Double = 0 override func isEqualTo(other: Compared) -> Bool { return value == (other as! Number).value }}

10

class Compared { func isEqualTo(other: Compared) -> Bool { fatalError("implements me!") }}

class Text : Compared { var text: String = "" … }

class Number : Compared { var value: Double = 0 override func isEqualTo(other: Compared) -> Bool { return value == (other as! Number).value } }

Идея

11

12

Заменить классы протоколами и структурами

13

Что это позволит

13

• Типы-значения

Что это позволит

13

• Типы-значения

• Статическую зависимость между типами

Что это позволит

13

• Типы-значения

• Статическую зависимость между типами

• Ретроактивность моделирования

Что это позволит

13

• Типы-значения

• Статическую зависимость между типами

• Ретроактивность моделирования

• Упрощение инициализаторов

Что это позволит

13

• Типы-значения

• Статическую зависимость между типами

• Ретроактивность моделирования

• Упрощение инициализаторов

• Внимание на том, что надо реализовать

Что это позволит

14

15

Когда использовать классы

15

Когда использовать классы

• Когда нет смысла копировать

15

Когда использовать классы

• Когда нет смысла копировать

• Привязка к событиям извне

15

Когда использовать классы

• Когда нет смысла копировать

• Привязка к событиям извне

• Записывающие устройства

15

Когда использовать классы

• Когда нет смысла копировать

• Привязка к событиям извне

• Записывающие устройства

• Фрейморк требует наследования

Ссылки

16

Ссылки

16

• https://bigonotetaking.wordpress.com/2015/07/17/swift-protocols-a-strategy/ - стратегия по работе с протоколами

• http://www.infoq.com/news/2015/06/protocol-oriented-swift - Краткий разбор лекции с WWDC 2015

Ссылки

16

• https://bigonotetaking.wordpress.com/2015/07/17/swift-protocols-a-strategy/ - стратегия по работе с протоколами

• http://www.infoq.com/news/2015/06/protocol-oriented-swift - Краткий разбор лекции с WWDC 2015

• http://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2 - пример от Ray Wenderlich

Ссылки

16

• https://bigonotetaking.wordpress.com/2015/07/17/swift-protocols-a-strategy/ - стратегия по работе с протоколами

• http://www.infoq.com/news/2015/06/protocol-oriented-swift - Краткий разбор лекции с WWDC 2015

• http://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2 - пример от Ray Wenderlich

• http://blog.metaobject.com/2015/06/protocol-oriented-programming-is-object.html - небольшой разбор

Ссылки

16

• https://bigonotetaking.wordpress.com/2015/07/17/swift-protocols-a-strategy/ - стратегия по работе с протоколами

• http://www.infoq.com/news/2015/06/protocol-oriented-swift - Краткий разбор лекции с WWDC 2015

• http://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2 - пример от Ray Wenderlich

• http://blog.metaobject.com/2015/06/protocol-oriented-programming-is-object.html - небольшой разбор

• http://vojtastavik.com/2015/07/29/protocolui-customizing-uikit-using-protocols/ - интересный пример использования протоколов в UI

Спасибо за внимание