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

Objective-C: объекты и классы — ясное введение в ООП

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

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

Класс используется для определения формы объекта и объединяет представление данных и методы для манипулирования этими данными в один аккуратный пакет. Данные и методы внутри класса называются членами класса.

Характеристика Objective-C

  • Класс определяется в двух различных разделах, а именно @interface и @implementation.
  • Почти все находится в форме объектов.
  • Объекты получают сообщения, и объекты часто называют приемниками.
  • Объекты содержат переменные экземпляра.
  • Объекты и переменные экземпляра имеют область видимости.
  • Классы скрывают реализацию объекта.
  • Свойства используются для предоставления доступа к переменным экземпляра класса в других классах.
  • Определения классов Objective-C

Когда вы определяете класс, вы определяете чертеж типа данных. Это не определяет никаких конкретных данных, но определяет, что означает имя класса, то есть из чего будет состоять объект класса и какие операции могут быть выполнены над таким объектом.

Определение класса начинается с ключевого слова @interface, за которым следует имя интерфейса (класса) и тело класса, заключенное в фигурные скобки. В Objective-C все классы являются производными от базового класса NSObject.

Он является суперклассом всех классов Objective-C. Он предоставляет основные методы, такие как выделение памяти и инициализация. Например, мы определили тип данных Box, используя ключевое слово class, следующим образом.

@interface Box:NSObject {
   //Instance variables
   double length;    // Length of a box
   double breadth;   // Breadth of a box
}
@property(nonatomic, readwrite) double height;  // Property

@end

Переменные экземпляра являются приватными и доступны только внутри реализации класса.

Выделение и инициализация объектов Objective-C

Класс предоставляет чертежи для объектов, поэтому в основном объект создается из класса. Мы объявляем объекты класса точно так же, как и переменные базовых типов. Следующие утверждения объявляют два объекта класса Box

Box box1 = [[Box alloc]init];     // Create box1 object of type Box
Box box2 = [[Box alloc]init];     // Create box2 object of type Box

Оба объекта box1 и box2 будут иметь свои собственные копии членов данных.

Доступ к членам данных

Доступ к свойствам объектов класса можно получить с помощью оператора прямого доступа к членам (.). Для наглядности рассмотрим следующий пример:

#import <Foundation/Foundation.h>

@interface Box:NSObject {
   double length;    // Length of a box
   double breadth;   // Breadth of a box
   double height;    // Height of a box
}

@property(nonatomic, readwrite) double height;  // Property
-(double) volume;
@end

@implementation Box

@synthesize height; 

-(id)init {
   self = [super init];
   length = 1.0;
   breadth = 1.0;
   return self;
}

-(double) volume {
   return length*breadth*height;
}

@end

int main() {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];    
   Box *box1 = [[Box alloc]init];    // Create box1 object of type Box
   Box *box2 = [[Box alloc]init];    // Create box2 object of type Box

   double volume = 0.0;             // Store the volume of a box here
 
   // box 1 specification
   box1.height = 5.0; 

   // box 2 specification
   box2.height = 10.0;
  
   // volume of box 1
   volume = [box1 volume];
   NSLog(@"Volume of Box1 : %f", volume);
   
   // volume of box 2
   volume = [box2 volume];
   NSLog(@"Volume of Box2 : %f", volume);
   
   [pool drain];
   return 0;
}

 

Когда приведенный выше код компилируется и выполняется, он выдает следующий результат —

2013-09-22 21:25:33.314 ClassAndObjects[387:303] Volume of Box1 : 5.000000
2013-09-22 21:25:33.316 ClassAndObjects[387:303] Volume of Box2 : 10.000000

Свойства

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

Различные части объявления свойств выглядят следующим образом:

  • Свойства начинаются с @property, которое является ключевым словом.
  • За ним следуют спецификаторы доступа, которые бывают неатомарными или атомарными, readwrite или readonly и strong, unsafe_unretained или weak. Это зависит от типа переменной. Для любого типа указателей мы можем использовать strong, unsafe_unretained или weak. Аналогично для других типов мы можем использовать readwrite или readonly.
  • Затем следует тип данных переменной.
  • Наконец, имя свойства завершается точкой с запятой.
  • Мы можем добавить оператор synthesize в класс реализации. Но в последней версии XCode часть синтеза берет на себя XCode, и вам не нужно включать оператор synthesize.

Только с помощью свойств мы можем получить доступ к переменным экземпляра класса. Фактически, для свойств создаются внутренние методы getter и setter.

Например, предположим, у нас есть свойство @property (nonatomic, readonly ) BOOL isDone. Под капотом создаются сеттеры и геттеры, как показано ниже:

-(void)setIsDone(BOOL)isDone;
-(BOOL)isDone;

 

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

Обучение 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