Objective-C

Objective-C
Pojawienie się

1983

Paradygmat

wieloparadygmatowy: refleksyjny, obiektowy

Typowanie

statyczne, dynamiczne (słabe)

Aktualna wersja stabilna

2.1

Twórca

Tom Love, Brad Cox

Platforma sprzętowa

wieloplatformowy

Strona internetowa

Objective-C – rozszerzenie języka C o możliwości obiektowe, wzorowane na Smalltalku. Objective-C przyjął drogę całkowicie odmienną od C++. Jest używany głównie w frameworku Cocoa w systemie OS X oraz w iOS.

Elementy składniowe, o jakie rozszerzono w tym celu język C, używają dwóch symboli: [] oraz @ (rozszerzeń składni jest więcej, ale tylko te wchodzą w jakiekolwiek interakcje ze składnią języka C). Nawiasy kwadratowe są używane do wywoływania metod, natomiast @ do definicji specyficznych dla języka Objective-C. Istnieją też specjalnie dla Objective-C wprowadzone typy, istniejące już według reguł języka C, z których najważniejszym jest id. Typ ten jest uniwersalną „referencją do obiektu” (dokładnie to wskaźnikiem z punktu widzenia języka C). Podobnie jak to jest w Smalltalku, klasa może utworzyć obiekt po wywołaniu na obiekcie klasy metody new:

id object = [[Klasa alloc] init];

Do zaprogramowania czegokolwiek należy stworzyć klasę. Tworzy się ją dwuetapowo: najpierw w pliku .h definiujemy nagłówki metod oraz pola wewnątrz definicji @interface, a potem w pliku .m (pliku z definicjami fizycznymi) – @implementation, gdzie zawierają się definicje metod.

Wartym wspomnienia elementem jest dodatkowa dyrektywa preprocesora #import, która odpowiada #include, lecz nie potrzebuje makrowartowników (plik raz wczytany w danej jednostce kompilacji nie będzie wczytany przy następnych dyrektywach #import).

W składni Objective-C istnieje mnóstwo podobieństw do Smalltalka, co objawia się m.in. charakterystycznymi dla tego języka „wielosłownymi” nazwami metod (zwanych selektorami), tzn. metoda ma w odpowiednich miejscach dwukropki i na tych pozycjach podczas wywoływania będą przekazywane argumenty, np.:

[object setA: 5 andB: 10];

Istotne różnice w stosunku do Smalltalka są wymuszone przez konieczność używania statycznej typizacji w języku C. Dlatego właśnie w definicjach metod, odmiennie niż w Smalltalku, należy podawać jawnie typ argumentu, jeśli nie jest to id:

-setA: (int)a andB: (int) b;

Znak '-' oznacza, że jest to metoda obiektu. Mógłby być to też '+', wtedy byłaby to metoda klasy (odpowiednik metody statycznej w C++).

Kwestia statycznej typizacji i jednocześnie interakcji z językiem C wprowadza wiele zamieszania. O ile w Smalltalku „wszystko jest obiektem”, o tyle w Objective-C obiektem jest tylko to, co jest dostarczone przez samą nakładkę; elementy takie jak liczby całkowite, czy zmiennoprzecinkowe, są obsługiwane już zgodnie z językiem C. Wprowadza to też zamieszanie w samej definicji języka; przykładowo w kompilatorze GCC można posługiwać się nazwą klasy jako typem statycznym (tzn. można używać np. Klasa*, gdzie Klasa jest klasą zdefiniowaną w Objective-C), natomiast w kompilatorze POC należy się posługiwać wyłącznie wskaźnikiem id dla obiektów Objective-C.

Statyczna typizacja nie wpływa jednak (odmiennie, niż w C++, jak również w Javie, C# i innych zaczerpniętych z C++) na możliwość wywołania metody. Na rzecz obiektu trzymanego przez wskaźnik id można wywołać dowolną metodę, a błąd w tym wywołaniu zostanie wykryty na etapie wykonywania. Tak samo zresztą rzecz ma się w Smalltalku i Incr Tcl.

Model obiektowy w Objective-C jest w ogólności wierną kopią modelu Smalltalka pod każdym względem:

  • klasa Object, niejawnie dziedziczona przez wszystkie klasy Objective-C
  • dziedziczenie wyłącznie jednokrotne - realizowane w ten sposób, że nierozpoznana wiadomość zostanie przekazana do „superklasy” (klasy bazowej, w terminologii C++)
  • koncepcja metaklas, w której klasa jest również obiektem, natomiast tworzenie „obiektu” jest czynnością wykonywaną przez klasę

Nie istnieje standard języka Objective-C – rozwijane są niezależnie dwie nieformalne „koncepcje”: Apple i Stepstone. Implementacja koncepcji Apple jest dostępna jako Apple Objective-C oraz GNU Objective-C (wraz z GCC), natomiast kompilator dla Stepstone Objective-C jest znany jako POC. Koncepcja Stepstone, implementowana przez POC, różni się od Apple m.in.:

  • POC posiada pełne odśmiecanie pamięci (gc Boehma lub RC)
  • POC posiada lambdę z domknięciami
  • POC nie obsługuje statycznej typizacji obiektów Objective-C

Dodatkowo, POC i GCC potrafią implementować nakładkę Objective-C również na język C++, realizując koncepcję Objective-C++ (pliki kompilowane mają wtedy rozszerzenie .mm zamiast .m). Kompilator POC, odmiennie niż GNU Objective-C, pracuje podobnie jak Cfront dla C++: na podstawie plików .m (.mm) generuje kod w języku C, który następnie podlega kompilacji jako język C (lub C++).

Język Objective-C ostatnio zdobywa popularność w związku z sukcesem urządzeń mobilnych iPhone, iPod touch i iPad. Inne bardziej znane projekty wykonane w tym języku to Cocoa, będący głównym API wysokopoziomowym w Mac OS X oraz GNUStep, mający być implementacją systemu okienkowego OpenStep, stworzonego wcześniej przez NeXT jako NeXTStep. Powiązanie owych faktów jest nieprzypadkowe: Apple swego czasu przejął NeXT wraz z dobrodziejstwem inwentarza, czyli OpenStep i Objective-C.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.