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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹-ΠΈΠ³Ρ€Ρ‹ «Шашки»

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

ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса-родитСля, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ наслСдованиС (класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ), лишь Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… допускаСтся мноТСствСнноС наслСдованиС — ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ класса ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹-ΠΈΠ³Ρ€Ρ‹ «Шашки» (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ собой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ извСстной логичСской ΠΈΠ³Ρ€Ρ‹ «Π¨Π°ΡˆΠΊΠΈ».

Π˜Π³Ρ€Π° ΠΈΠ΄Π΅Ρ‚ Π½Π° ΠΏΠΎΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 8 X 8 ΠΊΠ»Π΅Ρ‚ΠΎΠΊ, шашки Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ряда с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны, Π±ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство шашСк Π² Π»ΡŽΠ±Ρ‹Ρ… направлСниях, простая ΠΌΠΎΠΆΠ΅Ρ‚ Π±ΠΈΡ‚ΡŒ Π½Π°Π·Π°Π΄, Π΄Π°ΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π»ΡŽΠ±ΠΎΠ΅ число ΠΏΠΎΠ»Π΅ΠΉ, Ρ†Π΅Π»ΡŒ ΠΈΠ³Ρ€Ρ‹ ΡΡŠΠ΅ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΠ΅Ρ€Π΅Ρ‚ΡŒ всС шашки ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. КаТдая ΠΈΠ· ΡΡ‚ΠΎΡ€ΠΎΠ½ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎ 12 шашСк. Шашки Ρ€Π°ΡΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ‚Ρ€Π΅Ρ… Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… ΠΊ ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌ, горизонталях. Π”Π²Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… ряда ΠΏΠΎΠ»Π΅ΠΉ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ свободными. Π—Π΄Π΅ΡΡŒ Π½Π° ΡΡ‚ΠΈΡ… полях, происходит сблиТСниС ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ соприкосновСниС противостоящих сил. ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ ходят ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ, пСрСмСщая шашки своСго Ρ†Π²Π΅Ρ‚Π° ΠΏΠΎ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌ полям. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π±Π΅Π»Ρ‹Π΅. Π’Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ всСх шашСк ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°.

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ³Ρ€Π° шашки ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ основой управлСния процСссом Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ совмСстно с ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡΠΌΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΡΡ‚ΠΎΠΌ состоит Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ООП ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования, Π³Π΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² — ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ интСрфСйсы.

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹: Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ тСорСтичСских Π·Π½Π°Π½ΠΈΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ курса «ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅», ΠΏΡƒΡ‚Π΅ΠΌ создания прилоТСния, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ собой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ извСстной логичСской ΠΈΠ³Ρ€Ρ‹ «Π¨Π°ΡˆΠΊΠΈΠΈ».

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚:

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ основных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ;

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π΄Π°Π½Π½Ρ‹Ρ… состояния) для Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²;

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ второстСпСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΡ… Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…;

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ иСрархичСской систСмы классов, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹;

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса;

— Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ;

— Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ сообщСниС;

— ΠΎΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ устранСниС всСх Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π²ΡˆΠΈΡ…ΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ;

— ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΡ‚Π»Π°Π΄ΠΊΠ°, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΈ Ρ‚СстированиС.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт программисту ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области ΠΏΡƒΡ‚Π΅ΠΌ программирования ΠΈΡ… ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… класса. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ «ΠΊΠ»Π°ΡΡ» обСспСчиваСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ инкапсуляции для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ абстрактных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ ΠΊΠ°ΠΊ Π±Ρ‹ скрываСт ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ², ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, допустимыС для выполнСния Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ этого Ρ‚ΠΈΠΏΠ°.

1. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅, ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ООП) — ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ основными концСпциями ΡΠ²Π»ΡΡŽΡ‚ΡΡ понятия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ². Π’ ΡΠ»ΡƒΡ‡Π°Π΅ языков с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ вмСсто классов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹.

1.1 Π˜ΡΡ‚ΠΎΡ€ΠΈΡ возникновСния

ООП Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ развития ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования, Π³Π΄Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ‹. Для дальнСйшСго развития ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования часто большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ понятия события (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, КОП).

Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ КОП ΠΎΡ‚ ΠžΠžΠŸ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, ΠΊΠ°ΠΊ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования: ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ — нСзависимыС части ΠΊΠΎΠ΄Π° Π΄ΠΎ ΡƒΡ€ΠΎΠ²Π½Ρ сборки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ — нСзависимыС части ΠΊΠΎΠ΄Π° Π΄ΠΎ ΡƒΡ€ΠΎΠ²Π½Ρ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ВзаимодСйствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² происходит посрСдством сообщСний. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ дальнСйшСго развития ООП, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Π±ΡƒΠ΄Π΅Ρ‚ Π°Π³Π΅Π½Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π³Π΄Π΅ Π°Π³Π΅Π½Ρ‚Ρ‹ — нСзависимыС части ΠΊΠΎΠ΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ выполнСния. ВзаимодСйствиС Π°Π³Π΅Π½Ρ‚ΠΎΠ² происходит посрСдством измСнСния срСды, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ находятся.

Π―Π·Ρ‹ΠΊΠΎΠ²Ρ‹Π΅ конструкции, конструктивно Π½Π΅ ΠΎΡ‚носящиСся нСпосрСдствСнно ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Π½ΠΎ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ Π΄Π»Ρ ΠΈΡ… Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ (ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ситуации, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ) ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π½ΠΈΡ… Π² Π°ΡΠΏΠ΅ΠΊΡ‚Ρ‹ (Π² Π°ΡΠΏΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ). Π‘ΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ понятиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ посрСдством обСспСчСния Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠΉ стадиСй ΠΌΠ΅ΠΆΠ΄Ρƒ ООП ΠΈ Π°Π³Π΅Π½Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ‡Π°ΡΡ‚ΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚вия.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ языком программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ориСнтированности, Π±Ρ‹Π»Π° Π‘ΠΈΠΌΡƒΠ»Π°. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ своСго появлСния (Π² 1967 Π³ΠΎΠ΄Ρƒ), этот язык программирования ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» поистинС Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, классы, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π΄Ρ€., ΠΎΠ΄Π½Π°ΠΊΠΎ это всё Π½Π΅ Π±Ρ‹Π»ΠΎ воспринято соврСмСнниками ΠΊΠ°ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Π½Π΄ΠΈΠΎΠ·Π½ΠΎΠ΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ Аланом КэйСм ΠΈ Π”эном Ингаллсом Π² ΡΠ·Ρ‹ΠΊΠ΅ Smalltalk. ИмСнно ΠΎΠ½ ΡΡ‚Π°Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространённым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком программирования.

Π’ Π½Π°ΡΡ‚оящСС врСмя количСство ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… языков программирования (список языков), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ, являСтся наибольшим ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌ. Π’ ΠΎΠ±Π»Π°ΡΡ‚ΠΈ систСмного программирования Π΄ΠΎ ΡΠΈΡ… ΠΏΠΎΡ€ примСняСтся ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования, ΠΈ ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚Ρ‹ΠΌ языком программирования являСтся язык C. Π₯отя ΠΏΡ€ΠΈ взаимодСйствии систСмного ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ΅ влияниС стали ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ языки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

