ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ рСализация ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° основС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка

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

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ рСализация ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° основС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° По ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ На Ρ‚Π΅ΠΌΡƒ:

" ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ рСализация ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка"

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. ВСорСтичСскоС описаниС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ
  • 2. ОписаниС основных понятий ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ООП
  • Π˜ΡΡ‚ΠΎΡ€ΠΈΡ
  • Π“Π»Π°Π²Π½Ρ‹Π΅ понятия ΠΈ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΠΈ
  • ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия
  • Абстракция Π΄Π°Π½Π½Ρ‹Ρ…
  • Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ
  • Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • НаслСдованиС
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ
  • ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ООП
  • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ
  • ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
  • Поля Π΄Π°Π½Π½Ρ‹Ρ…
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹
  • 3. ОписаниС всСх Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… классов
  • 4. ОписаниС дСмонстрационного модуля с Ρ…арактСристикой ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… стандартных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²
  • ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²
  • ОписаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²
  • 5. ОписаниС структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹: ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Π²Ρ‹ΠΊΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ созданиС Π½Π°Π±ΠΎΡ€Π° собствСнных взаимосвязанных классов для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ:

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… способна Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‚Ρ€Ρ‘Ρ… Ρ‚ΠΈΠΏΠΎΠ²:

Β· Π“ΠΎΡΡ‚ΡŒ

Β· ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ

Β· Администратор

ВрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Слях

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности:

Β· Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Β· Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Β· Π’Ρ‹Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅

Β· Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²ΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π΅

Β· Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сохранСнных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ.

1. ВСорСтичСскоС описаниС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

ДинамичСская рСализация Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ стСка ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, основана Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ памяти для элСмСнтов списка. ЛогичСская ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ элСмСнтов списка создаСтся ссылочными ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ с Π°Π΄Ρ€Π΅ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов (послСдний элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ ссылку nil).

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅ для удобства Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ список ВБЕГДА содСрТит хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ элСмСнт-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с Π°Π΄Ρ€Π΅ΡΠΎΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта списка. Π­Ρ‚ΠΎ позволяСт ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ добавлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… элСмСнтов ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. АдрСс элСмСнта-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° задаСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ pHead. Π­Ρ‚Π° пСрСмСнная устанавливаСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ создании списка ΠΈ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΠΠ• измСняСтся. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ основных дСйствий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылочныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

НСобходимыС объявлСния:

type pDinItem = ^ TDinItem; {ссылочный Ρ‚ΠΈΠΏ для адрСсации элСмСнтов списка}

TDinItem = record

{Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ структуру элСмСнта списка}

inf: <οΏ½Ρ‚ΠΈΠΏ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ части>;

next: pDinItem; {адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта}

end;

var pHead: pDinItem;

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого списка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

Β· Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ: new (pHead);

Β· установку пустой ссылочной части Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°: pHead^. next: = nil;

ΠŸΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡƒ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌΡƒ практичСски Π½Π΅ ΠΎΡ‚личаСтся ΠΎΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Поиск Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

Β· установку Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля Π² Π°Π΄Ρ€Π΅Ρ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта списка

Β· ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ ΡΠΏΠΈΡΠΊΡƒ с Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π»ΠΈΠ±ΠΎ ΠΏΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ части элСмСнта с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π»ΠΈΠ±ΠΎ ΠΏΠΎ Π΄ΠΎΡΡ‚ΠΈΠΆΠ΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ†Π° списка

Β· послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ поиска

pCurrent: = pHead^. next;

