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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ДСфрагмСнтация ΠΌΠΎΠ·Π³Π°. БофтостроСниС ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 25

Автор Π‘Π΅Ρ€Π³Π΅ΠΉ Варасов

Π‘Π»ΠΎΠΆΠ½Π΅Π΅ обстоит Π΄Π΅Π»ΠΎ с Ρ‚Π΅ΠΌΠΈ, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ свой ΠΏΡƒΡ‚ΡŒ. ΠŸΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ сСго Ρ‚Ρ€ΡƒΠ΄Π° Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, являСтся прямым Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ попадания Π² прокрустово Π»ΠΎΠΆΠ΅ Π΄ΠΈΠΊΡ‚ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΈΠ³Π° описываСт Π½Π°Π±ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π° Π½Π΅ΠΎΠΊΡ€Π΅ΠΏΡˆΠ΅ΠΌΡƒ Π·Π° нСдостатком ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΡƒΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π½Π°Π΄ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ самому Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΏΡƒΡ‚ΠΈ ΠΊ Π½ΠΈΠΌ. Для Ρ‡Π΅Π³ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ эффСктивнСС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ врСмя Β«ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСды», Π½Π΅ΠΆΠ΅Π»ΠΈ сразу ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ‡ΡƒΠΆΠΈΠ΅. На Ρ‡ΡƒΠΆΠΈΠ΅ Π½Π°Π΄ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ собствСнный, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, насколько ΠΎΠ½ Π½Π΅ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π΅Π½, ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·Ρ†Π°ΠΌ вСлосипСдов Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Однако ΠΊΠ½ΠΈΠ³Π° всС-Ρ‚Π°ΠΊΠΈ Π΄Π°Π»Π° всплСск, ΠΈ ΠΏΠΎ Π²ΠΎΠ΄Π΅ пошли ΠΊΡ€ΡƒΠ³ΠΈ. А. АлСксан-дрСску Π² ΠΊΠ½ΠΈΠ³Π΅ Β«Modern C++ designΒ» Π½Π°Ρ‡Π°Π» ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ шаблонов Π½Π° C++ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π² массы свои вСлосипСды. Появились издания с достаточно абсурдными названиями. НапримСр, Β«Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π½Π° C#Β». ΠŸΠΎΡΡ‚ΠΎΠΉΡ‚Π΅, ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅Ρ‰Ρ‘ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π° C#? ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ сыграли с программистским сообщСством Π·Π»ΡƒΡŽ ΡˆΡƒΡ‚ΠΊΡƒ: ΠΎΠ½ΠΈ оказались Π΅Ρ‰Ρ‘ ΠΈ зависимыми ΠΎΡ‚ языка программирования. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Β«Π±Π°Π½Π΄Ρƒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…Β», ΠΏΠΈΡΠ°Π²ΡˆΠΈΡ… свой Ρ‚Ρ€ΡƒΠ΄ исходя ΠΈΠ· возмоТностСй C++, срочно Π±Π΅Π³ΠΈΡ‚Π΅ Π·Π° Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΡ€Ρ†ΠΈΠ΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΡ‚ΠΎ для Java, ΠΊΡ‚ΠΎ для C#. Π₯отя Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈΡΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ с ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Ρ†Π΅Π»ΡŒΡŽ.

Поясню Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использования шаблона Visitor. Π£ АлСксандрСску Π² самом Π½Π°Ρ‡Π°Π»Π΅ описания шагов ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ шаблона Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ шла Ρ€Π΅Ρ‡ΡŒ ΠΎ сборС статистики), Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ приводится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:


Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ способ

void DocStats::UpdateStats(DocElement& elem)

{

if (Paragraph* p = dynamic_cast<Paragraph*>(&elem))

{

chars_ += p->NumChars();

words_ += p->NumWords();

}

else if (dynamic_cast<RasterBitmap*>(&elem))

{

++images_;

}

else…

добавляСм ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ if для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° инспСктируСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

}


