Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ БОМ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 87

Автор Π”ΠΎΠ½Π°Π»ΡŒΠ΄ Бокс

// surfboard.idl

cpp_quote(Β«static void Exit(void) { ExitProcess(1); }Β»)


ИмСя Π΄Π°Π½Π½Ρ‹ΠΉ IDL-ΠΊΠΎΠ΄, сгСнСрированный C/C++ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ просто ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚:


// surfboard.h static void Exit(void) { ExitProcess(1); }


ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово cpp_quote ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для осущСствлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Ρ€ΡŽΠΊΠΎΠ² Π² компиляторС IDL. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ этого ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… REFIID . ЀактичСским ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ IDL для этого Ρ‚ΠΈΠΏΠ° являСтся typedef IID *REFIID;

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Ρ‚ΠΈΠΏ C++ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ typedef const IID& REFIID;

Однако ссылки Π² стилС C++ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² IDL. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ систСмный IDL-Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ:


// from wtypes.idl (approx.)

// ΠΈΠ· Ρ„Π°ΠΉΠ»Π° wtypes.idl (ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ)

cpp_quote(Β«#if 0Β») typedef IID "REFIID;

// this is the pure IDL definition

// это чисто IDL-ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

cpp_quote(Β«#endifΒ») cpp_quote(Β«#ifdef _cplusplusΒ») cpp_quote(Β«#define REFIID const IID&Β»)

// C++ definition

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ C++

cpp_quote(Β«#elseΒ») cpp_quote(Β«#define REFIID const IID * constΒ»)

// Π‘ definition

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π‘

cpp_quote(Β«#endifΒ»)


Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» C++ выглядит Ρ‚Π°ΠΊ:


// from wtypes.h (approx.)

// ΠΈΠ· Ρ„Π°ΠΉΠ»Π° wtypes.h (ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ)

#if 0 typedef IID *REFIID;

#endif

#ifdef _cplusplus

#define REFIID const IID&

#else

#define REFIID const IID * const

#endif

Π­Ρ‚ΠΎΡ‚ нСсколько гротСскный ΠΏΡ€ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ интСрфСйсы БОМ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ примСнСния IDL.


АсинхронныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π’Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² БОМ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ синхронными. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ клиСнтский ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠ΅ ORPC-сообщСниС Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΈ Π½Π΅ Π΄Π΅ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ. Вакая схСма Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ дСмонстрируСт, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ (same-thread), ΠΈ это с ΠΏΠΎΠ»Π½Ρ‹ΠΌ основаниСм принято ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π”ΠΎ появлСния Windows NT 5.0 Π½Π΅ Π±Ρ‹Π»ΠΎ способа ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π΅Π· явного пороТдСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ вСрсии БОМ Windows NT 5.0 вводится ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° асинхронного Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ являСтся свойством ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π° Π² IDL посрСдством примСнСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° [async_uuid].

Π”Π΅Ρ‚Π°Π»ΠΈ этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²ΠΎ врСмя написания Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСкста Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² процСссС Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ измСнСния. Π—Π° подробностями ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.


Π“Π΄Π΅ ΠΌΡ‹ находимся?

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ обсуТдался ряд Ρ‚Π΅ΠΌ, относящихся ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ использованию интСрфСйсов БОМ. Π₯отя эта Π³Π»Π°Π²Π° Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ содСрТит ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΈΠ΄ΠΈΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² Π½Π΅ΠΉ Π±Ρ‹Π»Π° сдСлана ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π΅ΡˆΠΈΡ‚ΡŒ нСсколько сущСствСнных вопросов, Π½Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠΈΡ…ΡΡ Π² ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ… ΠΊΠ½ΠΈΠ³ΠΈ. По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠ΅ собствСнноС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ БОМ Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΎΡΡŒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Π»Π΅Ρ‚, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π²ΡˆΠΈΡ…ΡΡ для написания этой ΠΊΠ½ΠΈΠ³ΠΈ, я ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ ΡƒΠ±Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ слСдовало Π±Ρ‹ ΡƒΠ΄Π΅Π»ΡΡ‚ΡŒ мСньшС внимания спСцифичСским возмоТностям БОМ (Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠΈ стыковки, ΠΌΠΎΠ½ΠΈΠΊΠ΅Ρ€Ρ‹, диспСтчСрскиС интСрфСйсы), Π° вмСсто этого ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚Ρ€Π΅Ρ… ΠΊΠΈΡ‚Π°Ρ… БОМ: интСрфСйсы, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов, Π°ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Ρ‹. Π’ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Π΄ΠΎΡΠΊΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ этих Ρ‚Ρ€Π΅Ρ… Ρ‚Π΅ΠΌ, я Ρ‚Π²Π΅Ρ€Π΄ΠΎ Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΊΠΎΡ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ БОМ.


ΠŸΡ€ΠΎΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ этого ΠΎΡ‡Π΅Ρ€ΠΊΠ° прСдполагаСтся ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² январском, 1998 Π³ΠΎΠ΄Π°, выпускС Microsoft Systems Journal. Π—Π΄Π΅ΡΡŒ этот ΠΎΡ‡Π΅Ρ€ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΌ БОМ рассматриваСтся Π² историчСской пСрспСктивС.

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΎ Π² ΡΡ‚Π°Π΄ΠΈΡŽ коммСрчСского примСнСния Π² ΠΊΠΎΠ½Ρ†Π΅ 1980-Ρ… Π³ΠΎΠ΄ΠΎΠ². Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ориСнтирования Π² сСрСдинС 1980-Ρ… Π±Ρ‹Π»ΠΎ использованиС классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ абстрактный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Вакая ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° состояния ΠΈ повСдСния ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ провСсти Π² Тизнь ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ инкапсуляции. Π’ классичСском ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π»ΠΈ классам, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ посрСдством основанных Π½Π° классах ссылок. Вакая модСль программирования принята Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ срСд ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ C++ ΠΈ Smalltalk Ρ‚Π΅Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½. Π’ Ρ‚ΠΎ врСмя программисты, ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ строгого стиля, ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΈΠ· классового ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, составляя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языках, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Однако Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования наступило Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ стало явно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ языков программирования ΠΈ сСрвисных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. К числу ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСд, ΡΡ‹Π³Ρ€Π°Π²ΡˆΠΈΡ… Π²Π°ΠΆΠ½Π΅ΠΉΡˆΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² обСспСчСнии успСха ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ориСнтирования, относятся ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠœΠ°ΡΠΡ€Ρ€ Ρ„ΠΈΡ€ΠΌΡ‹ Apple Π½Π° Π±Π°Π·Π΅ Object Pascal, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ срСды SmallTalk Ρ„ΠΈΡ€ΠΌ ParePlace ΠΈ Digitalk, Π° Ρ‚Π°ΠΊΠΆΠ΅ Turbo C++ Ρ„ΠΈΡ€ΠΌΡ‹ Borland.

Одним ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… прСимущСств использования срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, явно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π±Ρ‹Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π³Ρ€ΡƒΠΏΠΏ сходных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΊ совмСстимых Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ. Π‘ Ρ†Π΅Π»ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ понятия наслСдования ΠΈ динамичСского связывания, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ явно Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сходныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (collections) связанных абстракций. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов C++:

class Dog {

public:

virtual void Bark(void);

};

class Pug : public Dog {

public:

virtual void Bark(void);

};

class Collie : public Dog {

public:

virtual void Bark(void);

};

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ классы Collie ΠΈ Pug ΠΎΠ±Π° совмСстимы ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ с классом Dog , Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ (generic ) ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


void BarkLikeADog(Dog& rdog) {

rdog.Bark();

}


ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Bark являСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ динамичСски связанным, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ диспСтчСризации ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² C++ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция BarkLikeADog Π½Π΅ полагаСтся Π½Π° Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° ссылаСтся; Π΅ΠΉ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π±Ρ‹Π» Ρ‚ΠΈΠΏ, совмСстимый с Dog. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½ для любого числа языков, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ иСрархия классов являСтся Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π΅Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ развития ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ориСнтирования. Одной ΠΈΠ· основных характСристик этой ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ Π±Ρ‹Π»ΠΎ наслСдованиС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. НаслСдованиС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ программирования, Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ строго ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ. Однако ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ иСрархия Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классами. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ нСдостатком Ρ‚Π°ΠΊΠΎΠΉ связи являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ нСясно, Π΄ΠΎΠ»ΠΆΠ½Π° рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· вСрсии ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Bark класса Pug :

void Pug::Bark(void) {

this->BreathIn();

this->ConstrictVocalChords();

this->BreathOut(); }

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли рСализация Bark основным классом Dog Π½Π΅ Π²Ρ‹Π·Π²Π°Π½Π°, ΠΊΠ°ΠΊ Π² случаС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π°? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса записываСт для дальнСйшСго использования, сколько Ρ€Π°Π· Π»Π°Π΅Ρ‚ (barks) конкрСтная собака (dog)? Если это Ρ‚Π°ΠΊ, Ρ‚ΠΎ класс Pug вторгся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Dog. Для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ примСнСния наслСдования Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ количСство Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ знания для обСспСчСния сохранности Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ количСство Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ знания ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ наслСдованиС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ часто рассматриваСтся ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π±Π΅Π»ΠΎΠ³ΠΎ ящика.

Один ΠΈΠ· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌΡƒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΡƒΡŽ связь систСм Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠΉ прСимущСства ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сигнатуры Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ Π½Π΅ ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π½Π° Π±Π°Π·Π΅ интСрфСйса, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²ΠΎΠ»Π½Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ориСнтирования. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ интСрфСйса являСтся ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ классичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ориСнтирования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ считаСт, Ρ‡Ρ‚ΠΎ наслСдованиС являСтся ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ для выраТСния ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π° Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ иСрархиями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. Π’ основС интСрфСйсно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ отдСлСния интСрфСйса ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ этом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ интСрфСйсы ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ двумя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ понятиями. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚ абстрактныС трСбования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ интСрфСйсов. МногиС ΠΈΠ· этих прСимущСств интСрфСйсно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ развития ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ достигнуты ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ срСдствами ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²ΠΎΠ»Π½Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… строгого стиля программирования. Однако ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ принятиС этого направлСния ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° явная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° со стороны Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² языков ΠΈ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π’ число ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСд, ΡΡ‹Π³Ρ€Π°Π²ΡˆΠΈΡ… Π³Π»Π°Π²Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² обСспСчСнии успСха интСрфСйсно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ развития, входят модСль ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Component Object Model – БОМ) Ρ„ΠΈΡ€ΠΌΡ‹ Microsoft, программная срСда Orbix Object Request Broker Ρ„ΠΈΡ€ΠΌΡ‹ Iona ΠΈ Digitalk, Π° Ρ‚Π°ΠΊΠΆΠ΅ явная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° интСрфСйсно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… языка Java.