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

на главную - закладки

Жанры

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

Обратите внимание, что файл секции interface импортируется в файл секции implementation с помощью следующего оператора: #import Traction.h"

Это позволяет компилятору получать информацию о классах и методах, объявленных для класса Fraction, и обеспечивать согласованность между этими файлами. Переменные экземпляра внутри класса обычно не переобъявляют внутри секции implementation (хотя это можно делать), чтобы компилятор брал эту информацию из секции interface, содержащейся в Fraction.h.

Импортируемый файл заключается в кавычки, а не в угловые скобки (< и >), как <Foundation/Foundation.h>. Кавычки используются для локальных файлов (создаваемых вами вместо системных файлов), и они показывают компилятору, где искать указанный файл. Когда используются кавычки, компилятор обычно ищет сначала указанный файл в текущей папке, а затем — в списке других мест. Вы можете указывать для компилятора конкретные места поиска.

Пример тестовой программы в файле FractionTest.m: #import "Fraction.h" int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Fraction *myFraction = [[Fraction alloc] init]; // задание дроби (fraction) 1/3 [myFraction setNumerator: 1]; [myFraction setDenominator: 3]; // вывод дроби NSLog (@"The value of myFraction is:"); [myFraction print]; [myFraction release]; [pool drain]; return 0; }

Программа FractionTest.m включает файл секции interface Fraction.h, а не файл секции implementation Fraction.m. Таким образом, она разделена на три отдельных файла. Вы можете компилировать и запускать программу точно так же, как раньше. Выберите Build and Go в меню Build или щелкните на значке Build and Go в основном окне Xcode.

Если вы компилируете программы из командной строки, укажите компилятору Objective-C оба файла с расширением «.т». При использовании дсс командная строка будет выглядеть следующим образом: gcc -framework Foundation Fraction.m FractionTest.m -о FractionTest

В результате будет создан исполняемый файл с именем FractionTest. Ниже приводятся результаты вывода при выполнении этой программы.

Вывод программы 7.1 FractionTest The value of myFraction is: (Значение myFraction) 1/3 7.2. Синтезируемые методы доступа

В Objective-C 2.0 методы-установщики (setter) и методы-получатели (getter) (которые называют методами доступа — accessor methods) можно генерироваться автоматически. Мы не описывали этого до настоящего момента, поскольку было важно, чтобы вы поняли, как писать эти методы самостоятельно. Однако это настолько удобно, что пора объяснить вам, как использовать эту возможность.

