Objective C - объектно-ориентированный язык программирования, который используется для написания программ под устройства компании Apple. Он во многом схож с оригинальным C, но при этом обладает более широким функционалом.
История языка
Разрабатывая новый язык в начале 80-х годов создатель Objective C Брэдон Кокс хотел объединить преимущества классического С с возможностями относительно нового для того времени объектно-ориентированного программирования. Но платформа Кокса в итоге включила в себя не только объекты, но и сообщения функций, которые можно либо обработать, либо делегировать. Message-ориентированность отличает Objective C от чисто объектно ориентированного C++.
С 1985 года ObjC по факту перешел во владение Стива Джобса - сначала через корпорацию NeXT, затем - через Apple. Только в 2014 году язык стал уступать место главного инструмента разработки для “яблочных” устройств другой платформе - Swift.
Где применяется Objective C
На Objective C разрабатываются программы для iOS и MacOS. После появления Swift некоторые программисты считают ObjC неактуальным. На самом деле, этот язык все еще бывает полезен по нескольким причинам:
- поддержка старых программ, написанных до появления Swift и не переведенных на него;
- Objective C лежит в основе MacOS и необходим для углубленной работы с системой;
- на ObjC легче работать с потоковыми видео и выполнять другие задачи, связанные с сетевыми трансляциями и распределением памяти.
В целом знание Objective C помогает лучше понять логику ОС от Apple и устройство самого Swift.
Преимущества и недостатки языка
Objective C обладает рядом полезных свойств.
- Возможность управления памятью.
Ручное распределение памяти лучше справляется с определенными задачами, чем автоматическое. Например, при онлайн-трансляции или передаче мгновенных сообщений память может быстро перегружаться. Гибкое перераспределение ячеек позволяет оптимизировать исполнение программы, сделать ее более быстрой. - Многопоточность.
Несколько потоков одной программы в ObjC могут выполняться параллельно. За счет этого оптимизируется скорость исполнения кода. Очередность и механизмы блокировки не дают потокам перекрывать друг друга и вызывать сбой. - Динамическая типизация.
Переменной можно сразу задать необходимое значение, не объявляя заранее ее тип. Программа сама определит, число перед ней или строка. Такой метод ускоряет написание кода и делает программу лаконичнее. Правда, программисту придется внимательно следить за согласованностью типов, чтобы не совершать лишних ошибок. - Интегрируемость со Swift.
По своей сути Swift - прямой наследник Objective C. Код на ObjC легко читается Свифтом. Поэтому Apple так легко перевела основную часть разработки на новый язык. - Совместимость с C++.
Часть сложных задач, относящихся к низкоуровневому, то есть близкому к машинному, программированию лучше всего выполняется на C++. Например, криптография и оптимизация расходования оперативной памяти. Objective C без труда интегрируется с C++, чего нельзя сказать о Swift.
Стоит отметить и объективные минусы рассматриваемого языка.
- Относительная усложненность синтаксиса.
Objective С близок к низкоуровневым языкам. Его структура и синтаксис требует достаточно много времени для освоения. - Недостаточно высокая производительность.
Скорость исполнения кода в ObjC зачастую ниже, чем у других языков. К этому приводит динамическая компиляция и ряд других свойств. - Постепенная замена более современными технологиями.
Swift проще в освоении, программы на нем обычно пишутся быстрее. Поэтому там, где это возможно, новый язык вытесняет Objective C.
В чем отличия Objective C от классического С и Swift
В стандартном С отсутствуют объекты и классы. Objective C предоставляет все возможности ООП и процедурной парадигмы, ориентируясь на базовый синтаксис С. По производительности ObjC немного уступает классическому С. Совместимость языков односторонняя. Компилятор Objective C способен считать код на C, но не наоборот.
Swift можно назвать упрощенной версией Objective C, но только условно. С одной стороны, синтаксис в нем действительно выглядит интуитивнее, присутствует автоматическое управление памятью, опциональные типы и прочие “плюшки”. С другой стороны, новый функционал требует применения новых подходов, плюс некоторые низкоуровневые вещи на Swift делать сложнее.
Пример кода
Для демонстрации работы функций в Objective C возьмем стандартное решение квадратного уравнения. Оно будет выглядеть фактически также, как в стандартном C.
#include <math.h>
#include <stdio.h>
int main()
{
int A, B, C, D;
printf("A = ");
scanf("%d", &A);
if (A == 0) {
printf("Not a quadratic equation.\n");
return 0;
}
printf("B = ");
scanf("%d", &B);
printf("C = ");
scanf("%d", &C);
D = B * B - 4 * A * C;
if (D == 0) {
printf("x = %f\n", -B / 2.0 / A);
return 0;
}
if (D > 0) {
printf("x1 = %f\n x2 = %f\n",
(-B + sqrt(D)) / 2.0 / A, (-B - sqrt(D))/ 2.0 / A);
} else {
printf("x1 = (%f, %f)\n x2 = (%f, %f)\n",
-B / 2.0 / A, sqrt(-D) / 2.0 / A, -B / 2.0 / A, -sqrt(-D) / 2.0 /A);
}
return 0;
}
Заключение
Objective C - язык, на котором изначально строилась инфраструктура гаджетов от Apple. Хоть сейчас платформа и стала менее популярной, в некоторых случаях она остается наилучшим решением для разработки. Кроме того, ObjC применяется для поддержки ПО, работающего на старых версиях iOS. К главным преимуществам Objective C можно отнести динамичность и относительную низкоуровневость.