while (pCurrent <> nil) and (pCurrent^. inf <> `Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅')

do pCurrent: = pCurrent^. next;

if pCurrent = nil then `Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π΅Ρ‚' else `элСмСнт Π½Π°ΠΉΠ΄Π΅Π½';

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

Β· поиск удаляСмого элСмСнта с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ адрСса элСмСнта-ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ° (для этого вводится Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ссылочная пСрСмСнная pPrev, инициированная адрСсом Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°)

Β· Ссли удаляСмый элСмСнт Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся ссылочная Ρ‡Π°ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ°:

pPrev^. next: = pCurrent^. Next

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

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠŸΠžΠ‘Π›Π• Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

Β· поиск Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля pCurrent

Β· Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ указатСля pTemp

Β· Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта, Π² Ρ‡Π°ΡΡ‚ности — настройка ссылочной части

pTemp^. next: = pCurrent^. next;

Β· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ссылочной части Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта Π½Π° Π°Π΄Ρ€Π΅Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта

pCurrent^. next: = pTemp;

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠŸΠ•Π Π•Π” Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

Β· поиск Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта с ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ элСмСнта-ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ° (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ pCurrent ΠΈ pPrev)

Β· Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ указатСля pTemp

Β· Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта, Π² Ρ‡Π°ΡΡ‚ности — настройка ссылочной части: pTemp^. next: = pCurrent;

Β· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ссылочной части элСмСнта-ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ° Π½Π° Π°Π΄Ρ€Π΅Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта: pPrev^. next: = pTemp;

Если ΠΏΡ€ΠΈ использовании списка часто приходится Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты Π² ΠΊΠΎΠ½Ρ†Π΅ списка, Ρ‚ΠΎ Π΄Π»Ρ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ расходов Π½Π° ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ всСго списка ΠΌΠΎΠΆΠ½ΠΎ ввСсти Π²Ρ‚ΠΎΡ€ΠΎΠΉ основной ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ — Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ элСмСнт списка. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ удалСния ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ для отслСТивания этого указатСля.

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

ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ список

2. ОписаниС основных понятий ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ООП

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ

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

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

Π“Π»Π°Π²Π½Ρ‹Π΅ понятия ΠΈ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΠΈ

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

НаличиС инкапсуляции достаточно для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΡΡ‚ΠΈ языка программирования, Π½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ориСнтированности — для этого трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ наслСдования.

Но Π΄Π°ΠΆΠ΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ инкапсуляции ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ язык программирования Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ООП. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСимущСства ООП ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π² ΡΠ·Ρ‹ΠΊΠ΅ программирования Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ.

Π―Π·Ρ‹ΠΊ Self, соблюдая ΠΌΠ½ΠΎΠ³ΠΈΠ΅ исходныС полоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, Π²Π²Ρ‘Π» Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ классам понятиС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, ΠΏΠΎΠ»ΠΎΠΆΠΈΠ² Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒΡΡ ΠΏΠΎΠ΄Π²ΠΈΠ΄ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ.

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

Абстракция Π΄Π°Π½Π½Ρ‹Ρ…

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

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

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

Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

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

НаслСдованиС

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

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ООП

По ΠΌΠ½Π΅Π½ΠΈΡŽ Алана КСя, создатСля языка Smalltalk, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· «ΠΎΡ‚Ρ†ΠΎΠ²-основатСлСй» ООП, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π½Π°Π±ΠΎΡ€Π΅ основных ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² (цитируСтся ΠΏΠΎ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π’. Π‘Π°Π΄Π΄Π°).

Всё являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

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

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая состоит ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся прСдставитСлСм (экзСмпляром) класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’ ΠΊΠ»Π°ΡΡΠ΅ задаётся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π΅ΠΌ самым всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ дСйствия.

ΠšΠ»Π°ΡΡΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΊΠΎΡ€Π½Π΅ΠΌ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ наслСдования. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, связанноС с ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€Π°ΠΌΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ класса, автоматичСски доступны Π»ΡŽΠ±ΠΎΠΌΡƒ классу, располоТСнному Π½ΠΈΠΆΠ΅ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ичСском Π΄Π΅Ρ€Π΅Π²Π΅.

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

Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ систСмы обСспСчиваСтся Π·Π° ΡΡ‡Ρ‘Ρ‚ Ρ‡Ρ‘Ρ‚ΠΊΠΎΠ³ΠΎ раздСлСния отвСтствСнности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π·Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚), ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ опрСдСлСния интСрфСйсов ΠΌΠ΅ΠΆΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ взаимодСйствия ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ изолированности Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½Π΅ΠΉ срСды (инкапсуляции).

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

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

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

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

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

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

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

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

Поля Π΄Π°Π½Π½Ρ‹Ρ…

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

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

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

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

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

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ обСспСчиваСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ срСдствами:

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

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

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

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

3. ОписаниС всСх Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… классов

Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы:

Β· user — Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ абстрактный класс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для всСх свойствами ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅

Β· guest — ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΎΡ‚ user, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Β· defUser — ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΎΡ‚ user, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»e ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Β· admin — ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΎΡ‚ defUser, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ удалСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Β· listElement — класс элСмСнта ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π˜ΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ поля: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса user, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт (Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса listElement).

Β· Container — класс-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка, Π½Π΅Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΠΎΠ³ΠΎ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ списка (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса listElement) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ послС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΌΠ΅Ρ‚ΠΎΠ΄ удалСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сохранСния Π² Ρ„Π°ΠΉΠ» ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

Π’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ хранятся Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса guest, defUser ΠΈΠ»ΠΈ admin, Ρ‡Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ проявлСниС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°.

4. ОписаниС дСмонстрационного модуля с Ρ…арактСристикой ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… стандартных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π”Π°Π½Π½Ρ‹ΠΉ курсовой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ разрабатывался Π² ΡΡ€Π΅Π΄Π΅ программирования Visual Studio. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ System. Windows. Forms:

Β· dataGridView — для дСмонстрации ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° ΡΠΊΡ€Π°Π½Π΅, содСрТит столбцы: Ρ‚ΠΈΠΏ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, имя, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΏΡ€Π°Π²Π° доступа.

Β· menuStrip — для создания мСню, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ осущСствляСтся взаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Β· openFileDialog — для открытия Ρ„Π°ΠΉΠ»Π° ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Β· saveFileDialog — для сохранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅.

ОписаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

