Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 90
Текст из файла (страница 90)
Краткий обзор языка. Уникальность языка Вп>айга!к определяют следующие свойства, благодаря которым он отличается от остальных языков, описанных в этой кни~е. + Среда разработки. Яп>айса)к разрабатывался как целая система: язык, компьютер и среда программирования, Однако в данной книге мы рассматриваем Б>вайса!к только как язык программирования и совершенно не касаемся вопросов, связанных со срепой программирования, + Мияимольвый языкрпзрпботки, Небольшой бжп>вый язык определяет Яшайгай.
По существу, все, что можно делать в Вшайгайг, — это разработать класс как подкласс других классов и к каждому из ра>работанных классов присоединить метолы, Основные операторы Вшайгайг определяют присваивание и последовательное выполнение лейс>.вий. Истинная мощь языка заключается в механизме параметрических вызовов, называемых сооб>цениями. Г1ри помощи сообщений можно определять структуры управления, подобные нашим обычным конструкциям > ~ и н!»1е. Я>па!1!а!к поставляется с препон ределсиным набором определений классов, па>шсанных на языке Вшайгайц Котла Бшайга!к устанавливается на коыпьютер, то создается образ пустого окружения путем включения всех этих определений. При вызове интерпретатора Вп>айса!к вы получаете свою собственную копию этого образа.
Внутри этого образа вы строите новые классы и модифицируете существующие классы добавлением или изменением методов. Системному администратору легко построить систему В>вайса!к с альтернативным набором предопределенных опрелслений классов, так что не совсем понятно, что следует понимать под языком Яп>а! Ма!к. В данной книге мы называем языком Яшайга!к набор предопределенных классов. 2.2. Наследование 321 + Выполнение програииы 5та!!га1н, Модель выполнения для БшайсаПс основана на коммуникационной модели (сопшшшсас)оп шос(е1). Данные в Бша11сайс состоят из объектов, а методы рассматриваются как сообщения, посылаемые объектам. Так, ! + 2 означает, что сообщение «+» с параметром 2 послано целочисленному объекту 1.
Метод «+» в данном случае возвращает значение 3. На первый взгляд это может показаться странным, но становится вполне естественным после небольшой практики. Яшайсайс использует динамическую модель последовательности выполнения действий. Каждый метод выполняется с одновременным созданием записи активации, называемой контекстам. Так как блоки, которые содержат локальные переменные, могут быть присвоены переменной, то стековый механизм организации памяти, при котором читается последний записанный объект, становится здесь некорректным. Как для хранения объектов данных, так и для хранения записей активации Вшайсайс должен использовать динамическую организацию памяти в виде кучи.
Как правило, используется динамическая сборка мусора, хотя семантика необходимой сборки мусора в языке не специфицирована. 7.2.5. Объекты и сообщения Яп1айсайс представляет альтернативный подход к разработке объектов и методов, значительно отличающийся по своей идеологии от моделей наследования, представленных ранее в этой главе для языков Ас(а и С++.
Идея Бша11са! к принадлежит Алану Кею из Хегох Ра!о А!со КезеагсЬ Сепсег, он предложил ее в начале 70-х гг., но окончательный вариант вобрал в себя многочисленные дополнения других разработчиков. Ягпайсайс был разработан как целая вычислительная среда для персонального компьютера. Поэтому он включал в себя не только язык для представления алгоритмов, но и среду вычисления, состоящую из разделенного на окна (ч !пс(овз) экрана монитора и мьппи рабочей станции Хегох А1со.
Теперь подобные возможности являются общепринятыми, но в то время их появление рассматривалось как революционный шаг вперед. Программа на Вша!1сайс состоит из набора определений классов, состоящих, в свою очередь, из объектов данных и методов. Все данные ин капсули рованы, так как только методы, определенные для класса, имеют доступ к данным, прингдлежашим этому классу. Сокрытие информации и инкапсуляция являются неотъемлемыми встроенными свойствами языка в отличие от Сч+, в котором эти свойства были добавлены поверх уже существующей структуры типов языка.
Программа на Зп1айсайс обычно включает в себя три основные составляющие. 1. Определения классов. Они представлены выполняемыми операторами, определяющими внутреннюю структуру и методы, которые могут быль использованы для создания и манипуляции объектами класса. Также могут быть определены данные, используемые совместно всеми объектами определенного класса. 2. Создание обьектов. Для каждого определения класса создаются свои объекты посредством вызова методов создания в определении этого класса.
Методы можно определять для отдельных экземпляров класса. 322 Глава 7. Наследование 3. Передача сообщений. Для выполнения действий объектам передаются методы в форме сообщений. Вместо того чтобы связывать с функцией на(юр параметров, как это делается в большинстве других языков, в 5пт а!1[а!)т функция (то есть метод) связывается с объектом данных.
Эта связь метода с объектом называется сообщением. В Вша!1[а!к существуют три типа сообщений; 1. Унарное сообгдсние — это метол, не имеюгдий параметров. Например, для создания объектов в большинстве классов используется встроенный метод пем х 5ет пен В данном случае переменной х присваивается вновь создаваемый объект класса 5еь. Теперь х является экземпляром объекта класса 5е[.
2. Бинарное сообщение, как правило, используется для арифметических операций. Выражение 3 + б соответствует бинарному методу «+», посланному объекту 3 с параметром б. Метод «+» возвращает объект 9 как результат данного сообщения. 3. Ключевые сообщения ведут себя примерно так же, как перегруженные функции в языках типа Аг!а и С++. Например, для присвоения значения третьему элементу массива х следует сначала создать массив с нужным количеством элементов, а затем выполнить операцию присваивания: х Янган пеи 10 х аЫЗ ро[.42 Сначала метод пе»с с параметром И посылается классу Яггау для создания массива из десяти элементов, который присваивается переменной х. Вызывается ключевой метод а[ и ри[: для присваивания третьему компоненту массива х значения 42.
Название а [; рис: метода этого оператора присваивания образуется путем конкатенации ключевых слов (аг; и рог; ). Другой метод, а[:, посланный экземпляру массива, извлекает значение соответствующего элемента массива, Использование символа «» для обозначения операции присваивания объясняется некоторыми фактами из истории развития компьютерной техники, Исходно операция присваивания в Вша!![а!к обозначалась символом +-, который в 60-е и 70-е гг.
был представлен на клавиатурах той жс клавишей, что и символ «», поэтому внутреннее определение этих символов было одинаковым. Со временем символ < — исчез с клавиатуры, но в Вша!1[а!)г используется символ, который соответствует той же клавише. Аналогично операция, указывающая возвращаемое каким-либо методом значение, исходно обозначалась символом Т, который размещался натой же клавише, что и символ «». Со временем этотсимвол также исчез с клавиатуры. Последовательности операторов в Вша!1[а!)г могут быть выполнены как блоки, например: [ .покаянная переиенная ~ оператор, оператор,3 где локальная переиеииая — это необязательная локальная переменная, объявленная в блоке. (Первый символ в блоке необходим для устранения синтаксической неоднозначности в определении блоков.) Выполнение блока операторов происхо- 7.2.
Наследование 323 дит посредством передачи метода ча1ые этому блоку, а результатом выполнения является последнее выражение блока. Так !х! х ['Зто строке']. "Гереиенной х присвоен данный блок." х чатое ргтпт ! "Вычисляется блок переиенной х." означает следуюШее: 1) объявляется локальная переменная х; 2) переменной х присваивается блок; 3) метод х ча1ые возвращает строку Это строка, которая печатается методом ргт пЬ. В Яшайьайт комментарии обозначаются двойными кавычками. Символ! в ВшаПЬайс обозначает команду для выполнения предыдущей последовательности операторов.
Использование передачи ключевого параметра позволяет создавать многие широко используемые структуры управления. Предопределенное окружение ЯшаПГайт включает встроенный метод для работы с булевыми данными т ГТгые. 1ЕЕа1зе:. Каждое из этих ключевых слов получает в качестве параметра некоторый блок данных. Например, Ьгые тЕТгые:]ЕЕа1ве: вычислит блок 1ГТгые;, тогда как Еа1ее тЕТгые: тбра1ве: вычислит блок тбра1зе .
Записывая эти конструкции с использованием общепринятых отступов, подобных тем, что применяются в языке Равса], мы получим следующий синтаксис: х>2 т'гтгче. Сх болыве 2' ршптап] тГГа1ве; С х иен>ае или равен 2' ргтптв1] В данном случае метод > с параметром 2 передается объекту х. Метод > возвращает объект Ьгые или Еа1ве в зависимости от значения х, Этому булевому объекту затем передастся ключевой метод тГТгые;1ЕЕа1эе; с двумя блоками в качестве параметров.
В зависимости от того, какой был возвращен булев объект, выполняется блок т ЕТгые: или т Ера1зе:. (Метод рг]пГИ1 аналогичен методу ргтпЬ, за исключением того, что после напечатанного объекта он печатает также символ новой строки.) Алгоритм вычисления очень похож на вычисление оператора т Е-ЕЬеп-е] ее, но фактическое выполнение радикально отличается. Используя этот подход, можно аналогичным образом разработать циклические конструкции. Бшайсайс — единственный из описанных в нашей книге языков, полностью основанный на концепциях инкапсуляции и абстракции. Наследование в Бшаййайс является базовой характеристикой процесса вызова методов. Неупорядоченность в определении методов приводит к другой проблеме в определении методов — неоднозначности.
Например, рассмотрим следуюшие методы: .'Оасавсоге с1авв иегпобвгог: 'Нтвс'! ав9п: аЧв1ое Со: ЬЧатые вЧа1ые рю птв1 ! Ьо: аЧа1ые авйп; ЬЧа1ое вча1ые ршпш1 На первый взгляд это выглядит как неоднозначное определение метода аврп Ьо:. Тем не менее Ьо евро: — это совсем другой метод; вт> Оасавбоге авйп: 8 Со 9 ! Ехесо Ст оп Ьею ив... 324 Глава 7. Наследование 8 яг> Оагааеоге Го; 9 аярп В 1 Ехесыгтоп Ьер пя. 9 Очень важно, чтобы каждый ключевой метод использовал уникальный набор имен.