iOS-02-Паттерны ООП

Noveo
NoveoNoveo
iOS Internship 2014
Основы паттернов ООП
(продолжение лекции 1)
Лекция 1 (продолжение)
● MVC
● Delegate
● Observer
● Singleton
● …
… красивые названия для обыденных вещей
Model-View-Controller
Model
● Хранение данных
● Бизнес-логика
● Может иметь разные
представления
● Может "общаться" с другой
моделью
View
● То, что видит пользователь
● Переиспользуется для
разных данных
Controller
● Соединяет объекты-модели
с объектами-видами
● Бизнес-логика
● Управляет жизненным
циклом приложения
● Обрабатывает действия
пользователя
Основы паттернов ООП
Model
кастомные классы с данными
...
NSArray
NSDictionary
NSString
...
NSURLConnection
CLLocationManager
...
View
UIView
UILabel
UITextField
UIButton
UISwitch
UIToolbar
UITableView
UIImageView
...
Controller
UIApplicationDelegate
UIViewController
UINavigationController
UITabBarController
...
Для нашего клиентского кода это модель.
Сами для себя эти классы — система,
имеющая свою модель и контроллер на
более низком уровне абстракции.
Model-View-Controller
Основы паттернов ООП
Model
AddressBook
Коллекция записей о людях
Person
Запись об одном человеке
View
TableView
Показывает список ячеек
TableViewCell
Показывает одну ячейку с текстом
Controller
?
Model-View-Controller
Основы паттернов ООП
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
View
TableView
?
TableViewCell
Label *title
Label *subtitle
Controller
AddressBookVC
AddressBook *book
UITableView *table
Model-View-Controller
Основы паттернов ООП
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Controller
AddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Основы паттернов ООП
Controller
AddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Основы паттернов ООП
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Controller
AddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
?
Основы паттернов ООП
Controller
AddressBookVC<TableDelegate,
ModelObserver>
AddressBook *book
UITableView *table
-(void)modelUpdated:(Model*)
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Model
AddressBook
-(void)addObserver:(id
<ModelObserver>)
-(void)removeObserver:(id
<ModelObserver>)
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Observer
Основы паттернов ООП
Порождающий шаблон проектирования, гарантирующий что в приложении будет единственный
экземпляр класса с глобальной точкой доступа.
MyClass *instance = [MyClass sharedInstance];
+ Не нужно заботиться, создан ли уже объект
+ Легко доступен всем
– Легко доступен всем
Singleton
Основы паттернов ООП
Singleton
//Singleton.h
@interface Singleton : NSObject
+ (Singleton *)sharedInstance;
@end
//Singleton.m
@implementation Singleton
+ (Singleton *)sharedInstance {
static Singleton *_sharedInstance = nil;
@synchronized(self) {
if (_sharedInstance == nil) {
_sharedInstance = [[Singleton alloc] init];
}
}
return _sharedInstance;
}
@end
Основы паттернов ООП
Этот метод реализации паттерна
Singleton не является наилучшим,
но хорошо отражает идею.
Singleton
//Singleton.h
@interface Singleton : NSObject
+ (Singleton *)sharedInstance;
@end
//Singleton.m
@implementation Singleton
+ (Singleton *)sharedInstance {
static Singleton *_sharedInstance = nil;
@synchronized(self) {
if (_sharedInstance == nil) {
_sharedInstance = [[Singleton alloc] init];
}
}
return _sharedInstance;
}
@end
Основы паттернов ООП
1 de 13

Recomendados

JavaScript design patterns overview por
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview Kseniya Redunova
1.7K visualizações32 slides
MarionetteJS. Shall we dance? por
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?Kseniya Redunova
929 visualizações37 slides
MVVM in WPF por
MVVM in WPFMVVM in WPF
MVVM in WPFSviataslau Seviaryn
683 visualizações19 slides
Принципы проектирования S.O.L.I.D por
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
16.9K visualizações29 slides
Как писать красивый код или основы SOLID por
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
5.3K visualizações23 slides
Паттерны проектирования por
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
127 visualizações26 slides

Mais conteúdo relacionado

Similar a iOS-02-Паттерны ООП

Как пройти собеседование и получить первую работу на Swift por
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
2.1K visualizações19 slides
django.pdf por
django.pdfdjango.pdf
django.pdfAntonPolovnikov1
5 visualizações8 slides
Django por
DjangoDjango
DjangoPolinaPolovnikova
20 visualizações8 slides
чмв лекция №5 por
чмв   лекция №5чмв   лекция №5
чмв лекция №5student_kai
747 visualizações21 slides
ASP.NET, MVC, ASP.NET MVC por
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
2.6K visualizações29 slides
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers por
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
1.5K visualizações62 slides

