ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π’ΠΈΠ΄Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ UML

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов слуТит для прСдставлСния статичСской структуры ΠΌΠΎΠ΄Π΅Π»ΠΈ систСмы Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ классов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС такая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„, Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнты Ρ‚ΠΈΠΏΠ° «ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€», Π° Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ — Π½Π΅ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ структурных ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ классов Π² ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ знания… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π’ΠΈΠ΄Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ UML (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ UML, ΠΊΠ°ΠΊ ΠΈ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, ΡΠ²Π»ΡΡŽΡ‚ΡΡ основным способом прСдставлСния ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ рассмотрСния Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ обусловлСна рСкомСндациями Rational Unified Process ΠΈ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ модСлирования систСмы.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ² (use case diagram)

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ² прСслСдуСт Ρ†Π΅Π»ΡŒΡŽ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ трСбования ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ повСдСнию систСмы. Π‘ΡƒΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: проСктируСмая систСма прСдставляСтся Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ² использования, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ внСшниС сущности ΠΈΠ»ΠΈ Π°ΠΊΡ‚Π΅Ρ€Ρ‹. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° слуТит для описания сСрвисов, прСдоставляСмых систСмой Π°ΠΊΡ‚Π΅Ρ€Ρƒ. На Π΄Π°Π½Π½ΠΎΠΌ этапС систСма прСдставляСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΊ «Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ящик».

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΡƒΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий. АктСр прСдставляСт Π½Π΅ΠΊΡƒΡŽ внСшнюю ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ. БущСствуСт нСсколько стандартных Π²ΠΈΠ΄ΠΎΠ² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°ΠΊΡ‚Π΅Ρ€Π°ΠΌΠΈ ΠΈ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚Π°ΠΌΠΈ:

  • 1) ассоциация — ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΌΠ°Π½Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ связь Π°ΠΊΡ‚Π΅Ρ€Π° ΠΈ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΡ‚Π΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚);
  • 2) Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ составная Ρ‡Π°ΡΡ‚ΡŒ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ;
  • 3) Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ — ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π² ΡΠ»ΡƒΡ‡Π°Π΅ выполнСния Π½Π΅ΠΊΠΈΡ… условий;
  • 4) ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ — ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ ΠΈΠ»ΠΈ Π°ΠΊΡ‚Π΅Ρ€ являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ случаСм Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ Π°ΠΊΡ‚Π΅Ρ€Π° соотвСтствСнно.
Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ².

Рис. 2.1. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ²

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов (class diagram)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов слуТит для прСдставлСния статичСской структуры ΠΌΠΎΠ΄Π΅Π»ΠΈ систСмы Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ классов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС такая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„, Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнты Ρ‚ΠΈΠΏΠ° «ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€», Π° Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ — Π½Π΅ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ структурных ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ классов Π² ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ знания ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области. Π­Ρ‚ΠΈ знания ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π±Π°Π·ΠΎΠ²Ρ‹Ρ… понятиях UML, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ классы, интСрфСйсы ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΈ ΠΈΡ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ. ΠŸΡ€ΠΈ этом ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для прСдставлСния Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ систСмы.

Класс Π² UML являСтся абстрактным описаниСм свойств мноТСства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ структурой, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Класс ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈΠ»ΠΈ свойств, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ВыдСляСтся понятиС шаблонного класса, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΌΡƒ ΠΈΠ· ΡΠ·Ρ‹ΠΊΠ° Π‘++.

ΠœΠ΅ΠΆΠ΄Ρƒ классами ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ:

  • 1) ассоциация — ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Π°Ρ сСмантичСская связь классов, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ER-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌ);
  • 2) ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ — ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ, интСрпрСтация наслСдования;
  • 3) агрСгация — Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ°ΠΊ составных частСй, взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈ Ρ†Π΅Π»Ρ‹ΠΌ;
  • 4) композиция — Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‡Π°ΡΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Ρ†Π΅Π»ΠΎΠ³ΠΎ;
  • 5) Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ — сСмантичСская связь, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ….

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π² UML — это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ случай класса, ΠΊΠΎΠ³Π΄Π° спСцифицируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов.

