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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ программирования Π½Π° Π‘++. 101 ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈ рСкомСндация». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 23

Автор Π“Π΅Ρ€Π± Π‘Π°Ρ‚Ρ‚Π΅Ρ€

41. Π”Π΅Π»Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ (ΠΊΡ€ΠΎΠΌΠ΅ случая Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΠ² Π² стилС структур Π‘)

РСзюмС

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

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ являСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΊ качСствСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 11). Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ; Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ β€” Π»ΡƒΡ‡ΡˆΠ΅Π΅ срСдство для сохранСния ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса, Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… вносимых измСнСниях.

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

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

БмСшиваниС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ классС являСтся Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ попросту Π·Π°ΠΏΡƒΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈ Π½Π΅Ρ‡Ρ‚ΠΎ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для ΠΈΡ… поддСрТания. БмСшиваниС ΠΈΡ… с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π°ΠΊ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ класс ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

НС Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Ρ…ΡƒΠΆΠ΅ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для получСния ΠΈ установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ послСдниС ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ внСсСниям ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ сокрытии Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² класса с использованиСм ΠΈΠ΄ΠΈΠΎΠΌΡ‹ Pimpl (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 43).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ инкапсуляция. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ классов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Matrix, File, Date, BankAccount, Security) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы. ПозволСниС Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ нСпосрСдствСнно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ класса Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ² прСдставлСнной ΠΈΠΌ абстракции ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠΌ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².

АгрСгат Node, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса List, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π΄Π²Π° указатСля Π½Π° Node: next_ ΠΈ prev_. Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Node Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ скрыты ΠΎΡ‚ List. Однако Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 3.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. TreeNode. Рассмотрим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Tree<T>, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ с использованиСм TreeNode<T>, Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Tree, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π»Ρ‹ ΠΈ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ T. ВсС Ρ‡Π»Π΅Π½Ρ‹ TreeNode ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… Π½Π΅ Π½Π°Π΄ΠΎ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ класса Tree, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСпосрСдствСнно ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠΌΠΈ. Однако класс Tree Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ класс TreeNode (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ класс ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса Tree), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это β€” Π΄Π΅Ρ‚Π°Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса Tree, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Tree Π½Π΅ скрываСт содСрТащиСся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ T, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π° Π½ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄; ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для прСдоставлСния доступа ΠΊ содСрТащимся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ внутрСнняя структура ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° остаСтся скрытой.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ получСния ΠΈ установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Если Π½Π΅ имССтся Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ абстракции, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, color) ΠΌΠΎΠ³ΡƒΡ‚, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π±Ρ‹Ρ‚ΡŒ сдСланы Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΈ скрыты Π·Π° функциями получСния ΠΈ установки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GetColor, SetColor). Π’Π΅ΠΌ самым обСспСчиваСтся ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ измСнСниям.

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ общСния ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ "Ρ†Π²Π΅Ρ‚Π°" ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ состояния Π΄ΠΎ абстрактного, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ способом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сочтСм Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС Ρ†Π²Π΅Ρ‚Π°, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для обновлСния дисплСя ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ†Π²Π΅Ρ‚Π°, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ срСдства ΠΈΠ»ΠΈ внСсти Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ измСнСния β€” ΠΈ всС это Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ потрСбуСтся ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Ρ‚.Π΅. ΠΌΡ‹ сохраняСм ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исходных тСкстов); Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ β€” Π½Π΅ потрСбуСтся Π½ΠΈ пСрСкомпиляция, Π½ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° (Ссли измСнСния ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π±ΠΈΠ½Π°Ρ€Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ). Ни ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исходных тСкстов, Π½ΠΈ бинарная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ внСсСнии Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹, Ссли исходный Π΄ΠΈΠ·Π°ΠΉΠ½ содСрТит ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ‡Π»Π΅Π½ color, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ тСсно связан Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

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

АгрСгаты Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (извСстныС ΠΊΠ°ΠΊ структуры Π² стилС Π‘) просто хранят вмСстС Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π½ΠΈ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ модСлирования абстракций ΠΈΠ»ΠΈ поддСрТания ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π’Π°ΠΊΠΈΠ΅ Π°Π³Ρ€Π΅Π³Π°Ρ‚Ρ‹ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ абстракциями. ВсС ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти Π΄Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой интСрфСйс. НапримСр, шаблон класса std::pair<T, U> ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартными ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ для объСдинСния Π΄Π²ΡƒΡ… нСсвязанных элСмСнтов Ρ‚ΠΈΠΏΠΎΠ² T ΠΈ U, ΠΈ ΠΏΡ€ΠΈ этом pair сам ΠΏΠΎ сСбС Π½Π΅ привносит Π½ΠΈ повСдСния, Π½ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².

Бсылки

[Dewhurst03] Β§80 β€’ [Henricson97] pg. 105 β€’ [Koenig97] Β§4 β€’ [Lakos96] Β§2.2 β€’ [Meyers97] Β§20 β€’ [Murray93] Β§2.3 β€’ [Stroustrup00] Β§10.2.8, Β§15.3.1.1, Β§24.4.2-3 β€’ [SuttHysl04a]

42. НС допускайтС Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π΅Π»Π°

РСзюмС

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° дСскрипторов Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, управляСмых вашим классом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС вашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΊ своСго собствСнного.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

class Socket {

public:

 // ... ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ handle_,

 // дСструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ handle_, ΠΈ Ρ‚.Π΄. ...

 int GetHandle() const { return handle_; } // ΠŸΠ»ΠΎΡ…ΠΎ!

private:

 int handle_; // дСскриптор ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы

};

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт абстракции ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ 11 ΠΈ 41). Однако сокрытиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ обСспСчСнии доступа ΠΊ ΠΈΡ… дСскрипторам ΠΎΠ±Ρ€Π΅Ρ‡Π΅Π½ΠΎ Π½Π° ΠΏΡ€ΠΎΠ²Π°Π», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ свою ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρƒ Π½Π° Π·Π°ΠΌΠΎΠΊ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΏΠΎΠ΄ ΠΊΠΎΠ²Ρ€ΠΈΠΊ Ρƒ Π²Ρ…ΠΎΠ΄Π° ΠΈΠ»ΠΈ просто ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π·Π°ΠΌΠΊΠ΅. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ.

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

β€’ ΠšΠ»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ своСй абстракции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚ Π½Π΅Π΅ зависят ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹. Если Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ класс Socket Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° с использованиСм Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ дСскриптору handle_ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ, окаТСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ.

β€’ ΠšΠ»Π°ΡΡ Π½Π΅ Π² состоянии ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС Π±Π΅Π· Π²Π΅Π΄ΠΎΠΌΠ° класса. НапримСр, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Socket, минуя Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° Socket, Π° это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ станСт Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.