NetSago IT Research Project — ������ — Objective-C ��� ������������� C++ (original) (raw)

������� ����� ������ David Chisnall �Objective-C for C++ Programmers�: ����� ������, ����� ������, ����� ������
��������! ����������� ������ ���������� ����������� ������ ��� ������� �������� ����������� �� �������� ��������. ��� ���� ���������� � ������������ �� �������� ������ ������ ��������������� ������� ��������� ��� � ������������.

Objective-C ��� ������������� ��� ����������� ����� ���������� ��� C, ��������������� ���������, ������ �� Smalltalk. �� ����� �������� � ���� ������ �� Smalltalk ���������, � ������� �������� ����� �������, ����� ����� ���� �������� ������ C, � ����� � �������� ���������� Objective-C.

� ������� �� C++, Objective-C � ��� ����������� ����� C. ������ ���������, ���������� �� C, �������� ���������� ���������� Objective-C. ��� ����� �������� ����� � Objective-C ���������� � ������� @, ������� �� �������� ���������� ��������������� C.

������� ��������

������ ����������� Objective-C ��� ������������, ������� ��������� Objective-C � C. ��� ������������ ����������� ����� �������������� ����������� ��������. ����������� ����������� �� ��������� C � �������� �������������� �����, �� ��� ��������� ����� �� ������� ������ � ����������� ��������, ��������������� ������������ �����������.

� Objective-C ��������� �������� ������� ��������� �� C, � ������� ������ ������� � ��������� �� ������ ��������� �� C, �������������� �����. ��� ������ �������� ��� ��������� ������ � ������� ����������� �� ������� �������, �� ��� ������� ��� �������� ���������� ��� ������ �������, �������� ��� ���������� ���������� (������ ������, ������ ��������� C++) � ��������� ������ ����������.

��� ��� Objective-C �������� ����������� ������� ���������� ��� ������ C, � ��� ����������� ���������� �������� (������� ��������� �������) ������������ � C, � ��� ������, ��� Objective-C ��������� ��������� ��������� ������ ������������. ��� ������� ����� � Objective-C. ����� �� ��������� ����� � C++, ���������� ������ ��������� ��������������� �������� � ������������ ���������, ����� ����� ���������� ��� ��� �������. � Objective-C, �� ������ ���-�� ���� �� ��������� ���������:
� ������� ������� C ��� ������ �������, ����������� ����� (� ������� GNU)
� ������� ������� C, ������� ���� ����� � �������� ��� � ���� �������� (� ������� Apple).

��� ������, ��� �� ������ ������ ������ ��� �� C, ������� ��������������� � ��������� Objective-C. ��� ����� ��������� ��� �������� ������������ ��������� �����, ����� ��� �� �����.

������� �������

Objective-C ��� ������ � ������ 1980-� ������ ������ (Brad Cox), ��� ����� ����������� ���������� � C ��� ������ ��������� �������� � ����� Smalltalk. �� ����� �� ������� Object Oriented Pre-Compiler (OOPC), ������� ���� ����� ������� ���������, �� ������������� ������� ���������.

�������������� ���������� � �������� ����� Objective-C ���� ������� ��������� NeXT, � ���� ������������� ����������� � �� ����� ������������ �������. � NeXT �� Objective-C ������� GUI ������ � ����������� �����������. ��� ���� ������ ������������ ������� ��� ������� ���������� ���������� (Rapid Application Development, RAD). � �� ����� ��� ������� �������� ������, ������������� � ���, ��� ����������� ���������� �� ������ ���� ������ �������� ���������� � �� ������ ��������������� �������.

� ������ 1990-� NeXT � Sun ������������ � ������� ���������� ����������� ������ ����������� ����� NeXT. � �� �����, ��� �������������� ������� NeXT �� ������ ������ ������������ ������ C, ����� ������ ���������� ��� ����������: Foundation � AppKit. Foundation ��������� ������ ����������������, ������� ��������� �������, ����� � ������ ����. AppKit �������� GUI-����������. ��� ���� ���������� � ������������ OpenStep, ������� ���� ����������� Next, Sun, � ����� � �������� GNU. ����� ������� NeXT, Apple ������������� ���������� OpenStep �� �Cocoa�. ��� ��� OpenStep ����������� �� ������ ����������� NeXT, �������� ���� ������� � OpenStep ���������� � �NS�.

���������� ��������� ������� ��������� Objective-C ��� GCC. �������������� ���������� ���� �������� � NeXT, �� ��������� � ��������� ����������, ������� ������������ ����� ���������� � �� ������ GCC. �� ������������� � ������ � GCC, NeXT ��������� ������ GPL. ���� ���� �� ��������, �, � �������� �����, NeXT �������� ������� ���. ��� �� �� �� ����, �������� ��� ������� ���������� �� ����������, ������� ���������� �� ������� �� ����� ������ ���������. ������ �������� (Richard Stallman) ������� ����� ������, ������� ��������� ������� �������� �� NeXT. ��� ����, � ���� �������, ���� ������������ �������� ����� ������ ��������, �������� ������� ����� �� ������ �����.