Рис. 2.2. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (collaboration diagram)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ этого Π²ΠΈΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для рассмотрСния взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΠ½Ρ‚СкстС статичСской структуры ΠΌΠΎΠ΄Π΅Π»ΠΈ. На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы описываСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой сообщСниями, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования.

ΠšΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ — мноТСство Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΎΠ±Ρ‰Π΅ΠΌ контСкстС ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ систСмы. Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Π΄Π²Π° уровня прСдставлСния ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ спСцификации (ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΠΈ спСцификаторов ΠΈ Ρ€ΠΎΠ»ΠΈ ассоциаций Π²ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΠΈ) ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ экзСмпляров (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΡΠ²ΡΠ·ΠΈ, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ).

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ уровня спСцификации.

Рис. 2.3. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ уровня спСцификации

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ уровня экзСмпляров.

Рис. 2.4. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ уровня экзСмпляров

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (sequence diagram)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ родствСнны Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ — ΠΎΠ½ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π° Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ взаимодСйствиС Π² ΡΡ€Π΅Π·Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Рис. 2.5. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° состояний (statechart diagram)

Π­Ρ‚ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ состояний ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ систСмы Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΅Ρ‘ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° состояний прСдставляСт динамичСскоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сущностСй Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ спСцификаций ΠΈΡ… Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° Π²ΠΎΡΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… событий.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° состояний ΠΏΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²Ρƒ являСтся Π³Ρ€Π°Ρ„ΠΎΠΌ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ Π½Π΅ΠΊΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° состояний.

Рис. 2.6. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° состояний

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (activity diagram)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ являСтся самым Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ UML. Π•Ρ‘ ΡΠ΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° сродни ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ стандартизованным ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ записи Π±Π»ΠΎΠΊ-схСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° активностСй.

Рис. 2.7. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° активностСй

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (component diagram)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² слуТит для прСдставлСния физичСской ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ исходного, исполняСмого, Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ интСрфСйсы. Π”Π°Π½Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ использованиС собствСнных символов.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° развСртывания (deployment diagram)

Π”Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Π° систСма Π½Π° Ρ„изичСском ΡƒΡ€ΠΎΠ²Π½Π΅. Π£Π·Π»Π°ΠΌΠΈ этих Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ физичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΡΠ΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, ΠΊΠ°ΠΌΠ΅Ρ€Π°, Π΄Π°Ρ‚Ρ‡ΠΈΠΊ. Допустимо частично ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ывания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ физичСски Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚. Π”Π°Π½Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ использованиС собствСнных символов.

2.1.3 Бвязь с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ языками

НСкоторыС Π²ΠΈΠ΄Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ UML, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ классов, ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ срСдства встроСны Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠΎΡ‰Π½Ρ‹Ρ… CASE-срСдств, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Rational Rose. По Π΄Π°Π½Π½Ρ‹ΠΌ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ классов Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ срСдство способно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ² со ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ опрСдСлСниями классов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΡ… ΡΠ²ΠΎΠΉΡΡ‚Π²Π° ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ согласно спСцификациям Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹.

2.4 ИдСология STL Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ модуля

Как ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки, Π‘++ прСдоставляСт ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡŽ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STL ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ свободно ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STL (Standard Template Library — стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° шаблонов) Π²Π²ΠΎΠ΄ΠΈΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΎΠ΅ число Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для манипулирования ΠΈΠΌΠΈ. Благодаря использованию шаблонов, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STL являСтся строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ позволяСт Π΅ΠΉ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€Π°ΠΉΠ½Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ ΠΈ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ошибки Π΅Ρ‰Ρ‘ Π½Π° ΡΡ‚Π°ΠΏΠ΅ компиляции.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STL являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ языка Π‘++, ΠΊΠ°ΠΊ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅ ISO / IEC 14 882 ΠΎΡ‚ 1998 Π³ΠΎΠ΄Π°.

Под ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ STL Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ модуля ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ использованиС структур Π΄Π°Π½Π½Ρ‹Ρ…, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ Ρ‚ΠΈΠΏΠΎΠ² STL Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ интСрфСйсС. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ программистам, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ позволяСт ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… срСдств STL.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π² C++