1.2 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ООП ΠΈ Π΅Π³ΠΎ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

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

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

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ пояснСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ понятиС ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Smalltalk) взаимодСйствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ»ΠΎΡΡŒ ΠΊΠ°ΠΊ «Π½Π°ΡΡ‚оящий» ΠΎΠ±ΠΌΠ΅Π½ сообщСниями, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ пСрСсылка ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-сообщСния. Вакая модСль являСтся Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΎΠ±Ρ‰Π΅ΠΉ. Она прСкрасно ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для описания ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный ΠΏΠΎΡ‚ΠΎΠΊ исполнСния ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с ΠΏΡ€ΠΎΡ‡ΠΈΠΌΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ вСсти сСбя ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅, Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. ΠŸΠΎΡΡ‹Π»ΠΊΠ° сообщСний СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ вопрос ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, присвоСнными ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ — нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная, сообщСниС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ класса, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ относится присвоСнный ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Однако ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ сторону — «ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Π°Ρ» ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов, Ρ‡Ρ‚ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π½Ρ‹Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ концСпция «ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°» — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ доступныС ΠΈΠ·Π²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ся взаимодСйствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ количСствС языков программирования, Π² Ρ‚ΠΎΠΌ числС C++, Object Pascal. Π’ Π½Π°ΡΡ‚оящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅Ρ‚ся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённым Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках.

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

1.3 ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

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

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

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, связанныС с ΠΊΠ»Π°ΡΡΠΎΠΌ. Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ.

ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса-родитСля, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ наслСдованиС (класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ), лишь Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… допускаСтся мноТСствСнноС наслСдованиС — ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ класса ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ классов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС создаёт Ρ†Π΅Π»Ρ‹ΠΉ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΠΊ логичСских, Ρ‚Π°ΠΊ ΠΈ Ρ‡ΠΈΡΡ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ…, поэтому Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½Π°. ВмСсто этого Π² 1990;Π΅ Π³ΠΎΠ΄Ρ‹ появилось ΠΈ ΡΡ‚Π°Π»ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки понятиС интСрфСйса. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ — это класс Π±Π΅Π· ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Если Π½Π΅ΠΊΠΈΠΉ класс наслСдуСт (ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ говорят, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚) интСрфСйс, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС входящиС Π² Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ИспользованиС интСрфСйсов прСдоставляСт ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅ΡˆΡ‘Π²ΡƒΡŽ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ мноТСствСнному наслСдованию.

ВзаимодСйствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв обСспСчиваСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

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

Поля класса, Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны ΠΈΠ·Π²Π½Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ доступ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ поля ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ скрытыми (Π»ΠΈΠ±ΠΎ язык Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠΎΠ»ΡΠΌ класса ΠΈΠ·Π²Π½Π΅), Π° Π΄Π»Ρ доступа ΠΊ Π½Π°Ρ…одящимся Π² ΠΏΠΎΠ»ΡΡ… Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ доступа. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ поля, Π»ΠΈΠ±ΠΎ производят запись Π² ΡΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния. ΠŸΡ€ΠΈ записи ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ записываСмого значСния ΠΈ, ΠΏΡ€ΠΈ нСобходимости, произвСсти Π΄Ρ€ΡƒΠ³ΠΈΠ΅ манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ согласованными). ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΅Ρ‰Ρ‘ аксСссорами (ΠΎΡ‚ Π°Π½Π³Π». access — доступ), Π° ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ — Π³Π΅Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ (Π°Π½Π³Π». get — Ρ‡Ρ‚Π΅Π½ΠΈΠ΅) ΠΈ ΡΠ΅Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ.

ПсСвдополя, доступныС для чтСния ΠΈ / ΠΈΠ»ΠΈ записи. Бвойства внСшнС выглядят ΠΊΠ°ΠΊ поля ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ доступным полям (с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ), ΠΎΠ΄Π½Π°ΠΊΠΎ фактичСски ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ происходит Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, свойства ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ «ΡƒΠΌΠ½Ρ‹Π΅» поля Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ доступ ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ дСйствиями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сопровоТдаСтся Π΅Π³ΠΎ пСрСрисовкой Π½Π° Π½ΠΎΠ²ΠΎΠΌ мСстС). Бвойства, ΠΏΠΎ ΡΡƒΡ‚ΠΈ — Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ синтаксичСский сахар, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚, Π° Π»ΠΈΡˆΡŒ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ языковая рСализация свойств ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠΉ. НапримСр, Π² C#объявлСниС свойства нСпосрСдствСнно содСрТит ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со ΡΠ²ΠΎΠΉΡΡ‚Π²Π°ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа, доступных для нСпосрСдствСнного Π²Ρ‹Π·ΠΎΠ²Π°. Π’ Delphi объявлСниС свойства содСрТит лишь ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠΎΠ»ΡŽ. Π‘Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ трСбованиями ΠΊ ΡΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π΅.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ рСализуСтся ΠΏΡƒΡ‚Ρ‘ΠΌ ввСдСния Π² ΡΠ·Ρ‹ΠΊ ΠΏΡ€Π°Π²ΠΈΠ», согласно ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° «ΠΊΠ»Π°ΡΡ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π΅Ρ‘ ΠΊΠ»Π°ΡΡΠ°.

1.4 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия

АбстрагированиС — это способ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… характСристик ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ· Ρ€Π°ΡΡΠΌΠΎΡ‚рСния Π½Π΅Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅. БоотвСтствСнно, абстракция — это Π½Π°Π±ΠΎΡ€ всСх Ρ‚Π°ΠΊΠΈΡ… характСристик.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ — это свойство систСмы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Π½ΠΈΠΌΠΈ, Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΈ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля.

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ — это свойство систСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ интСрфСйсом Π±Π΅Π· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структурС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Класс являСтся описываСмой Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (пространства ΠΈΠΌΡ‘Π½) исходного ΠΊΠΎΠ΄Π° модСлью Π΅Ρ‰Ρ‘ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ сущности (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). ЀактичСски ΠΎΠ½ ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ устройство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, являясь своСго Ρ€ΠΎΠ΄Π° Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΎΠΌ. Говорят, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — это экзСмпляр класса. ΠŸΡ€ΠΈ этом Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… систСмах класс Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ посрСдством динамичСской ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ классы Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ соотвСтствовали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

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

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΎΠ±Ρ€Π°Π·Π΅Ρ†, ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΠΊΠΎΠΏΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ связь с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, автоматичСски наслСдуя измСнСния Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅; эта ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ опрСдСляСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ языка.

2. ЛогичСская ΠΈΠ³Ρ€Π° «Π¨Π°ΡˆΠΊΠΈ»

2.1 НазначСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΡŽΠ±ΡΡ‚ логичСскиС ΠΈΠ³Ρ€Ρ‹. Π˜Π³Ρ€Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΈΠ³Ρ€Ρ‹ Π΄Π²ΡƒΡ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

2.2 Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ тСхничСскиС ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ срСдства

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° создана Π² ΡΡ€Π΅Π΄Π΅ программирования Borland Delphi 7.0.

Π―Π·Ρ‹ΠΊ программирования: Pascal

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ систСмныС трСбования:

— Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 500 ΠΊΠ± ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π½Π° ΠΆΡ‘стком дискС;

— Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 4 Мб ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти;

— ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма — Windows XP/2000/Vista;

— ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°;

— ΠΌΡ‹ΡˆΡŒ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

Для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ достаточно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ (ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ Π»Π΅Π²ΠΎΠΉ клавишСй ΠΌΡ‹ΡˆΠΈ) Ρ„Π°ΠΉΠ» DCheckers.exe.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² ΡΠΈΡΡ‚Π΅ΠΌΡƒ Π½Π΅ ΡƒΡΡ‚анавливаСтся, послС использования ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ просто ΡƒΠ΄Π°Π»Π΅Π½Π° с ΠΆΡ‘сткого диска ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