Автором ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ справСдливо отмСчаСтся сущСствСнный нСдостаток этого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ слоТным для сопровоТдСния, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ выполнится Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Достаточно ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ Π² порядкС слСдования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² if, ΠΈ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚.

Π”ΠΎΠ±Π°Π²Π»ΡŽ, Ρ‡Ρ‚ΠΎ Ссли Ρ€Π°Π·Π½Ρ‹Π΅ классы элСмСнтов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ свойства, собираСмыС статистикой, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ услоТняСтся. НапримСр, Β«ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Β» ΠΈ Β«Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Β» ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ свойство NumChars.

ПослС рассуТдСний ΠΎ нСдостатках Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° выносится Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ нСобходимости Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡƒΡ‚Ρ‘ΠΌ построСния ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов, ΠΈ добавлСния Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Π½Π΅Ρ‘. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шаблона Visitor, описаниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π° Π΄ΠΎΠ±Ρ€Ρ‹Ρ… Π΄Π²ΡƒΡ… дСсятках (!) страниц Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΊΠ½ΠΈΠΆΠΊΠ΅. Если ΠΎΡ‡Π΅Π½ΡŒ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык с Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ интроспСкции Ρ‚ΠΈΠΏΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. НапримСр, ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (reflection) для. NET. Π’ этом случаС Β«Π»ΠΎΠ±ΠΎΠ²ΠΎΠ΅Β» Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:


ИспользованиС отраТСния

class DocStats

{

…

void UpdateStats(DocElement elem)

{

Type elemType = typeof(DocElement);

BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic |

BindingFlags.Instance;


if (elemType.GetMethod("NumChars")!= null)

chars += (int) elemType.InvokeMember("NumChars", flags | BindingFlags.

InvokeMethod,

null, elem, null);

if (elemType.GetMethod("NumWords")!= null)

words += (int) elemType.InvokeMember("NumWords", flags | BindingFlags.

InvokeMethod, null, elem, null);

if (elemType.GetProperty("Image")!= null)

images++;

…

обслСдуСм всС ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ нас свойства классов

}

}


ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ порядком Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅Ρ‚, поэтому Π½ΠΈΠΊΠ°ΠΊΠΈΡ… услоТнСний с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π² шаблонС для Π‘++, Π½Π΅ трСбуСтся.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ трСбуСтся ΠΈ сам шаблон! МоТно ΠΏΠΎΠΉΡ‚ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ нСслоТной ΠΈ бСзопасной рСструктуризации: ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² нСявном Π²ΠΈΠ΄Π΅ интСрфСйсы элСмСнтов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² явныС опрСдСлСния ΠΈ ΠΎΠ±ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ сбора статистики ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классами интСрфСйсов. НапримСр, if (elemType is IParagraph), is IImage, is IFormula ΠΈ Ρ‚. Π΄. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· отраТСния.

НаконСц, сущСствуСт ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ спСцифичноС для C++ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ, Π΄Π°Π»Π΅Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ мноТСствСнноС наслСдованиС, Β«ΠΏΠΎΠ΄ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΒ» эти Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² дальнСйшСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ классы-миксты.

Π’Π΅ΡΡŒΠΌΠ° элСгантноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° основС class helpers Π΅ΡΡ‚ΡŒ Π² Delphi. ΠœΡ‹ просто дописываСм Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ классам, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΈΡ… исходники для этого Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ.

Π˜Ρ‚ΠΎΠ³ΠΎ Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Ρ†Π΅Π»Ρ‹ΠΉ Π±ΡƒΠΊΠ΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ шаблонного, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ. ΠŸΠΎΠΏΡ‹Ρ‚Π°Π²ΡˆΠΈΡΡŒ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ программисту, Π²ΠΈΠ΄ΠΈΠΌΠΎ, нСсколько ΡƒΠ²Π»Ρ‘ΠΊΡˆΠ΅ΠΌΡƒΡΡ шаблонами, я Π½Π΅ встрСтил понимания.