Π¨Π°Π±Π»ΠΎΠ½ (template) — парамСтризированная Ρ‡Π°ΡΡ‚ΡŒ C+±ΠΊΠΎΠ΄Π°. Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ² (ΠΌΠ°Π»ΠΎΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ — константы). Π•Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ описанный Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ шаблон ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° Π΅Π³ΠΎ основС Π½ΠΎΠ²Ρ‹Π΅ классы ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ число Ρ€Π°Π·. ЀактичСски, шаблон являСтся способом мСтапрограммирования — для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ объявлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² шаблона компилятором гСнСрируСтся Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΈΠ»ΠΈ функция ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ являСтся Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΡƒΠΌΠ½Ρ‹Ρ… макроподстановок. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ объСм ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (часто Π² Ρ€Π°Π·Ρ‹), Π½ΠΎ Ρ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄ макросами с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ прСпроцСссора языка C (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ свой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΈ Π² C++) ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСимущСства:

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

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

#define SQR (x) ((x) * (x)).

template T sqr (const T& x) { return (x * x); }.

void test ().

{.

int x = 2;

int y = 2;

x = sqr (y);

y = SQR (x);

x = sqr (++y);

y = SQR (++x);// ошибка! Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ x ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π΄Π²Π°ΠΆΠ΄Ρ‹.

}.

Листинг 2.1. ΠœΠ°ΠΊΡ€ΠΎΡ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½ На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π΅ΠΊ макроподстановок заканчиваСтся. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исходного ΠΊΠΎΠ΄Π° (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ — Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ STLport).

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ STL

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ STL — это ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для хранСния ряда ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². К ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ трСбования:

  • 1) доступный конструктор копирования;
  • 2) доступный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания;
  • 3) доступный дСструктор.

ВсС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»:

  • 1) Π½Π°Π±ΠΎΡ€ конструкторов; срСди Π½ΠΈΡ…: конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, конструктор копирования, конструктор, Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ элСмСнтами ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Ρ€ΡΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ…;
  • 2) дСструктор; ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ дСструкторы всСх содСрТащихся Π² Π½Ρ‘ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π²ΡΡ‘ ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся;
  • 3) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ begin (), end (), rbegin (), rend () — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², содСрТащихся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Π² ΠΏΡ€ΡΠΌΠΎΠΌ ΠΈ, соотвСтствСнно, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС; ΠΊΠ°ΠΊ ΠΈ Π²ΡΡŽΠ΄Ρƒ Π² STL, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΊΠΎΠ½Π΅Ρ† — Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ;
  • 4) функция size (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ количСство элСмСнтов Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ VFS ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ ΠΊΠ°ΠΊ основной способ хранСния Π΄Π°Π½Π½Ρ‹Ρ…. ВсС прСдоставляСмыС интСрфСйсом модуля ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ STL. НиТС пСрСчислСны основныС использовавшиСся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹.

vector — ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ динамичСским массивом. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅Π΄ΠΊΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… списков. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ vector эффСктивно Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

  • 1) Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΊΠΎΠ½Ρ†Π΅ массива;
  • 2) доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ;
  • 3) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список элСмСнтов ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ массив C.

ΠŸΡ€ΠΈ этом Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта Π² ΡΠ΅Ρ€Π΅Π΄ΠΈΠ½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ стандарт Π‘++ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π±Ρ‹Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ (ΠΊΠ°ΠΊ массив Π‘), ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΡΠ΅Ρ€Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ памяти.

Доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ random-access ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° [] (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ массивам Π‘).

list — ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ связным списком. Π•Π³ΠΎ главная ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстрого добавлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ ΡƒΠ·Π»ΠΎΠ² Π² Π»ΡŽΠ±ΠΎΠΌ мСстС списка, ΠΏΡ€ΠΈ этом мСстополоТСниС Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ всСх ΠΏΡ€ΠΎΡ‡ΠΈΡ… элСмСнтов Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся.

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

set, multiset, map, multimap — ассоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для хранСния упорядочСнных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ элСмСнтов с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ быстрой вставки ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ.

По Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌ памяти ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Слям ассоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° list (Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ для прСдставлСния этих ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ). НС ΡΡ‚ΠΎΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ссли Π² ΡΡ‚ΠΎΠΌ Π½Π΅Ρ‚ нСобходимости.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ с ΠΏΡ€ΠΈΡΡ‚Π°Π²ΠΊΠΎΠΉ multiΠ΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ элСмСты, Π±Π΅Π· приставки — Π½Π΅Ρ‚. ΠŸΡ€ΠΈ этом set Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΈ упорядочСны сами Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ элСмСнты, Π° map Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (map ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ простой Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаблон pair для хранСния этих ΠΏΠ°Ρ€). Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ассоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ послС добавлСния элСмСнтов. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ, Π½ΠΎ ΡΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΡ‹ΠΌ послСдствиям.

string — Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ частный случай ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° vector, содСрТащСго символы. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ string Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅ΠΉ, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ строками Π² ΡΡ‚ΠΈΠ»Π΅ C. Для string ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ конкатСнация (сцСплСниС), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ C-строкС, присваиваниС, сравнСниС ΠΈ Ρ€ΡΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ….

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, string являСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ вСсь Π½Π°Π±ΠΎΡ€ стандартных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² STL.

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ (iterator) — спСциализированный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для доступа ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ, Π² Ρ‡Π°ΡΡ‚ности ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². По ΡΠ²ΠΎΠ΅ΠΌΡƒ повСдСнию ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…: ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ разымСнования «*» ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‡Π»Π΅Π½Π° класса Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ «->».

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² STL.

Рис. 2.8. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² STL

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² STL прСдставлСна Π½Π° Ρ€ΠΈΡ. 2.8. Π­Ρ‚ΠΎ Π½Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° наслСдования классов. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² — это характСристика Ρ‚ΠΈΠΏΠ°, основанная Π½Π° Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚. БущСствуСт извСстная ΠΈΠ΄ΠΈΠΎΠΌΠ° Π½Π° ΡΡ‚ΠΎΡ‚ счСт: «Π²ΡΡ‘, Ρ‡Ρ‚ΠΎ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, являСтся ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ».

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Π²ΠΎΠ΄Π° позволяСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ значСния ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ «++». Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄Π° позволяСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ значСния ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ «++». ΠžΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ являСтся ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ этих Ρ‚Ρ€Ρ‘Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ. Π”Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΌΡƒ, Π½ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Ρ‰Ρ‘ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° «—». ВсС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ со ΡΠ»ΡƒΡ‡Π°ΠΉΠ½Ρ‹ΠΌ доступом ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сдвига Π½Π° Ρ†Π΅Π»ΠΎΠ΅ число элСмСнтов ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ C++, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° индСксации. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ доступом ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ, сколько элСмСнтов ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅Ρ‚.

Π‘Ρ€Π΅Π΄ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², vector ΠΈ string ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ со ΡΠ»ΡƒΡ‡Π°ΠΉΠ½Ρ‹ΠΌ доступом. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ C++ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Ρ€ΠΎΠ»ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° со ΡΠ»ΡƒΡ‡Π°ΠΉΠ½Ρ‹ΠΌ доступом, Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим катСгоричСски Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся.

Алгоритмы STL

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STL содСрТит Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹Π΅ срСдства ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Благодаря использованию ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², эти срСдства Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‚ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ся Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚авляСт.

БинтаксичСски Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ STL ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ЀактичСски, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΡ€ΠΈΠ·Π²Π°Π½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒ программиста ΠΎΡ‚ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ большого количСства Ρ†ΠΈΠΊΠ»ΠΎΠ² с ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнно популярныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ STL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π» ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ VFS.

copy — осущСствляСт ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ [First; Last) (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ стандартноС матСматичСскиС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°), Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Dest. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ скопированным элСмСнтом.

fill — заполняСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ [First; Last) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Val. ВсС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ конструктор с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ.

find — ΠΈΡ‰Π΅Ρ‚ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [First; Last) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Val. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ²ΡˆΠ΅Π΅ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Last. Π£ ΡΡ‚ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΅ΡΡ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ поиск Π² ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΡ….

for_each — для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [First; Last), Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€, пСрСдавая Π΅ΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°).

replace — замСняСт Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [First; Last) всС элСмСнты, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ истинСн, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Val.