������� ��� ��� Objective-C � GCC ������� �� ������������ ������. NeXT ��������� ���� ������, ������� ������������ ����� ����� ����������� ���� ��� ��������, ��� ��������� � ����� �������� ����� � ������������ ������ ������� �� NeXT. �������� ����� GCC �������� ������ ���������������� ����, ���������� �� ���� NeXT, �� ����������� #ifdef-��� ��� �������� GNU.

��� ������ GCC ���� ������������ Objective-C, �������� ������� ������������ �������� NeXT. ������ GNUstep � �������� ����� ��������� �� ���, �������� ������� ����� OpenStep � ����� ���������� Cocoa. �� ����� �������� � ���� ������ ����������� ���������� �� NeXT � GNU Opject Relational Modeler (GORM).

������� ����������

�������������� ���������� � Objective-C ���� �������������� ����� �������, ����� �������� ��������� ��������� ��������-���������������� ����. � C++ �� ������ ������� ���:

doSomething();

��� ����� ���� ������� ������� C, ������� ����������� �������-����� �������� ������� � C++, ���������� � �������� �������� ��������� ��� ������� ����������� �������, ������� ����� ���� ����������� � �������� ������, � ������� �������� � �������� �������� ���������. � ������ �������, �� ������ ������� ���:

a.doSomething();

��� ����� ���� ������� ��������� �� ������� C, ������� �������� ����� ���������, ������� ����������� �������-�����, ������������ � ������, ��� �� ������������� ��� ��������� ��� ����������� �������, ������������ � ������, � ����������� �������� �� ������������� ���������.

� ����������������� �����, ����, ������� �������� ��� C, � Objective-C ������ �������� C. ������ ������ ������ � Objective-C ������ �� ���������� Smalltalk:

[a doSomething];

���������� ������ ������������ ��� ��������� ���������� �������� ���������, �������� �� Smalltalk. � ������� � �������� ����� ��������� ��������� � ������� ������� ������� �����. ����� � ��� ���� �����, ����������� ��������� ���������, � ���� ���������� � Objective-C ���� �����:

[aDictionary setObject:@"a string" forKey:@"a key"];

��� ����� ��������� �������� ��� ���, ��� ����� ������ � ���������� C, �� ��� ��������� ������� ������� ������ �������, ��������� ��� �������� ����������. ��� ����� ������ ��� ����� ������� ��� ������, ���� �� ����� ���� �� �������� �����, ����������� �������� �������� aDictionary, � �� ������, ��� ���� ����� ������������� ������ � ����, � �� ������, ��� ���� ���.

����� ���������, ��� ������������ � ����� ����� ����������:

SEL sel = sel_get_uid("setObject:forKey:"); IMP method = objc_msg_lookup(aDictionary->isa, sel); method(aDictionary, sel, @"a string", @"a key");

� ����������� ����� �� ���, ��� ����� sel. �� ������ �� ��, ��� ��� ��������, �� ������ �������, ��� ���������� � �������� sel ����� ����������� ���������������� ���������� ������� ����������, ����� ������ ����� ��������. ��������� ��������� NeXT/Apple ���������� ��� ��������� ���� � ���������:

objc_msgSend(aDictionary, sel, @"a string", @"a key");

��� �������� ������� �������, �� ������ �����������, ����� ������������ ���������� ���� � ������� ������� �������. ��� ��� ��� ��� ������� C, � ��� ��� ������ ���������� � �� ������ �������� �� �� ������ ������������ ����, ���� ��������.

��������� ������

������ ���������-��������������� ��� ������ ������ ���� (Alan Kay) � 1960-�. �� ��������� ���������� ����� Smalltalk ������ � �������� � Xerox PARC, ��� ����� ������������� ���� ���� ������ ����������������.

�������� ����� ��������-���������������� ���������������� ������� ������� ������ �����������, ������� ������� ���� � ������ ����������� ������ ���������. ��� ����� ���������� �� ������� � C++, ��� ������������ ����� ���� ������� �� ��������� �����������������, � �������� ����� �������� �������������� ������� �� ����������� ������.

� C++ ������� � ��� ��������� � ������� ��������� �������, ������� �������� ���� ������������, ���� ������������. ����������� ������� � ������������� ���������� ������� � C �� ������� ������ ����������, ���������� ������. ��� ������ ������������� ���������� ��� C, ��� ��� ��������� ���� ������������:

// C++ Object->function(); // C function(Object);

������ �� C++ �������, �� �� ���� �����-���� ������������� �������.

C++ ����� ������������ ���-��� ����� �������� � ����� ����������� �������, ���������� ������� ������. ���� ������� � ���������� ������� �������� �����������, ����� �������� ������� ����� �������, ������� �� ������ Object. ���� ��� �����������, �� ��� ����� �������� �� ����, �������� ������ ������ ���������� ������� Object.

