355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Стивен Кочан » Программирование на Objective-C 2.0 » Текст книги (страница 27)
Программирование на Objective-C 2.0
  • Текст добавлен: 19 сентября 2016, 13:02

Текст книги "Программирование на Objective-C 2.0"


Автор книги: Стивен Кочан



сообщить о нарушении

Текущая страница: 27 (всего у книги 32 страниц)

Программа 21.2. Interface-файл Fraction_CalculatorViewController.h #import #import "Calculator.h" @interface Fraction_CalculatorViewController : UlViewController { UlLabel *display; char op; int currentNumber; NSMutableString *displaystring; BOOL firstOperand, isNumerator; Calculator *myCalculator; } @property {nonatomic, retain) IBOutlet UlLabel *display; @property (nonatomic, retain) NSMutableString *displaystring; -(void) processDigit: (int) digit; -(void) processOp: (char) op; -(void) storeFracPart; // Числовые клавиши -(IBAction) clickDigit; (id) sender; // Клавиши арифметических операций -(IBAction) clickPlus: (id) sender; -(IBAction) clickMinus: (id) sender; -(IBAction) clickMultiply: (id) sender; -(IBAction) clickDivide: (id) sender; // Другие клавиши -(IBAction) clickOver: (id) sender; -(IBAction) clickEquals: (id) sender; -(IBAction) clickClear: (id) sender; @end

У нас имеются служебные переменные для создания дробей (currentNumber, firstOperand и isNumerator) и для создания выводимой строки (displayString). Объект типа Calculator (myCalculator) выполняет конкретные вычисления между двумя дробями. Мы выполним привязку метода с именем clickDigit: для обработки нажатий цифровых клавиш 0-9. И, наконец, мы определяем методы для хранения операции, которая должна быть выполнена (clickPlus:, clickMinus:, clickMultiply:, clickDivide:), выполняя сами вычисления при нажатии клавиши = (clickEquals:), сброс текущей операции (clickClear:) и отделение числителя от знаменателя при нажатии клавиши Over (clickOver:). Несколько методов (processDigit:, processOp: и StoreFracPart) определяются для этих задач как вспомогательные средства.

В программе 21.2 показан файл секции implementation для этого класса контроллера.

Программа 21.2. Implementation-файл Fraction_CalculatorViewController.m #import «Fraction_CalculatorViewController.h» @implementation FractionCalculatorViewController @synthesize display, displayString; -(void) viewDidLoad { // Место переопределения для настройки после запуска приложения firstOperand = YES; isNumerator = YES; self.displayString = [NSMutableString stringWithCapacify: 40]; myCalculator = [[Calculator alloc] init]; -(void) processDigit: (int) digit { currentNumber = currentNumber * 10 + digit; [displayString appendString: [NSString stringWithFormat: "%i digit]]; [display setText: displayString]; -(IBAction) clickDigit:(id)sender { int digit = [sender tag]; [self processDigit: dig it]; } -{void) processOp: (char) theOp { NSString *opStr; op = theOp; switch (theOp) { case opStr = + "; break; case opStr = -"; break; case ■*': opStr = <@" ? "; break; case opStr = break; } [self storeFracPart]; firstOperand = NO; isNumerator = YES; [displaystring appendString: opStr); [display setText: displaystring]; -(void) storeFracPart { if (firstOperand) { if (isNumerator) { myCalculator.operandl.numerator = currentNumber; myCalculator.operandl .denominator = 1; // e g. 3*4/5 = ) else myCalculator.operandl.denominator = currentNumber; } else if (isNumerator) { myCalculator.operand2.numerator = currentNumber; myCalculator.operand2.denominator = 1; // e.g. 3/2*4 = } else { myCalculator.operand2.denominator = currentNumber; firstOperand = YES; } currentNumber = 0; } -(IBAction) clickOver: (id) sender { [self storeFracPart]; isNumerator = NO; [displaystring appendString: @"/"]; [display setText: displaystring]; } // Клавиши арифметических операций -(IBAction) clickPlus: (id) sender { [self processOp: } -(IBAction) clickMinus: (id) sender { [self processOp: } -(IBAction) clickMultiply: (id) sender { [self processOp: } -(IBAction) clickDivide: (id) sender { [self processOp: У]; ) // Другие клавиши -(IBAction) clickEquals: (id) sender { [self storeFracPart]; [myCalculator performOperation: op]; [displaystring appendString: = "]; [displaystring appendString: [myCalculator.accumulator convertToString]]; [display setText: displayString]; currentNumber = 0; isNumerator = YES; firstOperand = YES; [displayString setString: (§>""]; } -(IBAction) clickClear: (id) sender { isNumerator = YES; firstOperand = YES; currentNumber = 0; [myCalculator clear]; [displayString setString: @'"]; [display setText: displayString]; -(void)dealloc { [myCalculator dealloc]; [super dealloc]; } @end