sort — осущСствляСт сортировку элСмСнтов Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [First; Last). ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сравнСния «<οΏ½». Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли сортируСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ сравнСниС с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° «<οΏ½», ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ срСдства, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹.

Π€ΡƒΠ½ΠΊΡ‚ΠΎΡ€ (functor, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ-функциями) — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого класса, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «()». БлСдуя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, любая функция являСтся Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠΌ.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° «()» Π² ΠΊΠ»Π°ΡΡΠ΅ позволяСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Π²Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • 1) ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; это особСнно Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ использовании шаблонов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Ρ‡ΠΈΡΠ»Π° стандартных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² STL;
  • 2) ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ свСдСния ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ Π±Π΅Π· использования глобальной области видимости.

ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ (predicate) — это Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ логичСскоС (bool) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ ΡƒΠ½Π°Ρ€Π½Ρ‹Π΅ (ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€) ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ (ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°) ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹.

ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² STL. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всС стандартныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ элСмСнты, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сравнСния (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ «==» ΠΈ «<οΏ½», Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°).

ΠŸΠΎΡ‚ΠΎΠΊΠΈ

Π’ ΡΠ·Ρ‹ΠΊΠ΅ C++ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ встроСнныС срСдства Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ программисту Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, Π² Ρ‚ΠΎΠΌ числС STL. Π’ STL Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ «ΠΏΠΎΡ‚ΠΎΠΊΠΈ» (streams).

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ понятиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ iostream являСтся ΠΏΠΎΡ‚ΠΎΠΊ (stream). ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС ΠΊΠ°ΠΊ источник ΠΈ/ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи ΠΈ Ρ‡Ρ‚Сния ΠΏΠΎΡ‚ΠΎΠΊΠ° («ΡΠ΄Π²ΠΈΠ³»), ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π±Ρ‹Ρ‚ΡŒ источником ΠΈ/ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΠΊΠΎΠ³ΠΎ класса.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ нСсмотря Π½Π° Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ интСрфСйс всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ прост: ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π° istream) ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… (для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄Π° ostream). ΠŸΡ€ΠΈ этом для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² допускаСтся Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ (Ρ‚.Π΅. ситуация, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ хранятся Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅). Для Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ flush. Подобная ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ iostream ΠΎΡ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

ИспользованиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° распадаСтся Π½Π° Π΄Π²Π΅ стадии: Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄.

Π’Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΏΠΎΡ‚ΠΎΠΊΠΈ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сдвига «<>» (Π²Π²ΠΎΠ΄). Как ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, программист ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для своих классов обСспСчив простой ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ взаимодСйствия ΠΈΡ… Ρ Π²Π½Π΅ΡˆΠ½ΠΈΠΌ ΠΌΠΈΡ€ΠΎΠΌ. ΠŸΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ самыС ΠΎΠ±Ρ‰ΠΈΠ΅ свСдСния:

  • 1) Ρ‚ΠΈΠΏ ΠΏΠΎΡ‚ΠΎΠΊΠ° (Π²Π²ΠΎΠ΄Π°, Π²Ρ‹Π²ΠΎΠ΄Π°, Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°);
  • 2) Ρ‚ΠΈΠΏ символов ΠΏΠΎΡ‚ΠΎΠΊΠ°;
  • 3) Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠ»ΠΈ отсутствиС Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ;

Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ упомянутыС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π°ΠΊΠΈΠ΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ срСдства, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ put, write, get, read ΠΈ ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅, ΠΌΠΎΠΆΠ½ΠΎ посимвольно ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π½ΠΎ ΡΡ‚ΠΈ возмоТности, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ написании высокоптимизированного ΠΊΠΎΠ΄Π°.

Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ VFS ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… составных частСй: согласно Π’Π—, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ обязан ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ любого Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартныС интСрфСйсы ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² STL ΠΈ ΠΈΡ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ², Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/распаковку ΠΈ ΡˆΠΈΡ„Ρ€Π°Ρ†ΠΈΡŽ/Π΄Π΅ΡˆΠΈΡ„Ρ€Π°Ρ†ΠΈΡŽ «Π½Π° Π»Π΅Ρ‚Ρƒ».

