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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 130

Автор Π‘Π΅Ρ€Ρ‚Ρ€Π°Π½ ΠœΠ΅ΠΉΠ΅Ρ€

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

[x]. Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ доступны Ρ‡Π΅Ρ€Π΅Π· Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ интСрфСйс.

[x]. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ тСхнология ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π² качСствС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ наслСдуСмого ПО.

[x]. ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, хотя ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, связанныС с этими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

[x]. Нотация Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСбольшой Π½Π°Π±ΠΎΡ€ инструкций: присваивания, Π²Ρ‹Π±ΠΎΡ€Π°, Ρ†ΠΈΠΊΠ»Π°, Π²Ρ‹Π·ΠΎΠ²Π°, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

[x]. ВыраТСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ общСпринятому ΡΡ‚ΠΈΠ»ΡŽ. Current - Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ экзСмпляр. НС Π±ΡƒΠ΄ΡƒΡ‡ΠΈ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ, Current Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒΡŽ присваивания.

[x]. НСстрогиС Π±ΡƒΠ»Π΅Π²Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ эквивалСнтны стандартным Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ±Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² случаях, ΠΊΠΎΠ³Π΄Π° стандартныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹.

[x]. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Π²Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ простыми Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌΠΈ классами.

[x]. РСгистр Π½Π΅Π·Π½Π°Ρ‡ΠΈΠΌ Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ…, хотя ΠΏΡ€Π°Π²ΠΈΠ»Π° стиля Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ соглашСния ΠΏΠΎ записи ΠΈΠΌΠ΅Π½.

УпраТнСния

Π£13.1 Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ классы

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

Π£13.2 ИзбСгая нСстрогих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ†ΠΈΠΊΠ» для поиска элСмСнта x Π² массивС a, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ нСстрогих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ЛСкция 14. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² наслСдованиС

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

ΠœΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ

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

Всякий комплСксный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ повторяСмости (repetition) ΠΈ измСнчивости (variation), ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π»Π΅ΠΊΡ†ΠΈΠΉ (см. Π»Π΅ΠΊΡ†ΠΈΡŽ 4). Для устранСния ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ пСрСписывания ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π°, Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊ потСрям Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, появлСнию ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠΉ ΠΈ ошибок, Π½ΡƒΠΆΠ½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΈΡΡƒΡ‰ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… структур - всСм тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌ, всСм Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ, всСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², - учитывая ΠΏΡ€ΠΈ этом ΠΌΠ½ΠΎΠ³ΠΈΠ΅ различия Π² характСристиках ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… случаСв.

ΠŸΡ€ΠΈ обСспСчСнии Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ (extendibility) прСимущСство описанной Π²Ρ‹ΡˆΠ΅ систСмы Ρ‚ΠΈΠΏΠΎΠ² состоит Π² Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ совмСстности Π²ΠΎ врСмя компиляции, Π½ΠΎ ΠΎΠ½Π° Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ Π·Π°ΠΊΠΎΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ элСмСнтов. НапримСр, нСльзя ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив, содСрТащий гСомСтричСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… совмСстных Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ POINT (ВОЧКА) ΠΈ SEGMENT(ΠžΠ’Π Π•Π—ΠžΠš).

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

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

Для объяснСния основных понятий рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ скорСС набросок этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π° Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ ΠΎΠ½ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС сущСствСнныС ΠΈΠ΄Π΅ΠΈ.

ΠœΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ трСбуСтся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π•Π΅ классы Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ гСомСтричСскиС абстракции: Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΈ, Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΡ€ΡƒΠ³ΠΈ, эллипсы, ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ ΠΈ Ρ‚. ΠΏ.

Рассмотрим Π²Π½Π°Ρ‡Π°Π»Π΅ класс, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ вычислСниС ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π°, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ пСрСнос ΠΈ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎΡ‚ класс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


indexing

description: "ΠœΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ числом Π²Π΅Ρ€ΡˆΠΈΠ½"

class POLYGON creation

...

feature -- Доступ

count: INTEGER

-- Число Π²Π΅Ρ€ΡˆΠΈΠ½

perimeter: REAL is

-- Π”Π»ΠΈΠ½Π° ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π°

do ... end

feature -- ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

display is

-- Π’Ρ‹Π²ΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π° экран.

do ... end

rotate (center: POINT; angle: REAL) is

-- ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° ΡƒΠ³ΠΎΠ» angle Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚ΠΎΡ‡ΠΊΠΈ center.

do

... Π‘ΠΌ. Π΄Π°Π»Π΅Π΅ ...

end

translate (a, b: REAL) is

-- Π‘Π΄Π²ΠΈΠ³ Π½Π° a ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, Π½Π° b ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

do ... end

... ОбъявлСния Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ...

feature {NONE} -- РСализация

vertices: LINKED_LIST [POINT]

-- Бписок Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

invariant

same_count_as_implementation: count = vertices.count

at_least_three: count >= 3

-- Π£ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Ρ€Π΅Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½ (см. ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π£14.2)

end



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

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ rotate. Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° осущСствляСт ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» Π²ΠΎΠΊΡ€ΡƒΠ³ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°. Для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° достаточно ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ.


rotate (center: POINT; angle: REAL) is

-- ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚ΠΎΡ‡ΠΊΠΈ center Π½Π° ΡƒΠ³ΠΎΠ» angle.

do

from

vertices.start

until

vertices.after

loop

vertices.item.rotate (center, angle)

vertices.forth

end

end



Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ эту ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ item ΠΈΠ· LINKED_LIST Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта списка. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ vertices ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ LINKED_LIST [POINT], Ρ‚ΠΎ vertices.item ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° rotate, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ для класса POINT Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ достаточно общСпринято - Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС rotate), ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… классов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ мноТСство ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ свой явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. (Π­Ρ‚ΠΎ ОО-Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ.)

Π‘ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Π° для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° вычислСния ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. ЕдинствСнный способ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° - это Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ всСм Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌ ΠΈ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρ‹ всСх Ρ€Π΅Π±Π΅Ρ€. Π’ΠΎΡ‚ возмоТная рСализация ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ perimeter:


perimeter: REAL is

-- Π‘ΡƒΠΌΠΌΠ° Π΄Π»ΠΈΠ½ Ρ€Π΅Π±Π΅Ρ€

local

this, previous: POINT

do

from

vertices.start; this := vertices.item

check not vertices.after end -- БлСдствиС условия at_least_three

until

vertices.is_last

loop

previous := this

vertices.forth

this := vertices.item

Result := Result + this.distance (previous)

end

Result := Result + this.distance (vertices.first)

end



Π’ этом Ρ†ΠΈΠΊΠ»Π΅ просто ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ сосСдними Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ. Ѐункция distance Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² классС POINT. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Result, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. Из класса LINKED_LIST ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: first Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка, start сдвигаСт курсор, Π½Π° этот ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, forth ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ, item Π²Ρ‹Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎΠ΄ курсором, is_last опрСдСляСт, являСтся Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт послСдним, after ΡƒΠ·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ курсор оказался Π·Π° послСдним элСмСнтом. Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ check ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ at_least_three обСспСчиваСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°. Он стартуСт Π² состоянии not after, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ элСмСнт vertices.item ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Допустимо ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ forth ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Π² состояниС, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° is_last.