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

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

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

class WINDOW_WITH_MENU inherit

WINDOW

redefine display end

feature -- Output

display is

-- РисуСт ΠΎΠΊΠ½ΠΎ ΠΈ Π΅Π³ΠΎ мСню.

do

Precursor

draw_menu

end

feature {NONE} -- Implementation

draw_menu is do ... end

...

end



ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ наслСдника WINDOW_WITH_BORDER_AND_MENU этих Π΄Π²ΡƒΡ… классов, Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° WINDOW. ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΠΌΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ:


indexing

WARNING: "ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° - вСрсия Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ!"

class WINDOW_WITH_BORDER_AND_MENU inherit

WINDOW_WITH_BORDER

redefine display end

WINDOW_WITH_MENU

redefine display end

feature

display is

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

do

Precursor {WINDOW_WITH_BORDER}

Precursor {WINDOW_WITH_MENU}

end

...

end



Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅: ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Precursor ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя ΠΏΡ€Π΅Π΄ΠΊΠ°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ display, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Бтрауструп, это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ: вСрсии Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ display класса WINDOW, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ появлСнию "мусора" Π½Π° экранС. Для исправлСния ситуации Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ класс, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Ρ‚Ρ€ΠΎΠΉΠΊΡƒ наслСдников класса WINDOW:


indexing

note: "Π­Ρ‚ΠΎ коррСктная вСрсия"

class WINDOW_WITH_BORDER_AND_MENU inherit

WINDOW_WITH_BORDER

redefine

display

export {NONE}

draw_border

end

WINDOW_WITH_MENU

redefine

display

export {NONE}

draw_menu

end

WINDOW

redefine display end

feature

display is

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

do

Precursor {WINDOW}

draw_border

draw_menu

end

...

end



Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ draw_border ΠΈ draw_menu Π² Π½ΠΎΠ²ΠΎΠΌ классС ΡΠ²Π»ΡΡŽΡ‚ΡΡ скрытыми, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ WINDOW_WITH_BORDER_AND_MENU ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡ… Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ нСпосрСдствСнно.

НСсмотря Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования, класс пСрСопрСдСляСт всС унаслСдованныС ΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ display, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ выраТСния select Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ. Π’ этом состоит прСимущСство спСцификатора Precursor Π² сравнСнии с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

НСплохим тСстом Π½Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования станСт Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой Π·Π°Π΄Π°Ρ‡ΠΈ Π±Π΅Π· примСнСния Precursor, ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… классов. ΠŸΡ€ΠΈ этом, разумССтся, Π²Π°ΠΌ понадобится select (см. ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 15.10).

Π’ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ класса присутствуСт лишь совмСстноС использованиС, Π½ΠΎ Π½Π΅ рСпликация ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π Π°ΡΡˆΠΈΡ€ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Бтрауструпа: ΠΏΡƒΡΡ‚ΡŒ WINDOW ΠΈΠΌΠ΅Π΅Ρ‚ запрос id (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°), Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΎΠΊΠΎΠ½. Если ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любоС ΠΎΠΊΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ "Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ", Ρ‚ΠΎ id Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно, ΠΈ Π½Π°ΠΌ Π½Π΅ придСтся Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ. Если ΠΆΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ экзСмпляр WINDOW_WITH_BORDER_AND_MENU Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ id - нСзависимых "Π½ΠΎΠΌΠ΅Ρ€Π°". Новый тСкст класса ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ совмСстноС использованиС ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ id (измСнСния Π² тСкстС класса ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ стрСлками):


indexing

note: "УслоТнСнная вСрсия с нСзависимыми id."

class WINDOW_WITH_BORDER_AND_MENU inherit

WINDOW_WITH_BORDER

rename

id as border_id

redefine

display

export {NONE}

draw_border

end

WINDOW_WITH_MENU

rename

id as menu_id

redefine

display

export {NONE}

draw_menu

end

WINDOW

rename

id as window_id

redefine

display

select

window_id

end

feature

.... ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Ρ€Π°Π½Π΅Π΅...

end



ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° (select) ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² id.

Π”ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ наслСдованиС ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ особый случай Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования. Он касаСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², содСрТащих Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму (подобная ситуация ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ прямом, Π½ΠΎ ΠΈ ΠΏΡ€ΠΈ косвСнном Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ наслСдовании):


class A [G] feature

f: G;...

end

class B inherit

A [INTEGER]

A [REAL]

end



Π’ классС B ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ f Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно. Но ΠΈΠ·-Π·Π° унивСрсализации Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ, - ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ - real ΠΈΠ»ΠΈ integer? Π’Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚, Ссли f ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° G.

Подобная Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ нСдопустима. ΠžΡ‚ΡΡŽΠ΄Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€Π°Π²ΠΈΠ»Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования

Π’ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² ΠΏΡ€Π°Π²ΠΈΠ»Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏ любого ΠΈΠ· Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ класса, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ наслСдованиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Для устранСния нСоднозначности ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ наслСдования.

ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ…

(Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌ сказанноС Π²Ρ‹ΡˆΠ΅, поэтому ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.)

ΠœΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π² случаС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ нСоднозначности ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½ ΠΏΡ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ситуации Π±Ρ‹Π²Π°ΡŽΡ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π² прСдставлСнии мноТСствСнного ΠΈ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования Π½Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСоднозначности, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ограничСния Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π΅: Заканчивая этот Ρ€Π°Π·Π΄Π΅Π», свСдСм ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π² Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ

Π’ классС, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ мноТСствСнного наслСдования, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½, Ссли Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, наслСдованныС ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ имя.

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½ Π΄Π΅Π»Π°Π΅Ρ‚ класс Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаСв:

1 Оба ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° унаслСдованы ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°, ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ объявлСниСм вСрсии ΠΏΡ€Π΅Π΄ΠΊΠ°.

2 Оба ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ совмСстимыС сигнатуры, ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… наслСдуСтся Π² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.

3 Оба ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ совмСстимыС сигнатуры ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ классС.

Битуация (1) описываСт совмСстноС использованиС ΠΏΡ€ΠΈ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ наслСдовании.

Для случая (2) "наслСдованиС Π² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅" Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ: Π»ΠΈΠ±ΠΎ отлоТСнная Ρ„ΠΎΡ€ΠΌΠ° Π·Π°Π΄Π°Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ классом, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Ρ‹Π» эффСктивным, Π½ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ класс ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠ» Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (undefine).

Π‘ΠΈΡ‚ΡƒΠ°Ρ†ΠΈΠΈ (2) ΠΈ (3) Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ соСдинСния (join). ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ ΠΊ n ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ (n >= 2), ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ситуации (2) ΠΈ (3) Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ класс ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ n ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² с совмСстимыми сигнатурами. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ класс Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Ссли эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ соСдинСны, ΠΈΠ½Ρ‹ΠΌΠΈ словами:

[x]. всС n ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΠΌΡƒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ;

[x]. сущСствуСт СдинствСнный эффСктивный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π•Π³ΠΎ рСализация станСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²;

[x]. Π΄Π²Π° ΠΈΠ»ΠΈ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² эффСктивны. Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ. Новая рСализация Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ для пСрСопрСдСляСмых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для Π»ΡŽΠ±Ρ‹Ρ… ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π΅.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ употрСблСния конструкции Precursor. Если Π² ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Precursor, Ρ‚ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ нСясно, Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ родитСля слСдуСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΠ΄Π° Precursor {PARENT} (...), Π³Π΄Π΅ PARENT - имя ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ родитСля. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя родитСля Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ слСдствия Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, принятых Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅

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