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

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

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

Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

Рис. 10.1.  Π Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ обобщСния

Π£ΠΆΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ класс, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π² Ρ†Π΅Π½Ρ‚Ρ€ рисунка - LIST_OF_BOOKS, экзСмпляр ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ прСдставляСт список ΠΊΠ½ΠΈΠ³. Π£ класса ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: put для вставки элСмСнта, remove для удалСния элСмСнта, count для подсчСта числа элСмСнтов ΠΈ Ρ‚.Π΄. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ обобщСния понятия LIST_OF_BOOKS.

[x]. Бписки ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ структур, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Из ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Π΄Π΅Ρ€Π΅Π²ΡŒΡ, стСки ΠΈ массивы. Π’ сравнСниС со списком LIST_OF_BOOKS, Π±ΠΎΠ»Π΅Π΅ абстрактным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° являСтся класс SET_OF_BOOKS (мноТСство ΠΊΠ½ΠΈΠ³). Π‘ΠΎΠ»Π΅Π΅ спСциализированным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ являСтся класс LINKED_LIST_OF_BOOKS, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ связный список ΠΊΠ½ΠΈΠ³ - спСциализированный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ списка. Π’Ρ€ΠΈ класса Π·Π°Π΄Π°ΡŽΡ‚ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π½Π° рисункС - Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ наслСдования.

[x]. Бписки ΠΊΠ½ΠΈΠ³ ΡΠ²Π»ΡΡŽΡ‚ΡΡ, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ случаСм списков ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Из ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ списки ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ², списки людСй, списки Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π­Ρ‚ΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π½Π° нашСм рисункС - Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ унивСрсализации, Ρ‚Π΅ΠΌΠ° нашСго изучСния Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части этой Π»Π΅ΠΊΡ†ΠΈΠΈ. Если Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ класса, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ классы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ LIST_OF_BOOKS ΠΈ LIST_OF_PEOPLE, Π½Π΅ ТСртвуя ΠΏΡ€ΠΈ этом Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ, вносимой статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя этими ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ - Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΉ вопрос для ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ОО-ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. Как Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ наслСдованиС ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ сопСрников ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ соратников, ΠΊΠΎΠ³Π΄Π° Ρ†Π΅Π»ΡŒΡŽ являСтся построСниС Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ ПО?10.1)

Данная лСкция посвящСна унивСрсализации, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Ρ… структур: массивы. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс, Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ класс, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс ΡΠ²Π»ΡΡŽΡ‚ΡΡ синонимами. Π’ΠΎ всСх случаях Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ классС с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΈΠΏ (класс).

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… классов

УнивСрсализация ΡƒΠΆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»Π°ΡΡŒ для классов. ΠœΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Π·ΠΎΡ€Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ использованию ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ матСматичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ класса - АВД, Π³Π΄Π΅ Π±Ρ‹Π»Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ опрСдСлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ АВД.

Π ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ АВД

Наш Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ АВД, STACK, Π±Ρ‹Π» объявлСн с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, ΠΊΠ°ΠΊ STACK [G]. Π›ΡŽΠ±ΠΎΠ΅ Π΅Π³ΠΎ использованиС заставляСт ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "фактичСский Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€", ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ³ΠΎ Π² стСкС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Имя G, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² спСцификации АВД, - Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ класса. Оно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ элСмСнты стСка ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ для всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… стСков. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ, вряд Π»ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ мноТСства классов: INTEGER_STACK, REAL_STACK ΠΈ Ρ‚.Π΄.

Π›ΡŽΠ±Ρ‹Π΅ АВД, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹: мноТСства, списки, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, массивы ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ классам, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ АВД.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ стСка, Π½ΠΎ ΡƒΠΆΠ΅ Π½Π΅ ΠΊΠ°ΠΊ АВД, Π° ΠΊΠ°ΠΊ класс. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ класс INTEGER_STACK, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ стСк ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° INTEGER. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ count (число элСмСнтов), put (Π²Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнта), item (элСмСнт Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π΅), remove (Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнта), empty (пустой Π»ΠΈ стСк?).

Π’ΠΈΠΏ INTEGER Π±ΡƒΠ΄Π΅Ρ‚ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… этого класса. НапримСр, это Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° для put ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° для item:


put (element: INTEGER) is

-- Π’Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ элСмСнт (Π² Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка).