Окно калькулятора пока содержит только одну метку, как в предыдущем приложении, и мы по-прежнему называем се display. По мерс того, как пользователь вводит число пифра за цифрой, мы должны формировать это число. Переменная currentNumber содержит накапливаемое число, а BOOL-переменные firstOperand и isNumerator следят за тем, какой операнд введен (первый или второй), и что представляет этот операнд – числитель или знаменатель.

При нажатии числовой клавиши идентифицирующая информация будет передаваться методу clickDigit:, чтобы указать, какая числовая клавиша была нажата. Для этого атрибуту клавиши с именем tag (с помощью средства Inspector в Interface Builder) присваивается соответствующее значение каждой числовой клавиши. В данном случае нам нужно присвоить tag соответствующую цифру. Например, для клавиши с меткой 0 tag будет присвоено значение 0, для клавиши с меткой 1 – значение 1, и т.д. При последующей отправке сообщения tag параметру sender, который передается методу clickDigit:, мы считываем значение тега клавиши. Это происходит в методе clickDigit:, как показано ниже. -(IBAction) clickDigit:(id)sender { int digit = [sender tag]; [self processDigitrdigit]; }

В программе 21.2 намного больше клавиш, чем в первом приложении. Наиболее сложной частью в implementation-файле контроллера представлений является формирование и отображение дробей. Как говорилось выше, при нажатии числовой клавиши от 0 до 9 выполняется action-метод clickDigit:. Этот метод вызывает метод processDigit:, который помещает цифру в конец числа, формируемого в переменной currentNumber. Этот метод также добавляет цифру в текущую строку отображения, которая поддерживается в переменной displaystring, и обновляет отображение. -(void) processDigit: (int) digit ( currentNumber = currentNumber * 10 + digit; [displaystring appendString: [NSString stringWithFormat: @"%i", digit]]; [display setText: displaystring];}

При нажатии клавиши со знаком равенства (=) для выполнения операции вызывается метод clickEquals:. Калькулятор выполняет операцию между двумя дробями, сохраняя результат в накопителе (accumulator). Этот накопи гель считывается внутри метода clickEquals:, и результат выводится па дисплей. Класс Fraction

Класс Fraction мало отличается от предыдущих примеров этой книги. В нем имеется новый метод convertToString, который добавлен для преобразования дроби в эквивалентное строковое представление. В программе 21.2 показан файл секции interface для класса Fraction, после которого следует соответствующий файл секции implementation.

Программа 21.2. Interlace-файл Fraction.h #import @interface Fraction : NSObject { int numerator; int denominator; } @property int numerator, denominator; -(void) print; -(void) setTo: -(Fraction *) add: (Fraction *) f; -(Fraction *) subtract: (Fraction *) f; -(Fraction *) multiply: (Fraction *) f; -(Fraction *) divide: (Fraction *) f; -(void) reduce; -(double) convertToNum; -(NSString *) convertToString; (int) n over: (int) d; @end

