Cíl-C | |
Datum první verze | 1983 |
---|---|
Paradigma | objektově orientovaný , reflexní |
Autor | Brad Cox a Tom Love |
Poslední verze | 2.0 |
Psaní na stroji | dynamický , statický , slabý |
Ovlivněno | C , Smalltalk |
Ovlivněno | TOM , Java , Swift |
Implementace | OpenStep , kakao , GNUstep |
Operační systém | UNIX, macOS |
Licence | Volný, uvolnit |
webová stránka | developer.apple.com/library/mac/navigation |
Přípona souboru | h, m, mm a C. |
Objective-C je reflexní objektově orientovaný programovací jazyk . Jedná se o rozšíření ANSI C , jako je například C ++ , ale liší se od něj jeho dodání dynamický zpráv, její psaní slabý nebo silný, jeho dynamické psaní a dynamické zatížení. Na rozdíl od C ++ neumožňuje vícenásobné dědění, ale existují způsoby, jak kombinovat výhody C ++ a Objective-C.
Dnes se používá hlavně při provozu systémů Apple : macOS a jeho derivátů iOS založených na knihovně tříd Cocoa, ale v GNU / Linux existuje také knihovna tříd GNUstep zdarma . Cocoa a GNUstep jsou nástupci OpenStep API , používaného v operačních systémech NeXTSTEP (původně macOS) a jeho bezplatném protějšku OPENSTEP .
Konec sedmdesátých let byl poznamenán narůstající a rychlou popularitou jazyka C, kterou v desetiletí vynalezl Dennis Ritchie z AT&T Bell Laboratories . Tato popularita je podporována ještě větší popularitou, jakou má operační systém UNIX napsaný zcela v jazyce C. Na přelomu 70. a 80. let je současná praxe softwarového inženýrství založena na strukturovaném programování . Implementace strukturovaného programování se používá za účelem rozdělení velkých programů na menší části, které jsou méně složité, a proto se snáze programují. Jak se však řešení problémů stává větším a komplikovanějším, strukturované programování se stává méně užitečným, protože je třeba psát stále více procedur, což vede ke složitým řídicím strukturám a nízkému opětovnému použití kódu. V té době mnozí považovali objektové řešení za možné řešení tohoto problému.
Několik lidí poté vytvoří rozšíření C, aby přidali objektově orientovaný. To je případ Bjarna Stroustrupa, který vyvinul C ++ v roce 1979 ve stejných laboratořích, ve kterých se narodil C Dennisa Ritchieho. Zrození Objective-C nastává ve stejném kontextu. Brad Cox jej vyvinul na začátku 80. let. Jazyk je prezentován jako překryv jazyka C, který umožňuje vytváření a manipulaci s objekty převzetím určitých konceptů jazyka Smalltalk-80 .
Kód zkompilovaný Objective-C běží v prováděcím prostředí ( runtime ) Light napsaném v C, což málo přidává na velikosti aplikace.
Prvním operačním systémem, který používal Objective-C, byl NeXTSTEP (později přejmenovaný na OPENSTEP ) od společnosti NeXT , kterou založil Steve Jobs .
Objective-C je široce používán v počítačích Macintosh , zejména pro rozhraní Cocoa API systému Mac OS X a v poslední době pro vývoj aplikací pro iPhone , smartphone Apple.
K dispozici je také bezplatná implementace rámce OpenStep s názvem GNUstep , který je multiplatformní a funguje zejména pod GNU / Linux , Microsoft Windows a většinou UNIXů .
V Objective-C je vše objekt stejně jako v Smalltalku, od kterého je silně inspirováno. Jedná se tedy o silně objektově orientovaný jazyk. Jednoduchá dědičnost indukuje dědičný strom s kořenem: třída NSObject v případě Cocoa / NeXTSTEP nebo Object v případě GNUstep. Z toho budou odvozeny všechny třídy. Například objekt třídy NSString nebo NSArray pochází z třídy NSObject (nepřímo). NSMutableArray pochází z třídy NSArray, což je tedy její nadtřída. Podle některých jeho uživatelů se právě zde objevuje síla Objective-C: na rozdíl od C ++ nebo jiných jazyků, které ji neobsahují, slabé psaní usnadňuje manipulaci s daty.
Namísto toho, abychom museli zvládat mnoho druhů, je jich jen několik, například v případě kakaa:
Kromě toho jsou všechny proměnné instance třídy chráněny ve výchozím nastavení a metody třídy jsou veřejné. Umožňuje proto programátorům mít přísnější programování, přičemž je rychlejší a respektuje koncepty OOP.
Dalším aspektem je designový model KVC (Key-Value Coding), inspirovaný také Smalltalkem , který definuje přístup k proměnné podle názvu. Například v případě třídy Person s proměnnou instance Firstname typu NSString:
@interface Personne : NSObject { // variables d'instance NSString *prenom; } // methodes @property (copy) NSString *prenom; @endObjective-C umožňuje rychlé vytvoření objektu NSString pomocí "@", stejně jako C s řetězci "". Řetězce NSS jsou kódovány v unicode , tj. Na rozdíl od C nejsou znaky omezeny na kódy ASCII. Můžeme tedy nastavit hodnotu proměnné příjmení instance Osoby takto:
// On crée un pointeur vers un objet de la classe Personne, qu'on a d'abord alloué dans l'espace mémoire, et initialisé. Personne *exemple = [[Personne alloc] init]; //On envoie un message au pointeur exemple qui va le rediriger vers l'objet vers lequel il pointe, pour fixer la valeur de la clef surname. [exemple setValue:@"Paul" forKey:@"prenom"];V Objective-C je jakékoli volání metody třídy předávání zpráv. Chcete-li vyvolat zprávu o objektu, umístěte objekt do hranaté závorky a poté zprávu. Můžete snadno spojit hovory. V příkladu tedy metoda vrací objekt a na tomto objektu nazýváme method2 .
// passage de message [objet methode:argument]; // chaînage de message [[objet methode:argument] methode2:argument2];
Syntaxe metod, na první pohled trochu matoucí, byla navržena tak, aby se více podobala lidskému jazyku. Každý argument je oddělen oddělením „:“ a komentářem.
Každá instance objektu má ukazatel isa, což je ukazatel na objekt metaclass, který popisuje metody přístupné objektu. Třída, která má rodiče, představuje metaklasu strom s celou hierarchií tříd aktuálně v paměti. Takže když se pokusíme předat zprávu, prostředí Objective-C načte ukazatel isa objektu, pak prochází stromem metaclass a získá ukazatel volané metody. Tento mechanismus je samozřejmě drahý, ale zařízení pro ukládání do mezipaměti během prvního volání je velmi efektivní.
Objective-C ++ je front-end pro GCC , který kompiluje kombinaci C ++ a Objective-C kódu . Objective-C ++ kromě C ++ rozšíření, že jazyk Objective-C přidává C .