Π£ΠΌΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π² Π»ΡŽΠ±ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ слоТной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это СдинствСнный способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ число ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ — ΠΎΠ΄Π½ΠΈ ΠΈΠ· ΡΠ°ΠΌΡ‹Ρ… массовых ΠΈ Π² Ρ‚ΠΎΠΆΠ΅ врСмя ΠΎΠ΄Π½ΠΈ ΠΈΠ· ΡΠ°ΠΌΡ‹Ρ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ….

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STL, прСдоставляя ΠΌΠΎΡ‰Π½Ρ‹Π΅ срСдства управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ‚ программиста ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ошибок. Частая ошибка — Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ адрСса локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ — контролируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ компилятором. Π¨ΠΈΡ€ΠΎΠΊΠΎΠ΅ использованиС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅, любой Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС динамичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄Π°Π»ΡΠ»ΠΈΡΡŒ воврСмя.

Как извСстно, дСструктор локального ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° всСгда вызываСтся Π² ΠΊΠΎΠ½Ρ†Π΅ области видимости, нСзависимо ΠΎΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠΊΠΈΠ½ΡƒΠ». Аналогично, компилятор Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ дСструктор Ρ‡Π»Π΅Π½Π° класса всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ идСя ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ компилятору, посрСдством классов-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ, автоматичСски ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ врСмя ΠΆΠΈΠ·Π½ΠΈ динамичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠ»Π°ΡΡΡ‹, Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ сСбя ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ отслСТиваниС принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΌΠ½Ρ‹ΠΌΠΈ указатСлями (smart pointers).

Рассмотрим ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡƒΠΌΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π­Ρ‚ΠΎ шаблон auto_prt ΠΈΠ· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ языка C++ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ weak_prt ΠΈ shared_prt ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ boost.

ВсС пСрСчислСнныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ создаётся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° происходит с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ указатСлями (разумССтся, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ, которая для ΡƒΠΌΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ бСссмыслСнна).

Π¨Π°Π±Π»ΠΎΠ½ auto_ptr ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²Π»Π°Π΄Π΅Π»Π΅Ρ†. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ auto_ptr прСдставляСт собой класс, Π² Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ происходит Π²Ρ‹Π·ΠΎΠ² delete () для указатСля, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² auto_ptr Π΅ΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ„Π»Π°Π³, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ Π΄Π°Π½Π½ΠΎΠΌΡƒ экзСмпляру auto_ptr ΠΏΡ€Π°Π²ΠΎ удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° — ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ auto_ptr Ρ„Π»Π°Π³ выставляСтся Π² ΠΈΡΡ‚ΠΈΠ½Ρƒ Ρƒ Π²Π½ΠΎΠ²ΡŒ создаваСмого, ΠΈ Π² Π»ΠΎΠΆΡŒ Ρƒ ΡΡ‚Π°Ρ€ΠΎΠ³ΠΎ auto_ptr; согласно этому Ρ„Π»Π°Π³Ρƒ Π² Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ вызываСтся ΠΈΠ»ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ся дСструктор для Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ³ΠΎ указатСля.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ weak_ptr ΠΈ shared_ptr Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ boost ΡΠ²Π»ΡΡŽΡ‚ΡΡ довольно ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ рСализациями ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΏΠΎΠ΄ΡΡ‡Π΅Ρ‚ΠΎΠΌ ссылок. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² VFS Π±Ρ‹Π»ΠΎ эпизодичСским, Π° Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ вСрсии ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π·Π° Π½Π΅Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ здСсь ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚.

ΠŸΡ€ΠΈ всС своСй элСгантности ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΠΈ, ΡƒΠΌΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ источники ошибок ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

  • 1)мноТСствСнныС ссылки (ΠΎΠ΄ΠΈΠ½ ΡƒΠΌΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π³ΠΎ); Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ использовании простых ΠΈ ΡƒΠΌΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ;
  • 2)цикличСскиС связи; Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании ΡƒΠΌΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ с ΡΡ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ссылок; приводят ΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ уничтоТСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ, ΠΊΠ°ΠΊ слСдствиС, ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти.
ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