do ... end

item: INTEGER is

-- Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка

do ... end



Π­Ρ‚ΠΈ появлСния Ρ‚ΠΈΠΏΠ° INTEGER ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΈΠ· ΠΏΡ€Π°Π²ΠΈΠ»Π° явного объявлСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ: всякий Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ сущности, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π΅Π΅ Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ element: INTEGER. Π—Π΄Π΅ΡΡŒ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ для запроса item, для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° element ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ put ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… сущностСй, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ элСмСнты стСка.

Как слСдствиС, придСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сорта стСка: INTEGER_STACK, REAL_STACK, POINT_STACK, BOOK_STACK... ВсС эти стСковыС классы Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ объявлСния Ρ‚ΠΈΠΏΠΎΠ² item, element ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… сущностСй. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ стСком Π½Π΅ зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° элСмСнтов стСка ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Для всСх, заинтСрСсованных Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании, Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ классов прСдставляСтся ΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° противорСчия Π΄Π²ΡƒΡ… основных Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Ρ… ΠΊ классам ΠΈ сформулированных Π² Π½Π°Ρ‡Π°Π»Π΅ этой ΠΊΠ½ΠΈΠ³ΠΈ.

[x]. ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ: сохранСниС прСимущСств бСзопасности Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ явного объявлСния Ρ‚ΠΈΠΏΠ°.

[x]. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ элСмСнт, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ понятия.

Роль Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π—Π°Ρ‡Π΅ΠΌ Π½Π°ΡΡ‚Π°ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° явном объявлСнии Ρ‚ΠΈΠΏΠΎΠ² (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ)? Π­Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ вопроса ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² этой ΠΊΠ½ΠΈΠ³Π΅ посвящСна ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ лСкция (лСкция 17). Но ΡƒΠΆΠ΅ сСйчас ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π²Π΅ основныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ОО-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°.

[x]. Π§ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ: явноС объявлСниС Ρ‡Π΅Ρ‚ΠΊΠΎ сообщаСт Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ прСдполагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ для Π°Π²Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊ ΠΈ для Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΅Π΅.

[x]. ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ: благодаря явному объявлСнию Ρ‚ΠΈΠΏΠΎΠ² компилятор смоТСт Π½Π°ΠΉΡ‚ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅Ρ‰Π΅ Π½Π° этапС компиляции, Π½Π΅ допуская ΠΈΡ… проявлСния ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. Π’ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… опСрациях ОО-вычислСний Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ x.f (a,..), Π³Π΄Π΅ Ρ… - Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° TX. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ возникновСния ошибок ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ: ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс TX ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° f; ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ Π±Ρ‹Ρ‚ΡŒ скрытым; количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ Π² описании класса; Ρ‚ΠΈΠΏ Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ. Π’ языкС Smalltalk, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ отсутствуСт статичСская типизация, любая такая ситуация ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΊΡ€Π°Ρ…Ρƒ Π½Π° этапС выполнСния с Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сообщСния: "Message not understood", Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ компилятор языка с явной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ пропустит ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ конструкции.

ΠšΠ»ΡŽΡ‡ ΠΊ надСТности - слСдованиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ, Π° Π½Π΅ Π»Π΅Ρ‡ΠΈΡ‚ΡŒ". ИсслСдования ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ исправлСния ошибки астрономичСски возрастаСт, ΠΊΠΎΠ³Π΄Π° затягиваСтся Π΅Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. БтатичСская типизация, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Ρ€Π°Π½Π½Π΅Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок, - Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт Π² Π±ΠΎΡ€ΡŒΠ±Π΅ Π·Π° Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ.

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


my_stack.put (my_circle)

my_account := my_stack.item

my_account.withdraw (5000)



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

БтатичСская типизация Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π½Π΅ΡƒΠ΄Π°Ρ‡. Π‘ΠΎΠ²ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ с Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ нас ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ унивСрсализации.

Π ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ классы

БогласованиС статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ с Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования для классов, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ структуры, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ стСка, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

[x]. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сущности, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ Π² классС стСка, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сущности, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ элСмСнты стСка.

[x]. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ класс Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ содСрТал Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½Π°ΠΌΠ΅ΠΊΠΎΠ² Π½Π° Ρ‚ΠΈΠΏ элСмСнта стСка, ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для построСния стСков с элСмСнтами ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².