dataGridView.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ dataGridView прСдставляСт собой Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ячСйки ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТат строки символов. Π‘ dataGridView класса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΡ€ΠΈ нСобходимости ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. dataGridView Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ кэш Π΄Π°Π½Π½Ρ‹Ρ…, это просто прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ…. КаТдая Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для управлСния фактичСскими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

menuStrip.

МСню обСспСчиваСт ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ способ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ поля со ΡΠΏΠΈΡΠΊΠΎΠΌ, списки, Ρ€Π°Π΄ΠΈΠΎ-ΠΊΠ½ΠΎΠΏΠΊΠΈ, счСтчики, ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов. Если ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню выполняСт дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡƒΠ½ΠΊΡ‚ мСню ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‚ΠΎ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ дСйствия.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° мСню содСрТит ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько мСню ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, зависит ΠΎΡ‚ ΠΌΠ΅ΡΡ‚Π° — ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΎΠΊΠ½Π°. Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ мСню являСтся мСню, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠΊ ΠΌΡ‹ΡˆΠΊΠΎΠΉ. Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ мСню появляСтся ΠΏΠΎΠ΄ курсором.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ menuStrip (МСню) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для добавлСния ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ мСню, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ ΠΎΠ±Ρ…одится практичСски Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows. menuStrip ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ строку мСню ΠΈ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ список Π² Ρ„ΠΎΡ€ΠΌΠ΅. МСню прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ объСдинСния мСню Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΠΎΡ€ΠΌ.

ПослС установки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню (ToolStripMenuItem) ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню (ToolStripMenuItem).

openFileDialog.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ openFileDialog Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ открытия Π² Ρ„Π°ΠΉΠ». ΠŸΡ€ΠΈ запускС этого Π΄ΠΈΠ°Π»ΠΎΠ³Π° появляСтся ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ имя ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ закрытия Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Open) Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° возвращаСтся Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π°.

saveFileDialog.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ saveFileDialog Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ сохранСния Π² Ρ„Π°ΠΉΠ». ΠŸΡ€ΠΈ запускС этого Π΄ΠΈΠ°Π»ΠΎΠ³Π° появляСтся ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ имя сохраняСмого Ρ„Π°ΠΉΠ»Π°. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ закрытия Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Save) Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° возвращаСтся Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π°.

Π’ΠΎΡ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° внСшнСго Π²ΠΈΠ΄Π° стандартного Π΄ΠΈΠ°Π»ΠΎΠ³Π° открытия Ρ„Π°ΠΉΠ»Π°:

5. ОписаниС структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· 2 Ρ„ΠΎΡ€ΠΌ ΠΈ 2 Π΄ΠΈΠ°Π»ΠΎΠ³Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ² user, guest, defUser, admin, listElement ΠΈ Container.

Основная Ρ„ΠΎΡ€ΠΌΠ° Form1 слуТит для ΠΏΠΎΠΊΠ°Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ с Π½ΠΈΠΌ всСх дСйствий, прСдусмотрСнных Π² Π·Π°Π΄Π°Π½ΠΈΠΈ. Она содСрТит ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ dataGridView, menuStrip, openFileDialog, saveFileDIalog.

Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³ userForm ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания ΠΏΠΎΠ»Π΅ΠΉ создаваСмого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для Π²Π²ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ textBox. Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° создаваСмого Ρ„Π°ΠΉΠ»Π° слСдуСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ (для гостя) ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ (для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€Π°) поля, ΠΎΠΊΠ½ΠΎ создаСтся динамичСски Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π°.

6) ΠŸΠΎΠ»Π½Ρ‹ΠΉ листинг ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌΠΈ коммСнтариями:

user. cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace курсовая_2курс

{

abstract class user

{

private string name, rights;

private user next = null;

public user (string Name, string Rights)

{

this. Name = Name;

this. Rights = Rights;

}

public string Name

{

get

{

return this. name;

}

set

{

this. name = value;

}

}

public string Rights

{

get

{

return this. rights;

}

set

{

this. rights = value;

}

}

public user Next

{

get

{

return this. next;

}

set

{

this. next = value;

}

}

abstract public string show ();

}

}

admin. cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace курсовая_2курс

{

class admin: defUser

{

public admin (string Name, string Rights, string Password): base (Name, Rights, Password)

{

}

public void deleteUser (defUser user) { /*. */ }

public override string show ()

{

string str = «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ «+ this. Name + «» + this. Rights + «» + this. Password;

return str;

}

}

}

defUser. cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace курсовая_2курс

{

class defUser: user

{

private string password;

public defUser (string Name, string Rights, string Password): base (Name, Rights)

{

this. Password = Password;

}

public string Password

{

get

{

return this. password;

}

set

{

this. password = value;

}

}

public override string show ()

{

string str = «ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ «+ this. Name + «» + this. Rights + «» + this. Password;

return str;

}

}

}

guest. cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace курсовая_2курс

{

class guest: user

{

public guest (string Name, string Rights): base (Name, Rights)

{

}

public override string show ()

{

string str = «Π“ΠΎΡΡ‚ΡŒ «+ this. Name + «» + this. Rights;

return str;

}

}

}

