Top Banner
Protocol-Oriented Programming
54

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

Apr 16, 2017

Download

Software

Alexander Zimin
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Александр Зимин (Alexander Zimin) - Protocol-Oriented Programming

Protocol-Oriented Programming

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

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

UX дизайнер

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

Причины

3

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

4

Класс

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

4

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

Класс

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

4

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

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

Класс

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

4

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

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

• Абстракция

Класс

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

4

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

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

• Абстракция

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

Класс

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

4

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

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

• Абстракция

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

• Синтаксис

Класс

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

4

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

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

• Абстракция

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

• Синтаксис

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

Класс

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

5

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

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

• Абстракция

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

• Синтаксис

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

Тип

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

6

Именно класс

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

6

• Ссылки

Именно класс

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

6

• Ссылки

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

Именно класс

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

7

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

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

7

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

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

7

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

Эквалайзер

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

7

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

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

Эквалайзер

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

7

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

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

Эквалайзер

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

7

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

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

Эквалайзер

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

7

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

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

Эквалайзер

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

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

7

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

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

Эквалайзер

Implicit data sharing

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

8

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

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

8

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

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

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

8

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

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

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

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

8

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

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

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

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

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

8

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

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

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

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

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

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

8

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

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

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

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

• Неясность

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

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

9

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

9

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

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

9

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

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

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

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 }}

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

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 } }

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

Идея

11

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

12

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

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

13

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

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

13

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

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

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

13

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

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

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

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

13

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

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

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

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

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

13

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

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

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

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

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

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

13

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

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

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

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

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

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

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

14

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

15

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

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

15

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

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

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

15

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

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

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

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

15

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

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

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

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

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

15

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

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

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

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

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

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

Ссылки

16

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

Ссылки

16

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

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

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

Ссылки

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

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

Ссылки

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 - небольшой разбор

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

Ссылки

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

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

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