Программа 21.2. Implementation-файл Fraction.m #import "Fraction.h" @implementation Fraction @synthesize numerator, denominator; (void) setTo: (int) n over: (int) d { numerator = n; denominator = d; } -(void) print { NSLog (@"%i/%i", numerator, denominator); } -(double) convertToNum { if (denominator != 0) return (double) numerator / denominator; else return 1.0; } -(NSString *) convertToString; { if (numerator == denominator) if (numerator == 0) return @»0"; else return @»1"; else if (denominator == 1) return [NSString stringWithFormat: @"%i", numerator]; else return [NSString stringWithFormat: @"%i/%i", numerator, denominator]; } // Сложение дроби (Fraction) с получателем -(Fraction *) add: (Fraction *) f { // Сложение двух дробей // a/b + c/d = ((a*d) + (b*c)) / (b * d) // в result будет сохраняться результат сложения Fraction * result = [[Fraction alloc] init]; int resultNum, resultDenom; resultNum = numerator * f.denominator + denominator * f.numerator; resultDenom = denominator * f.denominator; [result setTo: resultNum over: resultDenom]; [result reduce]; return [result autorelease]; } -(Fraction *) subtract: (Fraction *) f { // Вычитание двух дробей // a/b – c/d = ((a’ d) – (b*c)) / (b * d) Fraction *result = [[Fraction alloc] init]; int resultNum, resultDenom; resultNum = numerator * f.denominator – denominator * Enumerator; resultDenom = denominator * f.denominator; [result setTo: resultNum over: resultDenom]; [result reduce]; return [result autorelease]; } [Fraction *) multiply: (Fraction *) f { Fraction *result = [[Fraction alloc] init]; [result setTo: numerator * f.numerator over: denominator * f.denominator]; [result reduce]; return [result autorelease]; } -(Fraction *) divide: (Fraction *) f { Fraction *result = [[Fraction alloc] init]; [result setTo: numerator * f.denominator over: denominator * f.numerator]; [result reduce]; return [result autoreiease]; } -(void) reduce { int u = numerator; int v = denominator; int temp; if (u == 0) return; else if (u <0) u = -u; while (v != 0) { temp = u % v; u =v; v = temp; } numerator /= u; denominator /= u; } @end

Метод convertToString: проверяет числитель и знаменатель дроби, чтобы создать вид числа для внешнего отображения. Если числитель и знаменатель равны (но не равны нулю), возвращается @"Г. Если числитель равен нулю, то возвращается строка @"0". Если знаменатель равен 1, результатом является целое число, то есть показывать знаменатель не нужно.

Метод stringWithFormat:, который используется внутри convertToString:, возвращает строку в соответствии со строкой формата (аналогично NSLog) и список аргументов с разделителями-запятыми. Мы передаем аргументы методу, который принимает переменное число параметров, разделяя их запятыми, как при передаче аргументов функции NSLog. Класс Calculator, который работает с дробями

Теперь рассмотрим класс Calculator. Он аналогичен одноименному классу, с которым мы работали раньше, но теперь наш калькулятор должен «знать», как работать с дробями. Ниже приводятся файлы секций interface и implementation для класса Calculator.

Программа 21.2. Interface-файл Calculator.h #import #import"Fraction.h" @interface Calculator: NSObject ( Fraction *operand1; Fraction *operand2; Fraction *accumulator; } @property (retain, nonatomic) Fraction *operand 1, *operand2, *accumulator; -(Fraction *) performOperation: (char) op; -(void) clear; @end

