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

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

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

БлСдуя ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ Smalltalk, доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нСбольшой экспортированной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ класса POINT Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ internal_x, internal_y ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ abscissa ΠΈ ordinate. Π›Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ синтаксис Smalltalk допускаСт присваиваниС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, избавляя ΠΎΡ‚ нСобходимости ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².


class POINT feature

-- ΠžΠ±Ρ‰Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

abscissa: REAL is

-- Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°

do Result := internal_x end

ordinate: REAL is

-- Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°

do Result := internal_y end

... Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии ...

feature {NONE}

-- ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ нСдоступныС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ:

internal_x, internal_y: REAL

end


Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° нСдостатка:

[x]. Он ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² классов ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… abscissa ΠΈ ordinate. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ, Π°Π²Ρ‚ΠΎΡ€ класса Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΠΈΡ… написаниС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ усилия, Π° ΠΈΡ… присутствиС затрудняСт восприятиС исходного тСкста.

[x]. БущСствСнноС сниТСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ полю ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НичСго ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ тСхнология Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΡ€ΡƒΠ³Π°Ρ… Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ нСэффСктивной. МоТно ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ подстановку вмСсто Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠ²Π° Ρ€ΠΎΠ»ΡŒ Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ?

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

Π­Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° удовлСтворяСт трСбованиям ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ доступа (прСимущСство для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²), ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ восприятиС исходных тСкстов (прСимущСство для поставщиков) ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ (прСимущСство для всСх).

Доступ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ

Экспорт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° с использованиСм рассмотрСнной Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ доступным ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния Π² Π²ΠΈΠ΄Π΅ my_point.x. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΏΡƒΡ‚Π΅ΠΌ присваивания Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ синтаксичСская конструкция нСдопустима для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² (Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: нСдопустимая конструкция - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ.):


my_point.x := 3.7


ДСйствуСт простоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ. Если attrib являСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ, Ρ‚ΠΎ a.attrib являСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΅ΠΌΡƒ нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ a + b.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ attrib достигаСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ экспортируСмой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π²ΠΈΠ΄Π°:


set_attrib (v: G) is

-- Установка значСния attrib Ρ€Π°Π²Π½Ρ‹ΠΌ v.

do

attrib := v

end


ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис для разграничСния ΠΏΡ€Π°Π² доступа ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π΅ поддСрТиваСмая нотация. Волько для обсуТдСния.)


class C feature [AM]

...

feature [A]{D, E}

...


здСсь A ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ чтСния, Π° M - ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ устранило Π±Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² частом написании ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… set_attrib.

Помимо Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… языковых слоТностСй Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ слишком Π³ΠΈΠ±ΠΎΠΊ. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ спСцифичСский способ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. НапримСр, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ класс экспортируСт счСтчик, значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с шагом +1 ΠΈΠ»ΠΈ -1:


class COUNTING feature

counter: INTEGER

increment is

-- Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ значСния счСтчика

do

counter := counter + 1

end

decrement is

-- УмСньшСниС значСния счСтчика

do

counter := counter - 1

end

end


Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ класса POINT Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ возмоТности нСпосрСдствСнно ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ x ΠΈ y. Для этой Ρ†Π΅Π»ΠΈ слуТат экспортированныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ translate ΠΈ scale.

ΠŸΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΌΡ‹ рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ нСдопустимости нСпосрСдствСнных присваиваний a.attrib := some_value. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Π½Π΅ Π»ΡŽΠ±Ρ‹Π΅ значСния some_value ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ допустимыми. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ


set_polygon_size (new_size: INTEGER) is

-- Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

require

new_size >= 3

do

size := new_size

end


ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π²Π΅Π½ 3 ΠΈΠ»ΠΈ большС. ΠŸΡ€ΡΠΌΠΎΠ΅ присваиваниС Π½Π΅ позволяСт ΡƒΡ‡Π΅ΡΡ‚ΡŒ это условиС ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π­Ρ‚ΠΈ рассуТдСния ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ класса ΠΈΠΌΠ΅Π΅Ρ‚ Π² своСм распоряТСнии ΠΏΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ прСдоставлСния ΠΏΡ€Π°Π² доступа ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ (рис. 7.8).

Рис. 7.8.  Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΏΡ€Π°Π² доступа ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ 0 соотвСтствуСт ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΡŽ доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ. На ΡƒΡ€ΠΎΠ²Π½Π΅ 1 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. На ΡƒΡ€ΠΎΠ²Π½Π΅ 2 Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° модификация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². На ΡƒΡ€ΠΎΠ²Π½Π΅ 3 Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСно, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли удовлСтворяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ условиям, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. На ΡƒΡ€ΠΎΠ²Π½Π΅ 4 ограничСния ΡΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ.

РСшСниС, описанноС Π² Π΄Π°Π½Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ, слСдуСт ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. Экспорт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π΄Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΏΡ€Π°Π²ΠΎ доступа Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ 1). Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ обСспСчиваСтся написаниСм ΠΈ экспортом ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²Π°, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для счСтчика (ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ 2), ΠΏΡ€Π°Π²ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ соблюдСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условий (3) ΠΈ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ доступ (4).

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ являСтся Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΈΠ΄Π΅ΠΉ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ОО-языках:

[x]. Π’ Smalltalk для обСспСчСния доступа ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ 1 приходится ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ abscissa and ordinate. Π­Ρ‚ΠΎ источник Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ для программиста ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

[x]. C++ ΠΈ Java ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΡ€Π°ΠΉΠ½ΠΎΡΡ‚ΡŒ. Если Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ экспортирован, Ρ‚ΠΎ ΠΎΠ½ сразу становится доступным Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ 4 для чтСния ΠΈ для записи ΠΏΡƒΡ‚Π΅ΠΌ прямого присваивания Π² стилС my_point.x := 3.7. ЕдинствСнный ΠΏΡƒΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ это ΠΏΠΎΠ»Π½ΠΎΠ΅ скрытиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈ написаниС экспортированных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ 2 ΠΈ 4 ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для уровня 1. Π”Π°Π»Π΅Π΅ всС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Smalltalk. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° уровня 3 Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π² связи с отсутствиСм Π² этих языках ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Данная дискуссия ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° построСния языка: Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±Π΅Π· нСобходимости Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ программисту ΠΈ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π»ΠΈΡˆΠ½ΠΈΡ… языковых конструкций.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

На уровнях 2 ΠΈ 3 Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ использованиС явных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… my_polygon.set_size (5) для измСнСния значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. БущСствуСт опасСниС, Ρ‡Ρ‚ΠΎ использованиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ стиля Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ 4 Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ скаТСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для Π²Ρ‹Π·ΠΎΠ²Π° my_point.set_x (3.7) ΠΊΠΎΠ΄ ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ эффСктивный, ΠΊΠ°ΠΊ ΠΈ для my_point.x := 3.7, Ссли Π±Ρ‹ Ρ‚Π°ΠΊΠΎΠ΅ присваиваниС Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ISE добиваСтся этого ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° нСпосрСдствСнного встраивания ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с подстановкой ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² устраняСтся.

ВстраиваниС ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор ОО-языка. ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, поощряСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, сопряТСн с Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ большого числа Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ соблюдСнии ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π° Π½Π΅ ΠΎΠ± особСнностях выполнСния.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках программирования, особСнно Π² Ada ΠΈ C++, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ½ΠΈ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ. По ряду ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта Ρ€Π°Π±ΠΎΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ автоматичСской ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

[x]. ВстраиваниС ΠΊΠΎΠ΄Π° Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ, ΠΈ компилятор Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.