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

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

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

Иногда ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ "Π»ΡƒΠ½ΠΊΠ°" Π±Ρ‹Π»Π° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ позволяСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ "Π·Π°Π³ΠΎΠ½ΡΡ‚ΡŒ" Π² Π½Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ нСзависимо ΠΎΡ‚ этого Ρ‰Π΅Π»ΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ Π½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ. Π’Π°ΠΊΠΎΠ²ΠΎΠΉ являСтся наша "Π»ΡƒΠ½ΠΊΠ°" класса, Ρ‚ΠΎΡ‡ΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° присутствиС Π² Π½Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (сначала ARRAY, Π° Π·Π°Ρ‚Π΅ΠΌ INTEGER). Π©Π΅Π»Ρ‡ΠΎΠΊ ΠΏΠΎ Π½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ пСрСнастроит инструмСнт Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° дисплСй ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Вакая Π»ΡƒΠ½ΠΊΠ° с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ рСализуСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ классом BUTTONHOLE.

НСтрудно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ класс BUTTONHOLE Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ наслСдования ΠΎΡ‚ классов BUTTON ΠΈ HOLE. Новый класс сочСтаСт Π² сСбС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ свойства ΠΎΠ±ΠΎΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΈ допускаСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ Π½Π°Π΄ Π»ΡƒΠ½ΠΊΠΎΠΉ.

ΠžΡ†Π΅Π½ΠΊΠ°

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ наглядно ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΌΠΎΡ‰ΡŒ ΠΈ силу ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° мноТСствСнного наслСдования. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ примСнСния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π° ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ построСния ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ [M 1994a].

Как ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π΅ абстракции, Ссли мноТСствСнноС наслСдованиС нСдоступно? Π’ΠΈΠ΄ΠΈΠΌΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ… ΠΊΠ°ΠΊ "ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ" Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, Π° всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠΉ просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ² Π½ΠΎΠ²Ρ‹ΠΉ класс Π² Π΅Π΅ "нСлСгального" ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π° нСлСгальной части класса тСряСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, всС прСимущСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ.

ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Иногда ΠΏΡ€ΠΈ мноТСствСнном наслСдовании Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½ (name clash). Π•Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (feature renaming) - Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ снимаСт саму ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ ΠΈ способствуСт Π»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ пониманию ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ классов.

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ доступом ΠΊΠΎ всСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ своих Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Π½Π΅ указывая Ρ‚ΠΎΡ‚ класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ описаны. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ inherit Π² классС class C inherit A ... ΠΌΠ΅Ρ‚ΠΎΠ΄ f класса C становится извСстСн ΠΊΠ°ΠΊ f. Π’ΠΎ ΠΆΠ΅ справСдливо ΠΈ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²: ΠΏΡ€ΠΈ объявлСнии сущности x Ρ‚ΠΈΠΏΠ° C Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° записываСтся ΠΊΠ°ΠΊ x.f Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ссылок Π½Π° A. ВсС ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Ρ‹ "Ρ…Ρ€ΠΎΠΌΠ°ΡŽΡ‚", ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ наслСдованиС - Ρ„ΠΎΡ€ΠΌΠ° усыновлСния: C усыновляСт всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ A.

УсыновлСниС Π½Π΅ мСняСт присвоСнных ΠΈΠΌΠ΅Π½, ΠΈ Π½Π°Π±ΠΎΡ€ ΠΈΠΌΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса содСрТит Π½Π°Π±ΠΎΡ€Ρ‹ ΠΈΠΌΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΅Π³ΠΎ родитСля.

А Ссли Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ класса Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π°Π·Π²Π°Π»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ? Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ согласно установлСнному Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠΌΠ΅Π½: Π² классС имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ класса. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


class SANTA_BARBARA inherit

LONDON

NEW_YORK

feature

...

end-- class SANTA_BARBARA



Π§Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ, Ссли LONDON ΠΈ NEW_YORK ΠΈΠΌΠ΅ΡŽΡ‚ Π² своСм составС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, foo (Π½Π΅Ρ‡Ρ‚ΠΎ)?

Ни ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… нСльзя Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Π·Π°ΠΏΡ€Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠΌΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Как слСдствиС, класс SANTA_ BARBARA окаТСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ обнаруТится ΠΏΡ€ΠΈ трансляции.

Вспомним класс TREE, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ классов CELL ΠΈ LIST, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ item. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Π° класса ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ put. Π’Ρ‹Π±ΠΎΡ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ случаСн, ΠΈ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π² исходных классах лишь ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»Π° идСя ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эти классы Π² Π΄Π΅Ρ€Π΅Π²ΠΎ.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ? Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ классов LONDON ΠΈ NEW_YORK ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСдоступСн; ΠΈΠ»ΠΈ Π½Π° Π΅Π³ΠΎ исправлСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π»ΠΎΠΆΠ΅Π½ Π·Π°ΠΏΡ€Π΅Ρ‚; Π° ΠΏΡ€ΠΈ отсутствии Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Π½Π΅ захочСтся Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ LONDON написан Π½Π΅ Π²Π°ΠΌΠΈ, ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π½ΠΎΠ²ΠΎΠΉ вСрсии класса заставит всС Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с нуля. НаконСц, самоС Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚-Π—Π°ΠΊΡ€Ρ‹Ρ‚ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании.

