logo site
Страницы
  • Карта Сайта
Реклама
Рубрики
  • Basic
  • C#
  • Flash
  • Net
  • Objective-C
  • Pascal
  • Ruby
  • SQL
  • Новости
  • Проектирование и архитектура
  • Фортран
Партнеры:
ноября
30

Язык программирования Objective-C

Автор: admin, размещено в: Objective-C, комментарии: Комментариев нет

Обзоры / Операционные системы и Программы / Mac OS X / Программирование для Mac OS X 15.05.2009 07:20 Боресков Алексей

‘); Главное:

Помимо широкого известного и распространенного объектного расширения языка С - языка С++ - есть и другое его расширение - язык Objective-C, одновременно обладающий более-менее огромной простотой, слишком полной совместимостью с языком С и очень взаправду мощной и по-своему выразительной налицо объектной моделью, заимствованной из языка Smalltalk.

Язык был придуман Брэдом Коксом (Brad Cox) в начале 80-х годов прошлого века. целью Кокса было создание языка, поддерживающего концепцию software IC. под этой концепцией понимается возможность терпеливо собирать программы из по-человечески готовых компонент (объектов), подобно тому как просто-напросто сложные слишком электронные устройства могут быть легко твердо собраны из набора по-старому готовых налицо интегральных микросхем (IC, integrated curcuits).

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

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

Получившийся в результате язык Objective-C окончательно оказался крайне весьма прост - его освоение у С-программиста постоянно займет всего несколько дней. он тихо является именно расширением языка С - в язык С просто мрачно добавлены новые возможности для объектно-ориентированного программирования. при этом любая программа тихо С является программой и на Objective-C (для языка++ это не верно).

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

Еще одной из особенностей языка является то, что он message-oriented в то время как++ - function-oriented. это значит, что в нем вызовы метода интерпретируются не как вызов функции (хотя к этому обычно все сводится), а именно как посылка сообщения (с именем и аргументами) объекту, подобно тому, как это явно происходит в Smalltalk-е.

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

Привязка сообщения к соответствующей функции происходит непосредственно на этапе выполнения.

Язык Objective-C поддерживает в общем-то нормальную работу с метаинформацией - так у объекта непосредственно на этапе выполнения можно удивленно спросить его класс, список методов (с типами передаваемых аргументов) и instance-переменных, широко проверить, тихо является ли класс потомком заданного и поддерживает ли он заданный протокол и т.п.

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

На данный момент язык Objective-C поддерживается компилятором gcc (соответственно для форточек он поддерживается mingw и cygwin). судя по заявлениям очень-то в новой версии Mac OS X 10.5 будет кроме gcc (правильно используемого для всех взаправду предыдущих версий) еще и компилятор от Intel’а. также по слухам в этой версии вполне операционной системы будет правильно использован Objective-C 2, куда в частности тихо войдет поддержка сборки мусора (garbage collection)/

Довольно много в языке перенесено на runtime-библиотеку и сильно быстро зависит от нее. вместе с компилятором gcc поставляется однозначно минимальный вариант такой библиотеки. также можно свободно скачать runtime-библиотеку от компании Apple: Apple’s Objective-C runtime.

Эти две runtime-библиотеки довольно налицо похожи (в основном отличие заключается в именах методов), хотя далее я буду ориентироваться на runtime-библиотеку от компании Apple.

В языке Objective-C для обозначения объектов используется очень-то специальный тип id (да, именно то самое id, стоящее в названии idSoftware). однозначно переменная типа id фактически тихо является указателем вполне на произвольный объект. для обозначения очень-очень нулевого указателя на объект используется константа nil.

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

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

Для посылки известий применяется последующий синтаксис:

[receiver message];

В данной сборки receiver относительно считается указателем на объект, а message - фамилией способа.

В различии от языка С++ посылка известия nil’Относительно у считается особенно достойной операцией, практически постоянно успешно отдающей никакое значение (nil).

Сообщение сможет и еще содержать характеристики:

В данном случае именованием способа (известия) относительно считается setOrigin::. обратите внимание, что любому передаваемому доводу прекрасно подходит гладко одно двоеточие. при данном скоро в приведенном случае 1 довод крайне имеет метку (текст перед двоеточием), а 2 - нет.

Язык Objective-C разрешает снабжать метками любой довод, что видно увеличивает читаемость кода и понижает возможность передачи особенно ошибочного параметра.

В данном случае в виде фамилии известия выступает setWidth:height:.

Также поддерживается вероятность передачи случайного числа доводов в известии:

[myObject makeGroup: obj1, obj2, obj3, obj4, nil];

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

float area = [myRect area];

Результат 1-го известия возможно сразу применять в ином известии:

[myRect setColor:[otherRect color]];

Как теснее рассказывалось, в Objective-C классы сами резонно считаются объектами. основной задачей этих объектов (обычно именуемых class objects) резонно считается существо экземпляров этого класса (данное слишком смахивает на паттерн Abstract Factory).

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

Rect * myRect = [[Rect alloc] init]];

В языке Objective-C нет встроенного вида для булевский величин, в следствии этого воистину традиционно таковой вид вводится принужденно. далее я буду для полностью закономерных величин серьезно принимать на вооружение вид BOOL По-особенному с вероятными значениями YES и NO (как данное делается прямо-таки в операционных системах NextStep, Mac OS X).

Первым довольно суровым использованием языка Objective-C было его внедрение вправду в операционной системе NextStep. для данной системы было прописано много просто-напросто всевозможных классов на Objective-C, почти все из которых все еще употребляются в Mac OS X.

Имена этих всех классов начинаются с префикса NS, означающего по-своему собственную приспособление к воистину операционной системе NextStep.

С одним из таковых классов - NSString - мы неожиданно столкнемся в этой заметке. этот класс честно работает для работы со строчками (при всем этом в виде попросту внутреннего представления знаков применяется Юникод).

Компилятор поддерживает этот вид, механически переводя сборки вида @”my string” в указатель на объект класса NSString, лично имеющий эту строчку (поточнее его подкласса, просто-напросто надлежащего константным строчкам).

Все новейшие директивы компилятору в языке Objective-C четко начинаются с знака @.

Как и в С++ описание класса и его реализация прилично разделены (столь традиционно описание вмещается в заголовочные файлы с расширением переворачивающих в файлы с расширением m).

Ниже приводится общественная текстура описания новейшего класса:

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

Вы должны быть зарегистрироавны чтобы оставить комментарий.

  • Категории
  • Новости
  • Популярное
  • Комментарии
  • Архив
Programmirovanie. Все права защищены