Objective-C - Google

Objective-C

Z Wikipedii

Skocz do: nawigacji, szukaj

Objective-C to rozszerzenie języka C o możliwości obiektowe, wzorowane na Smalltalku. Objective-C przyjął drogę całkowicie odmienną od C++. Poza frameworkiem Cocoa w systemie Mac OS X nie jest szerzej wykorzystywany.

Elementy składniowe, o jakie rozszerzono w tym celu język C, używają dwóch symboli: [] oraz @ (rozszerzeń składni jest oczywiście 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 new];

Tak jak to jest w językach obiektowych, 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 mnóstwo 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 bazowanych na C++) na możliwość wywołania metody. Na rzecz obiektu trzymanego za 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, a dokładnie klasa jest również obiektem, a tworzenie "obiektu" jest czynnością wykonywaną przez klasę

Język Objective-C nie posiada zresztą nawet swojego standardu. Znane są dwie koncepcje języka Objective-C: 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 końcówkę .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 nie zdobył sobie popularności i w zasadzie jest językiem niszowym, nawet nie akademickim. Jedyne bardziej znane projekt 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 tych wszystkich rzeczy jest nieprzypadkowe: Apple swego czasu przejął NeXT wraz z dobrodziejstwem inwentarza, czyli OpenStep i Objective-C.



Niedoszły reprezentant Polski w Turynie?
Jak informują włoskie media, Torino FC jest zainteresowane sprowadzeniem napastnika Cagliari Calcio Roberta Acquafreski.
Pierwszy letni transfer Realu?
Według włoskich mediów pierwszym letnim transferem Realu Madryt ma być obrońca Calcio Catanii Juan Vargas.
ME: kolejne dwie polskie osady w finałach
Marcin Grzybowski w C-1 oraz Wojciech Tyszyński i Paweł Baraszkiewicz w C-2 na 1000 metrów dołączyli do dwóch osad, które już w czwartek wywalczyły awans do finału ME w kajakarstwie klasycznym.
Drzyzga poprowadzi grę wicemistrza Polski?
Wojciech Drzyzga przez wiele lat był podporą reprezentacji Polski, z którą zagrał m.in. na igrzyskach w Moskwie i dwa razy w mistrzostwach świata. Po zakończeniu kariery został trenerem. Prowadził m.in. warszawską Legię i AZS Olsztyn. Obecnie jest cenionym komentatorem telewizyjnym. Jego starszy syn Tomasz jest libero w pierwszoligowej Gwardii Wrocław. Obecnie seniorską karierę rozpoczyna młodszy, ale bardziej utalentowany potomek Wojciecha Drzyzgi - Łukasz - czytamy w "Życiu Warszawy".
Ronaldinho podjął decyzję, "Barca" obniżyła cenę
Według włoskich mediów Ronaldinho, gwiazdor FC Barcelony, poinformował włodarzy klubu, że odejdzie tylko do AC Milan, pomimo zainteresowania ze strony angielskich klubów.
Linki: Strona gwna