Основные понятия ОО программирования в терминах Objective-C

25.06.2013

Переходим к нашему следующему пункту разбора вопросов на собеседовании. Теперь мы разбираем обьектно-ориентированное программирование в приложении к Objective-C.

А как правильно пишется ваша ЖЫзнь?

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

Objective-C является надмножеством языка С и во многом схож с ним. Объект реализуется через класс. Класс это некая структура описывающая хранимые данные и методы взаимодействия с ними. Так же как и в С класс находится в двух файлах — заголовочном с расширением .h   и  файле реализации с расширением .m (m — модуль,). В заголовочном файле содержится описание методов, переменных и прочих нужных вещей. Только описание. А вот в файле реализации эти все полезные штуки реализуются , отсюда и название.

Разберем пару пустых файлов созданных в XCode

Файл заголовка

#import <Foundation/Foundation.h>
@interface testItem : NSObject

{
NSString *testString;
}
-(void)setTestString:(NSString *) str;

@end

Что мы видим в этом файле, в первой строке идет импорт базового фреймворка Foundation описывающего основы всех обьектов. Далее идет интерфейс обьекта. Он соответствует интерфейсу базового обьекта NSObject, описывающего базовый интерфейс обьекта. Об этом далее.
В фигурных скобках мы видим описание переменной testString имеющей тип  NSString (объектный тип релизующий строку )

И ниже описание метода сеттера нашей переменной. В качестве параметра он будет принимать строку с типом NSString
Ну и @end как понятно из контекста это конец описания и файла.

Файл реализации

#import «testItem.h»
@implementation testItem
-(void)setTestString:(NSString *) str
{
testString = str;
}
@end

Тут  тоже все не очень сложно. В первой строке мы импортируем наш заголовочный файл с описаниями, в во второй начинаем реализацию (англ. implementation)

Далее идет метод нашего класса test, устанавливающий значение переменной. Можно еще реализовать метод выводящий значение переменной и мы получим классическую реализацию методов акцессоров типа setter и getter.  Метод сеттера в нашем случае очень простой и присваивает переменной значение аргумента метода-функции (от англ Set устанавливать).

Ну а теперь представим себе сферического коня в вакууме, то есть некий код использующий наш обьект.

testItem *t  = [[testItem alloc] init];
[t setTestString:@»test»];
NSLog(@»%@»,[t testString]);

В первой строке мы создаем объект t посылая ему сообщения alloc и init, alloc создает экземпляр класса и возвращает указатель на него, а init в идеале выполняет некую работу по инициализации обьекта. В нашем случае мы это не реализовывали и этот метод будет наследоваться от базового суперкласса и на текущем этапе его можно проигнорировать.
Во второй строке мы присваиваем обьекту t строку test через созданный ранее сеттер.
Ну а в третьей через метод вывода логовых сообщений выводим это значение в debug консоль.

Теперь рассмотрим другой вариант с использованием свойств

Заголовочный файл

@interface test : NSObject
@property (nonatomic) NSString *testString;
@end

Файл реализации

@implementation test
@synthesize testString;
@end

Функционально тоже самое. Мы описали и синтезировали свойство testString и система сама создаст методы сеттера и геттера.

Протокол Objective-C – это некое соглашение о используемых методах классов. С его помощью можно согласовать что в нужном классе будет необходимый метод. Это почти тоже самое что и интерфейс :). В общем мы описывали интерфейс в заголовочном файле и они описывает что может класс, а вот протокол необходим для взаимодействия с внешними обьектами. Т.е. мы можем его дополнительно создать, выделить в него несколько методов которые будут использоваться другими классами. В общем описание сумбурное, но сформулировать четче я пока не могу.

Комментариев нет

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *