Учебники

Инкапсуляция данных в Objective-C

Все программы Objective-C состоят из следующих двух основных элементов:

  • Программные операторы (код) — это часть программы, которая выполняет действия, и они называются методами.

  • Данные программы. Данные — это информация о программе, на которую влияют функции программы.

Программные операторы (код) — это часть программы, которая выполняет действия, и они называются методами.

Данные программы. Данные — это информация о программе, на которую влияют функции программы.

Инкапсуляция — это концепция объектно-ориентированного программирования, которая связывает воедино данные и функции, которые манипулируют данными, и защищает как от внешнего вмешательства, так и от неправильного использования. Инкапсуляция данных привела к важной ООП-концепции сокрытия данных .

Инкапсуляция данных — это механизм связывания данных и функций, которые их используют, а абстракция данных — это механизм, который раскрывает только интерфейсы и скрывает детали реализации от пользователя.

Objective-C поддерживает свойства инкапсуляции и сокрытия данных посредством создания пользовательских типов, называемых классами . Например —

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber🙁NSInteger)initialNumber;
- (void)addNumber🙁NSInteger)newNumber;
- (NSInteger)getTotal;

@end

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

Методы внутри файла интерфейса доступны и являются общедоступными.

Существуют частные методы, которые написаны с помощью расширений , которые мы изучим в следующих главах.

Пример инкапсуляции данных

Любая программа Objective-C, в которой вы реализуете класс с переменными открытого и закрытого членов, является примером инкапсуляции данных и абстракции данных. Рассмотрим следующий пример —

Live Demo

#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.