� Objective-C �� ���� ��������� ����������� ����������� �������, ���������� ������ ������. ���� �� ������ ����� ����������������, �� ������ ����������� ������� �� C. ������ � Objective-C ����� � ������������ �������� � C++, �� � ����������� ������� ���������. ������ � ������ ���������:

[object message];

���� ��� ���������� ��������� � ������ message �������. ����� ��� ����� ������ � �������� ���������� ����� ��������, ��������� ������� �� ������ �������. ��� ���� ����� ������ ������� ����� ���� � �������� � C++: � C++ ���� �������� �� ��� ��� ������� ������� �� ����, �������� ������ ������ �� �������� ������ ������.

�����������, ��� � ��� ���� �������� �� ������� �������. A � ������� �����, B � C � �������� ������ A, � D � �������� ����� B. ���� ������ �� ���, ����� ������ A, ��������� ����������� ������� doSomething() � C++, �� ������ ������� �, ������ ��������� ������. ���������� ��������� ������:

Object.doSomething();

���� �� �������������, ��� Object � ��� ������ ������ B ��� D, � �� ������������� �������� �������� D, ����� ������� ����������, ������������ � D. ���� �� �������������, ��� ��� ������ ������ C, �� �������� ���������� �� C. ���� �� ���������, ��� ��� ������ ������ A, ��� ���������� ����� ����������� �������� ��� ����� ������������ ���������� � ����������, ����� ���������, ��� ������������ ������.

���� � ��� ���� ����� �� ������� ������� � Objective-C, � �������� B, C � D, ����������� ����� doSomething, �� ������ ����������� ���������:

[object doSomething];

���� �� �������������, ��� ������ ������ �������� ����� B, � �� ����� ���� �� ���� C, ����� doSomething ��� ����� ����� ������. ���� �� �������, ��� ��� ��������� ������ A, ��� ���������� �� �������� �������������� � ���, ��� ���������� ������ A �� �������� �� ��������� doSomething. ���� ��� ������������� ��������� ������� B, C ��� D, �� ��� ��������� � ��������, � ���� �� �� ������������� ��������� ������ A, �� �������� ���������� � ��������.

������������� ������������ ���������� � Objective-C, �� ����� ��� ������� ����� ������������, ��� � C++. � C++ ����� ������ ������� �� ������� ������������, ��� ��� �� ������ ������������ ��� ������ ������������, ���� � ��� ��� ������ �����������. � Objective-C �� ������ ������������ ����� ��� ������, ��� ��������� ����������������, ���� ��� �������� �� �� �� ���������.

������ �� �������� ����������

� Smalltalk ������ � ��� ������ ������� � ���������� ������������ �������������. �� �� ����� ����������� � � Objective-C. ����� � ��� ������. �� �������� �� ��������� ��� ��, ��� � ������. � Objective-C, � C++ ��������� ��������� ������ ��� ������� � ��� �������������:
� � C++ ��������� ������ ��� ������� �������� � ������� ��������� new. � Objective-C ��� �������� ������������ ������ ��������� alloc, �������, � ���� �������, �������� malloc() ��� ������.
� ������������� � C++ ���������� � ������� ������ ������� � ������, ����������� ����� ������. Objective-C �� �������� �������� ����� �������� ������������� � ������� ��������, �� �� ���������� ����� ������������� �� ��������� ���������� init.

����� �� ���������� �����, �� ������� �������� ������, ���������� ���������� �� ����� �-�, � �+� ������������ ��� ������� ������. ������ ��� �������� ������������ ��� ��������� � ������������, ��� ��� �� ������ ������ +alloc � -init, ����� �������, ��� alloc �������� ��������� ������, � init � ����������.

������ � Objective-C, ��� � � ������ ��������-��������������� ������, ��� �������� ��������. ����������� ������� ���� �� ��������� ����� +alloc; ������ ����� ��� ��������� ��� �� �����-������. � NSObject, ������� ������ � ����������� �������� �� Objective-C, ����� +alloc �������� +allocWithZone. �� ��������� NSZone � �������� ���������, � C-���������, ���������� ��������� ����� ��������� ��� ��������� ������ ��� �������. ����������� � 1980-�, ����� Objective-C ������������� � NeXTSTEP ��� ���������� ��������� ��������� � ����������� GUI �� ����������� � 8 �� ��� � ��� � �������� �������� 25 ���, NSZone ���� ����� ����� ��� �����������. �� ������ ������, ����� ��� ������������ �� Objective-C � ���������� (� �� ������� �� ������ ����� ����� ��������, ��� � ����������� NUMA � ����� ������������).

����� �� ������� ������������, ��������� ���������� ����, ��� ��������� �������� ������� ���������� �����������, � �� ������, �������� ���� �������� �������. ����� �� ����������� ������� ��������� -init, �� ���������� ������������������ ������. ��� ����� ���� ������, �������� �� ��������� ��������� (� ������ ��� � ����), �� �� ����������� ������ ���� ������ ���. ��� �� ����� � ��� ������ ���������������. ����������� ����� ������������������ ��������� ���������� ������, ������� ����� ���������� ��� ��������� ������.

