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

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

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

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ ΠΈ Π‘++

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с транслятором ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ, описанныС Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ прСпятствиС ΠΏΡ€ΠΈ построСнии Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° C++ появится, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ (encapsulation), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ получится, Ссли организация, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ FastString Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠ΅: Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ тСстированиС Π·Π° Π΄Π²Π° мСсяца Π΄ΠΎ срока рассылки ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. ΠŸΡƒΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ этих Π΄Π²ΡƒΡ… мСсяцСв Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ скСптичСски настроСнных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ O(1) -поисковый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ FastString , запустив ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ своСго прилоТСния. К ΠΈΡ… Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ, FastString::Find стала Π±Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ быстро, нСзависимо ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ строки. Однако с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Length Π΄Π΅Π»ΠΎ обстоит Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ FastString::Length ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ strlen ΠΈΠ· динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘. Π­Ρ‚Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° – Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ O(n)– ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСт Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ΠΏΠΎ строкам с использованиСм символа ΠΊΠΎΠ½Ρ†Π° строки (null terminator); ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° Π΄Π»ΠΈΠ½Π΅ строки. Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ²ΡˆΠΈΡΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Length, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… скСптиков, скорСС всСго, свяТСтся с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ попросит Π΅Π³ΠΎ ΡƒΠ±Ρ‹ΡΡ‚Ρ€ΠΈΡ‚ΡŒ Length, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ зависСла ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ строки. Но здСсь Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ прСпятствиС. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡƒΠΆΠ΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» свою Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ, скорСС всСго, Π½Π΅ располоТСн ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ строку исходного ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Length. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΆΠ΅ выпустили свои ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹, основанныС Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии FastString, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ эти прилоТСння.

Π‘ этой Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π½ΡƒΠΆΠ½ΠΎ просто Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ класса FastString ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΆΠ΅ установлСнная Π±Π°Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»Π°. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, класс FastString Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ возмоТности инкапсуляции, ΠΈ всС Π΅Π³ΠΎ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… (data members ) ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ (private ). Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ классу Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΈ ΠΎΠ΄Π½Π° клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ нСпосрСдствСнно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам Π΄Π°Π½Π½Ρ‹Ρ… FastString. Π’ силу Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ (public ) Ρ‡Π»Π΅Π½Π°ΠΌ класса Π½Π΅ Π±Ρ‹Π»ΠΎ сдСлано Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΈ Π² любом клиСнтском ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ потрСбуСтся. Π’ΠΎΠΎΡ€ΡƒΠΆΠΈΠ²ΡˆΠΈΡΡŒ этой Π²Π΅Ρ€ΠΎΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ FastString вСрсии 2.0.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Π² тСкстС конструктора (constructor ) занСсти Π΄Π»ΠΈΠ½Ρƒ строки Π² кэш ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Length . Π’Π°ΠΊ ΠΊΠ°ΠΊ строка Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° послС создания, Π½Π΅Ρ‚ нСобходимости Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π΅Π΅ Π΄Π»ΠΈΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π»ΠΈΠ½Π° ΡƒΠΆΠ΅ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ вычислСна Π² конструкторС ΠΏΡ€ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π±ΡƒΡ„Π΅Ρ€Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ понадобится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ горстка Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций. Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса:


// faststring.h version 2.0

class declspec(dllexport) FastString {

const int mcch;

// count of characters

// число символов

char mpsz;

public:

FastString(const char *psz);

~FastString(void);

int Length(void) const;

// returns # of characters

// Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число символов

int Find(const char *psz) const;

// returns offset – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ смСщСниС

};


ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ СдинствСнной ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ являСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ элСмСнта Π΄Π°Π½Π½Ρ‹Ρ…. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ элСмСнт, конструктор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


FastString::FastString(const char *psz) : mcch(strlen(psz)), mpsz(new char[mcch + 1])

{

strcpy(mpsz, psz);

}


Π‘ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ Length становится Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ:


int FastString::Length(void) const

{

return mcch;

// return cached length

// Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ

}


