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

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

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

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

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

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

Π‘ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ - это синтаксичСский ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π² Ρ€Π°Π·Π½Ρ‹Ρ… классах ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

Иногда Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ:


class SANTA_BARBARA inherit

LONDON

rename

foo as fog

redefine

fog

end

...



Если, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, l: LONDON; s: SANTA_BARBARA, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ присваиваниС l := s, Ρ‚ΠΎ ΠΎΠ±Π° Π²Ρ‹Π·ΠΎΠ²Π° l.foo, s.fog Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° fog, объявлСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ feature класса.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅: redefine содСрТит ΡƒΠΆΠ΅ Π½ΠΎΠ²ΠΎΠ΅ имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ΄ этим ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ извСстСн классу. ИмСнно поэтому rename Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Ρ‹ΡˆΠ΅ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ наслСдования (Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ redefine ΠΈ ΠΏΠΎΠΊΠ° нСизвСстныС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ export, undefine, select). ПослС выполнСния rename ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ тСряСт свой ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ становится извСстным ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ классу, Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ ΠΈ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ.

ΠŸΠΎΠ΄Π±ΠΎΡ€ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСимСнования наслСдуСмого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° нСбСзынтСрСсна ΠΈ ΠΏΡ€ΠΈ отсутствии ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½. Она позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ класса ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ подходящиС ΠΈΠΌΠ΅Π½Π° для всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ описанных Π² самом классС, Ρ‚Π°ΠΊ ΠΈ унаслСдованных ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΊΠΎΠ².

Имя, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ класс наслСдуСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€Π΅Π΄ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ класса. Π•Π³ΠΎ Π²Ρ‹Π±ΠΎΡ€ опрСдСлялся интСрСсами ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΊΠ°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ класс вписан Π² Π½ΠΎΠ²Ρ‹ΠΉ контСкст ΠΈ прСдставляСт ΠΈΠ½ΡƒΡŽ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ с собствСнной систСмой понятий. Π‘ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, раздСляя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся класс WINDOW, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ класса TREE. ПослСдний описываСт ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, Π΅Π΄ΠΈΠ½ΡƒΡŽ для всСх Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², Π² Ρ‚ΠΎΠΌ числС ΠΈ для ΠΎΠΊΠΎΠ½, Π½ΠΎ ΠΈΠΌΠ΅Π½Π°, понятныС Π² исходном контСкстС, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ для интСрфСйса ΠΌΠ΅ΠΆΠ΄Ρƒ WINDOW ΠΈ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π‘ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ привСсти ΠΈΡ… Π² соотвСтствиС с мСстными обычаями:


class WINDOW inherit

TREE [WINDOW]

rename

child as subwindow, is_leaf as is_terminal, root as screen,

arity as child_count, ...

end

RECTANGLE

feature

... Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ window ...

end



Аналогично, класс TREE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ ΠΎΡ‚ CELL, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя right Π½Π° right_sibling ΠΈ Ρ‚.Π΄. ΠŸΡƒΡ‚Π΅ΠΌ смСны ΠΈΠΌΠ΅Π½ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ своих "слуТб" Π²Π½Π΅ зависимости ΠΎΡ‚ истории ΠΈΡ… создания.

Π˜Π³Ρ€Π°Π΅ΠΌ Π² ΠΈΠΌΠ΅Π½Π°

Π‘ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ имСнования - ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ классов - Π² ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ОО-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, класс - это ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² сами ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ извСстны ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ благодаря ΠΈΠΌΠ΅Π½Π°ΠΌ.

Π’ послСднСй Π»Π΅ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π½ ряд ΠΏΡ€Π°Π²ΠΈΠ» Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠΌΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ слСдуСт ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ общСизвСстным ΠΈΠΌΠ΅Π½Π°ΠΌ: count, put, item, remove, ... - Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ абстракций, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ, нСсмотря Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ различия классов. ΠŸΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡΡΡŒ этого стиля, Π²Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΈ мноТСствСнном наслСдовании, Π½ΠΎ отчасти ΠΈΠ·Π±Π°Π²ΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΈΠΌΠ΅Π²ΡˆΠΈΡ… мСсто Π² случаС с классом WINDOW. Но ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Π½Π΅ ΠΎΡ‚Π΄Π°Π²Π°Π»ΠΎΡΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ обСспСчСна Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ΄Π±ΠΎΡ€Π΅ ΠΈΠΌΠ΅Π½, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… потрСбностям ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса.

