Objective-C, často označován zkráceným názvem ObjC, je objektově orientovaným programovacím jazykem, který je implementovaný jako rozšíření jazyka C, k němuž přidává systém zasílání zpráv z jazyka Smalltalk.
V současnosti se používá v operačních systémech Mac OS X, iOS a ve GNU projektu GNUstep. Na standardu OpenStep jsou založena obě prostředí. Objective-C se používá v aplikačních programovacích interface (API) Cocoa a Cocoa Touch.
Objective-C je uplatňováno v:
Před zavedením Swiftu byl Objective-C hlavním programovacím jazykem pro zmíněné operační systémy. Součástí GCC je překladač tohoto jazyka. Nejpoužívanějším překladačem je však clang, především díky jeho použití v Xcode firmou Apple.
Programovací jazyk Objective-C byl původně vyvinut v raných osmdesátých letech dvacátého století, je tedy mnohem starší, nežli programovací jazyk Swift, který z něj v mnohém vychází a snaží se ho modernizovat.
Byl vybrán jako hlavní jazyk používaný pro operační systémy NeXT a NextSTEP, ze kterých se vyvinuly operační systémy OS X a iOS. Přenosné programy v Objective-C, které nepoužívají knihovny Cocoa a Cocoa Touch, nebo ty části, které mohou být přeneseny nebo přeimplementovány do dalších systémů mohou být také kompilovány za pomoci GNU Compiler Collection (GCC) nebo Clang.
Implementační programové soubory Objective-C mají obvykle koncovku .m, zatímco hlavičkové/interface soubory mají koncovku .h, stejně jako hlavičkové soubory v jazyce C. Objective-C++ soubory mají koncovku .mm.
Objective-C je založený na posílání zpráv instancím objektů. V Objective-C nedochází k volání metod, ale k posílání zpráv. Tím se liší od programovacího modelu ve stylu Simula, který používá C++. Rozdíl mezi oběma koncepty je v tom, jak je kód, na který metoda nebo zpráva odkazuje spuštěn. V jazycích ve stylu Simula je jméno metody vázáno k části kódu v cílové třídě kompilátoru.
Ve Smalltalk a Objective-C je cíl zprávy určen v průběhu spuštění, s tím, že objekt, který zprávu přijímá, ji sám interpretuje. Metoda je identifikovaná pomocí selektoru, což je string zakončený NUL, který reprezentuje jeho jméno a je převeden do ukazatele metody C, který jej implementuje, takzvaného IMPu. Důsledkem toho je systém posílání zpráv, který neobsahuje kontrolu typu. Objekt, kterému je zpráva odeslána negarantuje odpověď. Pokud neodpovídá, vyhodí výjimku.
Oba styly programování mají svoje silné i slabé stránky:
Objektově orientované programování ve stylu Simula umožňuje mnohonásobnou dědičnost a rychlé spuštění za použití výběru kompilujícího čas, ale standardně nepodporuje dynamický výběr. Také nutí všechny metody, aby měly odpovídající implementaci, pokud nejsou abstraktní.
Programovací jazyky ve stylu Smalltalk, jako je například Objective-C, umožňují neimplementované zprávy, kde je metoda převedena do implementace v průběhu spuštění. Implementace je stále vyžadována v případě metody, kterou spouští odvozený objekt.