четверг, 7 февраля 2013 г.

Урок 7. Как программировать на iOS - О языке Objective-C


О языке Objective-C

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

Сегодняшний урок – чисто теоретический. Мы познакомились  в прошлых уроках с тем, как можно «рисовать» интерфейс нашего приложения с помощью встроенных инструментов Xcode, а затем обращаться к этим элементам и перехватывать их события.
Но чтобы писать по-настоящему хорошие программы, нужно прежде всего понимать язык, на котором эти программы пишутся, поэтому этот урок я посвящаю азам языка Objective-C.


Язык Objective-C это близкий родственник языка С – языка, который ранее был очень популярен при разработке всего: от операционных систем до прикладных программ, а позже был вытеснен С++.

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

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

Что есть объект? По сути, объект описывается 1) свойствами и 2) методами.
Свойство объекта – это некоторое значение, описывающее состояние объекта. Например, у кнопки есть свойство «текст», которое описывает текст, содержащийся в кнопке. Или свойство «изображение» - если это свойство задано, то кнопка будет содержать заданную картинку.
Помните, когда мы поместили кнопку на экран, мы видели справа панель с ее свойствами?

Это и есть те самые свойства объекта, о которых мы говорили J

Метод объекта – это некоторый код, описывающий некоторое поведение объекта.
Методов может быть несколько. Например, мы можем добавить кнопке метод для реакции на нажатие. Или же, мы можем взять существующий метод, который управляет отображением кнопки и изменить его так, чтобы нарисовать кнопку по-другому.
Хорошо, мы определились с понятием объекта. Но как именно описывать объект, где перечислить все его свойства и методы?

Здесь появляется новое понятие, понятие «Класс».
Класс – это категория одинаковых объектов. То есть все объекты, у которых одинаковый набор свойств и методов, это есть объекты одного класса. Например, «Кнопка» (UIButton) – это класс, описывающий кнопку. Чтобы работать с этим классом, вы создаете объект этого класса, который будет содержать все описанные в классе свойства и методы.
Зачем вводится понятие класса? Очень просто – если у вас несколько кнопок, не будете же вы каждый раз описывать все их свойства и методы? Нет, вы опишите класс «Кнопка» и создадите несколько разных объектов-кнопок.

Давайте посмотрим, как все вышесказанное существует в Objective-C.
Допустим, у нас есть объект label(надпись) класса UILabel.
Давайте для начала посмотрим, как обращаться к его свойствам. Вообще-то, мы это умеем:
NSLog(label.text);
Команда NSLog выводит в консоль то, что мы передаем ей в качестве параметра в скобках. А в скобках мы передаем свойство text нашей надписи.
Чтобы установить свойство, достаточно выполнить присвоение:
label.text = @”Некоторый текст”;
Как я говорил, в Objective-C все строки должны начинаться с @.

А как вызвать метод и заставить его исполниться? Технически, в Objective-C нет понятия «вызов метода» - на самом деле, вы посылаете объектам «сообщение» с просьбой выполнить тот или иной метод. Каждое «сообщение» заключается в квадратные скобки. Но в дальнейшем мы условимся, что «вызов метода» это то же самое, что и «отправка сообщения».
Например, свойство текста можно установить, вызвав метод setText:
[label setText:@”некоторый текст”];
Что это за двоеточие?
Дело в том, что для методов иногда нужны входные данные. Например, когда мы просим нашу надпись поменять текст(setText), она должна знать, на какое именно значение менять текст. Для этого мы передаем текст в качестве параметра. Значение параметра всегда отделяется двуеточием.

Бывают случаи, когда нужно передать несколько параметров, нарпимер вот в таком случае:
[dictionary writeToFile:@”file.data” atomically:YES];
Мы просим наш словарь (со словарями мы познакомимся позже) сохранить данные в файл и передаем два параметра: file.data для имени файла и YES для параметра atomically(потом узнаем, что он значит).
Название метода – это всегда его название, включающее двуеточие, но не включающее значение. Например, setText: или writeToFile:atomically:.
Если метод не имеет параметров, то двуеточий у него нет. Например:
[label setNeedsDisplay];
(пока что не буду забивать голову, для чего используется этот метод).
А еще методы могут возвращать значения.
Например, давайте сохраним текст нашей надписи в отдельный объект класса строка (NSString):
NSString *text = [label text];
Мы вызвали метод text у нашей надписи и он вернул нам текст, содержащийся в надписи.

Уфф, на этом заканчиваю первую часть статьи. В следующих частях мы узнаем о том, как создаются объекты, как их описывать, что такое наследование и т.д.

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

Отправить комментарий