elementList. cs

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace курсовая_2курс

{

class listElement

{

private listElement next;

private user info;

public listElement ()

{

this. Next = null;

}

public listElement (user User)

{

this. Info = User;

this. Next = null;

}

public listElement Next

{

get { return this. next; }

set { this. next = value; }

}

public user Info

{

get { return this. info; }

set { this. info = value; }

}

}

}

Container. cs

using System;

using System. IO;

using System. Collections. Generic;

using System. Security. Cryptography;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace курсовая_2курс

{

class Container

{

private listElement head;

#region ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

public Container ()

{

this. head = new listElement ();

}

#endregion

#region Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ послС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ

public void addUserAfter (user User, user afterUser)

{

listElement iterator, newElement;

bool find;

newElement = new listElement (User);

find = false;

for (iterator = head. Next; iterator! = null; iterator = iterator. Next)

{

if (iterator! = null && iterator. Info == afterUser && afterUser! = null)

{

find = true;

break;

}

}

if (find)

{

newElement. Next = iterator. Next;

iterator. Next = newElement;

}

else

head. Next = newElement;

}

#endregion

#region Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ

public bool addUserBefore (user User, user beforeUser)

{

listElement iterator, tmp, newElement;

bool find;

newElement = new listElement (User);

find = false;

tmp = null;

if (head. Next == null || head. Info == beforeUser)

{

newElement. Next = head. Next;

head. Next = newElement;

}

else

{

for (iterator = head. Next; iterator! = null; iterator = iterator. Next)

{

if (iterator. Info == beforeUser)

{

find = true;

break;

}

tmp = iterator;

}

if (find)

{

tmp. Next = newElement;

newElement. Next = iterator;

}

else

return false;

}

return true;

}

#endregion

#region Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

public bool deleteUser (user User)

{

listElement iterator, tmp;

bool find;

find = false;

tmp = null;

if (head. Next! = null)

{

if (head. Next. Info == User)

{

head. Next = head. Next. Next;

}

else

{

for (iterator = head. Next; iterator! = null; iterator = iterator. Next)

{

if (iterator. Info == User)

{

find = true;

break;

}

tmp = iterator;

}

if (find)

{

if (iterator. Next! = null)

tmp. Next = iterator. Next;

else

tmp. Next = null;

}

else

return false;

}

return true;

}

else

return false;

}

#endregion

#region Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ» 1.

public void saveToFile ()

{

listElement tmp;

try

{

// FileStream outPutFile = new FileStream («D: \users. txt», FileMode. OpenOrCreate, FileAccess. Write);

// StreamWriter sw = new StreamWriter (outPutFile);

File. Delete («D: \users. txt»);

using (StreamWriter sw = File. AppendText («D: \users. txt»))

{

tmp = this. head. Next;

while (tmp! = null)

{

try

{

sw. WriteLine (tmp. Info. show (), Encoding. GetEncoding (1251));

tmp = tmp. Next;

}

catch (IOException err)

{

MessageBox. Show (err. Message);

}

}

}

// sw. Close ();

}

catch (IOException err)

{

MessageBox. Show (err. Message);

}

}

#endregion

#region Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ» 2.

public void saveToFile (string fName)

{

listElement tmp;

try

{

if (File. Exists (fName))

File. Delete (fName);

using (StreamWriter sw = File. AppendText (fName))

{

tmp = this. head. Next;

while (tmp! = null)

{

try

{

sw. WriteLine (Encrypt (tmp. Info. show (), «Passpord11», «Password22», «SHA1″, 2,» 16CHARSLONG12345″, 256), Encoding. GetEncoding (1251));

tmp = tmp. Next;

}

catch (IOException err)

{

MessageBox. Show (err. Message);

}

}

}

}

catch (IOException err)

{

MessageBox. Show (err. Message);

}

}

#endregion

#region Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° 1.

public void readFromFile ()

{

try

{

StreamReader inputFile = File. OpenText («D: \users. txt»);

string read = null, userParams, Name, Password, Rights;

user userN = null, userBefore = null;

while ((read = inputFile. ReadLine ())! = null)

{

string [] split = read. Split (new Char [] { ' ', ',', '. ', ': ', '; ' });

userParams = split. Trim ();

Name = split. Trim ();

Rights = split. Trim ();

switch (userParams)

{

case «Π“ΠΎΡΡ‚ΡŒ» :

userN = new guest (Name, Rights);

break;

case «ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ» :

Password = split. Trim ();

userN = new defUser (Name, Rights, Password);

break;

case «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€» :

Password = split. Trim ();

userN = new admin (Name, Rights, Password);

break;

}

this. addUserAfter (userN, userBefore);

userBefore = userN;

}

inputFile. Close ();

}

catch (IOException err)

{

MessageBox. Show (err. Message);

}

}

#endregion

#region Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° 2.

public void readFromFile (string fName)

{

try

{

StreamReader inputFile = File. OpenText (fName);

string read = null, userParams, Name, Password, Rights;

user userN = null, userBefore = null;

while ((read = inputFile. ReadLine ())! = null)

{

read = Decrypt (read, «Passpord11», «Password22», «SHA1″, 2,» 16CHARSLONG12345″, 256);

string [] split = read. Split (new Char [] { ' ', ',', '. ', ': ', '; ' });

userParams = split. Trim ();

Name = split. Trim ();

Rights = split. Trim ();

switch (userParams)

{

case «Π“ΠΎΡΡ‚ΡŒ» :

userN = new guest (Name, Rights);

break;

case «ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ» :

Password = split. Trim ();

userN = new defUser (Name, Rights, Password);

break;

case «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€» :

Password = split. Trim ();

userN = new admin (Name, Rights, Password);

break;

}

this. addUserAfter (userN, userBefore);

userBefore = userN;

}

inputFile. Close ();

}

catch (IOException err)

{

MessageBox. Show (err. Message);

}

}

#endregion

#region ΠœΠ΅Ρ‚ΠΎΠ΄ show

public void show (DataGridView table)

{

if (this. head. Next! = null)

{

listElement tmp = this. head. Next;

while (tmp! = null)

{

if (tmp. Info is admin)

table. Rows. Add («ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€», tmp. Info. Name, (tmp. Info as admin). Password, tmp. Info. Rights);

else if (tmp. Info is guest)

table. Rows. Add («Π“ΠΎΡΡ‚ΡŒ», tmp. Info. Name, «», tmp. Info. Rights);

else if (tmp. Info is defUser)

table. Rows. Add («ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ», tmp. Info. Name, (tmp. Info as defUser). Password, tmp. Info. Rights);

tmp = tmp. Next;

}

}

}

#endregion

#region Поиск ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

public user search (string sName)

{

if (this. head. Next! = null)

{

listElement tmp = this. head. Next;

while (tmp! = null)

{

if (tmp. Info. Name == sName)

return tmp. Info;

tmp = tmp. Next;

}

}

return null;

}

#endregion

#region Static Functions

// /

// / Encrypts a string

// /

// / Text to be encrypted

// / Password to encrypt with

// / Salt to encrypt with

// / Can be either SHA1 or MD5

// / Number of iterations to do

// / Needs to be 16 ASCII characters long

// / Can be 128, 192, or 256

// / An encrypted string

public string Encrypt (string plainText, string password,

string salt = «Kosher», string hashAlgorithm = «SHA1» ,

int passwordIterations = 2, string initialVector = «OFRna73m*aze01xY» ,

int keySize = 256)

{

if (string. IsNullOrEmpty (plainText))

return «» ;

byte [] initialVectorBytes = Encoding. ASCII. GetBytes (initialVector);

byte [] saltValueBytes = Encoding. ASCII. GetBytes (salt);

byte [] plainTextBytes = Encoding. UTF8. GetBytes (plainText);

PasswordDeriveBytes derivedPassword = new PasswordDeriveBytes (password, saltValueBytes, hashAlgorithm, passwordIterations);

byte [] keyBytes = derivedPassword. GetBytes (keySize / 8);

RijndaelManaged symmetricKey = new RijndaelManaged ();

symmetricKey. Mode = CipherMode. CBC;

byte [] cipherTextBytes = null;

using (ICryptoTransform encryptor = symmetricKey. CreateEncryptor (keyBytes, initialVectorBytes))

{

using (MemoryStream memStream = new MemoryStream ())

{

using (CryptoStream cryptoStream = new CryptoStream (memStream, encryptor, CryptoStreamMode. Write))

{

cryptoStream. Write (plainTextBytes, 0, plainTextBytes. Length);

cryptoStream. FlushFinalBlock ();

cipherTextBytes = memStream. ToArray ();

memStream. Close ();

cryptoStream. Close ();

}

}

}

symmetricKey. Clear ();

return Convert. ToBase64String (cipherTextBytes);

}

// /

// / Decrypts a string

// /

// / Text to be decrypted

// / Password to decrypt with

// / Salt to decrypt with

// / Can be either SHA1 or MD5

// / Number of iterations to do

// / Needs to be 16 ASCII characters long

// / Can be 128, 192, or 256

// / A decrypted string

public string Decrypt (string cipherText, string password,

string salt = «Kosher», string hashAlgorithm = «SHA1» ,

int passwordIterations = 2, string initialVector = «OFRna73m*aze01xY» ,

int keySize = 256)

{

if (string. IsNullOrEmpty (cipherText))

return «» ;

byte [] initialVectorBytes = Encoding. ASCII. GetBytes (initialVector);

byte [] saltValueBytes = Encoding. ASCII. GetBytes (salt);

byte [] cipherTextBytes = Convert. FromBase64String (cipherText);

PasswordDeriveBytes derivedPassword = new PasswordDeriveBytes (password, saltValueBytes, hashAlgorithm, passwordIterations);

byte [] keyBytes = derivedPassword. GetBytes (keySize / 8);

RijndaelManaged symmetricKey = new RijndaelManaged ();

symmetricKey. Mode = CipherMode. CBC;

byte [] plainTextBytes = new byte [cipherTextBytes. Length];

int byteCount = 0;

using (ICryptoTransform decryptor = symmetricKey. CreateDecryptor (keyBytes, initialVectorBytes))

{

using (MemoryStream memStream = new MemoryStream (cipherTextBytes))

{

using (CryptoStream cryptoStream = new CryptoStream (memStream, decryptor, CryptoStreamMode. Read))

{

byteCount = cryptoStream. Read (plainTextBytes, 0, plainTextBytes. Length);

memStream. Close ();

cryptoStream. Close ();

}

}

}

symmetricKey. Clear ();

return Encoding. UTF8. GetString (plainTextBytes, 0, byteCount);

}

#endregion

}

}

