Абстрактный класс или протокол, какова рекомендуемая практика Какао? - PullRequest
4 голосов
/ 03 апреля 2011

Я не уверен, стоит ли мне создавать абстрактный класс и серию потомков, которые наследуют этот абстрактный класс, или определять протокол. Какая лучшая практика в какао?

Ответы [ 2 ]

5 голосов
/ 03 апреля 2011

Это зависит.

Шаблон абстрактного класса + потомки известен как кластер класса в терминологии Какао. Хорошо известными примерами являются NSString и NSArray. Основным преимуществом этого подхода является то, что вы можете реализовать методы базового класса, которые работают в терминах базового набора методов и наследуются; например, подкласс NSString должен только реализовать -length и -characterAtIndex: для всех открытых методов экземпляра NSString для работы (хотя это не будет очень эффективно).

Недостатком этого шаблона является то, что реализации должны наследоваться от базового класса, что может быть серьезным ограничением в языке с одним наследованием.

Протокол, с другой стороны, может быть принят любым классом, но не может обеспечить базовую реализацию. Это очень похоже на статически проверенную версию набора текста уткой; приняв протокол, который вы утверждаете, что можете крякать, и, требуя протокол, вы можете ограничить параметр классами, способными к кряку, не требуя определенного базового класса.

Если вы планируете предоставить стандартный набор реализаций для своей абстракции, вам, вероятно, нужен кластер классов. Если вы хотите общаться с открытым набором объектов, реализующих вашу абстракцию, вам, вероятно, нужен протокол.

2 голосов
/ 03 апреля 2011

Позвольте мне порекомендовать книгу под названием Шаблоны проектирования Какао Это очень хорошая книга, чтобы посмотреть, как работает структура Какао и какие парадигмы используются.

Шаблоны дизайна какао на Amazon

...