2.3 ОписаниС логичСской структуры

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ состоит ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… unit (Main, Draughts, About, VChessBoard) ΠΈ Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌ (fmCheckers, fmAbout).

unit VChessBoard — Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ прорисовки поля (прорисовка ΠΊΠ»Π΅Ρ‚ΠΎΠΊ ΠΈ ΡˆΠ°ΡˆΠ΅ΠΊ).

unit About — Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ³Ρ€Ρ‹;

unit Draughts — Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» описываСт всС дСйствия, ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹Π΅ с ΡˆΠ°ΡˆΠΊΠ°ΠΌΠΈ (Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ…ΠΎΠ΄Ρ‹, запись Ρ…ΠΎΠ΄ΠΎΠ², Ρ€ΡƒΠ±ΠΊΠ°, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ срублСнных шашСк)

unit Main — Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» описываСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΠ³Ρ€Ρ‹. Если шашка Π²Ρ‹Π±Ρ€Π°Π½Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ…ΠΎΠ΄ΠΎΠ², Ссли Ρ€ΡƒΠ±ΠΊΠΈ Π½Π΅Ρ‚ ΠΈ ΠΊΠ»Π΅Ρ‚ΠΊΠ° пустая, Ρ‚ΠΎ Ρ…ΠΎΠ΄ сдСлан ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠ°, Ссли Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΡƒΠ±ΠΊΠΈ, Ρ‚ΠΎ Ρ€ΡƒΠ±ΠΈΡ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡŽ. ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ…ΠΎΠ΄ΠΎΠ² с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€ΡƒΠ±ΠΊΠΈ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π»ΠΈ Ρ€ΡƒΠ±ΠΊΠ° Π² Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, Ρ€ΡƒΠ±ΠΊΠ° Π²Π΅Ρ€Π½Π°, Π΄Π°Π»Π΅Π΅ Ρ€ΡƒΠ±ΠΈΠΌ, опрСдСляСм ΡΡ€ΡƒΠ±Π»Π΅Π½Π½ΡƒΡŽ ΡˆΠ°ΡˆΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠΊΠ°ΠΊΠΈΠ²Π°Π΅ΠΌ. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ€ΡƒΠ±ΠΊΠΈ, устанавливаСм Ρ€Π΅ΠΆΠΈΠΌ Ρ€ΡƒΠ±ΠΊΠΈ, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€ΡƒΠ±ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠ°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΏΠΎΠ±Π΅Π΄Ρƒ ΠΏΠΎ ΡΡ€ΡƒΠ±Π°ΠΌ ΠΈ ΠΏΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ. Π—Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³Ρ€Ρƒ, ΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ: ΠΏΠΎΠ±Π΅Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±Π΅Π»Ρ‹Ρ… ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΆΠ΅ показываСтся, Ρ‡Π΅ΠΉ Ρ…ΠΎΠ΄ ΠΈ Π²Ρ€Π΅ΠΌΡ ΠΈΠ³Ρ€Ρ‹.

2.4 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, послС запуска прилоТСния появится ΠΎΠΊΠ½ΠΎ (рис. 1):

Рисунок 1 — Основная Ρ„ΠΎΡ€ΠΌΠ° содСрТащая ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ основная Ρ„ΠΎΡ€ΠΌΠ° содСрТащая ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π² ΠΌΠ΅Π½ΡŽ ΠΈΠ³Ρ€Π° ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ (рис. 2).

Рисунок 2 — Π Π°Π·Π΄Π΅Π» мСню, Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ.

НаТав Π½Π° Π½Π°Ρ‡Π°Π² ΠΈΠ³Ρ€Ρƒ, Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ появятся шашки. Π‘Π΅Π»Ρ‹Π΅ ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹Π΅. Π₯ΠΎΠ΄ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π±Π΅Π»Ρ‹Π΅. Π‘ Π·Π°ΠΏΡƒΡΠΊΠΎΠΌ начинаСтся отсчСт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ³Ρ€Ρ‹ (рис. 3)

Рисунок 3 — ПоявлСниС шашСк. ВрСмя ΠΈΠ³Ρ€Ρ‹.

Когда ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΡˆΠ°ΡˆΠΊΡƒ, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ…ΠΎΠ΄Ρ‹ (рис. 4) ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΡƒΠ±ΠΊΠΈ (рис. 5).

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ шашки ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, Ссли ΠΎΠ½Π° Π½Π΅ Π·Π°Π½ΡΡ‚Π°. Если ΠΊΠ»Π΅Ρ‚ΠΊΠ° занята шашкой сопСрника ΠΈ Π·Π° ΡΡ‚ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠΎΠΉ свободноС ΠΏΠΎΠ»Π΅, Ρ‚ΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ Π±ΠΎΠΉ — шашка ходящСго «ΠΏΠ΅Ρ€Π΅ΡΠΊΠ°ΠΊΠΈΠ²Π°Π΅Ρ‚» Ρ‡Π΅Ρ€Π΅Π· ΡˆΠ°ΡˆΠΊΡƒ сопСрника ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ снимаСтся с Π΄ΠΎΡΠΊΠΈ. Π—Π° ΠΎΠ΄ΠΈΠ½ Π±ΠΎΠΉ простая шашка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ±ΠΈΡ‚ΡŒ нСсколько шашСк сопСрника.

Рисунок 4 — Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ…ΠΎΠ΄Ρ‹ Рисунок 5 — Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΡƒΠ±ΠΊΠΈ

ΠŸΡ€ΠΈ достиТСнии простой послСднСй Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ шашка становится Π΄Π°ΠΌΠΊΠΎΠΉ (рис. 6).

Рисунок 6 — Π”Π°ΠΌΠΊΠ° Π”Π°ΠΌΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ (рис. 7) ΠΈΠ»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Π±ΠΎΠΉ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π² Π»ΡŽΠ±ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ (рис. 8)

Рисунок 7 — Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ…ΠΎΠ΄Ρ‹ Π΄Π°ΠΌΠΊΠΈ Рисунок 8 — Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΡƒΠ±ΠΊΠΈ Π΄Π°ΠΌΠΊΠΎΠΉ ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ всплываСт ΠΎΠΊΠ½ΠΎ: Π˜Π³Ρ€Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π° (рис. 9) ΠΈ ΠΊΠ°ΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ±Π΅Π΄ΠΈΠ»Π° (рис. 10)

Рисунок 9 — Окно: Π˜Π³Ρ€Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π° Рисунок 10 — Окно, какая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ±Π΅Π΄ΠΈΠ»Π° НаТав ΠΊΠ½ΠΎΠΏΠΊΡƒ «Πž ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅», ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ³Ρ€Ρ‹ (рис. 11).

Рисунок 11 — О ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΌΠ΅Π½ΡŽ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ (рис. 7).

Рисунок 7 — Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

2.6 Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ

