Рубріки: Теория

Objective-C: постигаем все секреты инкапсуляции

Игорь Грегорченко

Все программы на Objective-C состоят из следующих двух фундаментальных элементов: программные утверждения (код) и данные программы.

  • Программные утверждения (код). Это часть программы, которая выполняет действия, и они называются методами (Program statements).
  • Данные программы. Данные — это информация программы, на которую влияют функции программы (Program data).

Инкапсуляция (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деланные в статье выше:

  • Инкапсуляция данных — это механизм связывания данных и функций, которые манипулируют данными.
  • Абстракция данных — это механизм раскрытия только интерфейсов и сокрытия деталей реализации от пользователя.
  • В Objective-C инкапсуляция и сокрытие данных осуществляется путем создания определяемых пользователем типов, называемых классами.
  • Методы внутри файла интерфейса могут быть доступны и являются общедоступными.
  • Существуют также частные методы, которые могут быть написаны с помощью расширений.

 

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023