Все программы на Objective-C состоят из следующих двух фундаментальных элементов: программные утверждения (код) и данные программы.
Инкапсуляция (Data Encapsulation) — это концепция объектно-ориентированного программирования, которая связывает вместе данные и функции, манипулирующие этими данными, и защищает их от внешнего вмешательства и неправильного использования.
Инкапсуляция данных привела к такой важной концепции ООП, как сокрытие данных.
Инкапсуляция данных — это механизм логического связывания данных и функций, которые их используют, а абстракция данных — это механизм раскрытия только интерфейсов и сокрытия деталей реализации от пользователя.
Objective-C поддерживает свойства инкапсуляции и сокрытия данных через создание определяемых пользователем типов, называемых классами (объекта).
Например:
@interface Adder : NSObject { NSInteger total; } - (id)initWithInitialNumber:(NSInteger)initialNumber; - (void)addNumber:(NSInteger)newNumber; - (NSInteger)getTotal; @end
Переменная total
здесь является приватной, и мы не можем получить к ней доступ извне класса.
Это означает, что доступ к ним могут получить только другие члены класса Adder
, но не любая другая часть вашей программы. Это один из способов реализации инкапсуляции.
Методы внутри файла интерфейса доступны и являются общедоступными (public).
Существуют также приватные методы (private), которые записываются с помощью расширений, с которыми мы познакомимся отдельно.
Любая программа на Objective-C, в которой вы реализуете класс с переменными-членами public
и private
, является примером инкапсуляции и абстракции данных.
Рассмотрим следующий пример —
#import <Foundation/Foundation.h> @interface Adder : NSObject { NSInteger total; } - (id)initWithInitialNumber:(NSInteger)initialNumber; - (void)addNumber:(NSInteger)newNumber; - (NSInteger)getTotal; @end @implementation Adder -(id)initWithInitialNumber:(NSInteger)initialNumber { total = initialNumber; return self; } - (void)addNumber:(NSInteger)newNumber { total = total + newNumber; } - (NSInteger)getTotal { return total; } @end int main(int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Adder *adder = [[Adder alloc]initWithInitialNumber:10]; [adder addNumber:5]; [adder addNumber:4]; NSLog(@"The total is %ld",[adder getTotal]); [pool drain]; return 0; }
Когда приведенный выше код компилируется и выполняется, он выдает следующий результат —
2013-09-22 21:17:30.485 DataEncapsulation[317:303] The total is 19
Вышеприведенный класс складывает числа и возвращает сумму. Публичные члены addNum
и getTotal
являются интерфейсами для внешнего мира, и пользователь должен знать их, чтобы использовать класс.
Закрытый член total
— это то, что скрыто от внешнего мира, но необходимо для правильной работы класса.
Большинство из нас на горьком опыте научились делать члены класса закрытыми по умолчанию, если только нам действительно не нужно их раскрывать. Это не просто хорошая инкапсуляция, а также хороший стиль программирования.
Важно понимать инкапсуляцию данных, поскольку это одна из основных особенностей всех языков объектно-ориентированного программирования (ООП), включая Objective-C.
Итак, в объектно-ориентированном программировании (OOP) концепция инкапсуляции используется для связывания вместе данных и функций, которые манипулируют данными, что защищает их от внешнего вмешательства и неправильного использования.
В сумме это делает программу более стабильной и предсказуемой.
Важной концепцией объектно-ориентированного программирования, используемой для сокрытия данных, является инкапсуляция данных.
Перечислим все важные утверждения, cделанные в статье выше:
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…