ИспользованиС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ случай пСрСимСнования ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания класса. ВспомнитС класс ARRAYED_STACK, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ STACK ΠΈ ARRAY. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания ARRAY Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² памяти массив с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ:


make (minb, maxb: INTEGER) is

-- ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ minb ΠΈ maxb

-- (пустой Ссли minb > maxb)

do ... end



Для создания стСка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число элСмСнтов. РСализация основана Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ создания ARRAY:


class ARRAYED_STACK [G] inherit

STACK [G]

redefine change_top end

ARRAY [G]

rename

count as capacity, put as array_put, make as array_make

end

creation

make

feature -- Initialization

make (n: INTEGER) is

-- Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ стСк, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ n элСмСнтов.

require

non_negative_size: n >= 0

do

array_make (1, n)

ensure

capacity_set: capacity = n

empty: count = 0

end

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

invariant

count >= 0; count <= capacity

end



Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ соглашСний ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… - Π²Ρ‹Π±ΠΎΡ€ make ΠΊΠ°ΠΊ стандартного ΠΈΠΌΠ΅Π½ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создания - ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ благодаря ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ, ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‰Π΅ΠΌΡƒ Π·Π°ΠΎΠ΄Π½ΠΎ Π΄Π²ΡƒΡΠΌΡ‹ΡΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ count ΠΈ put. Оба ΠΈΠΌΠ΅Π½ΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС.

ПлоскиС структуры

Π‘ΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ - лишь ΠΎΠ΄Π½ΠΎ ΠΈΠ· срСдств, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… мастСром наслСдования для построСния ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… классов, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… потрСбностям своих ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π”Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚Π°ΠΊΠΈΠΌ срСдством являСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π’ этой ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ нСсколько Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ²: ΠΎΡ‚ΠΌΠ΅Π½Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ (undefinition), соСдинСниС (join), Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (select), скрытиС ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² (descendant hiding). ΠœΠΎΡ‰ΡŒ этих ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ‚ наслСдованиС излишнС Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ, поэтому ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² сущСствовании вСрсии класса, свободной ΠΎΡ‚ наслСдования, - плоской Ρ„ΠΎΡ€ΠΌΠ΅ (flat form).

Плоская Ρ„ΠΎΡ€ΠΌΠ° класса

НаслСдованиС - это скорСС инструмСнт поставщика класса, Ρ‡Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°; это ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ эффСктивного построСния классов. И Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ наслСдовании ΠΈ структурС сСмСйства классов Ρ€ΠΎΠ²Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ динамичСскоС связываниС.

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

Π­Ρ‚Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ плоская Ρ„ΠΎΡ€ΠΌΠ° класса. Но Π²Π°ΠΌ Π½Π΅ придСтся Π΅Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ. Π•Π΅ построит ΠΎΠ΄ΠΈΠ½ ΠΈΠ· инструмСнтов срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, ввСдя ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ сцСнария (flat class_name) ΠΈΠ»ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Плоская Ρ„ΠΎΡ€ΠΌΠ° класса C - это коррСктная запись класса, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ, - с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, - Ρ‚Ρƒ ΠΆΠ΅ сСмантику, Ρ‡Ρ‚ΠΎ ΠΈ класс C, Π½ΠΎ лишСнная всСх ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ наслСдования. ИмСнно Ρ‚Π°ΠΊ выглядСл Π±Ρ‹ любой класс, Ссли Π±Ρ‹ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ наслСдованиСм. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ плоской Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚:

[x]. устранСниС прСдлоТСния inherit, Ссли ΠΎΠ½ΠΎ Π΅ΡΡ‚ΡŒ;

[x]. сохранСниС Π² Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ всСх ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈΠ· C;

[x]. Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² класс объявлСний всСх унаслСдованных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², скопированных ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… классов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ всСх ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² inherit ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ: пСрСимСнования, пСрСопрСдСлСния, ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, выдСлСния (select), объСдинСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²;

[x]. Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ унаслСдованному ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ строки коммСнтария Π²ΠΈΠ΄Π°: from ANCESTOR, Π³Π΄Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ имя блиТайшСго ΠΏΡ€Π΅Π΄ΠΊΠ°, (ΠΏΠ΅Ρ€Π΅)ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Π° Π² случаС объСдинСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² - побСдившая сторона);

[x]. восстановлСниС ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ прСдусловий ΠΈ постусловий унаслСдованных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ наслСдования ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ);

[x]. восстановлСниС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° класса ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡŠΡŽΠ½ΠΊΡ†ΠΈΠΈ (and) всСх Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² случаС примСнСния ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².