���������������� ���� ���������� ���� ����������� ���������� �isa-swizzling�. ��� � ��� ������, ������� � Objective-C �������� ����������� C, ��� ������ ������� � ��������� �� �����. � ����� �������� ����� �������� ������ ����� ��� ��, ��� � � ������ ���������� ����������; �� ������ �������� ����� ������� � ��������, ������ �������� ����� ��������. ������� ��, ���� �� ���������� ����� ������� ����-��, ��� ����� ������ ��������� � ������, ��� ���������� ������. ��� �� �����, � ��� ����� ���� ����������, ������� ���������� ���������, � ����� ����� ����������, ������� ���������� ���������. ��������, ��� ������� ������������ � ����������� ��������� ������ (NSString), � ������� ���� ��������� ���������� ��� ��������� ���������, ��� ����������� ����� � �.�.

��� ��� ������ �������� ���������, �� ������ ������ � ���� ����� ���, ��� � � ���������. ��������, �� ������ �������� �� � ���������. � ��������� ���� ������ �������� �����, ����� � ���� ������� ����� �������� �������, ������� ����� ���������� ������������ ������ �������. �� ������ ������� ������� ������������ ������ �������, � ����� ��������� ����� ������ ��� ������� ��������� �������. ���� �� �������� ��� � �������� ����������, ��� �������� ������������� ���� ������ �������������� ����������� �����������.

���� � ���������

Objective-C ���������� �� ��������� ���������� ������� � �����. ���� ��� �� ������ ������, � ��������, ���������� ������� � �����, �� ����� ������ ������� ��� ���������, ��� ��� �������� ���������� �� ����������� ���������� �������. � ����������, ������ ������ � Objective-C � ���������. ��������� ���� ���������� Objective-C; ��� ���������� � ������������ ������ ��� ���� C.

��� �������� ����� ������������ ����� ����� � Objective-C � ��� id, Class � SEL. id � ��� ��������� �� ������ Objective-C. ��� ������������ void* � C, � �������� �� ������ �������� ����� ��� ��������� �� ������, � ����� �������� ��� � ������ ������� ���� ��������� �� ������. �� ������ ����������� ��������� �����-������ ��������� � id, �� �� �������� ���������� � ��������, ���� ����� ����������� �� ��������������.

Class � ��� ��������� �� ����� Objective-C. ������ �������� ���������, ������� ��� ����� ����� �������� ���������. ��� ������ �������� �����, � �� ����������. ������������ NSObject ��� ��� ���������� NSObject, �� �� ����� ����� ���� ����������� � �������� ���������� ���������. � ��� ����� ���� ����� �����:

[NSObject class];

���� ��� �������� ��������� +class ������ NSObject, ������� ���������� ��������� � ��������� Class, �������������� ����� ��� �����. ��� ������� ��� ������������, ��� �� ������ �����.

������ ���, SEL, ������������ ����� �������� � ����������� ������������� ����� ������. �� ������ ������� ��� �� ����� ���������� � ������� ��������� @selector() ��� � �������� ����� ������ ������� ������� ���������� �� ������� C ��� ��������� ������� OpenStep NSSelectorFromString(), ������� ���� �������� ��� ������ Objective-C. ��� ������� ���������� ��� �������� ������ �� �����. �� ������ ������� ��� � C, ��������� ���-�� ����� dlsym(), �� ��� ������� ������� � C++. � Objective-C �� ������ ������� �����:

[object performSelector:@selector(doSomething)];

��� ����� ������������ ����������:

[object doSomething];

����, ��� ������ ������� ����� ������� �������, ��� ��� ������ ��������� �������� ���� ���������. ����� �� ����� �������� ���������� ��, ��� �� ������ ������ � �����������.

� C++ ��� ����������� ���� id, ��� ��� ������� ������ ������ ���� ������������. � Objective-C � ��� ���� �������������� ������� �����. ��� ��������� �������� ����� ���������:

id object = @"a string"; NSString *string = @"a string";

�� ����� ����, ����������� ������ � ��� ��������� ����� NSConstantString, ������� �������� �������� ������� NSString. ������������ ��� � NSString* �������� �������� ����� �� ����� ���������� ��� ��������� � ������ � ��������� ���������� ���������� (������� ����� ������� �� ������������ � Objective-C). �� ������ �������� ��� ���������, ������ ���������:

NSArray array = (NSArray)string;

���� �� ����������� ��������� �������, ���������� ��������, ��� ��� �������� �����������, ������� �������� NSArray. ��� �� ����� �������, ��� ��� ������ �������� �������. ���� �� ��������� ��� ���������, ���������� ������������ ������������ NSArray � NSString, ���, ��� �� �����, ���������. ���� �� �� ����������� ��� ���������, ������� NSString �� ���������, ��������� ����������.