Form1. cs

using System;

using System. Collections. Generic;

using System. componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

using HotKeysLibrary;

namespace курсовая_2курс

{

internal partial class Form1: Form

{

private Container container;

private int RowIndex = 0, ColumnIndex;

private bool after, click, file = false, changed = false;

HotKeysManager manager = new HotKeysManager ();

#region ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Form1

public Form1 ()

{

InitializeComponent ();

OpenFileDialogInit ();

SaveFileDialogInit ();

this. container = new Container ();

this. container. show (this. dataGridView1);

}

#endregion

#region Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³Π° открытия Ρ„Π°ΠΉΠ»Π°

public void OpenFileDialogInit ()

this. openFileDialog = new OpenFileDialog ();

this. openFileDialog. Filter = «All files (*. d3g)

#endregion

#region Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³Π° сохранСния Ρ„Π°ΠΉΠ»Π°

public void SaveFileDialogInit ()

*. d3g" ;

this. saveFileDialog. Title = «Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅» ;

#endregion

#region МСню — Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ

private void onMenuClick_Create (object sender, EventArgs e)

{

userForm UserForm = new userForm ();

UserForm. ShowInTaskbar = false;

UserForm. StartPosition = FormStartPosition. CenterScreen;

UserForm. ShowDialog (this);

click = true;

}

#endregion

#region МСню — ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ

private void onMenuClick_Open (object sender, EventArgs e)

{

if (this. openFileDialog. ShowDialog () == DialogResult. OK)

{

this. container. readFromFile (this. openFileDialog. FileName);

this. container. show (this. dataGridView1);

this. file = true;

this. changed = false;

this. closeToolStripMenuItem. Enabled = true;

this. saveAsToolStripMenuItem. Enabled = true;

}

}

#endregion

#region МСню — Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ

private void onMenuSaveButton_Click (object sender, EventArgs e)

{

this. Save ();

}

private void Save ()

{

this. container. saveToFile (this. openFileDialog. FileName);

this. saveToolStripMenuItem. Enabled = false;

this. closeToolStripMenuItem. Enabled = true;

this. changed = false;

}

#endregion

#region МСню — Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ

private void onMenuSaveAsButton_Click (object sender, EventArgs e)

{

this. SaveAs ();

}

private void SaveAs ()

{

if (this. saveFileDialog. ShowDialog () == DialogResult. OK)

{

this. container. saveToFile (this. saveFileDialog. FileName);

this. saveToolStripMenuItem. Enabled = false;

this. closeToolStripMenuItem. Enabled = true;

this. file = true;

this. changed = false;

}

}

#endregion

#region МСню — Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ

private void onMenuClick_Close (object sender, EventArgs e)

{

if (this. changed)

{

DialogResult dialogResult = MessageBox. Show («Π”Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π° Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹. nΠ‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСнСния Π² Ρ„Π°ΠΉΠ»Π΅?», «Π˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΡ», MessageBoxButtons. YesNoCancel, MessageBoxIcon. Information);

if (dialogResult! = DialogResult. Cancel)

{

if (dialogResult == DialogResult. Yes)

this. container. saveToFile (this. openFileDialog. FileName);

this. clearTable ();

}

}

else

this. clearTable ();

}

#endregion

#region МСню — Π’Ρ‹Ρ…ΠΎΠ΄

private void onMenuExitButton_Click (object sender, EventArgs e)

{

this. Close ();

}

#endregion

#region ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

private void clearTable ()

{

while (dataGridView1. Rows. Count! = 0)

dataGridView1. Rows. Remove (dataGridView1. Rows [dataGridView1. Rows. Count — 1]);

this. file = false;

this. changed = false;

this. openFileDialog. FileName = null;

this. closeToolStripMenuItem. Enabled = false;

this. saveToolStripMenuItem. Enabled = false;

this. saveAsToolStripMenuItem. Enabled = false;

}

#endregion

#region Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ· userForm

public void onUserCreate (string userType, string userName, string userRights, string userPassword)

{

user newUser = null;

switch (userType)

{

case «Π“ΠΎΡΡ‚ΡŒ» :

newUser = new guest (userName, userRights);

break;

case «ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ» :

newUser = new defUser (userName, userRights, userPassword);

break;

case «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€» :

newUser = new admin (userName, userRights, userPassword);

break;

}

if (! this. click)

{

if (this. after)

{

this. dataGridView1. Rows. Insert (this. RowIndex + 1, userType, userName, userPassword, userRights);

user tmpUser = this. container. search (dataGridView1 [this. ColumnIndex, this. RowIndex]. Value. ToString ());

this. container. addUserAfter (newUser, tmpUser);

}

else

{

this. dataGridView1. Rows. Insert (this. RowIndex, userType, userName, userPassword, userRights);

user tmpUser = this. container. search (dataGridView1 [this. ColumnIndex, this. RowIndex]. Value. ToString ());

this. container. addUserBefore (newUser, tmpUser);

}

}

else

{

this. dataGridView1. Rows. Add (userType, userName, userPassword, userRights);

this. container. addUserAfter (newUser, null);

}

if (this. file)

{

this. changed = true;

this. saveToolStripMenuItem. Enabled = true;

}

else

this. saveAsToolStripMenuItem. Enabled = true;

}

#endregion

#region Клик «Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎ»

private void addBefore_Click (object sender, EventArgs e)

{

this. after = false;

this. click = false;

userForm UserForm = new userForm ();

UserForm. ShowInTaskbar = false;

UserForm. StartPosition = FormStartPosition. CenterScreen;

UserForm. ShowDialog (this);

}

#endregion

#region Клик «Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ послС»

private void addAfter_Click (object sender, EventArgs e)

{

this. after = true;

this. click = false;

userForm UserForm = new userForm ();

UserForm. ShowInTaskbar = false;

UserForm. StartPosition = FormStartPosition. CenterScreen;

UserForm. ShowDialog (this);

}

#endregion

#region Клик «ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ»

private void delete_Click (object sender, EventArgs e)

{

DialogResult dialogResult = MessageBox. Show («Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ?», «Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅», MessageBoxButtons. OKCancel, MessageBoxIcon. Question);

if (dialogResult == DialogResult. OK)

{

user tmpUser = this. container. search (dataGridView1 [this. ColumnIndex, this. RowIndex]. Value. ToString ());

if (this. container. deleteUser (tmpUser))

{

this. dataGridView1. Rows. RemoveAt (this. RowIndex);

if (this. file)

{

this. changed = true;

this. saveToolStripMenuItem. Enabled = true;

}

}

}

}

#endregion

#region ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ»ΠΈΠΊΠ° ΠΏΡ€Π°Π²ΠΎΠΉ ΠΌΡ‹ΡˆΠΊΠΎΠΉ ΠΏΠΎ ΡΡ‡Π΅ΠΉΠΊΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

private void context_Opening (object sender, CancelEventArgs e)

{

ContextMenuStrip tContextMenu = (ContextMenuStrip) sender;

Point tLocation = new Point (tContextMenu. Left, tContextMenu. Top);

tLocation = dataGridView1. PointToClient (Cursor. Position);

DataGridView. HitTestInfo tHitTestInfo = dataGridView1. HitTest (tLocation. X, tLocation. Y);

if (tHitTestInfo. Type == DataGridViewHitTestType. Cell)

{

this. ColumnIndex = 1;

this. RowIndex = tHitTestInfo. RowIndex;

dataGridView1 [tHitTestInfo. ColumnIndex, this. RowIndex]. Selected = true;

}

else

{

e. Cancel = true;

}

}

#endregion

#region Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹

private void FormClosing_Form1 (object sender, FormClosingEventArgs e)

{

#region Если Π±Ρ‹Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Ρ„Π°ΠΉΠ» ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅

if (this. file && this. changed)

{

DialogResult dialogResult = MessageBox. Show («Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅?», «Π˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΡ», MessageBoxButtons. YesNoCancel, MessageBoxIcon. Information);

if (dialogResult == DialogResult. Yes)

{

this. container. saveToFile (this. openFileDialog. FileName);

}

else if (dialogResult == DialogResult. Cancel)

e. Cancel = true;

}

#endregion

#region Если Ρ„Π°ΠΉΠ» Π½Π΅ Π±Ρ‹Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ Π²Π½Π΅ΡΠ΅Π½Ρ‹ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅

else if (dataGridView1. Rows. Count! = 0 &&! this. file)

{

DialogResult dialogResult = MessageBox. Show («Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅?», «Π˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΡ», MessageBoxButtons. YesNoCancel, MessageBoxIcon. Information);

if (dialogResult == DialogResult. Yes)

{

DialogResult dialogResultSave = this. saveFileDialog. ShowDialog ();

if (dialogResultSave == DialogResult. OK)

{

this. container. saveToFile (this. saveFileDialog. FileName);

this. clearTable ();

}

else if (dialogResultSave == DialogResult. Cancel)

e. Cancel = true;

}

else if (dialogResult == DialogResult. Cancel)

e. Cancel = true;

}

#endregion

}

#endregion

#region Π‘ΠΏΡ€Π°Π²ΠΊΠ°

private void Help_Click (object sender, EventArgs e)

{

MessageBox. Show («Π”Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹. nОно ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… цСлях! nnΠ’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» Ρ€Π°Π±ΠΎΡ‚Ρƒ студСнт Π³Ρ€ΡƒΠΏΠΏΡ‹ 4212 — Π“Π°Ρ€ΠΈΡ„ΡƒΠ»Π»ΠΈΠ½ Π˜Π»ΡŒΡˆΠ°Ρ‚. nΠŸΡ€ΠΈΠ½ΡΠ» Π΄ΠΎΡ†Π΅Π½Ρ‚ ΠΊ. Ρ‚. Π½.: Козин А. Н. nKazan © 2013 Π³ΠΎΠ΄», «Π‘ΠΏΡ€Π°Π²ΠΊΠ°», MessageBoxButtons. OK, MessageBoxIcon. Information);

}

#endregion

}

}

