炒菜用什么油比较好
Paradigma | objektové, reflexe |
---|---|
Vznik | 1986 |
Autor | Brad Cox a Tom Love |
Vyvojá? | Apple Inc. |
Poslední verze | Objective-C 2.0 |
Typová kontrola | kachní, statické, slabé |
Hlavní implementace | Clang, GCC |
Ovlivněn jazyky | Smalltalk, C |
Ovlivnil jazyky | TOM, Java |
Objective-C, ?asto nazyvany ObjC, je objektově orientovany programovací jazyk implementovany jako roz?í?ení jazyka C, do kterého byl p?idán systém zasílání zpráv z jazyka Smalltalk. V sou?asné době je pou?íván v opera?ních systémech macOS, iOS a GNU projektu GNUstep. Obě prost?edí jsou zalo?ena na standardu OpenStep.
P?eklada? tohoto jazyka je sou?ástí GCC. Ov?em nejpou?ívaněj?ím p?eklada?em v sou?asné době je clang, díky jeho pou?ití firmou Apple v Xcode.
Historie
[editovat | editovat zdroj]Brad Cox vyvinul Objective-C ve spole?nosti Stepstone po?átkem osmdesátych let minulého století.
Objective-C byl p?vodně vyvinut jako hlavní programovací jazyk pro po?íta?e NeXT s opera?ním systémem NeXTSTEP. Po?íta?e NeXT u? se nevyrábějí, ale my?lenka softwarového prost?edí p?etrvala ve standardu OpenStep.
Základy jazyka
[editovat | editovat zdroj]Objective-C je nadmno?inou jazyka C. Díky tomu je mo?né p?elo?it libovolny program jazyka C kompilátorem Objective-C.
Nové datové typy
[editovat | editovat zdroj]- BOOL
- Class (v podstatě toté? co id a je s ním zaměnitelny; umo?ňuje lep?í typovou kontrolu p?i p?ekladu)
- id
- IMP
- SEL
Zprávy
[editovat | editovat zdroj]Syntaxe posílání zpráv (volání metod) objekt?m je odvozena ze syntaxe jazyka Smalltalk na rozdíl od C++, které vychází z jazyka Simula 67.
[p?íjemce zpráva]
Tímto zp?sobem je mo?né volat metodu na instanci, statickou metodu na t?ídě nebo metodu na p?ímém p?edkovi pomocí klí?ového slova super. Ka?dá instance disponuje proměnnou self, co? je ukazatel na sebe sama ekvivalentní this z C++.
Roz?í?ení mo?ností preprocesoru
[editovat | editovat zdroj]Je p?idán jedno?ádkovy komentá?.
Direktiva #import je pohodlněj?í verze #include, která zabrání opakovanému vlo?ení hlavi?kového souboru.
Rozhraní a implementace
[editovat | editovat zdroj]Objective-C vy?aduje oddělení rozhraní a implementace do samostatnych blok?, eventuálně soubor?.
Rozhraní
[editovat | editovat zdroj]Rozhraní t?ídy je obvykle definováno v hlavi?kovém souboru. Je dobrym zvykem pojmenovat soubor dle t?ídy kterou definuje. V p?ípadě jednoduchych t?íd není nutné.
Obecny tvar rozhraní
@interface jméno_t?ídy : p?edek
{
proměnné instance
}
+ metoda t?ídy
+ metoda t?ídy
...
- metoda instance
- metoda instance
...
@end
Implementace
[editovat | editovat zdroj]Vlastní těla metod se nacházejí v bloku implementace. P?ípona souboru s implementací je ?.m“.
@implementation jméno_t?ídy
+ metoda t?ídy
{
/* implementation */
}
- metoda instance
{
/* implementation */
}
...
@end
Protokol
[editovat | editovat zdroj]Protokol definuje pouze hlavi?ky metod, které musí t?ída implementovat. Tímto postupem lze vynutit stejné chování u nep?íbuznych t?íd.
@protocol Protokol_1
- metoda;
@end
@interface T?ída : Rodi? <Protokol_1, Protokol_2, ...>
...
@end
Bloky
[editovat | editovat zdroj]Nejnověj?í verze Objective-C umo?ňuje pou?ívat bloky (uzávěry):
void (^block)(id);
block = ^(id obj) { NSLog(@"From block: %@", obj); }
block(@"Test");
Bloky jsou vytvá?eny na zásobníku. Má-li byt blok uchován po del?í dobu, je nutné jej zkopírovat na haldu funkcí Block_copy.
Objective-C++
[editovat | editovat zdroj]Objective-C++ je analogické roz?í?ení jazyka C++ umo?ňující mísit kód Objective-C a C++. T?ídy z C++ jsou automaticky inicializovány a ru?eny p?i alokaci a zániku objekt? z Objective-C, ale t?ídy z r?znych jazyk? nejsou vzájemně zaměnitelné. Koncep?ně je Objective-C++ podobné jazyku C++/CLI od Microsoftu.
Externí odkazy
[editovat | editovat zdroj]Obrázky, zvuky ?i videa k tématu Objective-C na Wikimedia Commons