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

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

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

[x]. Π Π°Π±ΠΎΡ‚Π° компилятора Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°. Как выяснится ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ наслСдования, для ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° класса ARRAY Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ любой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ класса ΠΈ эти пСрСопрСдСлСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ косвСнно Π²Ρ‹Π·Π²Π°Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· динамичСскоС связываниС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ массива. Для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… массивы, соврСмСнныС компиляторы ΠΎΡ‚ ISE ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ сСгодня ΠΌΠΎΠ³ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ эффСктивный, ΠΊΠ°ΠΊ написанный Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π° C ΠΈΠ»ΠΈ Fortran.

Бинонимичная инфиксная опСрация

Класс ARRAY прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, косвСнно ΠΎΡ‚Π½ΠΎΡΡΡ‰ΡƒΡŽΡΡ ΠΊ вопросам этой Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ОбъявлСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° item фактичСски опрСдСляСт ΠΈ Π΅Π³ΠΎ синоним - ΠΈΠ½Ρ„ΠΈΠΊΡΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ10.4) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


infix "@", item (i: INTEGER): G is...



Π—Π΄Π΅ΡΡŒ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: infix "@" ΠΈ item ΠΊΠ°ΠΊ синонимы, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, объявлСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ΅:


a, b, c... "ОписаниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°"



рассматриваСтся ΠΊΠ°ΠΊ краткая Ρ„ΠΎΡ€ΠΌΠ° записи ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ объявлСний:


a "ОписаниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°"

b "ОписаниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°"

c "ОписаниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°"

...



с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ "ОписаниСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°".

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊΠ°ΠΊ для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² (Π³Π΄Π΅ "ОписаниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°" ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ: Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ_Ρ‚ΠΈΠΏ), Ρ‚Π°ΠΊ ΠΈ для ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (is Ρ‚Π΅Π»ΠΎ_ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹).

Нотация, примСняСмая Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для доступа ΠΊ массиву, достаточно проста. Она совмСстима с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ доступа для Π΄Ρ€ΡƒΠ³ΠΈΡ… структур, хотя, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, инструкция a.item(i) Π±ΠΎΠ»Π΅Π΅ многословна, Ρ‡Π΅ΠΌ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ a[i], Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π΅Π΅ΡΡ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ вариациями Π² Pascal, C, Fortran ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡ "@" ΠΊΠ°ΠΊ синоним item, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Π·ΠΎΠΉΡ‚ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ языки Π² ΠΈΡ… собствСнной ΠΈΠ³Ρ€Π΅ Π·Π° ΠΊΡ€Π°Ρ‚ΠΊΠΎΡΡ‚ΡŒ записи. Написав a @ i, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‡Ρ‚Ρƒ, - запись Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши мСньшС, Ρ‡Π΅ΠΌ Π΄Π°ΠΆΠ΅ Π‘++!. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ снова, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ языка, Π½ΠΎ прямоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰Π΅ΠΉ ОО-ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, скомбинированного с Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ синонима.

Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ унивСрсализации

Как всСгда Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ОО-Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ввСдСнная Π² интСрСсах ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΈ надСТности, Π½Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΎΡ‚ вопрос ΡƒΠΆΠ΅ поднимался ΠΏΡ€ΠΈ рассмотрСнии массивов. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ с этих ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ ΠΏΡ€ΠΎΡΠΊΠ·Π°ΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ унивСрсализации Π² Ρ†Π΅Π»ΠΎΠΌ. Какова Ρ†Π΅Π½Π° унивСрсализация?

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

Число создаваСмых экзСмпляров шаблона - ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π‘++. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ создаСт List<int>, List<String>, List<Widget> ΠΈ List<Blidget> (Π³Π΄Π΅ Widget ΠΈ Blidget классы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ) ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ head, tail ΠΈ insert для всСх Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ каТдая ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ создана Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… экзСмплярах (ΠΈΠ·-Π·Π° Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ пороТдСния). ВмСсто этого ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΉ класс List ΠΌΠΎΠ³ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ СдинствСнный экзСмпляр ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΉ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².10.5)

Авторы этого прСдупрСТдСния (Π‘++ экспСрты ΠΈΠ· AT&T, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… соавтор ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π‘++ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ [Ellis 1990]) ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пороТдСния шаблонов. Но унивСрсализация Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ спроСктированном языкС ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ компиляторС ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ добавлСния ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚:

[x]. Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции;

[x]. Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сгСнСрированного ΠΊΠΎΠ΄Π°;

[x]. Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния;

[x]. памяти, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ для выполнСния.