НСсколько ΠΏΠΎΠ·Π΄Π½Π΅Π΅ я наткнулся Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ Π½Π° ΠΊΠ½ΠΈΠ³Ρƒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π½Π° Π·Π²Π°Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ абсурдного ΠΈΠ· Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π²ΡˆΠΈΡ…ΡΡ. Оно Π·Π²ΡƒΡ‡Π°Π»ΠΎ ΠΊΠ°ΠΊ Β«Thinking in patternsΒ». Π’ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° русский язык – Β«ΠœΡ‹ΡΠ»ΠΈΡ‚ΡŒ шаблонно». Π•Ρ‰Ρ‘ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠ° шаблонно ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ ΡΡ‡ΠΈΡ‚Π°Π»Π°ΡΡŒ Π² ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠΌ сообщСствС ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ΠΌ ограничСнности спСциалиста, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ с 9 ΡƒΡ‚Ρ€Π° Π΄ΠΎ 6 Π²Π΅Ρ‡Π΅Ρ€Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΡŽΡ‚ΡΡ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ ΠΊΠ½ΠΈΠΆΠΊΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡˆΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΌΡƒ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡŽβ€¦

Π”ΡƒΠΌΠ°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ

БСрия ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ Π±Ρ‹Π»Π° Π·Π°Π΄ΡƒΠΌΠ°Π½Π°, ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΈΠΉ противовСс мСханистичСскому ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΏΡ€ΠΎΠΏΠ°Π³Π°Π½Π΄ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°ΠΌΠΈ шаблонов. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π°Π΄ΠΎ Π½Π΅ шаблонами, Π° Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ. Начнём с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ каТСтся ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅

ΠžΡ‚ΠΊΠ°ΠΆΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «наслСдованиС», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ искаТаСт смысл дСйствий. ΠœΡ‹ ΠΎΠ±ΠΎΠ±Ρ‰Π°Π΅ΠΌ. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ (наслСдованиС) Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ интСрфСйсов – вСсьма Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ остороТности ΠΈ обоснования.

ΠžΠ‘ΠΠžΠ’ΠΠžΠ• ΠŸΠ ΠΠ’Π˜Π›Πž

ΠžΠ±ΠΎΠ±Ρ‰Π°Π΅ΠΌΡ‹Π΅ классы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

НапримСр, Ссли Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ класса:

β€’ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ интСрфСйсы;

β€’ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ся Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…;

β€’ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс доступа ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ, опСрациям ΠΈΠ»ΠΈ ΠΊ сСрвису.


ВзглянитС, Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΈ ΡƒΠΆΠ΅ нСсколько шаблонов оказались Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ: (1) – Β«Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Β» (factory method), (2) – «стратСгия» (strategy), «шаблон ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β» (template method) ΠΈ (3) – Β«Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Β» (adapter). Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΌΠΎΠΆΠ½ΠΎ для случая (1) Π΅Ρ‰Ρ‘ ΠΈ Β«ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΒ» (prototype) Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ: Ссли Π² срСдС Π½Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΡ‚ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° отраТСния (reflection), Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, скорСС всСго, придётся Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. Π”Π°Π»Π΅Π΅, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв (Ссли Π½Π΅ Π²ΠΎ всСх) вмСсто Β«ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒΒ» (visitor) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ‚ΠΎΡ‚ ΠΆΠ΅ Β«ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Β» ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· reflection, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ описано Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅. Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Β«Π²Π΄Ρ€ΡƒΠ³Β» стали Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π² пСрСчислСнных случаях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. ВрСбования ΠΆΠ΅ исходят Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· вашСй Π·Π°Π΄Π°Ρ‡ΠΈ. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ провСдя ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π²Ρ‹ автоматичСски ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ ΠΈ структуру, Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊ Ρ‚ΠΎΠΉ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π·Π°Π·ΡƒΠ±Ρ€ΠΈΡ‚ΡŒ ΠΈ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠ² шаблонов.