� �� �����, ��� ������ ����� ����� ���������� �������� (� ��� ��� � ����, ��� ��� �� ������� ���), ��� ������������ ����� ������ ������� ����� Objective-C � C++. � Objective-C ������������ ��������� �����, � �� ����� ��� C++ ����� ���������� ��������� �����. � C++ ��� ������� �� ���� ����������. ����� �� ������������ ��������� �� ������ � C++ ����������, ������������ ��� ��������� �� ����������, ��� ��������� ����� �� ����� ���������� ��������� �������� (��� ������� ��� ����, ����� ��������� ������������� ������������, ������� �� ������������ Objective-C).

����������� �������

����������� ������� � Objective-C ���� ������ ���������� � ����������. � C++ ���� ����� �������, �� ��� ��� � �����-�� ������� �������. ��������� � Objective-C ������ ���������� �����, ������� ����� ������ ���� ������������. � ����� ����������, �� �������� � ���� ��������� ���������� ����������, ��� ��� �� �� ������ ������� ����� ������������, ���� �� ������, ��������� �� �����. ����� ������� ����������, ���, ��������, 64-������ ������� �� Apple, �� ����� ����� �����������.

��������� �������� � Objective-C �������� ��������� �������:

@interface AnObject : NSObject <aprotocol, anotherprotocol=""> { @private int integerivar @public id anotherObject; }

������ ������ �������� ��� �����: ������������� AnObject � ��� ������ ������. ��� ����� ��������� � ��� ������ NSObject (��� �������������, �� ����� ������ ������ � Objective-C ��������� NSObject). ����� � ������� ������� ��� ���������, � ��� ����� � ������������ � Java � ������� ����������� ���� �������.

��� � � C++, ���������� ���������� (������ � C++) ����� ����� ������������� �������. � ������� �� C++, ����� ����� ��������������� �������� ���� �@�, ����� �������� ���������� � ����������� ���������������� C.

Objective-C �� ������������ ������������� ������������, ��� ��� ���������� ������ ���� ����������. ������� ������ ������ ����� ������� ������ ��������� ������� ����������� �����������. ��� ������������ ��� ������������ �����������, �����������, ��� ��������� ���������� ���������� � ����� ������ ������� �������������� ���� ����������. � ����� ����� ��������� ��� ����������� �� ���������, ����� ����� ���� ����� ������� ������ � ���������� ����������. ������ �������� ������ ����� ������� ��, ��� �� ��������� ���� �� ������ ������������ ����� Objective-C:

struct _AnObject { @defs(AnObject); };

��������� @defs ��������: ���������� ��� ���� ���������� ������� � ��� ���������, ������� ��������� _AnObject ����� ����� ����� �� ������ � ������, ��� � ��������� ������ AnObject. �� ������ ������������ ��� �������, ��������, ��� ������� � ���������� ���������� ��������. ����� ��� ����������, ����� ��������� ������� C ��������� �������� Objective-C ��������, � ����� ��������� ������������������.

����� � ������� ���� �����������, �� ������ ��������� ������� � �����, �� ��� � � ������� �����. ��� ��� � ��������� � ������� ���������� ������ ���������� � ������, �� ������ �������� ���������, �������������� � ��������� �� ���������� �����, � ����� ��������� ��������� � ��������� �� ������. ����� �� ������ ������������ ��� ��� ������, ���� �� ������ ���� ����� ���������: ����� �� ������ ������� ��������� � ���� �� ��������� ������� ��������� ��������� (� ������� �� ��� ����� �������� ���������� ����� �����; ��� ������������� ������������� �������������).

� ������� �� C++, � Objective-C ��� ��������� ��� ���������� �������. ����� ����� ������� Objective-C ����� ���� ������ ����� ������ ��������. ���� �� �� �������� ����� � ����������, �� ����������� ��������. �� ����� ���������� �� �������� ��������������, ��� ������ ����� �� �������� �� ��� ���������, �� �� ������ ��-�������� �������� ���.

��������� ���� � ������ ����������� � C. ��� ��� �� ����� ����������, ������� ���������� @implementation, ��� �� �����������:

@implementation AnObject

�������� ��������, ��� ������� ���� ����������, � �������. ��� ��������� ������������� ���������� ���������� � C, ����� ��������, ��� �������� ���������� � ����� ����. �� ����� ����, ��� ����� � �� ���� ������ ����. ����� ����� �� ������� ��������� ����� �� ����� ����������. ��� ����������, ��� ���������� ����� �������������� ������ ���������� �������� �������������� (� �� ������).

���������� �������

����������� Objective-C �� ������������� �����-���� ������������ �� ���������� �������. � ������ ������� �������� ����� Object ������������ ����� +new, ������� ������� malloc() ��� �������� ������ �������. ����� �� ����������� ������ � ��������, �� �������� ��������� -free. OpenStep ������� ������� ������. ������ ������, ����������� �� NSObject, �������� �� ��������� -retain � -release. ����� �� ������ ������� ��������� �� ������, �� ����������� ��������� -retain. ����� �� ������������ ������, ����������� ��������� -release.

��� ������ ����� ���� ��������� ��������. ����� �� �� ������ ������� ��������� �� ������, �� � �� ������ ���� ��� ��� �����������. �������� ������ � ����������� � �������. ����������� ������� ����� ������������� ������� ��������� �� ������, � ��� ���.