Similar a iOS-02-Паттерны ООП(20)

Как пройти собеседование и получить первую работу на Swift por Anton Loginov
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
Anton Loginov2.1K visualizações
чмв лекция №5 por student_kai
чмв   лекция №5чмв   лекция №5
чмв лекция №5
student_kai747 visualizações
ASP.NET, MVC, ASP.NET MVC por GetDev.NET
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET2.6K visualizações
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers por Глеб Тарасов
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов1.5K visualizações
Dependency injection por GetDev.NET
Dependency injectionDependency injection
Dependency injection
GetDev.NET2K visualizações
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS por Омские ИТ-субботники
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
Backbone.js Профилактика сколиоза por MitinPavel
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза
MitinPavel976 visualizações
Backbone lesson 1 por Mihail Skida
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
Mihail Skida1.4K visualizações
JavaScript Design Patterns overview by Ksenia Redunova por Lohika_Odessa_TechTalks
JavaScript Design Patterns overview by Ksenia RedunovaJavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia Redunova
Lohika_Odessa_TechTalks877 visualizações
DESIGN PATTERNS? EASY! por DrupalCamp Kyiv
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
DrupalCamp Kyiv185 visualizações
AngularJS basics & theory por DevOWL Meetup
AngularJS basics & theoryAngularJS basics & theory
AngularJS basics & theory
DevOWL Meetup40.2K visualizações
C# Web. Занятие 09. por Igor Shkulipa
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa1.6K visualizações
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext por GoSharp
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
GoSharp1.2K visualizações
C# Web. Занятие 11. por Igor Shkulipa
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
Igor Shkulipa195 visualizações
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём por FrontDays
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays1.1K visualizações
drools introduction por Pavel Baryshnikov
drools introductiondrools introduction
drools introduction
Pavel Baryshnikov913 visualizações
Стандарты и соглашения в сложных ООП-приложениях por Magecom Ukraine
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
Magecom Ukraine539 visualizações
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD por Krivoy Rog IT Community
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Krivoy Rog IT Community3.4K visualizações

Mais de Noveo

Гуманитарные специальности в IT-индустрии por
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
9.3K visualizações10 slides
Box model, display and position (HTML5 тема 07 - box model, display position) por
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
442 visualizações26 slides
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню) por
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
502 visualizações15 slides
Стилизация текста (HTML5 тема 05 - стилизация текста) por
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
715 visualizações22 slides
Семантика текста (HTML5 тема 04 - семантика текста) por
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
545 visualizações12 slides
Основы CSS (HTML5 тема 02 - основы CSS) por
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
279 visualizações42 slides

Mais de Noveo(20)

Гуманитарные специальности в IT-индустрии por Noveo
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
Noveo9.3K visualizações
Box model, display and position (HTML5 тема 07 - box model, display position) por Noveo
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
Noveo442 visualizações
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню) por Noveo
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Noveo502 visualizações
Стилизация текста (HTML5 тема 05 - стилизация текста) por Noveo
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
Noveo715 visualizações
Семантика текста (HTML5 тема 04 - семантика текста) por Noveo
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
Noveo545 visualizações
Основы CSS (HTML5 тема 02 - основы CSS) por Noveo
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
Noveo279 visualizações
Структура HTML документа (HTML5 тема 01 - структура html документа) por Noveo
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
Noveo402 visualizações
Yii2 por Noveo
Yii2Yii2
Yii2
Noveo662 visualizações
Сессии и авторизация por Noveo
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
Noveo244 visualizações
Rest por Noveo
RestRest
Rest
Noveo370 visualizações
PHP basic por Noveo
PHP basicPHP basic
PHP basic
Noveo244 visualizações
PHP Advanced por Noveo
PHP AdvancedPHP Advanced
PHP Advanced
Noveo275 visualizações
PHP and MySQL por Noveo
PHP and MySQLPHP and MySQL
PHP and MySQL
Noveo229 visualizações
MySQL por Noveo
MySQLMySQL
MySQL
Noveo117 visualizações
Push Notifications (Lecture 22 – push notifications) por Noveo
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
Noveo233 visualizações
RxJava+RxAndroid (Lecture 20 – rx java) por Noveo
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
Noveo952 visualizações
Работа с соцсетями (Lecture 19 – social) por Noveo
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
Noveo253 visualizações
Работа с геоданными (Lecture 18 – geolocation) por Noveo
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
Noveo316 visualizações
Animations (Lecture 17 – animations) por Noveo
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
Noveo332 visualizações
Toolbar (Lecture 16 – toolbar) por Noveo
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
Noveo236 visualizações

iOS-02-Паттерны ООП