ΠŸΡ€ΠΈ запускС прилоТСния Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ мСню ΠΈΠ³Ρ€Π° ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ. ПослС Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π’Π°ΠΌΠΈ прСдстанСт ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ с ΡˆΠ°ΡˆΠΊΠ°ΠΌΠΈ. ΠšΠ»ΠΈΠΊΠ½ΡƒΠ² ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ ΡˆΠ°ΡˆΠΊΠ΅, Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ…ΠΎΠ΄Ρ‹, ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Ρ‚Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, ΠΊΡƒΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΡˆΠ°ΡˆΠΊΡƒ. Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½Π΅Ρ‚Π΅ ΡˆΠ°ΡˆΠΊΡƒ Π½Π° Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, ΠΏΡ€ΠΈ этом Ρ…ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΡƒ. Π’Π°ΡˆΠ° Π·Π°Π΄Π°Ρ‡Π° ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ всСх шашСк ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ собой ΠΈΠ³Ρ€Ρƒ «Π¨Π°ΡˆΠΊΠΈ». Π’ Ρ…ΠΎΠ΄Π΅ написания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»Π° освоСна ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ²Π»Π°Π΄Π΅Ρ‚ΡŒ искусством ΠΈΠ³Ρ€Ρ‹ Π² «Π¨Π°ΡˆΠΊΠΈ», Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ своС логичСскоС ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π² ΡΡ€Π΅Π΄Π΅ программирования Borland Delphi 7.0.

1) ГалисССв Π“. Π’. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΡ€Π΅Π΄Π΅ Delphi 2005. Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ «Π”ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΈΠΊΠ°», 2006.

2) Бобровский Π‘. И. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Delphi. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для бизнСса. Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ курс. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ «ΠŸΠΈΡ‚Π΅Ρ€», 2006.

3) ΠšΠΎΡ‚ΠΎΠ² Π’. М. Π§Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Π·Π°Π΄Π°Ρ‡ динамичСского программирования, 2000

4) Π€Π°Ρ€ΠΎΠ½ΠΎΠ² Π’. Π’. Delphi. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня. Π£Ρ‡Π΅Π±Π½ΠΈΠΊ для Π²ΡƒΠ·ΠΎΠ². Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ «ΠŸΠΈΡ‚Π΅Ρ€», 2006.

5) Π¦Π²Π΅Ρ‚ΠΊΠΎΠ²Π° А. Π’. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ «Π­ΠΊΡΠΌΠΎ», 2008.

6) БпСциалисты NIIT. ИспользованиС C#. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅.: ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ с Π°Π½Π³Π». — Πœ.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2002. — 528 с.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, Menus,

Draughts, VChessBoard;

type

TfmCheckers = class (TForm)

Timer1: TTimer;

pnRight: TPanel;

MainMenu1: TMainMenu;

miFile: TMenuItem;

miGame: TMenuItem;

miHelp: TMenuItem;

miAbout: TMenuItem;

miExit: TMenuItem;

miStartLocalGame: TMenuItem;

pnChessBoard: TPanel;

lbedBlackName: TLabeledEdit;

lbedWhiteName: TLabeledEdit;

Label1: TLabel;

Label2: TLabel;

stCurrentPlayer: TStaticText;

Label3: TLabel;

stTimer: TStaticText;

miCancelGame: TMenuItem;