�������� ���� �������� ���� ����� NSAutoreleasePool. � ���������� � -retain � -release, NSObject ����� �������� �� ��������� -autorelease. ����� �� ����������� �����-���� �� ���, ��� ������������ ���� � ������� ����� ��������������� �������������. ����� ������ ���� ���������, ���������� ��������� -release � ������� �������, ������� ����� ������� ��������� -autorelease. � ����������� OpenStep ��������� NSAutoreleasePool ��������� � ������ ������� ����� � ������������ � �����. ����� �� ������ ��������� ����������� ����������, ����� ���������� ������������� �������������� ������� �������.

���� �������� ����������� ����� �����������, � ������� ��������� C++. ����� ������� �������� ����� ��, ��� � Objective-C �������������� � ������� �������, � �� ������. � C++ � ��� ����������� ��������� � �� ����������� ���������. ��� �� ����������� ��������� ������������� ������ � ������������ �������. ��� �� ����������� ��, ��� ������ �� ���������, � ������ �� ��� �� ��������.

� Objective-C ����� ������ ���������� ������������� ������, � ����� ����������� ���������. NSString �������� �������� ��������, � � ���� ���� ���������� �������� NSMutableString. ���� �� ��������� NSString � ������ ��������� ���, �� ������ ������� ��������� -retain � ��������� ��������� ��� �������� �����������. � �������� ������������ �� ������ ������� NSString ��������� +stringWithString:. �� ��������, ���������� �� �������� � ���� ��, ������ ������������ ���������.

Objective-C 2.0 ��� � ������� Apple, ��� � GNU, ������������ �� ������������ ������� ������, ������� ��������� �� ������������� ������������ ����������� -retain � -release. ��� ���������� � ����� ��� �� ������ ������ �������������� ������������� ������������ � ������ �������������� � �������������.

������������

� C++ ���� ��������� ��������� ������������ � ������� Runtime Type Information (RTTI). ������ � ����� ������������ �����������, � ���, ��� ����� ��������� ����, ��� ����� ������������ �� ����� ������������������. � ����������������� �����, ������������ ������ �������� � Objective-C.

������ ��������� ������ �������� ���� ��������� ������ ��� ������ ���������� � ������� � ������ � ��� ���������� ����������. ��� ������ ���������� ���������� �� �������� � ���� �������� � ������ �������, ��� � ���. �� ������ ������������ ��� ��� �������� �������� ���������� �����. ��������, � ������� ��������� ��� Étoilé, ������� ��������� ��� ���������� � ���������� � ��� ��������������� ����������� �������� (� C++ ��� �������� ������ ��� ��� ��������, �������� ��� ��� ������� � ��� ����). ��� ������� ��� ���� ���, ��� � ��������� �� �������, ����������� �����. ��� ���������� Instance Method Pointer (IMP) � ���������� � ������������ ����� ��������� �������:

typedef id (*IMP)(id, SEL, ...);

�� ���������� ��� ������ ���� Objective-C. ��� id � ��������� �� ������ ���������� ����. ���, ��� �� ������ ��� id ��� ��, ��� �� ����� �������� �� ��������� (�� ������ �� ��, ��� �� �� ������, ����� ���������, ���� �� ��������). ������ � SEL � ��� ���������.

�� ������ ������� ���������:

IMP method = [object methodForSelector:@selector(doSomething)];

���������� method ������ ��������� �� ������� C, ����������� �� ���������� ������. ���� �� ��������� ����� �� ��������� �������, �� ������ ������������ ��� ����������� ��� ��������� ��������.

��� ��� �� ������ ������� ��������� � ��������, �� ������� ������������ ���� ������ ��� ���������� ����� ����������� ���������. � ������� XML � Étoilé � ����������� ��� ����� �������� �������� �������� � ������, �������������� ����� ������� XML. �������� ����� ��������� ����� -addChild:forKey:, ���������� ��������� ���:

NSString * childSelectorName =
[NSString stringWithFormat:@"add%@:", aKey]; SEL childSelector = NSSelectorFromString(childSelectorName); if([self respondsToSelector:childSelector]) { [self performSelector:childSelector withObject:aChild]; }

�� ������� �������� �� ��������� �����, � ����� �������� ��� � ��������. ���� ������ ����������� �� ������ ������ � ���������� XMPP. ��������, ��� ����� ���� ��������� �������, ������� ������ �������� ���������� ������ � ���������� �� � ������. ����� �� ��������� , �� ������ �������� ���������:

[parent addChild:string forKey:@"name"];

����� �������� �������� ���� �����, ������� ���������� ����� ��� ������ -addname: �� ������� � �������� ���������. ����� ������� ����� ��������� � Cocoa � ����� KVC, ��� ���������� ������������ � ������ � ���������� ��������� ����������. ����� �� ��������� -setValue:forKey:, ������������ ����� �����������, ���������������� ���������� ���������� �������� ��� ����� -setValue:forUndefinedKey:. ������������� KVC ���������, ��� ��������� ���������� ���������� �������� ��� ���� ������ ����� ������� set/get, �� �� ��������� ��������� ���������� �� ����������.