Π‘Π΄Π΅Π»Π°Π² эти Ρ‚Ρ€ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ DLL FastString ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΉ Π½Π°Π±ΠΎΡ€ тСстов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ аспСкт класса FastString . Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ приятно ΡƒΠ΄ΠΈΠ²Π»Π΅Π½, ΡƒΠ·Π½Π°Π², Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ инкапсуляции обошСлся Π΅ΠΌΡƒ дСшСво, ΠΈ Π² исходных тСкстах тСстов Π½Π΅ понадобилось Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ПослС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ. Ρ‡Ρ‚ΠΎ новая DLL Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ отсылаСт FastString вСрсии 2.0 ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ вся Ρ€Π°Π±ΠΎΡ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°.

Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, заказавшиС измСнСния, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ FastString , ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса ΠΈ DLL Π² систСму контроля своСго исходного ΠΊΠΎΠ΄Π° ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ тСстированиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ FastString . Подобно Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ приятно ΡƒΠ΄ΠΈΠ²Π»Π΅Π½Ρ‹: для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами Π½ΠΎΠ²ΠΎΠΉ вСрсии Length , Π½Π΅ трСбуСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ исходного ΠΊΠΎΠ΄Π°. ВдохновлСнная этим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡƒΠ±Π΅ΠΆΠ΄Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΡΡ‚Π²ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ DLL Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Β«Π·ΠΎΠ»ΠΎΡ‚ΠΎΠΉΒ» CD, ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ для выпуска. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ Ρ€Π΅Π΄ΠΊΠΈΠΉ случай, ΠΊΠΎΠ³Π΄Π° руководство ΠΈΠ΄Π΅Ρ‚ навстрСчу энтузиастам-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π½ΠΎΠ²ΡƒΡŽ DLL. Подобно Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ инсталляции, описаниС установки клиСнтской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ настроСно Π½Π° ΠΌΠΎΠ»Ρ‡Π°Π»ΠΈΠ²ΠΎΠ΅ (Π±Π΅Π· прСдупрСТдСния) Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ всСх старых вСрсий FastString DLL, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ Π½Π° машинС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π­Ρ‚ΠΎ выглядит Π²ΠΏΠΎΠ»Π½Π΅ Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти измСнСния Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ интСрфСйс класса, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‚Π°Π»ΡŒΠ½Π°Ρ молчаливая модСрнизация ΠΏΠΎΠ΄ Π²Π΅Ρ€ΡΠΈΡŽ 2.0 FastString Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ клиСнтскиС прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ установлСны Ρ€Π°Π½ΡŒΡˆΠ΅.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сцСнарий: ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ свои экзСмпляры Π²ΠΎΠΆΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Ρ‚ΡƒΡ‚ ΠΆΠ΅ бросаСт всС ΠΈ устанавливаСт Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° свою ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Π΄Π°Π±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ высохли слСзы восторга ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ быстрый тСкстовый поиск, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ возвращаСтся ΠΊ Π΅Π³ΠΎ ΠΈΠ»ΠΈ Π΅Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΈ запускаСт Ρ€Π°Π½Π΅Π΅ установлСнноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DLL FastString. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ всё ΠΈΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π—Π°Ρ‚Π΅ΠΌ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ появляСтся сообщСниС, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация ΠΈ Ρ‡Ρ‚ΠΎ вся Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΎΠΏΠ°Π»Π°. Он пытаСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ снова, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации появляСтся ΠΏΠΎΡ‡Ρ‚ΠΈ сразу. ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ соврСмСнного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, пСрСустанавливаСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму ΠΈ всС прилоТСния, Π½ΠΎ Π΄Π°ΠΆΠ΅ это Π½Π΅ спасаСт ΠΎΡ‚ повторСния ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации. Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ?

А ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±Ρ‹Π» ΡƒΠ±Π°ΡŽΠΊΠ°Π½ Π²Π΅Ρ€ΠΎΠΉ Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ C++ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. Π₯отя C++ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· свои Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, Π² стандартС C++ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сказано ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ инкапсуляции. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ модСль трансляции C++ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ клиСнтский компилятор ΠΈΠΌΠ΅Π» доступ ΠΊΠΎ всСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², β€“ с Ρ†Π΅Π»ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ экзСмпляр класса ΠΈΠ»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΈ порядкС Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Рассмотрим сцСнарий, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½Π° рис. 1.3. ВСрсия 1.0 FastString Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° Π½Π° экзСмпляр (принимая sizeof(char *) == 4). ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ написанного ΠΏΠΎΠ΄ Π²Π΅Ρ€ΡΠΈΡŽ 1.0 опрСдСлСния класса Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° памяти ΠΏΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ² конструктора класса. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, дСструктор ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ вСрсии 2.0 (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ эти вСрсии содСрТатся Π² DLL Π² машинС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ) ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΠ» восСмь Π±Π°ΠΉΡ‚ Π½Π° экзСмпляр (принято sizeof(int) == 8), ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ собствСнных Ρ€Π΅Π·Π΅Ρ€Π²ΠΎΠ² для записи Π²ΠΎ всС восСмь Π±Π°ΠΉΡ‚. К соТалСнию, Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² с вСрсиСй 1.0 Π²Ρ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΈ запись Π² это мСсто указатСля Π½Π° Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку нСдопустима, ΠΎ Ρ‡Π΅ΠΌ ΠΈ сообщаСт Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации.

БущСствуСт ΠΎΠ±Ρ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ вСрсий – ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ DLL всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° появляСтся новая вСрсия. Вакая стратСгия принята Π² Microsoft Foundation Classes (MFC). Когда Π½ΠΎΠΌΠ΅Ρ€ вСрсии Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² имя Ρ„Π°ΠΉΠ»Π° DLL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FastString10.DLL, FastString20.DLL), ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ всСгда Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Ρ‚Ρƒ Π²Π΅Ρ€ΡΠΈΡŽ DLL, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ сконфигурированы, нСзависимо ΠΎΡ‚ присутствия Π² систСмС Π΄Ρ€ΡƒΠ³ΠΈΡ… вСрсий. К соТалСнию, со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΈΠ·-Π·Π° нСдостаточного ΠΎΠΏΡ‹Ρ‚Π° Π² систСмном ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, число вСрсий DLL, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² систСмС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ число ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом, достаточно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ систСмный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ любого ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ΅Π³ΠΎ большС ΡˆΠ΅ΡΡ‚ΠΈ мСсяцСв.