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

ЖАНРЫ

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

Имена методов и переменных экземпляра, к которым они выполняют доступ, совпадают. Это распространенная практика. В программе 3.4 выполняется проверка этих методов. // Program to access instance variables - cont’d (Программа доступа к переменным экземпляра - продолжение) #import <Foundation/Foundation.h> //---- @interface section ---- @interface Fraction: NSObject { int numerator; int denominator; } -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; -(int) numerator; -(int) denominator; @end //---- @implementation section ---- @implementation Fraction -(void) print { NSLog (@»%i/%i», numerator, denominator); } -(void) setNumerator: (int) n { numerator = n; } -(void) setDenominator: (int) d { denominator = d; } -(int) numerator { return numerator; } -(int) denominator { return denominator; } @end //---- program section ---- int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Fraction *myFraction = [[Fraction alloc] init]; // Set fraction to 1 /3 [myFraction setNumerator: 1]; [myFraction setDenominator: 3]; // Display the fraction using our two new methods NSLog (@The value of myFraction is: %i/%i", [myFraction numerator], [myFraction denominator]); [myFraction release]; [pool drain]; return 0; }

Вывод

программы 3.4 The value of myFraction is 1/3 (Значение myFraction 1/3)

Оператор NSLog выводит результаты отправки двух сообщений экземпляру myFraction: первого — для считывания значения его переменной numerator, второго — для считывания значения denominator. NSLog (@"The value of myFraction is: %i/%i", [myFraction numerator], [myFraction denominator]);

Методы, которые задают значения переменных экземпляра, называют ус-тановщиками (setters), а методы, которые используются для считывания значе-ний переменных экземпляра, называются получателями (getters). Для класса Fraction методы setNumerator: и setDenominator: являются установщиками, a numerator и denominator являются получателями.

Примечание. Вскоре вы познакомитесь с удобным средством Objective-C 2.0, которое позволяет автоматически создавать методы-установщики и методы- получатели.

Мы должны указать, что метод с именем new объединяет действия методов alloc и init. Поэтому следующую строку можно использовать для выделения па-мяти и инициализации нового объекта Fraction: Упражнения

Какие из следующих имен не являются допустимыми? Почему? Int playNextSong 6_05 _calloc Хх alphaBetaRoutine clearScreen_1312 z Reinitialize _ A$

По аналогии с автомобилем, рассмотрите объект, который вы используете каждый день. Определите класс для этого объекта и напишите пять действий для этого объекта.

Для списка из упражнения 2 используйте следующий синтаксис, чтобы переписать ваш список в указанном формате: [экземпляр метод];

Предположим, что у вас, помимо автомобиля, есть лодка и мотоцикл. На-пишите список действий, которые вы можете выполнять с каждым из них. Есть ли какое-то перекрытие между этими действиями?

В соответствии с вопросом 4 предположим, что у вас есть класс с именем Vehicle (Средство передвижения) и объект с именем myVehicle, которым может быть Саг (Автомобиль), Motorcycle (Мотоцикл) или Boat (Лодка). Предположим, вы написали следующее: [myVehicle prep]; [myVehicle getGas]; [myVehicle service]; Видите ли вы преимущества в применении действия к объекту, который относится к одному из нескольких классов?

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

Определите класс с именем XYPoint для декартовых координат (х, у), где х и у — целые значения. Определите методы, позволяющие по отдельности задавать координаты точки и считывать их значения. Напишите программу на Objective-C, чтобы реализовать этот новый класс.

Глава 4.

Типы данных и выражения

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

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

В языке программирования Objective-C имеются три основных типа данных: float, double и char. Переменную, которая объявлена с типом float, можно ис-пользовать для хранения чисел с плавающей точкой (то есть значений, имеющих дробную часть). Тип double тоже хранит числа с плавающей точкой, но с двойной точностью. Тип данных char можно использовать для хранения одного символа, например, буквы «а», цифры «6», знака «;» (подробнее об этом см. ниже).

В Objective-C любое число, символ или строка символов называется констан-той (constant). Например, число 58 является целым значением-константой. Строка @"Programming in Objective-C is fun.\n" — это пример объекта-константы со строкой символов. Выражение, содержащее только значения-константы, называется выражением-константой, или константным выражением (constant expression). Следующее выражение является константным, поскольку каждый из членов этого выражения является константой: 128 + 7-17

Но если i объявлена как переменная целого типа, то это выражение уже не будет константным: 128 + 7-i Тип int

В Objective-C целая константа состоит из одной или нескольких цифр. Знак «ми-нус» перед цифрами указывает, что это отрицательное значение. 158, -10 и 0 — примеры целых констант. Между цифрами не допускаются пробелы, и значения между тройками цифр нельзя разделять запятыми. (То есть число 12,000 должно быть записано как 12000.)

В Objective-C имеется два специальных формата записи целых констант с основанием, отличным от 10. Если первая цифра целого значения равна 0, это значение считается восьмеричным, octal (по основанию 8). В этом случае остальные цифры должны быть допустимыми восьмеричными цифрами от 0 до 7. Например, чтобы представить в Objective-C восьмеричное значение 50 (эквива-лентное десятичному значению 40), используется форма записи 050. Восьмеричная константа 0177 эквивалентна десятичному значению 127(1 x64 + 7x8 + 7). Целое значение можно вывести на экран в восьмеричной записи, вызвав NSLog и указавы символы формата %о в строке форматирования. Значение выводится в восьмеричной записи без ведущего нуля. Символы формата %#о выводят ведущий нуль перед восьмеричным значением.

Если перед целой константой ставятся 0 и буква х (прописная или строчная), значение считается шестнадцатеричным (по основанию 16). После буквы х следуют цифры шестнадцатеричного значения (это цифры 0-9 и буквы a-f (или A-F). Буквы представляют, соответственно, десятичные числа от 10 до 15. На-пример, чтобы присвоить шестнадцатеричное значение FFEF0D целой пере-менной с именем rgbColor, можно использовать оператор: rgbColor = OxFFEFOD;

Символы форматирования %х выводят значение в шестнадцатеричном фор-мате без ведущих символов Ох и с использованием строчных букв a-f. Чтобы вывести значение с ведущими символами Ох, нужно использовать символы фор-матирования %#х: NSLog ("Color is %#x\n", rgbColor);

Для вывода ведущего символа х и шестнадцатеричных цифр прописными буквами в символах форматирования ставится прописная буква X: %Х или %#Х.

Каждое значение, будь то символ, целое число или число с плавающей точ-кой, имеет связанный с ним диапазон значений. Этот диапазон связан с коли-чеством памяти, выделяемой для хранения определенного типа данных. Обычно он зависит от компьютера, на котором выполняется работа, и поэтому называется реализацией или машинно-зависимым диапазоном (implementation или machine dependent). Так, целое значение может занимать на вашем компьютере 32 или 64 бита.

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