� Objective-C 2.0 Apple ������������ ��������, ������ � ������� ���������� ��������� �������:

object.property = 12;

��� ����� ������ ���� ��������������� ������. ������ ��� ����������� � ��������� set � get, � ����������� �� ����, ����� �������� ���� ������������. ������ ������������ ������� �������� ��, ��� ��� ��������� ���� ������� set � get �������������� ������������� ��� ����� ���������� ���������� � ���������� ��������� � ������, ������������ ��� �����������.

���������

� Objective-C ����������� �������� ������ ���������, ����������� �����. �� ������ �������, ��� ��������� ������ ��������� �� �����, ����������� ������ ���������:

id object; NSString *string;

������ ������ ������������ ���������� ����������, ��� ��� ���������� � Java. � C++ ��������� ������������ �������� ������������� ����������� ������� ������ ����������� � �������� ������������ ������ � �������� ����.

����� ��������� ������ ������. ��������� ���������� ��������� ���� ����� ���������� NSString, ������� ��������� AnInterface, ������� ��������� ��� ������������ ������������ ����������, ����������� ��������� ���������. ����� ������:

NSObject *delegate;

��� ��������� ��� ���� ����� ���������� NSObject (� ������� ������, ������� �� �������� �� ������ �������, ����� ��������) � ������������� ��������� ����������� ������������ ��������. � ��� �������������� �������:

id <NSObject, MyDelegateProtocol> delegate;

��� �������� ��� NSObject, ��� ��� NSObject �������� � �������, � ����������, � �������, ������������ ��������. ��� ���� ������� ���, ����� NSProxy � ������ �������� ������ ����� ���� ������������ ���������� � ����������� NSObject.

��� ��� Objective-C ��������� �� Smalltalk � ��������� ��� �������� ��������, �������������, ��� ���������, ��� � ������, ���� �������. �� ������ �������� �� ��������� ��� ���������� ������������. ������ �� �� ������� ��� ����, ������ ���� ��������� �� ���������, ��������� � ���������� NSObject:

