Objective-C | |
---|---|
Парадигма | об'єктно-орієнтоване програмування, мультипарадигмальне програмуванняd, class-based programmingd і рефлексія ![]() |
Дата появи | 1986 |
Творці | Tom Love & Brad Cox |
Розробник | Apple Inc. |
Останній реліз | |
Система типізації | статична, динамічна типізація[d] і слабка типізація[d] ![]() |
Основні реалізації | Clang, GCC |
Під впливом від | Smalltalk, C |
Вплинула на | TOM, Java, Objective-J |
Операційна система | Cross-platform |
Звичайні розширення файлів | .h , .m , .mm або .C ![]() |
Вебсайт | The Objective-C Programming Language |
Objective-C — ("Обджектів Сі") рефлективна, високорівнева об'єктно-орієнтована мова програмування загального призначення, розроблена у вигляді набору розширень стандартної С.
Мова програмування Objective-C, розроблена на початку 1980-х років, була основною мовою, що використовувалася компанією NeXT для операційної системи NeXTSTEP, від якої пішли macOS і iOS.
На даний час використовується в основному у macOS та GNUStep — середовищах, розроблених на основі стандарту OpenStep, та Cocoa — бібліотеки компонентів для розробки програм. Програму на Objective-C, що не використовує цих бібліотек, можна скомпілювати для будь-якої платформи, яку підтримує gcc компілятор з підтримкою Objective-C.
Objective-C є розширенням С, і тому будь-яку програму на С можна скомпілювати компілятором Objective-C.
ООП в Objective-C включає інтерфейси, класи, категорії. Реалізовано одиничне, невіртуальне спадкування. Немає єдиного базового класу для всіх об'єктів. Всі методи в класі — віртуальні. Категорія — парадигма, яка дозволяє описувати інтерфейс з методами, які «необов'язково» імплементувати.
Синтакс Objective-C породжений одночасно від С та Smalltalk. Від останньої взято основний семантичний конструкт мови — замість виклику методу об'єктові надсилається повідомлення. Наприклад, якщо клас об'єкта obj імплементує метод doJob, то говориться, що об'єкт відкликається на повідомлення doJob. Щоб надіслати повідомлення doJob цьому об'єктові, потрібно написати:
[obj doJob];
Такий механізм дозволяє надсилати повідомлення навіть до тих об'єктів, які не підтримують їхньої обробки. Такий підхід відрізняється від тих, що використовуються в статично типізованих мовах С++ чи Java.