Первый шаг — задание свойств в директиве (@property в секции interface. К этим свойствам относятся переменные экземпляра. Для класса Fraction в эту категорию попадают две переменные экземпляра: numerator и denominator. Ниже приводится новая секция interface с добавлением директивы (@property. @interface Fraction : NSObject { int numerator; int denominator; } @property int numerator, denominator; -(void) print; -(double) convertToNum; @end

Мы больше не включаем определения методов-получателей и методов-установщиков: numerator, denominator, setNumerator: и setDenominator:. Нам нужно, чтобы компилятор Objective-C автоматически генерировал, или синтезировал (synthesize) их для нас. Для этого служит директива (@synthesize в секции implementation, как показано ниже. #import «Fraction.h» @implementation Fraction @synthesize numerator, denominator; -(void) print {NSLog (@"%i/%i", numerator, denominator); } -(double) convertToNum { if (denominator != 0) return (double) numerator / denominator; else return 1.0; @end

Следующая строка указывает компилятору Objective-C, что нужно создать по паре методов (установщик и получатель) для каждой из указанных переменных экземпляра (numerator и denominator). @synthesize numerator, denominator;

В общем случае, если у вас есть переменная экземпляра с именем х, то включение следующей строки в секцию implementation указывает компилятору, что нужно синтезировать метод-получатель с именем х и метод-установщик с именем setX:. @synthesize х;

Автоматическое создание методов компилятором имеет смысл, поскольку генерируемые методы доступа эффективны и надежны при работе с несколькими потоками, на нескольких машинах, с несколькими процессорами.

А теперь вернемся к программе 7.1 и внесем указанные изменения в секции interface и implementation, чтобы методы доступа синтезировалисьы автоматически. Убедитесь, что программа выводит те же результаты. 7.3. Доступ к свойствам с помощью оператора «точка»

Для доступа к свойствам имеется более удобный синтаксис. Чтобы получить значение числителя (numerator), хранящееся в myFraction, можно использовать строку [myFraction numerator]

Сообщение numerator передается объекту myFraction, он возвращает требуемое значение. С помощью оператора «точка» можно написать эквивалентное выражение: my Fraction, numerator

Его общий формат instance.property (экземпляр.свойство)

Этот синтаксис присваивает значения: instance, property = значение

Это эквивалентно выражению [instance setProperty: значение]

В программе 7.1 мы задали numerator (числитель) и denominator (знаменатель) дроби 1/3 с помощью двух строк кода: [myFraction setNumerator: 1]; [myFraction setDenominator: 3];

Ниже приводится эквивалентный способ записи этих строк: myFraction.numerator = 1; myFraction.denominator = 3;

Далее мы будем использовать эти средства для синтеза методов и доступа к свойствам. 7.4. Передача методам нескольких аргументов

Продолжим работу с классом Fraction и внесем некоторые дополнения. Мы определили шесть методов. Было бы хорошо иметь такой метод, чтобы можно было задавать числитель и знаменатель с помощью одного сообщения. Если метод принимает несколько аргументов, после каждого аргумента ставится двоеточие. Аргументы становятся частью имени метода. Например, метод с именем addEntryWithName:andEmail: принимает два аргумента : имя (name) и адрес электронной почты (email). Метод addEntryWithName:andEmail:andPhone: принимает три аргумента: имя, адрес электронной почты и номер телефона (phone).

Метод, с помощью которого задаются numerator (числитель) и denominator (знаменатель), можно было бы назвать setNumerator:andDenominator: и использовать следующим образом: [myFraction setNumerator: 1 andDenominator: 3];

Это вполне подходящий выбор для имени метода, но можно подобрать и более удобное для чтения имя метода, например, setTo:over:. Присвоим myFraction значение 1/3 и сравним это сообщение с предыдущим вариантом: [myFraction setTo: 1 over: 3]; (присвоить 1, деленное на 3)

Поделиться:
Популярные книги

Том 3. Рассказы 1917-1930. Стихотворения

Грин Александр Степанович
3. Собрание сочинений в пяти томах
Проза:
русская классическая проза
6.25
рейтинг книги
Том 3. Рассказы 1917-1930. Стихотворения

Язык программирования Си. Издание 3-е, исправленное

Ритчи Деннис М.
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
Язык программирования Си. Издание 3-е, исправленное

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Враг из прошлого тысячелетия

Барон Бранд Берс. Том 3

Limonad
3. Бранд Берс
Проза:
магический реализм
5.00
рейтинг книги
Барон Бранд Берс. Том 3

Экспансия. Тетралогия

Романов Николай
Фантастика:
боевая фантастика
6.11
рейтинг книги
Экспансия. Тетралогия

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Золото бунта

Иванов Алексей Викторович
Приключения:
исторические приключения
7.50
рейтинг книги
Золото бунта

Последний реанорец. Том XII – Часть II

Павлов Вел
12. Высшая Речь
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний реанорец. Том XII – Часть II

Далекая страна. Тетралогия

Кош Алекс
Ремесло
Фантастика:
фэнтези
9.10
рейтинг книги
Далекая страна. Тетралогия

Антология «Дракула»

Морган Крис
Фантастика:
ужасы и мистика
мистика
фэнтези
городское фэнтези
5.00
рейтинг книги
Антология «Дракула»

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Дважды одарённый. Том IX

Тарс Элиан
9. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
5.25
рейтинг книги
Дважды одарённый. Том IX

Сліди СС

Самбук Ростислав Феодосьевич
Детективы:
криминальные детективы
политические детективы
5.00
рейтинг книги
Сліди СС

Город гибели

МакКаммон Роберт Рик
Фантастика:
ужасы и мистика
мистика
7.78
рейтинг книги
Город гибели