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

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

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

Благодаря использованию ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΈ сСмантичСски Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΌΠΈ, нСсмотря Π½Π° отсутствиС Ρƒ Π½ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ.

Π’ ΠΊΠΎΠ½Ρ†Π΅ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ вновь обратимся ΠΊ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ классам ΠΈ исслСдуСм Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈΡ… Ρ€ΠΎΠ»ΡŒ Π² процСссС ОО-Π°Π½Π°Π»ΠΈΠ·Π°, проСктирования ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Бпособы измСнСния объявлСний

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ объявлСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° - ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ - обСспСчиваСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π΅Ρ‰Π΅ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡƒΡΠΈΠ»ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… эти качСства:

[x]. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

[x]. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ способ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π² Ρ‚Π΅Π»Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ опрСдСлСния.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ объявлСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ - ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Доступа (Uniform Access).

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

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

Π‘ появлСниСм наслСдования ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ дальшС ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² классС наслСдуСмая функция Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

Наш ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΡƒΡΡ‚ΡŒ имССтся класс ACCOUNT1:


class ACCOUNT1 feature

balance: INTEGER is

-- Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ баланс

do

Result := list_of_deposits.total - list_of_withdrawals.total

end

...

End



Π’ΠΎΠ³Π΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π° вторая рСализация ΠΈΠ· нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ balance ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚:


class ACCOUNT2 inherit

ACCOUNT1

redefine balance end

feature

balance: INTEGER

-- Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ баланс

...

end



По-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Π² классС ACCOUNT2 Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ withdraw ΠΈ deposit, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… своих обязанностСй ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ balance, сохраняя Π² качСствС ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° свойство: balance = list_of_deposits.total - list_of_withdrawals.total.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΎΠ²ΠΎΠ΅ объявлСниС являСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. Π•Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚. НапримСр, ΠΏΡƒΡΡ‚ΡŒ Π² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ классС LIST имССтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚


count: INTEGER is

-- Число вставлСнных элСмСнтов

deferred

end



Π’ΠΎΠ³Π΄Π° Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ списка этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚:


count: INTEGER



Если нас попросят ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ эту ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ ΠΌΡ‹ условимся Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΈ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² само понятиС отлоТСнности ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ сдСлали Π²Ρ‹Π±ΠΎΡ€, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ. Π€Ρ€Π°Π·Π° "ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚" ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ эту Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ Ρ„Ρ€Π°Π·Ρ‹ "отлоТСнная ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°".

ΠŸΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, объСдинСнноС с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ ΠΈ динамичСским связываниСм, приводят ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Доступа. БСйчас ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ запрос ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²ΠΈΠ΄Π° a.service Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ посрСдством вычислСния, Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ запрос Π² процСссС ΠΎΠ΄Π½ΠΎΠ³ΠΎ вычислСния ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΠΎΠ΄Π½ΠΈΡ… случаях Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ доступ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ полю, Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… - Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚, Π² частности, ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° a.balance, Ссли ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ вычислСния a Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… классов.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ Π½Π΅Ρ‚

МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ допустимо ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Но Π½Π΅Ρ‚. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ - опСрация примСнимая ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ, - становится бСссмыслСнной для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ a - это Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ класса C, ΠΈ нСкоторая ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ


a := some_expression



Если ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ C ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ a ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎ эта функция Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Π»Π΅Π²ΠΎΠΉ части присваивания.

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

ИспользованиС исходной вСрсии ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ

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

НапримСр, класс BUTTON, наслСдник класса WINDOW, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ display, Ρ€ΠΈΡΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π½Π°Ρ‡Π°Π»Π΅ Ρ€ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΎΠΊΠ½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ появлялась Ρ€Π°ΠΌΠΊΠ°:


class BUTTON inherit

WINDOW

redefine display end

feature -- Π’Ρ‹Π²ΠΎΠ΄

display is

-- Π˜Π·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠ½ΠΎΠΏΠΊΡƒ.

do

"Π˜Π·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ"; -- Π‘ΠΌ. Π½ΠΈΠΆΠ΅

draw_border

end

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

end



Π³Π΄Π΅ draw_border - это ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ класса. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ "Π˜Π·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ", Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ display, тСхничСски ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ precursor (ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊ) ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ draw_border.

Π­Ρ‚ΠΎ достаточно ΠΎΠ±Ρ‰ΠΈΠΉ случай, ΠΈ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ввСсти для Π½Π΅Π³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ


Precursor



ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Π»Π΅ пСрСопрСдСляСмой ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Ρ‹Π·ΠΎΠ² этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ссли Π½ΡƒΠΆΠ½ΠΎ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, являСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ вСрсии этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ°).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‡Π°ΡΡ‚ΡŒ "Π˜Π·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ" ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ просто ΠΊΠ°ΠΊ


Precursor



Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² исходной вСрсии этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ· класса WINDOW, допустимый ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ классом-наслСдником WINDOW. Precursor - это Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ имя сущности Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Result ΠΈΠ»ΠΈ Current, ΠΈ ΠΎΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ курсивом с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСопрСдСляСмый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ являСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ ΠΈ поэтому Π²Ρ‹Π·ΠΎΠ² конструкции Precursor - это ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π­Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ:


some_query (n: INTEGER): INTEGER is

-- Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ вСрсиСй родитСля, Ссли ΠΎΠ½ΠΎ

-- ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ ноль

do

Result := (Precursor (n)).max (0)

end



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

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ использованиС конструкции Precursor Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ пСрСопрСдСлСнная вСрсия. (Π’ частности, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ вСрсия ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ.) ЦСлью конструкции являСтся ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½ΠΈΠ΅ пСрСопрСдСлСния Π² случаС, ΠΊΠΎΠ³Π΄Π° новая вСрсия Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΡ‚Π°Ρ€ΡƒΡŽ.


Π’ Π±ΠΎΠ»Π΅Π΅ слоТном случаС, ΠΊΠΎΠ³Π΄Π°, Π² частности, трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΈ Π½ΠΎΠ²ΡƒΡŽ вСрсии Π² качСствС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² класса, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ наслСдованиСм, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, фактичСски, дублируСтся, ΠΈ Ρƒ наслСдника ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ рассмотрСнии Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ наслСдования.