Программа 21.2. Implementation-файл Calculator.m «import "Calculator.h" @implementation Calculator @synthesize operand 1, operand2, accumulator; -(id) init { self = [super init]; operand 1 = [[Fraction alloc] init]; operand2 = [[Fraction alloc] init]; accumulator = [[Fraction alloc] init]; return self; } -(void) clear { if (accumulator) { accumulator.numerator = 0; accumulator.denominator = 0; } -(Fraction *) performOperation: (char) op { Fraction *result; switch (op) { case result = [operandl add: operand2]; break; case result = [operandl subtract: operand2]; break; case '*': result = [operandl multiply: operand2]; break; case result= [operandl divide: operand2]; break; accumulator.numerator = result.numerator; accumulator.denominator = result.denominator; return accumulator; } -(void) dealloc { [operand 1 release]; [operand2 release]; [accumulator release]; [super dealloc]; } @end Разработка пользовательского интерфейса (Ul)

В папке Resources этого проекта содержатся два xib-файла: MainWindow.xib и Fraction CalculatorViewController.xib. Вам не требуется работать с первым файлом. Откроем второй файл, дважды щелкнув на его имени. При запуске Interface Builder вы увидите значокс именем “View" в окне с именем Fraction CalculatorViewController.xib (рис. 21.23).

Если окно View еще не открыто, дважды щелкните на этом значке и откройте его. Внутри окна View мы будем разрабатывать пользовательский интерфейс нашего калькулятора. Мы будем связывать каждую числовую клавишу с методом ctickDigit:. Для это нужно при нажатой клавише Control протянуть мышь к значку File’s Owner по очереди от каждой клавиши в окне Fraction_CalculatorViewController.xib и выбрать clickDigit: в раскрывающемся меню Events (События). Кроме того, для каждой числовой клавиши нужно задать в окне Inspector значение Tag, соответствующее названию клавиши. Дтя числовой клавиши с меткой 0 нужно задать значение Tag, равное 0, для клавиши с меткой 1 – значение 1, и т.д.

Протяните мышь от остальных клавиш в окне View и создайте соответствующие привязки. Не забудьте вставить метку для отображения (display) калькулятора и протяните мышь при нажатой клавише Control от File’s Owner к этой метке. Выберите display из появившегося списка Outlets.

Все! Структура интерфейса создана, и приложение с калькулятором дробей готово к работе.

Рис. 21.23. Окно Fraction_CalculatorViewController.xib 21.4. Сводка шагов

На рис. 21.24 показано окно проекта Xcode со всеми файлами, относящимися к проекту.

Рис. 21.24. Файлы проекта калькулятора дробей

Ниже приводится сводка шагов посозданию калькулятора дробей для iPhone.

Создание нового приложения типа View-based.

Ввод UI-кода в файлы Fraction_CalculatorViewControlleг с расширениями .h и .m.

Добавление в проект классов Fraction и Calculator.

Открытие окна Fraction CalculatorViewController.xib в Interface Builder для создания UI. "

Создание черного фона окна View.

Создание метки и клавиш (кнопок), их позиционирование внутри окна View.

При нажатой клавише Control протягивание мыши из File’s Owner к метке, созданной в окне View, и выбор для нес варианта “display".

При нажатой клавише Control протягивание мыши от каждой клавиши в окне View к File’s Owner и привязка к соответствующему action-методу. Для каждой числовой клавиши выбирается метод clickDigit:. Кроме того, для каждой числовой клавиши нужно присвоить атрибуту клавиши tag соответствующую цифру от 0 до 9, чтобы метод clickDigit: мог определить, какая клавиша была нажата.

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

Мы надеемся, что это краткое введение в разработку приложений iPhone поможет вам в разработке ваших собственных приложений iPhone. Как говорилось выше, UIKit предоставляет разработчику множество возможностей.

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

Добавьте клавишу Convert (Преобразование) в приложение для кал ькулято– ра дробей. При нажатии этой клавиши используйте метод convertToNum класса Fraction, чтобы создать десятичное представление для результата, полученного в виде дроби. Преобразуйте это число в строку и выведите его на дисплее калькулятора.

Внесите изменения в приложение для калькулятора дробей, чтобы можно было вводить отрицательную дробь (перед вводом числителя нажимается клавиша «-»).

Если для знаменателя введено значение «О», нужно вывести строку Error на дисплее калькулятора дробей.

Внесите изменения в приложение для калькулятора дробей, чтобы можно было выполнять цепочку вычислений. Например, нужно разрешить выполнение следующей операции: 1/5 + 2/7 – 3/8 =

Вы можете добавить значок приложения, который будет отображаться на экране iPhone. Для этого можно в папке Resources вашего приложения добавить изображение, которое будет использоваться в качестве значка (.png– файл), и задать этот файл изображения для клавиши «Icon file» в списке информационных свойств (файл Info.plist в вашей папке Resources), как показано на рис. 21.25. Найдите в Интернете подходящее изображение калькулятора и задайте для калькулятора дробей использование этого изображения как значка приложения.

Рис. 21.25. Добавление значка приложения

Приложение А. Словарь

Это приложение содержит неформальные определения многих терминов, ко-торые встречаются в книге. Некоторые из них относятся непосредственно к языку Objective-C, а другие связаны с объектно-ориентированным программи-рованием. Для них указан смысл термина в языке Objectivc-C.

Application Kit. Фреймворк для разработки пользовательского интерфейса при-ложения, который включает такие объекты, как меню, панели инструментов и окна. Входит в Cocoa. Иногда называется AppKit.

Cocoa Touch. Среда разработки, состоящая из фреймворков Foundation и UIKit.

Cocoa. Среда разработки, состоящая из фреймворков Foundation и Application Kit.

extern-переменная. См. Глобальная переменная.

Foundation framework. Коллекция классов, функций и протоколов, которые со-здают основу для разработки приложений, обеспечивая такие базовые возмож-ности, как управление памятью, доступ к файлам и URL, выполнение задач архивации, работа с коллекциями, строками, а также с числовыми объектами и объектами данных.

gee. Имя компилятора, разработанного организацией Free Software Foundation (FSF). gee поддерживает многие языки программирования, включая С, Objective-C и C++, gee – это стандартный компилятор, используемый в Мае OS X для компиляции программ Objective-C.

gdb. Стандартное средство отладки для программ, откомпилированных с помо-щью gcc.

Header-файл. См. Заголовочный файл.

id. Обобщенный тип объекта, который может содержать указатель налюбой тип объекта.

Interface Builder. Средство под управлением Mac OS X для создания графичес-кого пользовательского интерфейса для приложения.

isa. Специальная переменная экземпляра, определенная в корневом объекте и наследуемая всеми объектами. Переменная isa используется во время выполне-ния (runtime) для идентификации класса, которому принадлежит объект.

nil. Объект типа id, который используется для представления недействительного объекта. Его значение определяется как 0. Объекту nil можно передавать со-общения.

NSObject. Корневой объект в Foundation framework.

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

super. Ключевое слово, используемое в методе для ссылки на родительский класс получателя.

UIKit. Фреймворк, позволяющий разрабатывать приложения для iPhone и iTouch. Помимо классов для работы с обычными элементами пользовательского интерфейса (Ш), такими как окна, кнопки и метки, в нем определены классы для работы со специфическими для устройства средствами, такими как ак-селерометр и сенсорный интерфейс. UIKit является частью Cocoa Touch.

Unicode-символ (Unicode character). Стандарт представления символов из набо-ров, содержащих до миллионов символов. Классы NSString и NSMutableString работают со строками, содержащими символы Unicode.

Xcode. Средство компиляции и отладки для разработки программ в Mac OS X.

XML. Сокращение от Extensible Markup Language. Формат по умолчанию для списков свойств, генерируемых в Mac OS X.

Абстрактный класс (abstract class). Класс, определенный таким образом, чтобы упростить создание подклассов. Экземпляры создаются из подкласса, а не из абстрактного класса. См. также Конкретный подкласс.

Автоматическая переменная (automatic variable). Переменная, для которой автоматически выделяется и затем высвобождается память соответственно при входе и выходе из блока операторов. Автоматические переменные имеют область действия, ограниченную блоком, в котором они определены, и не имеют начального значения по умолчанию. Перед ними можно ставить необязательное ключевое слово auto.

Автоматически высвобождаемый пул (autorelease pool). Объект, определенный в Foundation framework, который следит за объектами, которые должны быть высвобождены, когда высвобождается сам пул. Объекты добавляются в этот пул при передаче сообщения autorelease.

Архивация (archiving). Преобразование представления данных объекта в фор-мат, который можно в дальнейшем восстановить (разархивировать).

Битовое поле (bitfield). Структура, содержащая одно или несколько целых полей указанной длины в битах. Доступ к битовым полям и работа с ними происходит так же, как с другими элементами структур.

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

Выражение с сообщением (message expression). Выражение, заключенное в пря-моугольные скобки, которое указывает объект (получатель) и сообщение, пе-редаваемое этому объекту.

Глобальная переменная (global variable). Переменная, определенная вне любого метода или функции в том же исходном файле или в других исходных файлах, где эта переменная объявлена как внешняя (extern).

Делегат (delegate). Объект, которому поручает выполнить определенное действие другой объект.

Динамический контроль типов (dynamic typing). Определение класса, которому принадлежит объект, на этапе выполнения, а не во время компиляции. См. так-же Статический контроль типов.

Динамическое связывание (dynamic binding). Определение конкретного метода для вызова с объектом на этапе выполнения, а не во время компиляции.

Директива (directive). В Objective-C – специальная конструкция, которая начи-нается со знака (@). Примеры директив: (©interface, ©implementation, ©end и @class.

Заголовочный файл (header file). Файл, содержащий общие определения, мак-росы и объявления переменных, которые включаются в программу с помощью оператора #import или #include.

Зона (zone). Назначаемая область памяти для размещения данных и объектов. Программа может работать с несколькими зонами для более эффективного уп-равления памятью.

Инкапсуляция (encapsulation). См. Инкапсуляция данных.

Инкапсуляция данных (data encapsulation). Концепция, согласно которой данные для объекта сохраняются в его переменных экземпляра и доступ к ним имеют только методы этого объекта. Это позволяет поддерживать целостность данных.

Интернационализация (internationalization) . См. Локализация.

Категория (category) . Набор методов, сгруппированных под указанным именем. Категории можно использовать как модули определений методов для класса, они могут использоваться для добавления новых методов к существующему классу.

Класс (class). Набор переменных экземпляра и методов, которые имеют доступ к этим переменным. После определения класса можно создавать экземпляры этого класса (то есть объекты).

Кластер (cluster). Абстрактный класс, который группирует набор частных кон-кретных подклассов, создавая упрощенный интерфейс с пользователем через этот абстрактный класс.

Коллекция (collection) . Объект Foundation framework, который является масси-вом, словарем или набором (множеством). Используется для группирования родственных объектов и работы с ними.

Конкретный подкласс (concrete subclass). Подкласс абстрактного класса. Экземпляры могут создаваться из конкретного подкласса.

Константная символьная строка (constant character string). Последовательность символов, заключенная в кавычки. Если она начинается с символа @, то опре-деляет объект константной символьной строки типа NSConstantString.

Корневой объект (root object). Объект верхнего уровня в иерархии наследования, не имеющий родительского объекта.

Локализация (localization). Процесс подготовки программы для выполнения в определенном географическом регионе, обычно путем перевода сообщений на язык этого региона и адаптации к соответствующим часовым поясам, денежным знакам, форматам даты и т.д. Иногда локализацией называют только перевод на соответствующий язык, а термин интернационализация используют для остальной части этого процесса.

Локальная переменная (local variable) . Переменная, область действия которой ограничена блоком, в котором она определена. Переменные могут быть локальными в методе, функции или в блоке операторов

Массив (array). Упорядоченный набор значений. Массивы можно определять как базовый тип Objective-C и реализовать как объекты в среде Foundation с помощью классов NSArray и NSMutableArray.

Метод (method). Процедура, которая принадлежит классу и может выполняться путем передачи сообщения объекту-классу или экземплярам из этого класса. См. также Метод класса и Метод экземпляра.

Метод доступа (accessor method). Метод, который получает или задает значение переменной экземпляра. Использование методов доступа для получения или задания значений переменных экземпляра согласуется с методологией инкап-суляции данных.

Метод завода (factory method). См. Метод класса.

Метод класса (class method). Метод (определяемый с помощью ведущего знака +), который вызывается для объектов-классов. Си. также Метод экземпляра.

Метод экземпляра (instance method). Метод, который может быть вызван экзем-пляром класса. См. также Метод класса.

Метод-получатель (getter method). Метод доступа, который считывает значение переменной экземпляра.

Метод-установщик (setter method) . Метод доступа, который задает значение переменной экземпляра. См. также Метод-получатель.

Мутабельный объект (mutable object). Объект, значение которого можно изме-нять. Foundation framework поддерживает мутабельные и немутабельные мас-сивы, наборы (множества), строки и словари. См. также Немутабельный объект.

Набор, или множество (set). Неупорядоченная коллекция уникальных объектов, реализуемая в Foundation с помощью классов NSSet, NSMutableSet и NSCountedSet.

Назначенный инициализатор (designated initializer). Метод, который будут вызывать все остальные методы инициализации в данном классе или подклассах (путем передачи сообщений к super).

Наследование (inheritance). Процесс передачи в подклассы методов и перемен-ных экземпляра из класса, начиная с корневого объекта.

Немутабельный объект (immutable object). Объект, значение которого может изменяться. Примеры из Foundation framework: объекты NSString, NSDictionary и NSArray. См. также Мутабельный объект.

Неформальный протокол (informal protocol). Набор логически связанных мето-дов, объявленный как категория (часто как категория корневого класса). В от-личие от формальных протоколов все методы в неформальном протоколе не обязательно должны быть реализованы. См. также Формальный протокол.

Нуль-символ (null character). Символ, значение которого равно 0. Константа нуль-символа обозначается как *".

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

Объект (object). Набор переменных и соответствующих методов. Объекту мож-но передавать сообщения для выполнения одного из его методов.

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

Объектно-ориентированное программирование (object-oriented programming). Способ программирования, основанный на классах и объектах с выполнением действий над этими объектами.

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

Оператор (statement). Одно или несколько выражений, заканчивающихся точкой с запятой.

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

Пересылка (forwarding) . Процесс передачи сообщения и связанных с ним аргу-ментов другому методу для выполнения.

Подкласс (subclass). Называют также дочерним классом. Подкласс наследует ме-тоды и переменные экземпляра из своего родительского класса (суперкласса).

Подчинение (conform). Класс подчиняется протоколу (согласуется с ним), если он принимает все обязательные методы в этом протоколе либо путем реализа-ции (implementation), либо посредством наследования.

Полиморфизм (polymorphism). Способность объектов различных классов при-нимать одинаковое сообщение.

Получатель (receiver). Объект, которому передается сообщение. Получатель может быть указан как self изнутри вызываемого метода.

Препроцессор (preprocessor). Программа, которая первоначально просматривает исходный код, обрабатывая строки, которые начинаются со знака #, то есть предположительно содержат специальные препроиессорные выражения. Обычно при– мненяется для определения макросов с помощью оператора #define, включения других исходных файлов с помощью операторов «import и «include, а также условного включения строк исходного текста с помощью операторов #if, «ifdef и «ifndef.

Протокол (protocol). Список методов, которые должны быть реализованы клас-сом для подчинения протоколу или принятия протокола. Протоколы позволяют стандартизовать интерфейс между классами. Си. также Формальный протокол и неформальный протокол.

Процедурный язык программирования (procedural programming language). Язык, в котором программы определяются с помощью процедур и функций, работающих с набором данных.

Пустой символ. Си. Нуль-символ.

Пустой указатель (null pointer). Значение недействительного указателя, обычно определяемое как 0.

Распределенные объекты (Distributed Objects). Способность объектов Foundation в одном приложении взаимодействовать с объектами Foundation в другом при-ложении, возможно, работающем на другой машине.

Родительский класс (parent class). Класс, из которого наследует другой класс. Называется также суперклассом.

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


    Ваша оценка произведения:

Популярные книги за неделю