К какой категории OOPS относится функция категорий Objective-C? - PullRequest
1 голос
/ 16 сентября 2011

Насколько мне известно, Objective-C - это объектно-ориентированный язык программирования, а Categories - это функция, предоставляемая Objective-C.

Итак, я хотел бы знать, что функция категории входит в понятие ООП

  • Абстракция
  • Полиморфизм
  • Инкапсуляция
  • Наследование и т. Д.

Заранее спасибо.

Mrunal

Ответы [ 3 ]

7 голосов
/ 16 сентября 2011

@ Ответ Абизерна хороший. Я бы добавил, что категории являются формой динамической диспетчеризации, в частности, они могут использоваться для расширения существующих классов без создания подклассов.

Тем не менее, объектно-ориентированное программирование - это скорее философия дизайна, чем набор языковых функций. Кто-то может спросить: «Какой функции ООП соответствует приращение постфикса?» Ответ «нет, это особенность языка». Категории в основном не используются для реализации ООП-дизайна (хотя иногда они используются, как отмечено выше). Их первоначальное использование было разбивать большие файлы реализации. Их последующее использование состояло в предоставлении неофициальных протоколов из-за недостатка в языке (отсутствие @optional). И сегодня они в основном используются для разделения кода по линиям, специфичным для платформы (NSString+UIStringDrawing против NSString+AppKitAdditions).

Расширения аналогичны категориям и аналогично представляют собой в основном языковую функцию, а не функцию разработки ООП. Они в некоторой степени облегчают инкапсуляцию, но в основном являются побочным эффектом произвольного требования компилятора определять методы перед их использованием (я говорю «произвольный», потому что это не связано с потребностями проектирования или разработки; это просто упрощает компилятор). Расширения не следует путать с некоторыми глубокими требованиями ООП.

Таким образом, использование категорий для добавления дополнительных функций во время выполнения является динамической отправкой. Кроме того, это просто языковая функция, которая используется для нескольких не-ООП вещей.

3 голосов
/ 16 сентября 2011

Согласно книге Бака и Яктмана «Образцы дизайна какао» . Категория сама по себе является шаблоном, который поддерживается языком программирования Objective-C напрямую.

1 голос
/ 16 сентября 2011

Вероятно, ближе всего к инкапсуляции, когда речь идет об академических концепциях ООП.Но это действительно показывает разницу между академическими определениями ООП и практическим миром шаблонов проектирования ООП.

...