Все программы Objective-C состоят из следующих двух основных элементов:
-
Программные операторы (код) — это часть программы, которая выполняет действия, и они называются методами.
-
Данные программы. Данные — это информация о программе, на которую влияют функции программы.
Программные операторы (код) — это часть программы, которая выполняет действия, и они называются методами.
Данные программы. Данные — это информация о программе, на которую влияют функции программы.
Инкапсуляция — это концепция объектно-ориентированного программирования, которая связывает воедино данные и функции, которые манипулируют данными, и защищает как от внешнего вмешательства, так и от неправильного использования. Инкапсуляция данных привела к важной ООП-концепции сокрытия данных .
Инкапсуляция данных — это механизм связывания данных и функций, которые их используют, а абстракция данных — это механизм, который раскрывает только интерфейсы и скрывает детали реализации от пользователя.
Objective-C поддерживает свойства инкапсуляции и сокрытия данных посредством создания пользовательских типов, называемых классами . Например —
@interface Adder : NSObject { NSInteger total; } - (id)initWithInitialNumber🙁NSInteger)initialNumber; - (void)addNumber🙁NSInteger)newNumber; - (NSInteger)getTotal; @end
Переменная total является закрытой, и мы не можем получить доступ извне класса. Это означает, что к ним могут получить доступ только другие члены класса Adder, а не любая другая часть вашей программы. Это один из способов инкапсуляции.
Методы внутри файла интерфейса доступны и являются общедоступными.
Существуют частные методы, которые написаны с помощью расширений , которые мы изучим в следующих главах.
Пример инкапсуляции данных
Любая программа Objective-C, в которой вы реализуете класс с переменными открытого и закрытого членов, является примером инкапсуляции данных и абстракции данных. Рассмотрим следующий пример —
#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 являются интерфейсами с внешним миром, и пользователь должен знать их, чтобы использовать класс. Общее число закрытых членов — это то, что скрыто от внешнего мира, но необходимо для правильной работы класса.
Разработка стратегии
Большинство из нас с помощью горького опыта научились делать членов класса закрытыми по умолчанию, если только нам действительно не нужно их разоблачать. Это просто хорошая инкапсуляция .
Важно понимать инкапсуляцию данных, поскольку это одна из основных функций всех языков объектно-ориентированного программирования (ООП), включая Objective-C.