ВсСгда ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ ΠΎΠ±Π²ΠΈΠ½ΡΡ‚ΡŒ Π² Π³Ρ€Π΅Ρ…Π°Ρ… своих Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π² самом классС. Π’ Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈΡΡŒ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Класс, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π² Π΅Π³ΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡŽ наслСдования ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ пСрСимСнования rename. КаТдоС ΠΈΠ· Π½ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ локальноС имя ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким унаслСдованным ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ. НапримСр:


class SANTA_BARBARA inherit

LONDON

rename foo as fog end

NEW_YORK

feature

...

end



Как Π²Π½ΡƒΡ‚Ρ€ΠΈ SANTA_BARBARA, Ρ‚Π°ΠΊ ΠΈ Π²ΠΎ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ… этого класса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ LONDON с ΠΈΠΌΠ΅Π½Π΅ΠΌ foo Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ fog, Π° ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ NEW_YORK - просто foo. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ LONDON, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π½Π°Ρ‚ΡŒ этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ foo.

Π­Ρ‚ΠΎΠ³ΠΎ достаточно для устранСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° (Ссли Π΄Ρ€ΡƒΠ³ΠΈΡ… совпадСний Π½Π΅Ρ‚, Π° класс LONDON ΠΈ класс NEW_YORK Π½Π΅ содСрТат ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ fog). Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ класса NEW_YORK:


class SANTA_BARBARA inherit

LONDON

rename foo as fog end

NEW_YORK

rename foo as zoo end

feature

...

end



ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ rename слСдуСт Π·Π° ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ родитСля ΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π»ΡŽΠ±Ρ‹ΠΌ выраТСниям redefine, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ. МоТно ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ Π² случаС:


class TREE [G] inherit

CELL [G]

rename item as node_item, put as put_right end



Π³Π΄Π΅ устраняСтся ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ CELL ΠΈ LIST. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ CELL с ΠΈΠΌΠ΅Π½Π΅ΠΌ item даСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ node_item, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈ put пСрСимСновываСтся Π² put_right.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ пСрСимСнования

УбСдимся, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ понятСн Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого дСйствия. ΠŸΡƒΡΡ‚ΡŒ класс SANTA_BARBARA ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ (ΠΎΠ±Π° унаслСдованных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° foo Π² Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹):

Рис. 15.13.  Π£ΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½

(ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° графичСскоС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ смСны ΠΈΠΌΠ΅Π½.) ΠŸΡƒΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ сущности Ρ‚Ρ€Π΅Ρ… Π²ΠΈΠ΄ΠΎΠ²:


l: LONDON; n: NEW_YORK; s: SANTA_BARBARA



Π’Ρ‹Π·ΠΎΠ²Ρ‹ l.foo ΠΈ s.fog Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ. ПослС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ присваивания l := s всС останСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Аналогично, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ Π²Ρ‹Π·ΠΎΠ²Ρ‹ n.foo, s.zoo, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ послС n := s Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹:

[x]. l.zoo, l.fog, n.zoo, n.fog, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΈ LONDON, Π½ΠΈ NEW_YORK Π½Π΅ содСрТат ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² с ΠΈΠΌΠ΅Π½Π΅ΠΌ fog ΠΈΠ»ΠΈ zoo;

[x]. s.foo, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ послС смСны ΠΈΠΌΠ΅Π½ класс SANTA_BARBARA ΡƒΠΆΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ foo.

ΠŸΡ€ΠΈ всСй искусствСнности ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ€ΡŒΡ‚Π΅, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π΅Ρ‚, Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ "Π³Π»ΡƒΠ±ΠΎΠΊΡƒΡŽ ΡΠ΅ΠΌΠ°Π½Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ". Π­Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²Π΄Π°. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½ - простая синтаксичСская ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Если Π±Ρ‹ Π°Π²Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса смСнил имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π° fog, ΠΈΠ»ΠΈ Π°Π²Ρ‚ΠΎΡ€ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ - Π½Π° zoo, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ случаС - это всСго лишь Π·Π°ΠΌΠ΅Π½Π° Π±ΡƒΠΊΠ²Ρ‹. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½ - это обычная Π½Π΅ΡƒΠ΄Π°Ρ‡Π°, ΠΎΠ½ Π½Π΅ вскрываСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с классами, ΠΈ Π½Π΅ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠ± ΠΈΡ… нСспособности Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ совмСстно. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π΅ Π±Ρ€Π°ΠΊΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½ - это Π½Π΅ Π΄Ρ€Π°ΠΌΠ° (обнаруТСнная Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏ ΠΊΡ€ΠΎΠ²ΠΈ), Π° Π·Π°Π±Π°Π²Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ (ΠΌΠ°Ρ‚Π΅Ρ€ΠΈ ΠΎΠ±ΠΎΠΈΡ… супругов носят имя Π’Π°Ρ‚ΡŒΡΠ½Π°, ΠΈ это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ трудности для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… Π²Π½ΡƒΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ, Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ²ΡˆΠΈΡΡŒ, ΠΊΠ°ΠΊ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π΅ΠΈΡ… Π±Π°Π±ΡƒΡˆΠ΅ΠΊ).

Π‘ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ обсудили ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎ наслСдству. (ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ эффСктивного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π·Π°Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π° для ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π·Π°Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.) Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ пСрСимСнования ΠΈ пСрСопрСдСлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ.

[x]. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ мСняСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π½ΠΎ сохраняСт Π΅Π³ΠΎ имя.

[x]. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ мСняСт имя, Π½ΠΎ сохраняСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.