Работая Π² Ρ‚Π°ΠΊΠΎΠΉ срСдС, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю ΠΌΠΎΡ‰ΡŒ унивСрсализации, Π½Π΅ опасаясь ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°ΠΊ Π½Π° этапС компиляции, Ρ‚Π°ΠΊ ΠΈ выполнСния.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅: Ρ‡Ρ‚ΠΎ всС-Ρ‚Π°ΠΊΠΈ Π½Π΅ сдСлано

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ унивСрсализации ΡƒΠΆΠ΅ прСдставлСны, Π½ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π½Π° Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… вопроса Π½Π΅ Π΄Π°Π½Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅: Π² Π½Π°ΡˆΠΈΡ… усилиях гарантирования бСзопасности Ρ‚ΠΈΠΏΠΎΠ² ΠΌΡ‹ заняли чСрСсчур ΠΊΠΎΠ½ΡΠ΅Ρ€Π²Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊΡ€ΡƒΠ³ Π² стСк банковских счСтов. Π’Ρ€ΡƒΠ΄Π½ΠΎ Π²ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ΅Π½ стСк, содСрТащий Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ банковскиС счСта. Но рассмотрим графичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ СстСствСнСн стСк, содСрТащий ΠΊΡ€ΡƒΠ³ΠΈ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Ρ‚ΠΎΡ‡ΠΊΠΈ. Вакая ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ каТСтся довольно Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠΉ, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ Π΅Π΅. БистСма Ρ‚ΠΈΠΏΠΎΠ², опрСдСлСнная Π΄ΠΎ сих ΠΏΠΎΡ€, ΠΎΡ‚Π²Π΅Ρ€Π³Π½Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² figure_stack.put(that_point) Ссли Ρ‚ΠΈΠΏ figure_stack Π±Ρ‹Π» объявлСн ΠΊΠ°ΠΊ STACK [FIGURE], Π° that_point - Ρ‚ΠΈΠΏ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ FIGURE. Π”Π°Π΄ΠΈΠΌ ΠΏΠΎΠΊΠ° имя рассматриваСмым структурам ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ… ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ… (polymorphic data structure). Π’Ρ‹Π·ΠΎΠ², стоящий ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ - ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ эти структуры Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ прСимущСств бСзопасности Ρ‚ΠΈΠΏΠΎΠ².

Π’Ρ‚ΠΎΡ€ΠΎΠ΅: Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ для стСков ΠΈ массивов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ любого Ρ‚ΠΈΠΏΠ° ΠΏΠΎ своСй сути ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Но ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ элСмСнты Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ сами Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с классом, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ Ρ…Π΅Ρˆ-функция ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ элСмСнту Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Вакая Ρ„ΠΎΡ€ΠΌΠ° унивСрсализации, Π³Π΄Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Π° являСтся Ρ‚ΠΈΠΏΠΎΠΌ, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ прСдоставлСниС ряда ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, называСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ унивСрсализациСй (constrained genericity).

Для ΠΎΠ±Π΅ΠΈΡ… этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ОО-ΠΌΠ΅Ρ‚ΠΎΠ΄ обСспСчиваСт простыС ΠΈ элСгантныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΎΠ±Π° основанныС Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ унивСрсализации ΠΈ наслСдования.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

[x]. ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹.

[x]. Π ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ классы слуТат для описания ΠΎΠ±Ρ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, нСзависимо ΠΎΡ‚ элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ содСрТат.

[x]. УнивСрсализация трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ статичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ².

[x]. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ фактичСскиС Ρ‚ΠΈΠΏΡ‹ для Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

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

[x]. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ массива Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ языкового ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ укладываСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ схСму Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠ³ΠΎ класса.

[x]. Π‘ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ использованиС унивСрсализации - ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ограничСнная унивСрсализация - Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ввСдСния наслСдования.

БиблиографичСскиС замСчания

Один ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… языков, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ - LPG [Bert 1983]. Π―Π·Ρ‹ΠΊ Ada сдСлал эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстной Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

УнивСрсализация Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Π²Π΅Π΄Π΅Π½Π° Π² языки Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ спСцификации, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Z, CLEAR ΠΈ OBJ-2, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ссылки Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 6 ΠΏΠΎ АВД. Π ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, описанный здСсь, Π±Ρ‹Π» построСн Π½Π° основС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, прСдставлСнного Π² Ρ€Π°Π½Π½Π΅ΠΉ вСрсии Z [Abrial 1980] [Abrial 1980a] ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ Π² [M 1985b].

Если Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту ΠΊΠ½ΠΈΠ³Ρƒ, Ρ‚ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ОО-языков, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π±Ρ‹Π» DEC's Trellis язык [Schaffert 1986].

УпраТнСния

Π£10.1 ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Π°Ρ унивСрсализация

Π­Ρ‚ΠΎ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ спСцифично - ΠΎΠ½ΠΎ ставит вопрос, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π½ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² этой ΠΊΠ½ΠΈΠ³Π΅. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ - Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π² ΠΊΠ½ΠΈΠ³Π΅. Оно особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² ОО-языках. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ языка Ada ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² поискС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ.