среда, 22 апреля 2009 г.

21.04.09. Изменяемость. Class Clusters. Категории, протоколы.

Cocoa - Изменяемость (mutability) объектов 

Некоторые классы неизменяемые, производные от них - изменяемые. 

Иногда предпочтительнее создать новый объект, чем изменять старый. 

Неизменяемые (immutable) лучше сделать, когда  данные объекта будут меняться значительно (NSString,NSData). 

Изменяемые (mutable) данные объекта будут меняться постепенно (массивы, коллекции). 

Изменяемые коллекции можно делать неизменяемыми сделав копию. Копия по умолчанию будет неизменяемая. Ее можно отдать клиенту. 

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

Могут быть проблемы, если хранить изменяемые объекты в коллекциях 

Cocoa - Class Clusters 

Кластеры объединяют классы, производные как private от абстрактного класса. В абстрактном классе есть метод создания экземпляра нужного подкласса. 

В абстрактном классе есть методы-примитивы, которые обязательны для переопределения в производных классах. Эти методы обращаются к данным производного класса. 

Остальные методы реализуются через методы-примитивы. 

Composite Object - декоратор. 

Cocoa - Категории, протоколы 
Категория - способ добавить методы к классу не создавая подклассов 

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

Категории можно назначить и NSObject. Добавленные методы будут присутствовать у всех объектов в программе.  

Неформальный протокол - это категория NSObject. Необязательно реализовывать все методы неформального протокола. Проверка реализации осуществляется через respondsToSelector:  

Протокол - аналог интерфейса 

Множественное наследование протоколов 

Проверка реализованности протокола у объекта 

Комментариев нет:

Отправить комментарий