procedure miExitClick (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure FormResize (Sender: TObject);

procedure miStartLocalGameClick (Sender: TObject);

procedure Timer1Timer (Sender: TObject);

procedure miCancelGameClick (Sender: TObject);

procedure miAboutClick (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

vcbChess:TVisualChessBoard;

PlayerSide, CurrentPlayer: Integer;

IsDraughtChosen: Boolean;

DraughtPosition:TCellPosition;

StrikeMode: Boolean;

PlayTime: Integer;

StartTime:TDateTime;

LocalGame: Boolean;

procedure vcbChessMouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);

procedure vcbChessMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

procedure vcbChessMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Procedure TrySelectNewDraught (x, y: Integer);

Procedure TryMakeStrike (x, y: Integer);

Procedure SwitchCurrentPlayer;

Function CheckForWin: Integer;

end;

var

fmCheckers: TfmCheckers;

implementation

uses About;

{$R *.dfm}

procedure TfmCheckers. miExitClick (Sender: TObject);

begin

Close;

end;

procedure TfmCheckers. FormCreate (Sender: TObject);

begin

vcbChess:=TVisualChessBoard. Create (pnChessBoard);

vcbChess. Parent:=pnChessBoard;

vcbChess. Left:=8;

vcbChess. Top:=8;

vcbChess. Width:=1200;

vcbChess. Height:=1200;

vcbChess. OnMouseMove:=vcbChessMouseMove;

vcbChess. OnMouseDown:=vcbChessMouseDown;

vcbChess. OnMouseUp:=vcbChessMouseUp;

vcbChess. Refresh;

end;

procedure TfmCheckers. FormResize (Sender: TObject);

Var

CellSize: Integer;

begin

If pnChessBoard. Width

CellSize:=(pnChessBoard. Width-16) div 8

Else

CellSize:=(pnChessBoard. Height-16) div 8;

vcbChess. Left:=8;

vcbChess. Top:=8;

vcbChess. Width:=CellSize*8;

vcbChess. Height:=CellSize*8;

vcbChess. Refresh;

If IsDraughtChosen Then

TrySelectNewDraught (DraughtPosition.X, DraughtPosition. Y);

end;

procedure TfmCheckers. vcbChessMouseMove (Sender: TObject; Shift: TShiftState;

X, Y: Integer);

Var

xP, yP: Integer;

begin

vcbChess. Cursor:=crDefault;

vcbChess. GetCellNumberByCoord (X, Y, xP, yP);

If vcbChess. Board. GetDraught (xP, yP)<>nil Then

Begin

If vcbChess. Board. GetDraught (xP, yP).Side=PlayerSide Then

vcbChess. Cursor:=crHandPoint

End;

end;

procedure TfmCheckers. vcbChessMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Var

xP, yP: Integer;

begin

If StrikeMode Then Exit;

vcbChess. GetCellNumberByCoord (X, Y, xP, yP);

If Not (IsDraughtChosen) Then // Если Π΅Ρ‰Π΅ Π½Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ шашки

Begin

TrySelectNewDraught (xP, yP);

End

Else Begin // Если ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ выбранная шашка

If vcbChess. Board. GetDraught (xP, yP)=nil Then

Begin // Если ΠΊΠ»Π΅Ρ‚ΠΊΠ° пустая, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΊΠ°ΠΊ отпусканиС ΠΌΡ‹ΡˆΠΈ

vcbChessMouseUp (Sender, Button, Shift, X, Y);

End

Else Begin // Если Ρ‚Π°ΠΌ стоит наша шашка, Ρ‚ΠΎ ΡΠ±Ρ€ΠΎΡΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡ€ΡƒΠ΅ΠΌ

If vcbChess. Board. GetDraught (xP, yP).Side=PlayerSide Then

Begin

vcbChess. Refresh;

IsDraughtChosen:=False;

vcbChessMouseDown (Sender, Button, Shift, X, Y);

End;

End;

End;

end;

procedure TfmCheckers. vcbChessMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Var

xP, yP: Integer;

Moves, Strikes, Strickens: TList;

begin

vcbChess. GetCellNumberByCoord (X, Y, xP, yP);

If IsDraughtChosen Then // Если Π΅ΡΡ‚ΡŒ выбранная шашка

Begin

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ: ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΡˆΠ°Π³Π½ΡƒΡ‚ΡŒ сюда

If vcbChess. Board. GetDraught (xP, yP)<>nil Then Exit;

// ΠšΠ»Π΅Ρ‚ΠΊΠ° пустая

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ…ΠΎΠ΄Π° Π² ΡΡ‚Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

vcbChess. Board. FindMoves (DraughtPosition.X, DraughtPosition. Y, Moves, Strikes, Strickens);

If Strikes. Count=0 Then // НСт Ρ€ΡƒΠ±ΠΊΠΈ — пытаСмся просто Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ

Begin

If CheckPosition (xP, yP, Moves)>=0 Then // Π₯ΠΎΠ΄ Π²Π΅Ρ€Π΅Π½!

Begin

vcbChess. Board. MoveDraught (DraughtPosition.X, DraughtPosition. Y, xP, yP);

IsDraughtChosen:=False;

vcbChess. Refresh;

vcbChessMouseMove (Sender, Shift, X, Y);

SwitchCurrentPlayer; // Π₯ΠΎΠ΄ сдСлан — ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅ΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠ°

CheckForWin;

End;

End

Else Begin // Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΡƒΠ±ΠΊΠΈ — ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ!

TryMakeStrike (xP, yP);

End;

ClearMoves (Moves);

ClearMoves (Strikes);

ClearMoves (Strickens);

End

Else Begin // Шашка Π½Π΅ Π΅Ρ‰Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π°

End;

end;

Procedure TfmCheckers. TrySelectNewDraught (x, y: Integer);

Var

Moves, Strikes, Strickens: TList;

StrikingDraughts:TList;

Begin

If vcbChess. Board. GetDraught (x, y)=nil Then Exit;

If vcbChess. Board. GetDraught (x, y).Side<>PlayerSide Then Exit;

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€ΡƒΠ±ΠΊΠΈ

StrikingDraughts:=vcbChess. Board. FindStrikingDraughts (PlayerSide);

If StrikingDraughts. Count>0 Then

Begin

If CheckPosition (x, y, StrikingDraughts)<0 Then

Begin

ClearMoves (StrikingDraughts);

Exit;

End;

End;

ClearMoves (StrikingDraughts);

DraughtPosition.X:=x;

DraughtPosition.Y:=y;

IsDraughtChosen:=True;

// ΠžΡ‚Ρ€ΠΈΡΡƒΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ…ΠΎΠ΄Ρ‹ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ обязаловки Ρ€ΡƒΠ±ΠΊΠΈ

vcbChess. Board. FindMoves (x, y, Moves, Strikes, Strickens);

If Strikes. Count=0 Then

vcbChess. DrawMoves (Moves, nil)

Else

vcbChess. DrawMoves (nil, Strikes);

ClearMoves (Moves);

ClearMoves (Strikes);

ClearMoves (Strickens);

End;

Procedure TfmCheckers. TryMakeStrike (x, y: Integer);

Var

Moves, Strikes, Strickens: TList;

CP:PCellPosition;

Begin

If Not (IsDraughtChosen) Then Exit;

vcbChess. Board. FindMoves (DraughtPosition.X, DraughtPosition. Y, Moves, Strikes, Strickens);

// Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π»ΠΈ Ρ€ΡƒΠ±ΠΊΠ° Π² Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

If CheckPosition (x, y, Strikes)>=0 Then // Π ΡƒΠ±ΠΊΠ° Π²Π΅Ρ€Π½Π°!

Begin // Ρ€ΡƒΠ±ΠΈΠΌ

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΡ€ΡƒΠ±Π»Π΅Π½Π½ΡƒΡŽ ΡˆΠ°ΡˆΠΊΡƒ

CP:=Strickens. Items [CheckPosition (x, y, Strikes)];

vcbChess. Board. DeleteDraught (CP^.X, CP^.Y);

// ΠŸΠ΅Ρ€Π΅ΡΠΊΠ°ΠΊΠΈΠ²Π°Π΅ΠΌ

vcbChess. Board. MoveDraught (DraughtPosition.X, DraughtPosition. Y, x, y);

DraughtPosition.X:=x; DraughtPosition. Y:=y;

ClearMoves (Moves);

ClearMoves (Strikes);

ClearMoves (Strickens);

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ€ΡƒΠ±ΠΊΠΈ

vcbChess. Board. FindMoves (DraughtPosition.X, DraughtPosition. Y, Moves, Strikes, Strickens);

If Strikes. Count>0 Then

Begin

StrikeMode:=True; // Установим Ρ€Π΅ΠΆΠΈΠΌ Ρ€ΡƒΠ±ΠΊΠΈ

End

Else Begin

StrikeMode:=False;

SwitchCurrentPlayer; // Π—Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π° Ρ€ΡƒΠ±ΠΊΠ° — ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠ°

End;

ClearMoves (Moves);

ClearMoves (Strikes);

ClearMoves (Strickens);

vcbChess. Refresh;

End;

If StrikeMode Then

Begin

IsDraughtChosen:=False;

TrySelectNewDraught (DraughtPosition.X, DraughtPosition. Y);

End;

CheckForWin;

End;

Procedure TfmCheckers. SwitchCurrentPlayer;

Begin

If CurrentPlayer=sdWhite Then CurrentPlayer:=sdBlack Else CurrentPlayer:=sdWhite;

If LocalGame Then PlayerSide:=CurrentPlayer;

If CurrentPlayer=sdWhite Then stCurrentPlayer. Caption:='Π‘Π΅Π»Ρ‹Π΅' Else stCurrentPlayer. Caption:='Π§Π΅Ρ€Π½Ρ‹Π΅';

If PlayerSide=CurrentPlayer Then

Begin

pnChessBoard. Enabled:=True;

End

Else Begin

pnChessBoard. Enabled:=False;

End;

End;

Function TfmCheckers. CheckForWin: Integer;

Begin

Result:=-1;

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΏΠΎΠ±Π΅Π΄Ρƒ ΠΏΠΎ ΡΡ€ΡƒΠ±Π°ΠΌ

If vcbChess. Board. CountDraughts (sdWhite)=0 Then

Begin

Result:=sdBlack;

End;

If vcbChess. Board. CountDraughts (sdBlack)=0 Then

Begin

Result:=sdWhite;

End;

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΏΠΎΠ±Π΅Π΄Ρƒ ΠΏΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ

If Not (vcbChess. Board. AbleToMove (CurrentPlayer)) Then

If CurrentPlayer=sdWhite Then Result:=sdBlack Else Result:=sdWhite;

If Result<0 Then Exit;

//Game Over!

miCancelGameClick (Self);

Case Result Of

sdWhite: Application. MessageBox ('ПобСдила ΠΊΠΎΠΌΠ°Π½Π΄Π° «Π‘Π΅Π»Ρ‹Ρ…» ', 'ПобСдили Π‘Π΅Π»Ρ‹Π΅!', MB_OK+MB_ICONINFORMATION);

sdBlack: Application. MessageBox ('ПобСдила ΠΊΠΎΠΌΠ°Π½Π΄Π° «Π§Π΅Ρ€Π½Ρ‹Ρ…» ', 'ПобСдили Π§Π΅Ρ€Π½Ρ‹Π΅!', MB_OK+MB_ICONINFORMATION);

End;

End;

procedure TfmCheckers. Timer1Timer (Sender: TObject);

begin

// Inc (PlayTime);

// stTimer. Caption:=Format (' % d:%.2d:%.2d', [PlayTime div 3600, (PlayTime mod 3600) div 60, (PlayTime mod 3600) mod 60]);

stTimer. Caption:=TimeToStr (Now-StartTime);

end;

procedure TfmCheckers. miStartLocalGameClick (Sender: TObject);

begin

LocalGame:=True;

lbedWhiteName. ReadOnly:=True;

lbedBlackName. ReadOnly:=True;

// PlayTime:=0;

StartTime:=Now;

PlayerSide:=sdWhite;

CurrentPlayer:=sdBlack;

IsDraughtChosen:=False;

StrikeMode:=False;

vcbChess. Board. Respawn;

vcbChess. Refresh;

pnChessBoard. Enabled:=True;

Timer1. Enabled:=True;

SwitchCurrentPlayer;

end;

procedure TfmCheckers. miCancelGameClick (Sender: TObject);

begin

Timer1. Enabled:=False;

pnChessBoard. Enabled:=False;

lbedWhiteName. ReadOnly:=False;

lbedBlackName. ReadOnly:=False;

Application. MessageBox ('Π˜Π³Ρ€Π° Π·ΠΊΠΎΠ½Ρ‡Π΅Π½Π°', 'Π˜Π³Ρ€Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°', MB_OK+MB_ICONINFORMATION);

end;

procedure TfmCheckers. miAboutClick (Sender: TObject);

begin

fmAbout. ShowModal;

end;

end.

Unit Draughts;

interface

Uses

Classes;

Type

TMove=Record

dX, dY: Integer;

End;

Const

ctWhite=0;

ctBlack=1;

ctNone=255;

sdWhite=0;

sdBlack=1;

kdSimple=0;

kdKing=1;

MoveNW=1; {}

MoveNE=2; {}

MoveSW=3; {}

MoveSE=4; {}

DraughtMoves: Array [1.4] Of TMove=((dX: — 1; dY:1), (dX:1; dY:1), (dX: — 1; dY: — 1), (dX:1; dY: — 1));

Type

TPossibleMoves=Set Of MoveNW. MoveSE;

PCellPosition=^TCellPosition;

TCellPosition=Record

X, Y: Integer;

End;

TDraught=Class (TObject)

Private

_Side: Integer; {Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π°: БСлая / ЧСрная}

_Kind: Integer; {Π’ΠΈΠΏ: ΠŸΡ€ΠΎΡΡ‚Π°Ρ / Π”Π°ΠΌΠΊΠ°}

PossibleMoves:TPossibleMoves; {Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ…ΠΎΠ΄Ρ‹}

Procedure SetSide (Value: Integer);

Procedure SetKind (Value: Integer);

Public

Constructor Create (sd: Integer);

Destructor Destroy; Override;

Property Side: Integer read _Side write SetSide;

Property Kind: Integer read _Kind write SetKind;

End;

TBoardCell=Record

CellType: Integer;

Draught:TDraught;

End;

TChessBoard=Class (TObject)

Private

Cells: Array [0.9, 0.9] Of TBoardCell;

Public

Constructor Create;

Destructor Destroy; Override;

Function AddDraught (x, y: Integer; Side: Integer; Kind: Integer=kdSimple):TDraught;

Procedure DeleteDraught (x, y: Integer);

Function GetDraught (x, y: Integer):TDraught;

Function SetDraught (x, y: Integer; Const Draught: TDraught):Boolean;

Procedure Clear;

Procedure Respawn;

Function MoveDraught (FromX, FromY, ToX, ToY: Integer):Boolean;

Procedure FindMoves (x, y: Integer; Var Moves, Strikes, Strickens: TList);

Function FindStrikingDraughts (Side: Integer):TList;

Function CountDraughts (Side: Integer):Integer;

Function AbleToMove (Side: Integer):Boolean;

End;

Procedure ClearMoves (Var Moves: TList);

Function CheckPosition (x, y: Integer; Const Positions: TList):Integer;

implementation

Procedure ClearMoves (Var Moves: TList);

Var

i: Integer;

CP:PCellPosition;

Begin

If Moves=nil Then Exit;

For i:=0 To Moves. Count-1 Do

Begin

CP:=Moves. Items[i];

Dispose (CP);

End;

Moves. Free;

Moves:=nil;

End;

Function CheckPosition (x, y: Integer; Const Positions: TList):Integer;

Var

i: Integer;

CP:PCellPosition;

Begin

Result:=-1;

If Positions=nil Then Exit;

For i:=0 To Positions. Count-1 Do

Begin

CP:=Positions. Items[i];

If ((CP^.X=x) And (CP^.Y=y)) Then

Begin

Result:=i;

Exit;

End;

End;

End;

Constructor TDraught. Create (sd: Integer);

Begin

Inherited Create;

Side:=sd;

Kind:=kdSimple;

End;

Destructor TDraught. Destroy;

Begin

Inherited Destroy;

End;

Procedure TDraught. SetSide (Value: Integer);

Begin

If Value=sdWhite Then

Begin

_Side:=sdWhite;

PossibleMoves:=[MoveNW, MoveNE]

End

Else Begin

_Side:=sdBlack;

PossibleMoves:=[MoveSW, MoveSE];

End;

If Kind=kdKing Then PossibleMoves:=[MoveNW, MoveNE, MoveSW, MoveSE];

End;

Procedure TDraught. SetKind (Value: Integer);

Begin

If Value=kdSimple Then

_Kind:=kdSimple

Else

_Kind:=kdKing;

SetSide (_Side);

End;

Constructor TChessBoard. Create;

Var

x, y: Integer;

Begin

Inherited Create;

For y:=0 To 9 Do

Begin

For x:=0 To 9 Do

Begin

If ((x=0) Or (y=0) Or (x=9) Or (y=9)) Then

Cells [y, x]. CellType:=ctNone

Else

If ((Odd (x) And Odd (y)) Or (Not (Odd (x)) And Not (Odd (y)))) Then

Cells [y, x]. CellType:=ctBlack

Else

Cells [y, x]. CellType:=ctWhite;

Cells [y, x]. Draught:=nil;

End;

End;

End;

Destructor TChessBoard. Destroy;

Begin

Clear;

Inherited Destroy;

End;

Function TChessBoard. AddDraught (x, y: Integer; Side: Integer; Kind: Integer=kdSimple):TDraught;

Begin

Result:=nil;

If ((Cells [y, x]. CellType=ctNone) Or (Cells [y, x]. Draught<>nil)) Then Exit;

Result:=TDraught. Create (Side);

Result. Kind:=Kind;

Cells [y, x]. Draught:=Result;

End;

Procedure TChessBoard. DeleteDraught (x, y: Integer);

Begin

If Cells [y, x]. Draught<>nil Then Cells [y, x]. Draught. Free;

Cells [y, x]. Draught:=nil;

End;

Function TChessBoard. GetDraught (x, y: Integer):TDraught;

Begin

Result:=Cells [y, x]. Draught;

End;

Function TChessBoard. SetDraught (x, y: Integer; Const Draught: TDraught):Boolean;

Begin

Result:=True;

Cells [y, x]. Draught:=Draught;

If Draught=nil Then Exit;

If (((Draught. Side=sdWhite) And (y=8)) Or ((Draught. Side=sdBlack) And (y=1))) Then

Draught. Kind:=kdKing;

End;

Procedure TChessBoard. Clear;

Var

x, y: Integer;

Begin

For y:=0 To 9 Do

For x:=0 To 9 Do

DeleteDraught (x, y);

End;

Procedure TChessBoard. Respawn;

Var

x: Integer;

Begin

Clear;

// Π‘Π΅Π»Ρ‹Π΅

For x:=1 To 8 Do

Begin

If Odd (x) Then

AddDraught (x, 2, sdWhite)

Else Begin

AddDraught (x, 1, sdWhite);

AddDraught (x, 3, sdWhite);

End

End;

// Π§Π΅Ρ€Π½Ρ‹Π΅

For x:=1 To 8 Do

Begin

If Not (Odd (x)) Then

AddDraught (x, 7, sdBlack)

Else Begin

AddDraught (x, 8, sdBlack);

AddDraught (x, 6, sdBlack);

End

End;

End;

Function TChessBoard. MoveDraught (FromX, FromY, ToX, ToY: Integer):Boolean;

Begin

Result:=False;

If ((Cells [FromY, FromX]. CellType=ctNone) Or (Cells [ToY, ToX]. CellType=ctNone)) Then Exit;

If ((GetDraught (FromX, FromY)=nil) Or (GetDraught (ToX, ToY)<>nil)) Then Exit;

SetDraught (ToX, ToY, GetDraught (FromX, FromY));

SetDraught (FromX, FromY, nil);

Result:=True;

End;

Procedure TChessBoard. FindMoves (x, y: Integer; Var Moves, Strikes, Strickens: TList);

Var

i: Integer;

dX, dY, dL: Integer;

P:PCellPosition;

MoveOver: Boolean;

Begin

Moves:=nil;

Strikes:=nil;

Strickens:=nil;

If Cells [y, x]. Draught=nil Then Exit;

Moves:=TList. Create;

Strikes:=TList. Create;

Strickens:=TList. Create;

For i:=1 To 4 Do

Begin

MoveOver:=False;

dX:=DraughtMoves[i]. dX;

dY:=DraughtMoves[i].dY;

dL:=0;

Repeat

Inc (dL);

If Cells [y+dY*dL, x+dX*dL]. CellType<>ctNone Then // МоТно Π»ΠΈ Π²ΡΡ‚Π°Π²Π°Ρ‚ΡŒ Π½Π° ΡΡ‚Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

Begin

If Cells [y+dY*dL, x+dX*dL]. Draught=nil Then // Если ΠΊΠ»Π΅Ρ‚ΠΊΠ° пустая, Ρ‚ΠΎ Π·Π°ΠΏΠΈΡˆΠ΅ΠΌ Ρ…ΠΎΠ΄…

Begin

// …запишСм Ρ…ΠΎΠ΄ Π² Ρ‚ΠΎΠΌ случаС, Ссли шашка ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡΡ‚Ρƒ сторону

If (i In Cells [y, x]. Draught. PossibleMoves) Then

Begin

New (P);

P^.X:=x+dX*dL; P^.Y:=y+dY*dL;

Moves. Add (P);

If Cells [y, x]. Draught. Kind=kdSimple Then MoveOver:=True; // Если это простая шашка, Ρ‚ΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ Ρ…ΠΎΠ΄

End

Else // Шашка Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡΡ‚ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ — Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ Ρ…ΠΎΠ΄

MoveOver:=True;

End

Else Begin // Если Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ стоит шашка, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΅Π΅

If Cells [y+dY*dL, x+dX*dL]. Draught. Side<>Cells [y, x]. Draught. Side Then

Begin // Если это чуТая шашка, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π½Π° ΡΡ€ΡƒΠ±

Inc (dL); // ΠŸΠ΅Ρ€Π΅ΡˆΠ°Π³Π½Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· ΡˆΠ°ΡˆΠΊΡƒ

If ((Cells [y+dY*dL, x+dX*dL]. CellType<>ctNone) And (Cells [y+dY*dL, x+dX*dL]. Draught=nil)) Then // МоТно Π»ΠΈ Π²ΡΡ‚Π°Π²Π°Ρ‚ΡŒ Π½Π° ΡΡ‚Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

Begin // Π ΡƒΠ±ΠΊΠ° ΡƒΠ΄Π°Π»Π°ΡΡŒ

// Π—Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΡ€ΡƒΠ±Π»Π΅Π½Π½ΡƒΡŽ ΡˆΠ°ΡˆΠΊΡƒ

New (P);

P^.X:=x+dX*(dL-1); P^.Y:=y+dY*(dL-1);

Strickens. Add (P);

// Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ Ρ€ΡƒΠ±ΠΊΡƒ

New (P);

P^.X:=x+dX*dL; P^.Y:=y+dY*dL;

Strikes. Add (P);

End;

End;

MoveOver:=True;

End;

End

Else // Достигнут Π±ΠΎΡ€Π΄ΡŽΡ€ — Π·Π°Π²Π΅Ρ€ΡˆΠΈΠΌ Ρ…ΠΎΠ΄

MoveOver:=True;

Until MoveOver;

End;

End;

Function TChessBoard. FindStrikingDraughts (Side: Integer):TList;

Var

x, y: Integer;

Moves, Strikes, Strickens: TList;

CP:PCellPosition;

Begin

Result:=TList. Create;

For y:=1 To 8 Do

For x:=1 To 8 Do

If GetDraught (x, y)<>nil Then

If GetDraught (x, y).Side=Side Then

Begin

FindMoves (x, y, Moves, Strikes, Strickens);

If Strikes. Count>0 Then

Begin

New (CP);

CP^.X:=x; CP^.Y:=y;

Result. Add (CP);

End;

ClearMoves (Moves);

ClearMoves (Strikes);

ClearMoves (Strickens);

End;

End;

Function TChessBoard. CountDraughts (Side: Integer):Integer;

Var

x, y: Integer;

Begin

Result:=0;

For y:=1 To 8 Do

For x:=1 To 8 Do

If GetDraught (x, y)<>nil Then

If GetDraught (x, y).Side=Side Then Inc (Result);

End;

Function TChessBoard. AbleToMove (Side: Integer):Boolean;

Var

x, y: Integer;

Moves, Strikes, Strickens: TList;

Begin

Result:=False;

For y:=1 To 8 Do

For x:=1 To 8 Do

If GetDraught (x, y)<>nil Then

If GetDraught (x, y).Side=Side Then

Begin

FindMoves (x, y, Moves, Strikes, Strickens);

If ((Moves. Count>0) Or (Strikes. Count>0)) Then Result:=True;

ClearMoves (Moves);

ClearMoves (Strikes);

ClearMoves (Strickens);

If Result Then Exit;

End;

End;

end.

unit VChessBoard;

interface

Uses

Types, Classes, ExtCtrls,

Draughts;

Type

TVisualChessBoard=Class (TImage)

Private

Procedure DrawDraught (x, y: Integer; Side: Integer; Kind: Integer);

Procedure DrawMove (x, y: Integer);

Procedure DrawStrike (x, y: Integer);

Public

Board:TChessBoard;

Constructor Create (AOwner:TComponent); Override;

Destructor Destroy; Override;

Procedure Repaint; Override;

Function GetCellRectByNumber (x, y: Integer):TRect;

Procedure GetCellNumberByCoord (xCoord, yCoord: Integer; Var x, y: Integer);

Procedure DrawMoves (Const Moves, Strikes: TList);

Procedure DrawMovesByNumber (x, y: Integer);

End;

implementation

Uses

Graphics;

Constructor TVisualChessBoard. Create (AOwner:TComponent);

Begin

Inherited Create (AOwner);

Board:=TChessBoard. Create;

// Repaint;

End;

Destructor TVisualChessBoard. Destroy;

Begin

Board. Free;

Inherited Destroy;

End;

Procedure TVisualChessBoard. Repaint;

Var

x, y: Integer;

Begin

Inherited Repaint;

{НарисуСм ΠΊΠ»Π΅Ρ‚ΠΊΠΈ}

Canvas. Brush. Style:=bsSolid;

For y:=1 To 8 Do

Begin

For x:=1 To 8 Do

Begin

If ((Odd (x) And Odd (y)) Or (Not (Odd (x)) And Not (Odd (y)))) Then

Canvas. Brush. Color:=clBlack

Else

Canvas. Brush. Color:=clWhite;

Canvas. FillRect (GetCellRectByNumber (x, y));

End;

End;

Canvas. Pen. Color:=clBlack;

Canvas. Pen. Style:=psSolid;

Canvas. Pen. Width:=1;

Canvas. Brush. Style:=bsClear;

// Canvas. Rectangle (0, (Height mod 8), Width — (Width mod 8), Height);

Canvas. Rectangle (0, 0, Width, Height);

{НарисуСм шашки}

If Board=nil Then Exit;

For y:=1 To 8 Do

Begin

For x:=1 To 8 Do

Begin

If Board. GetDraught (x, y)<>nil Then

DrawDraught (x, y, Board. GetDraught (x, y).Side, Board. GetDraught (x, y).Kind);

End;

End;

End;

Function TVisualChessBoard. GetCellRectByNumber (x, y: Integer):TRect;

Begin

Result. Left:=Trunc ((x-1)*(Width/8));

Result. Right:=Trunc (x*(Width/8));

Result. Top:=Height-Trunc (y*(Height/8));

Result. Bottom:=Height-Trunc ((y-1)*(Height/8));

End;

Procedure TVisualChessBoard. GetCellNumberByCoord (xCoord, yCoord: Integer; Var x, y: Integer);

Begin

x:=1+Trunc (xCoord/(Width/8));

y:=8-Trunc (yCoord/(Height/8));

End;

Procedure TVisualChessBoard. DrawDraught (x, y: Integer; Side: Integer; Kind: Integer);

Const

dR=5;

Var

R, tR: TRect;

Begin

Canvas. Pen. Color:=clSilver;

Canvas. Pen. Style:=psSolid;

Canvas. Pen. Width:=3;

Canvas. Brush. Style:=bsSolid;

If Side=sdWhite Then Canvas. Brush. Color:=clWhite Else Canvas. Brush. Color:=clBlack;

R:=GetCellRectByNumber (x, y);

Canvas. Ellipse (R. Left+dR, R. Top+dR, R. Right-dR, R. Bottom-dR);

If Kind=kdKing Then Begin

tR:=R;

R. Left:=tR. Left+((tR. Right-tR. Left) div 4);

R. Right:=tR. Right — ((tR. Right-tR. Left) div 4);

R. Top:=tR. Top+((tR. Bottom-tR. Top) div 4);

R. Bottom:=tR. Bottom — ((tR. Bottom-tR. Top) div 4);

Canvas. Ellipse®;

End;

End;

Procedure TVisualChessBoard. DrawMove (x, y: Integer);

Const

dR=5;

Var

R:TRect;

Begin

Canvas. Pen. Color:=clLime;

Canvas. Pen. Style:=psSolid;

Canvas. Pen. Width:=1;

Canvas. Brush. Color:=clLime;

Canvas. Brush. Style:=bsDiagCross;

R:=GetCellRectByNumber (x, y);

Canvas. Ellipse (R. Left+dR, R. Top+dR, R. Right-dR, R. Bottom-dR);

End;

Procedure TVisualChessBoard. DrawStrike (x, y: Integer);

Const

dR=5;

Var

R:TRect;

Begin

Canvas. Pen. Color:=clRed;

Canvas. Pen. Style:=psSolid;

Canvas. Pen. Width:=1;

Canvas. Brush. Color:=clRed;

Canvas. Brush. Style:=bsDiagCross;

R:=GetCellRectByNumber (x, y);

Canvas. Ellipse (R. Left+dR, R. Top+dR, R. Right-dR, R. Bottom-dR);

End;

Procedure TVisualChessBoard. DrawMoves (Const Moves, Strikes: TList);

Var

CP:PCellPosition;

i: Integer;

Begin

If Moves<>nil Then

For i:=0 To Moves. Count-1 Do

Begin

CP:=Moves. Items[i];

DrawMove (CP^.X, CP^.Y);

End;

If Strikes<>nil Then

For i:=0 To Strikes. Count-1 Do

Begin

CP:=Strikes. Items[i];

DrawStrike (CP^.X, CP^.Y);

End;

End;

Procedure TVisualChessBoard. DrawMovesByNumber (x, y: Integer);

Var

Moves, Strikes, Strickens: TList;

Begin

Board. FindMoves (x, y, Moves, Strikes, Strickens);

DrawMoves (Moves, Strikes);

ClearMoves (Moves);

ClearMoves (Strikes);

ClearMoves (Strickens);

End;

end.

unit About;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls, ShellApi;

type

TfmAbout = class (TForm)

bbOk: TBitBtn;

lbTitle: TLabel;

memAbout: TMemo;

Label1: TLabel;

procedure bbOkClick (Sender: TObject);

procedure FormCreate (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

fmAbout: TfmAbout;

implementation

{$R *.DFM}

procedure TfmAbout. bbOkClick (Sender: TObject);

begin

Close;

end;

procedure TfmAbout. FormCreate (Sender: TObject);

begin

MemAbout. Text:=' ΠŸΠ ΠΠ’Π˜Π›Π Π˜Π“Π Π«. ';

MemAbout. Text:=memAbout. Text+' ';

MemAbout. Text:=memAbout. Text+'Π˜Π³Ρ€Π° ΠΈΠ΄Π΅Ρ‚ Π½Π° ΠΏΠΎΠ»Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 8 X 8 ΠΊΠ»Π΅Ρ‚ΠΎΠΊ, шашки Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ряда с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны. ';

MemAbout. Text:=memAbout. Text+'Π‘ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство шашСк Π² Π»ΡŽΠ±Ρ‹Ρ… направлСниях, простая ΠΌΠΎΠΆΠ΅Ρ‚ Π±ΠΈΡ‚ΡŒ Π½Π°Π·Π°Π΄, Π΄Π°ΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π»ΡŽΠ±ΠΎΠ΅ число ΠΏΠΎΠ»Π΅ΠΉ, Ρ†Π΅Π»ΡŒ ΠΈΠ³Ρ€Ρ‹ ΡΡŠΠ΅ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΠ΅Ρ€Π΅Ρ‚ΡŒ всС шашки ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°.';

MemAbout. Text:=memAbout. Text+'КаТдая ΠΈΠ· ΡΡ‚ΠΎΡ€ΠΎΠ½ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎ 12 шашСк. Шашки Ρ€Π°ΡΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ‚Ρ€Π΅Ρ… Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… ΠΊ ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌ, горизонталях. ';

MemAbout. Text:=memAbout. Text+'Π”Π²Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… ряда ΠΏΠΎΠ»Π΅ΠΉ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ свободными. Π—Π΄Π΅ΡΡŒ Π½Π° ΡΡ‚ΠΈΡ… полях, происходит сблиТСниС ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ соприкосновСниС противостоящих сил.;

MemAbout. Text:=memAbout. Text+' ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ ходят ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ, пСрСмСщая шашки своСго Ρ†Π²Π΅Ρ‚Π° ΠΏΠΎ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌ полям. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π±Π΅Π»Ρ‹Π΅.;

MemAbout. Text:=memAbout. Text+'Π’Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ всСх шашСк ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. ';

end;

end.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