Movatterモバイル変換


[0]ホーム

URL:


Przejdź do zawartości
Wikipediawolna encyklopedia
Szukaj

Objective-C

Z Wikipedii, wolnej encyklopedii
Wikipedia:Weryfikowalność
Ten artykuł od 2021-02 wymagazweryfikowania podanych informacji.
Należy podać wiarygodne źródła w formieprzypisów bibliograficznych.
Część lub nawet wszystkie informacje w artykule mogą być nieprawdziwe. Jako pozbawione źródeł mogą zostać zakwestionowane i usunięte.
Sprawdź w źródłach:Encyklopedia PWN •Google Books • Google Scholar •BazHum •BazTech •RCIN • Internet Archive (texts /inlibrary)
Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się wdyskusji tego artykułu.
Po wyeliminowaniu niedoskonałości należy usunąć szablon{{Dopracować}} z tego artykułu.
Objective-C
Pojawienie się

1983

Paradygmat

wieloparadygmatowy:refleksyjny,obiektowy

Typowanie

statyczne,dynamiczne (słabe)

Aktualnawersja stabilna

2.1

Twórca

Tom Love, Brad Cox

Platforma sprzętowa

wieloplatformowy

Strona internetowa

Objective-C – rozszerzenie językaC o możliwości obiektowe, wzorowane naSmalltalku.Objective-C przyjął drogę całkowicie odmienną odC++. Jest używany głównie wframeworkuCocoa w systemieOS X oraz wiOS.

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ęzykaObjective-C. Istnieją też specjalnie dlaObjective-C wprowadzone typy, istniejące już według reguł języka C, z których najważniejszym jestid. 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:

idobject=[[Klasaalloc]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ładniObjective-C istnieje mnóstwo podobieństw doSmalltalka, 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.:

[objectsetA:5andB: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 toid:

-setA:(int)aandB:(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 wObjective-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 kompilatorzeGCC 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 kompilatorzePOC należy się posługiwać wyłącznie wskaźnikiemid dla obiektów Objective-C.

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

Model obiektowy wObjective-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ęzykaObjective-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 zGCC), natomiastkompilator dla Stepstone Objective-C jest znany jakoPOC. Koncepcja Stepstone, implementowana przez POC, różni się od Apple m.in.:

  • POC posiada pełneodśmiecanie pamięci (gc Boehma lub RC)
  • POC posiadalambdę 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ń mobilnychiPhone,iPod touch iiPad. Inne bardziej znane projekty wykonane w tym języku to Cocoa, będący głównymAPI wysokopoziomowym w Mac OS X orazGNUStep, mający być implementacją systemu okienkowegoOpenStep, stworzonego wcześniej przezNeXT jakoNeXTStep. Powiązanie owych faktów jest nieprzypadkowe:Apple swego czasu przejąłNeXT wraz z dobrodziejstwem inwentarza, czyliOpenStep iObjective-C.

1GL
2GL/
Język drugiej generacji/
Asembler
3GL /
Język trzeciej generacji
wieloparadygmatowe
proceduralne
istrukturalne
historyczne
inne
obiektowe
funkcyjne
edukacyjne
4GL/
Język czwartej generacji/
Język dziedzinowy
Języki zapytań do baz danych
Generatory raportów / stron
Przetwarzanie danych, analiza i raportowanie
5GL/Logiczne
Ezoteryczne
Inne
Źródło: „https://pl.wikipedia.org/w/index.php?title=Objective-C&oldid=76317639
Kategorie:
Ukryta kategoria:

[8]ページ先頭

©2009-2026 Movatter.jp