userForm. cs

using System;

using System. Collections. Generic;

using System. componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace курсовая_2курс

{

public partial class userForm: Form

{

public userForm ()

{

InitializeComponent ();

}

private void onCreateButton_Click (object sender, EventArgs e)

{

((Form1) this. Owner). onUserCreate (this. userTypeComboBox. Text, this. userNameTextBox. Text, this. userRightsComboBox. Text, this. userPasswordTextBox. Text);

this. Close ();

}

private void userType_SelectedIndexChanged (object sender, EventArgs e)

{

if (this. userTypeComboBox. Text == «ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ» || this. userTypeComboBox. Text == «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€»)

{

this. userPasswordLabel. Visible = true;

this. userPasswordTextBox. Visible = true;

}

else

{

this. userPasswordLabel. Visible = false;

this. userPasswordTextBox. Visible = false;

}

this. checkButton ();

}

private void userRights_SelectedIndexChanged (object sender, EventArgs e)

{

this. checkButton ();

}

private void userName_TextChanged (object sender, EventArgs e)

{

this. checkButton ();

}

private void onKeyPress_passwordField (object sender, KeyPressEventArgs e)

{

this. checkButton ();

}

private void checkButton ()

{

if (this. userRightsComboBox. Text. Length! = 0 && this. userNameTextBox. Text. Length! = 0)

this. userTypeComboBox. Text == «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€») && this. userPasswordTextBox. Text. Length! = 0)

this. userButton. Visible = true;

if (this. userTypeComboBox. Text == «Π“ΠΎΡΡ‚ΡŒ»)

this. userButton. Visible = true;

else

this. userButton. Visible = false;

}