if ([object conformsToProtocol:@protocol(MyDelegateProtocol)]) { // �������� � �������������� ���������� }

�����, ������� ������� ������� � ����������, �������� ��� ����, ��� ��� ����������� �� ��������� ������� ���������� ����. ���� � ��� ���� ��� ��������� � ����������� �������, �� � ��� ��� ������� ������� � ��������, ������� �� ��� ��������� ������. �������� ����� ��������� ���������� �������� ��� ������������ � ������� ��������� @protocol(), ��� ������������������ ����, � �������� ������, � ������� ��� ������� � �������� ���������; �� ��� ����� ������� �����������.

����������� ������

����� �� �����, ������ �������� ������� ��� � C++, �������� ���� ��������� � ��������� �������, ������� ����������� � ������������� ������. ������ �����������, ��������� �� ����� ������� �� ������ �������. ���������, ��� � ������, ����������� � ����������� � �����������.

���������� ��������� ����� ���� ������������ ��� ��������������� ���������� ��� ��������� ������ �������, ������������ ����� ������� �� ������������� ������� � C++. ���� �� ���������� ������ � ������, �� �� ���������� �� � ����������, �� �������� �������������� ��� ���������� � ��� ������, ��� �� ����������� ��. �� ������ ������� ����� ��������� ���������:

@interface AnObject (Private)

���� �� ��������� ��� � ������ ����� ����������, �� �� �������� �������������� �� ����� ����������, ����� ��������� ��������� -privateMethod ����������� AnObject. ��� � ������� (Private) � ������ ��� ���������. ��� ����� ���� �����. �������� �������� �� ��, ��� ��� ������� @inmplementation, ��� ������ ������ ������ ����������� C �������. ���� ��� ��������������� ���������� � C, �� �������� ������ ����������. ���� ��� ��������������� ���������� ������ � Objective-C, �� �������� ���������� � ��������.

�� ������ ������������ �������������� ���������� ������, ��������� ��������� ����� ����� �� �����, ��� � ����� �� ������������� ����������� ������:

@implementation AnObject (NewMethods)

���� �� ��������� ��������� -newMethod ������ ���������� AnObject, ���� ����� ����� ������. �� ����� ������ ������������ ��� ��� ������ ������������ ������� � ������� �� ���� ����������� ������, ������� ��� �� ����� ������ � �������. ���� ������ ����� ������������ ��� ���������� ��������� ������� ������������ ������� �������������� ������������, � ����� ����� ���� ����������� ��� ����������� ����� � ��������� �����������, �������� ����� ������� � ��� ���.

����� ����������������� ������ ��������� �������� ��, ��� ��������� ��������� ��� ��������� ������������ ���������� � ������������ ��������. ���� ���� ��������� ���������� ��������, �� �������� �������������� �� ����� ����������, ���� �� �� �������������� ���������� ������� ������, � ������ ��������� �������� ����� �� ����� ���������� ��������� ��� �������� ������������. �� ������������ ��� ����������� � Étoilé ��� ���������� ������������ ��������� ���������� �� ���� ��������� ������� � Foundation, ��� �� ����������� ���������.

������������ ���������

����� ������ �������� � Objective-C �������� ���� ������������� ���������, � ��������� �������, ������� ����� ����� �������������, � ����� �� �������������. Ÿ ������ ������������� � ��� ������������� ��������. � Java ����� ����� ��� ��������� ��������� ���������� ����������. � ������ ������� ����� ���� ����� �������, ��������� �� ������� ����������� ��� ������ ��� ����.

� Objective-C ��� ��� ���� ��� ����������� ������������ ����������. ������ � ����������� ��������� �� ������� ������ (������ �� NSObject), ������� ������������� ������� ���������� ������� ������. ��� ��������, ��� ������ ����� ����� �������� �� ��������� � ����������, �� ���-�� ������������� ������ ����� ������ ������������� ������. �� ������ ��������� � ���� ��������� ����, ������� ���������� ������������ ��������, ����� ���������:

@implementation NSObject (MyInformalProtocol)

����� �� ������ ����������� ��������� handleSomethingFrom: ��������������� �������. �������� ��������, ��� ��� �� ����� ������ @interface ��� �������� ���������� ����� ����������� � ����������� ��� ���������; ��������� ��������, � ��� �� �����, ����� ���-�� ��� �������� ���� �����, ����� ������ ������, ������� �� ���������� ���������. ���� ���� ����� �����, �� �� ������� �� ������ �������, ��� ��� �������� � ���������� �������������� ������� ��������� ������� � �������� �� ������������ ������ (������� ����� �������� � ��������� ������������������ � ������� Apple ��-�� ����, ��� ��� ����������� �����������).

������ ������� � ����������� ������������ � ��������. ���� �� ������� ������� ��������� respondsToSelector:, �� ������ ��������, ��������� �� �� ��������� �����. ��� ���������, �� ������ ����� ���������� IMP ��� ������, � ������� ��� �������� �����. � ����� ������ setDelegate: ����� ����� �����:

handleMethod = NULL; if([delegate respondsToSelector:@selector(handleSomethingFrom:)) { handleMethod = [delegate methodForSelector:
@selector(handleSomethingFrom:)]; }

����� ��� �������������, �� ������� ���������:

// ������������ [delegate handleSomethingFrom:self]; if (NULL != handleMethod { handleMethod(delegate, @selector(handleSomethingFrom:), self); }

Objective-C 2.0 ���� ������ �������, ������� ������������ ��� ������������� ��������� @optional � ���������� ���������. ��� ������� ����� ������, ��� ��� ��� ���������� ����������� ����� � �������� ��� �����������, ��������� �� ������, �������������� ���������, ������������ ����� �� ����� ���������.

��������� ��������

� C++ �� �� ��������� ���������, � ��������� �������-�����. ��� ������ �������, ��� ��� ��� ����������, ��� ���������� ������ ������������ ����� � ������� �������. Objective-C ������ ������ ���� ����������. ���� �� ��������� ��������� ������� Objective-C, ������� ��� �� ��������, ��������� ����������. ��� �� �����, ��� �� �������� ����� ������.

���������� �������� ����� �������� ���������� ��������������, ����� ��� ������ ��� ���������. ��� �������� �����, ������� ��������������� ���������� ��� ��������� ���������� � ����, �������� ����� � ������ NSInvocation, � ����� �������� ��� ������ -forwardInvocation: ������� �������.

������ NSInvocation ������������� ����������, �������� � ���������. �� ������ ������������ ��� ���� ��� �������� ��������� �������� �������. ���������� ��������� ������:

[[anArray map] toUppercase];

����� -map, ����������� � �������, ���������� ������ ������ � ������� ������ forwardInvocation:, �������������� �������� �������:

FOREACHI � ������ �� Étoilé, ������� ������ ���������� ����������� IMP �� NSEnumerator. ����� �� ��������� ��������� -toUppercase � ��� ������, �� ���������� �������� �� ������� ������� �������; ���������, �������� �� �� ��������� �, ���� ��, �������� ����� � �����������. ������������ �������� ����������� � ������ �������.

��� ����� ���������� ������� � C++. �� ������ ������������ ������ �������, ����� ������� ����� �������, �� ������ ���������� ������� ��� ����������� �������� ���������������.

����������

Objective-C ����� ��������� ���� � �� ����������� ����������� ��� � ���� ����� ������, ������� ��������� ����������� �����������. ��� �� �����, ��� � � Smalltalk, �� ��������� ������ � �����������. � �� ����� ��� ���� ����� ����� ������, ����������� �� ��������� �������� �� Objective-C �������� �� ����������. ������ ��� ���������� ������������ OpenStep, ����� ��� GNUstep ��� Cocoa �� Apple, � ���������� � ����������� ����� ������ ����� �������.