Одно понятиС ΠΈ Ρ‚Ρ€ΠΈ ΠΎΡ‡Π΅Π½ΡŒ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ случая Π³ΠΎΡ€Π°Π·Π΄ΠΎ эффСктивнСС для запоминания ΠΈ использования, Π½Π΅ΠΆΠ΅Π»ΠΈ абстрактныС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΈ тСкст ΡˆΠ΅ΡΡ‚ΠΈ шаблонов.

Основная ошибка – ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ нСосновному Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ. НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‚ сотрудников ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Или Π·Π°ΠΊΠ°Π·Ρ‹ Π½Π° поставку ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ Π½Π° ΠΎΡ‚Π³Ρ€ΡƒΠ·ΠΊΡƒ. Или яблоки с тСннисными мячиками. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅Ρ‚, ΠΎΠ½ΠΈ ΠΆΠ΅ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Π΅, ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°Ρ…?

Ошибка ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΠΎ нСосновному ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ. Когда Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ найдётся Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ сущСствСнный с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ большС Π½Π΅ удастся: придётся Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΈΠ»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°ΠΏΠ»Π°Ρ‚Ρƒ Π² Π²ΠΈΠ΄Π΅ мноТСствСнного наслСдования, нСдоступного Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках. Или ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠ΅ΠΉ.

НС ΡƒΠ²Π»Π΅ΠΊΠ°ΠΉΡ‚Π΅ΡΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠΌ. Ошибки Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΠΆΠ΅ Π² прямом смыслС этого слова Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ нСобходимости сноса старой ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, содСрТащСй ошибки.

Π’ΠžΠ—Π¬ΠœΠ˜Π’Π• ЗА Π­ΠœΠŸΠ˜Π Π˜Π§Π•Π‘ΠšΠžΠ• ΠŸΠ ΠΠ’Π˜Π›Πž

Π“Π»ΡƒΠ±ΠΈΠ½Π° Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΏΡ€ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области, вСроятнСС всСго, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… проСктирования.

Для построСния устойчивой глобальной ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области, вСдь Π½Π΅ случайно созданиС таксономии – слоТная Π½Π°ΡƒΡ‡Π½ΠΎ-ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… компаниях Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ. Но ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно, Ссли, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, прСдполагаСтся использованиС модуля (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, слуТбы) Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… смСТных областях. Класс «Книга» для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ читатСля – это Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… взгляда Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ с ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ ассоциациями ΠΈ обобщСниями. Π•Ρ‰Ρ‘ слоТнСС Π΄Π΅Π»ΠΎ обстоит с классом Β«Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΒ». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ ΡΠΏΠ΅ΡˆΠΈΡ‚Π΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°Β» ΠΈ Β«ΠΎΡ…Ρ€Π°Π½Π½ΠΈΠΊΠ°Β» ΠΎΡ‚ класса «сотрудник» Π²Π½Π΅ Ρ€Π°ΠΌΠΎΠΊ ΡƒΡ‡Ρ‘Ρ‚Π° ΠΊΠ°Π΄Ρ€ΠΎΠ², вСдь ΠΎΠ½ΠΈ Π΅Ρ‰Ρ‘ ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½ΠΎ-отвСтствСнныС Π»ΠΈΡ†Π°, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΈΠ»ΠΈ участники ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ Π»ΠΈΡ†Π°, Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ своих Ρ‡Π°Π΄, Π½Π°Π»ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Π΅Π»ΡŒΡ‰ΠΈΠΊΠΈ, собствСнники, Π²ΠΊΠ»Π°Π΄Ρ‡ΠΈΠΊΠΈ, Π·Π°Ρ‘ΠΌΡ‰ΠΈΠΊΠΈ, автомобилисты…