private void onKeyPress_ComboBox (object sender, KeyPressEventArgs e)

{

if (e. KeyChar == 'b')

return;

e. Handled = true;

}

private void userType_TextUpdate (object sender, EventArgs e)

{

switch (this. userTypeComboBox. Text)

{

case «Π“ΠΎΡΡ‚ΡŒ» :

case «ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ» :

case «ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€» :

break;

default:

this. userTypeComboBox. Text = «» ;

break;

}

this. checkButton ();

}

private void userRights_TextUpdate (object sender, EventArgs e)

{

switch (this. userRightsComboBox. Text)

{

case «Π§Ρ‚Π΅Π½ΠΈΠ΅» :

case «Π§Ρ‚Π΅Π½ΠΈΠ΅/Π—Π°ΠΏΠΈΡΡŒ» :

case «Π§Ρ‚Π΅Π½ΠΈΠ΅/Π—Π°ΠΏΠΈΡΡŒ/Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅» :

break;

default:

this. userRightsComboBox. Text = «» ;

break;

}

this. checkButton ();

}

}

}

Form1. Designer. cs

namespace курсовая_2курс

{

partial class Form1

{

// /

// / ВрСбуСтся пСрСмСнная конструктора.

// /

private System.componentModel. IContainer components = null;

// /

// / ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ рСсурсы.

// /

// / истинно, Ссли управляСмый рСсурс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½; ΠΈΠ½Π°Ρ‡Π΅ Π»ΠΎΠΆΠ½ΠΎ.

protected override void Dispose (bool disposing)

{

if (disposing && (components! = null))

{

components. Dispose ();

}

base. Dispose (disposing);

}

#region Код, автоматичСски созданный конструктором Ρ„ΠΎΡ€ΠΌ Windows

// /

// / ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ конструктора — Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠΉΡ‚Π΅

// / содСрТимоС Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°.

// /

private void InitializeComponent ()

{

this.components = new System.componentModel. Container ();

this. menuStrip1 = new System. Windows. Forms. MenuStrip ();

this. Ρ„Π°ΠΉΠ»ToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();

this. createToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();

this. openToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();

this. saveToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();

this. saveAsToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();

this. closeToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();

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