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

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

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

class D inherit

B

C

select f end

feature

...

end



Π’ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ отдаСтся вСрсии класса B:


class D inherit

B

select bf end

C

feature

...

end



БинтаксичСски ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ select слСдуСт Π·Π° прСдлоТСниями rename, undefine ΠΈ redefine, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ (Π²Ρ‹Π±ΠΎΡ€ осущСствляСтся послС пСрСимСнования ΠΈ пСрСопрСдСлСния). ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ выдСлСния

Класс, наслСдовавший Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈ эффСктивныС вСрсии ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ° ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ²ΡˆΠΈΠΉ ΠΈΡ…, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ… Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ select.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ select устраняСт Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π· ΠΈ навсСгда. ΠŸΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ класса Π½Π΅Ρ‚ нСобходимости (ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹) ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ посрСдством select. Если, объСдиняя Π΄Π²Π° класса, Π²Ρ‹ Π½Π°Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ Π½Π° ряд ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· классов "ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π» Π²Π΅Ρ€Ρ…" (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ…. Π’ частности, Ρ‚Π°ΠΊ происходит Π² ситуации, ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€ΠΈΡ‡Π½ΠΎ Π½Π°Π·Π²Π°Π½Π½ΠΎΠΉ "Π±Ρ€Π°ΠΊ ΠΏΠΎ расчСту" (вспомнитС, ARRAYED_STACK - ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ STACK ΠΈ ARRAY), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ классы-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. (Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Base ΠΎΠ±Π° класса Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ (distant) ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ класса CONTAINER.) Π’ этом случаС ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ (STACK) слуТит источником спСцификаций, ΠΈ Π²Π°ΠΌ, Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚, захочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ (ΠΏΠΎΡ‡Ρ‚ΠΈ) всС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·Ρƒ.

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


SOME_PARENT

select all end



Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½: всС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, - Ρ‚ΠΎΡ‡Π½Π΅Π΅ Ρ‚Π΅ ΠΈΠ· Π½ΠΈΡ…, Ρ‡Ρ‚ΠΎ останутся послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… select, - Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ SOME_PARENT. ПослСднСС ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²ΠΏΡ€Π°Π²Π΅ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ родитСлям Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ исходной вСрсии ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ

(Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» посвящСн вСсьма спСцифичному вопросу, ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.)

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ наслСдования, ΠΌΡ‹ познакомились с простой конструкциСй Precursor, позволявшСй пСрСопрСдСляСмому ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ (хотя ΠΈ Π±ΠΎΠ»Π΅Π΅ "тяТСловСсному") Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠΌΡƒ Π² Ρ‚Π΅Ρ… Ρ€Π΅Π΄ΠΊΠΈΡ… случаях, ΠΊΠΎΠ³Π΄Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… срСдств Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚.

ВСрнСмся ΠΊ извСстному Π½Π°ΠΌ классу BUTTON - ΠΏΠΎΡ‚ΠΎΠΌΠΊΡƒ WINDOW, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΌΡƒ display:


display is

-- Показ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° экранС.

do

window_display

special_button_actions

end



Π³Π΄Π΅ window_display Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π° special_button_actions добавляСт элСмСнты, спСцифичСскиС для ΠΊΠ½ΠΎΠΏΠΊΠΈ, отобраТая, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ window_display Π² точности совпадаСт с WINDOW-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ display.

ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ window_display, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Precursor. Если ΠΌΠ΅Ρ‚ΠΎΠ΄ display ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классах, Ρ‚ΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ класс ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках: Precursor {WINDOW}. Π’ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ, ΠΏΡ€ΠΈΠ±Π΅Π³Π½ΡƒΠ² ΠΊ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ наслСдованию, заставив класс Button Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ Π΄Π²ΡƒΡ… классов Window:


indexing

WARNING: "Π­Ρ‚ΠΎ пСрвая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° - данная вСрсия Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°!"

class BUTTON inherit

WINDOW

redefine display end

WINDOW

rename display as window_display end

feature

...

end



Одна ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ наслСдования мСняСт имя display, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ, ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования BUTTON, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Один ΠΈΠ· Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ имя; Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π΅ Π±Ρ‹Π», Π½ΠΎ имСнуСтся Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ window_display.

Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π½Π΅ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ подвыраТСния select. Если, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‚ΠΎ запишСм:


indexing

note: "Π­Ρ‚ΠΎ (коррСктная!)схСма Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования,%

% ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ пСрСопрСдСляСмого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°"

class BUTTON inherit

WINDOW

redefine

display

select

display

end

WINDOW

rename

display as window_display

export

{NONE} window_display

end

feature

...

end



Если такая схСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ ряду ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ вмСстС. ΠŸΡ€ΠΈ этом Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ select all.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ export (см. Π»Π΅ΠΊΡ†ΠΈΡŽ 16) опрСдСляСт статус экспорта наслСдуСмых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² класса. Π’Π°ΠΊ, WINDOW ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ display, Π° BUTTON ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ window_display скрытым (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π² Π½Π΅ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ). Экспорт исходной вСрсии наслСдуСмого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Ссли ΠΎΠ½Π° Π½Π΅ соотвСтствуСт Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ класса.

Для скрытия всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… "Π² наслСдство" ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, слуТит запись export {NONE} all.

Π’Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ экспорта ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ скрытия исходных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ вСсьма распространСн, Π½ΠΎ ΠΎΡ‚Π½ΡŽΠ΄ΡŒ Π½Π΅ унивСрсалСн. НСрСдко классу наслСднику Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° (Ссли исходная вСрсия Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса).

Насколько ΠΏΠΎΠ»Π΅Π·Π½Π° такая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования для сохранСния исходной вСрсии ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ? ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π½Π΅ΠΉ Π½Π΅Ρ‚ нСобходимости, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ достаточно ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Precursor. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ этот способ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° старая вСрсия Π½ΡƒΠΆΠ½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² цСлях пСрСопрСдСлСния, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½ΠΎΠ²ΠΎΠ³ΠΎ класса.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ слоТности

Π’ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния Ρ€Π°Π·Π½Ρ‹Ρ… аспСктов Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, близкая ΠΏΠΎ Π΄ΡƒΡ…Ρƒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ· интСрСсного обсуТдСния Π² основной ΠΊΠ½ΠΈΠ³Π΅ ΠΏΠΎ C++ [Stroustrup 1991].

Рассмотрим класс WINDOW с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ display ΠΈ двумя наслСдниками: WINDOW_WITH_BORDER ΠΈ WINDOW_WITH_MENU. Π­Ρ‚ΠΈ классы ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ абстрактныС ΠΎΠΊΠ½Π°, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°ΠΌΠΊΡƒ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мСню. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ display, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран стандартноС ΠΎΠΊΠ½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ добавляСт ΠΊ Π½Π΅ΠΌΡƒ Ρ€Π°ΠΌΠΊΡƒ (Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС) ΠΈ мСню (Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ).

ОпишСм ΠΎΠΊΠ½ΠΎ с Ρ€Π°ΠΌΠΊΠΎΠΉ ΠΈ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ мСню. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠΌ класс WINDOW_WITH_BORDER_AND_MENU.

Рис. 15.24.  Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠΊΠ½Π°

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ display Π² Π½ΠΎΠ²ΠΎΠΌ классС; новая вСрсия Π²Π½Π°Ρ‡Π°Π»Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ, Π·Π°Ρ‚Π΅ΠΌ строит Ρ€Π°ΠΌΠΊΡƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ строит мСню. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ класс WINDOW ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:


class WINDOW feature

display is

-- ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ (ΠΎΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ)

do

...

end

... Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ...

end



НаслСдник WINDOW_WITH_BORDER осущСствляСт Π²Ρ‹Π·ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ вСрсии display ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π°ΠΌΠΊΡƒ. Π’ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ наслСдовании Π½Π΅Ρ‚ нСобходимости, достаточно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Precursor:


class WINDOW_WITH_BORDER inherit

WINDOW

redefine display end

feature -- Output

display is

-- РисуСт ΠΎΠΊΠ½ΠΎ ΠΈ Π΅Π³ΠΎ Ρ€Π°ΠΌΠΊΡƒ.

do

Precursor

draw_border

end

feature {NONE} -- Implementation

draw_border is do ... end

...

end



ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ draw_border, Ρ€ΠΈΡΡƒΡŽΡ‰ΡƒΡŽ Ρ€Π°ΠΌΠΊΡƒ ΠΎΠΊΠ½Π°. Она скрыта ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² класса WINDOW_WITH_BORDER (экспорт классу NONE), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Π½ΠΈΡ… Π²Ρ‹Π·ΠΎΠ² draw_border Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла. Класс WINDOW_WITH_MENU Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½:


class WINDOW_WITH_MENU inherit