Чтение онлайн

ЖАНРЫ

Программирование на Objective-C 2.0
Шрифт:

Объект (object) — это определенная «вещь». В объектно-ориентированном про-граммировании объект — это и вещь, и действия, которые с ней можно делать. Этим объектно-ориентированные языки программирования отличаются, на-пример, от языка С, который является процедурным языком. В С сначала думают о том, что хотят сделать, и только затем заботятся об объектах, что почти противоположно объектно-ориентированному подходу.

Рассмотрим пример из повседневной жизни. Предположим, у вас есть авто-мобиль. Это объект, которым вы владеете. Это не какой-либо произвольный автомобиль; это определенный автомобиль, который собран на заводе в Детройте или в Японии, или где-то еще. У него есть идентификационный номер (vehicle identification number, VIN),

который уникально идентифицирует этот автомобиль.

В объектно-ориентированной терминологии ваш автомобиль является эк-земпляром (instance) автомобиля. Развивая эту терминологию, автомобиль (саг) — имя класса, из которого этот экземпляр был создан. При выпуске каждого нового автомобиля создается новый экземпляр данного класса автомобилей, и каждый экземпляр автомобиля называется объектом.

Ваш автомобиль может иметь серебристую окраску, может быть с откидным или жестким верхом, и т.д. Вы выполняете определенные действия со своим автомобилем — водите его, заправляете бензином, моете, выполняете техническое обслуживание и т.д.

Действия, приведенные в таблице 3.1, можно выполнять с вашим автомобилем и с любыми другими автомобилями. Например, ваша сестра водит свой автомобиль, моет его, заправляет его бензином и т.д. Объект Что вы делаете с ним Ваш автомобиль Водите. Заправляете бензином. Моете. Выполняете техническое обслуживание. 3.2. Экземпляры и методы

Уникальная реализация класса - это экземпляр. Действия, которые выполняются над экземпляром, называются методами (method). В некоторых случаях метод может применяться к экземпляру класса или к самому классу. Например, мытье автомобиля применяется к экземпляру (все методы, перечисленные в таблице 3.1, являются методами для экземпляра). Определение количества типов автомобилей, выпускаемых изготовителем, применяется к классу, то есть это метод для класса.

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

Применение метода к объекту может влиять на состояние (state) этого объекта. Если метод определяется как «заправить мой автомобиль бензином», то после выполнения этого метода будет заполнен бензобак вашего автомобиля. Таким образом, метод повлияет на состояние бака автомобиля.

Объекты являются уникальными представителями класса, и каждый объект содержит некоторую информацию (данные), которые обычно являются частными для этого объекта. Методы — это средства доступа и изменения этих данных.

Язык программирования Objective-C имеет следующий синтаксис для при-менения методов к классам и экземплярам: [ Класс-или-Экземпляр метод ];

В этом синтаксисе после левой прямоугольной скобки следует имя класса или экземпляра этого класса, а затем (после одного или нескольких пробелов) — ме-тод, который нужно выполнить. В конце ставится правая прямоугольная скобка и завершающая точка с запятой. Если вы обращаетесь к классу или экземпляру для выполнения некоторого действия, можно сказать, что вы отправляете ему сообщение (message); это сообщение принимает получатель (receiver). По-этому показанный выше формат можно описать следующим образом: [ получатель сообщение ] ;

Вернемся к списку таблицы 3.1 и перепишем ее с помощью этого синтаксиса. Но прежде чем сделать это, потребуется получить ваш новый (new)

автомобиль (yourCar). Для этого нужно обратиться на завод, например, в такой форме: yourCar = [Car new]; получение нового автомобиля

Вы отправляете сообщение классу Саг (получателю сообщения), запрашивая у него получение нового автомобиля. Результирующий объект (представляющий ваш уникальный автомобиль) сохраняется в переменной yourCar. С этого момента yourCar можно использовать для ссылки на ваш экземпляр автомобиля.

Поскольку вы обращаетесь на завод для получения автомобиля, метод new называется методом завода или методом класса. Остальные действия для вашего нового автомобиля будут методами экземпляра, поскольку они применяются именно к вашему автомобилю. Ниже приводятся примеры выражений с со-общениями, которые можно написать для вашего автомобиля. [yourCar prep]; подготовка для первого использования [yourCar drive]; вождение вашего автомобиля [yourCar wash]; мытье вашего автомобиля [yourCar getGas]; заправка бензином вашего автомобиля, если это требуется [yourCar service]; обслуживание вашего автомобиля [yourCar topDown]; если он с откидным верхом [yourCar topllp]; currentMileage = [suesCar currentOdometer];

В последнем примере используется метод экземпляра, который возвращает определенную информацию: текущий километраж (в милях), показанный одо-метром. Эта информация сохраняется в переменной currentMileage.

Ваша сестра Сью (Sue) может использовать те же методы для своего экземп-ляра автомобиля: [suesCar drive]; [suesCar wash]; [suesCar getGas];

Применение одних и тех же методов к разным объектам является одной из ключевых концепций объектно-ориентированного программирования.

Работа с автомобилями вряд ли потребуется в ваших программах. Вашими объектами будут компьютерно-ориентированные элементы, такие как окна, пря-моугольники, фрагменты текста, калькулятор или список воспроизведения. Ваши методы будут выглядеть так же, как методы, используемые для автомобилей: [myWindow erase]; Очистка окна [myRect getArea]; Расчет площади прямоугольника [userText spellCheck]; Проверка правописания в определенном тексте [deskCalculator clearEntry]; Стирание последней записи [favoritePlaylist showSongs]; Показ песен в списке воспроизведения избранного [phoneNumber dial]; Набор номера телефона 3.3. Класс Objective-C для работы с дробями

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

Как всегда, начнем с изучения процедуры. Предположим, что вам нужно написать программу для работы с дробями. Вам могут потребоваться операции сложения, вычитания, умножения и т.д. Если вы не работали с классами, то можете начать с простой программы, которая приводится ниже. // Simple program to work with fractions (Простая программа для работы с дробями) #import <Foundation/Foundation.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int numerator = 1; int denominator = 3; NSLog (@"The fraction is %i/%i", numerator, denominator); [pool drain]; return 0; }

Вывод программы 3.1 The fraction is 1/3 (Дробь равна 1/3)

В программе 3.1 дробь представлена своими числителем (numerator) и зна-менателем (denominator). После создания автоматически высвобождаемого пула (autorelease pool) в двух строках процедуры main объявляются две переменные целого типа — numerator и denominator, которым присваиваются целые значения — соответственно 1 и 3. Это эквивалентно следующим строкам: int numerator, denominator; numerator = 1; denominator = 3;

Мы представили дробь 1/3, сохранив значение 1 в переменной numerator и значение 3 — в переменной denominator. Если нужно сохранить много дробей, то при таком подходе это потребует больших усилий. Каждый раз для ссылки на дробь придется ссылаться на соответствующие числитель и знаменатель. А вы-полнение операций с этими дробями будет очень трудным.

Поделиться с друзьями: