Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 120
Текст из файла (страница 120)
В языке Брай!а!к нет операторов или операции явного освобождения памяти. Все операции удаления объектов из памяти являются неявными и используют сборку мусора для освобождения памяти. В отличие от гибридных языков, вроде С++ или Ада 95, язык Бща! Иа1й был создан в рамках только одной парадигмы разработки программного обеспечения — объектноориентированной. Кроме того, он ничем не похож на императивные языки.
Его чистота цели реализована в простой, элегантной и единообразной разработке программ. 11.4. Обзор языка Згпо11!о!к 11.4.2. Среде языка Зазай~айс Среда языка Бгпайгае совершенно отличается от сред, использующихся большинством императивных языков. Система языка Бшайзае объединяет в единое целое редактор программ, компилятор, обычные функции оперативной системы и виртуальную машину. Интерфейс этой системы представляет собой оригинальный графический пользовательский интерфейс. Важным аспектом среды языка Бша!йа!к является то, что она написана почти полностью на этом языке, и пользователь может модифицировать ее, подстраивая под собственные нужды.
В силу этого исходные тексты программ системы языка Бшайга!й должны быть доступны пользователю. Повторим, что язык Бглайга!к представляет собой нечто горазло большее. чем просто язык программирования; это также и методология (объектно-ориентированная), и среда программирования. 11.5.
Введение в язык ЗпйаП1аПс В этом разделе вводится подмножество языка Брай!а!к. Тем, обсуждаемых здесь, достаточно, для того чтобы ощутить особенности программирования на этом языке. К наиболее важным свойствам языка, которые здесь не описаны, относятся большие иерархии классов, поддерживаемые системой языка Бшайга!к и составляющие основу большинства программ на этом языке, а также мощная объектно-ориентированная среда, в которой разрабатываются программы. 11.5.1. Выражения Методы в языке Бгларйайс состоят из выражений. Выражение определяет объект, являющийся его значением.
Язык Бшарпае содержит четыре вида выражений: литералы, имена переменных, выражения сообщений и блоки выражений, которые в соответствующем порядке описаны ниже. 11.5.1.3. Лнтералы Наиболее распространенные литералы — числа, строки и ключевые слова. Числа— это литеральные объекты, представляющие числовые значения. Они совершенно отличаются от числовых литералов в обычных императивных языках, действующих наподобие именованных констант, поскольку они связаны с ячейками памяти, содержащими их значения. В языке Бвайга!К числовые литералы — это объекты, характеризующиеся своими протоколами сообщений и результатами, которые они вырабатывают после получения сообщений. Протокол сообщений числовых литералов, как и в случае других объектов.
описывается в определении класса вместе с его наследуемыми определениями классов. В случае целого литерала класс называется 1псеоег; он обеспечивает, помимо всего прочего, методы лля выполнения обычных арифметических операций. С синтаксической точки зрения, строковый литерал представляет собой последовательность символов, разделенных апострофами. С семантической точки зрения, — это объект, способный отвечать на сообщения, получать доступ к отдельным символам, заменять подстроки и выполнять сравнения с другими строками.
462 Глава 11. Поддержка объектно-ориентированного программирования Ключевые слова являются идентификаторами, которые могут быть определены пользователем, и замыкаются двоеточием. Использование ключевых слов рассматривается в подразделе ! 1.5.1.3. 3 1.5.3.2. Переменные Имя в языке Бша1ЫЕ синтаксически похоже на имена в других языках программирования: последовательность букв и/или цифр, начинающаяся с буквы. Переменные в языке 5та)йа)к разделяются на два вида: закрытые (рг!хазе), являющиеся локальными в объекте, и открытые (зйагед).
т.е. видимые вне объекта, в котором они "объявлены". Имена закрытых переменных должны начинаться со строчных букв, а открытых — с прописных. Все переменные в языке Вша!1!айс являются ссылками и могут ссылаться только на объекты или классы. Они лишены типа; любая переменная может указывать на любой объект. Из обсуждаемых здесь переменных только открытые ссылаются на классы.
Все переменные неявно дифференцируются, поэтому, называя имя ссылки в нашем обсуждении. мы часто имеем в виду объект. на который она ссылается. Переменные экземпляров могут быть либо именованными, либо индексированными. Именованные переменные соответствуют указателям на типы в императивном языке, не являющиеся массивами. К индексированным переменным экземпляров можно получить доступ не только по имени, но и через сообщения, параметры которых являются целыми числами. Большинство индексированных переменных используется подобно массивам в других языкм, однако индексирование само по себе осуществляется с помощью передачи сообщения. Целый параметр в сообщении для ссылки на индексированную переменную экземпляра соответствует индексу в ссылке на элемент массива в обычном императивном языке.
$ ).5.1.3. Выражение сообщений Сообщения имеют форму выражений. Они обеспечивают средства связи между объелтами и указывают, какие операции объекта требуется выполнить. Выражения сообщений имеют две части: спецификацию объекта, который должен получить сообщение, и сообщение само по себе. Сообщение само по себе определяет селекторный вход. или метод. в объекте-получателе и, возможно, один или несколько параметров. Параметры, как и другие переменные, являются указателями на другие объекты. Вычисленное сообщение передается указанному объекту-получателю. Методы обсуждаются в разделах !!.5.2 и! 1.5.6.
В оставшейся части главы мы будем называть выражения сообщений просто сообщениями. Ответами на сообщения являются объекты. Сообщения во многом соответствуют вызовам функций в таких языках, как Рааса! и С. Существуют три категории сообщений; унарные, бинарные и ключевые слова. Унарные сообщения — простейший вид сообщений. не имеющих параметров. Они имеют только две части: объект, которому они должны передаваться, и имя метода в объекте- получателе. Первый символ унарного сообщения определяет объект-получатель, последний — метод этого объекта, подлежащий выполнению. Например, сообщение й1гвсдпд1е взп передает лишенное параметров сообщение методу а1п объекта Нгвгйпд1е.
Напомним, что все объекты адресуются указателями, так что объект йзгвсдпд1е в действительности является указателем на объект. Метод азп (возможно) возвращает числовой объект, являющийся значением синуса от значения ззгагйпд(е. ! 1.5. Вввдвиие в язык Бща11!а1(г Бинарные сообщения имеют один параметр, который передается указанному методу указанного объекта-получателя. Среди наиболее распространенных бинарных сообщений есть сообщения лля арифметических операций, такие как 21+2 яцж/собст. В первом сообщении объектом-получателем является число 21, которому передается сообщение +2. Так что сообщение 2 1+ 2 передает объект-параметр 2 методу + объекта 21. Кол этою метода использует объект 2 для создания нового объекта, в данном случае, объекта 2 3. Если система уже содержит объект 2 3, то результатом будет ссылка на него, а не на новый объект.
Может показаться странным рассматривать число 21 как объект, но в языке 5гла11>а>к для чисел естественно быть объектами с определенными для них операциями. Обычные операции для целых объектов определены в классы 1псе>)ег, экземплярами которого они являются. Во втором примере, приведенном выше, сообщение / сосет передается объекту, на который ссылается переменная яож.
Это приводит к тому, что объект, на который указывает переменная соцпс, передается в качестве параметра методу / объекта, на который ссылается переменная яцп>. Выражения пз ключевых слов обеспечивают соответствие фактических параметров сообщения формальным параметрам метода, т.е. ключевые слова в совокупности определяют, какому именно методу направляется сообщение.
Смешение ключевых слов и параметров в сообщениях увеличивает их читабельность. Методы, принимающие сообщения из ключевых слов, являются неименованными. Вместо этого такие методы идентифицируются самими ключевыми словами. Рассмотрим следующий пример: 11тятдггау ас> 1 рос> 5 Это сообщение передает объекты 1 и 5 конкретному методу ас >рос > объекта б1гясдг сау.
ключевые слова аг > рос > идентифицируют формальные параметры метода, которым должны быть переданы обьекты 1 и 5, соответственно. Метод, которому передается это сообщение, содержит ключевые слова сообщения. Как указывалось выше, методы из ключевых слов не имеют имен; вместо этого они идентифицируются своими ключевыми словами.
Эта канкатенация (в данном случае ас >рос>) называется переключателем (зе1ес>ог). Выражения сообщений могут состоять из любого количества комбинаций трех вызовов выражений, как показано ниже: тота1-3*с>1»1яот. Гъгятдггау ат> 1пс>ех — 1 рис> 77 Чтобы определить, как именно они вычисляются, лолжны быть известны приоритеты и ассоциативность операторов выражения. Унарные выражения имеют наивысший приоритет.
за ними идут бинарные выражения, а затем — выражения из ключевых слов. И унарные, и бинарные выражения ассоциируются слева направо. Заметим, что это совершен»о отличается от правил приоритетов, обычно используемых в таких языках, как А>)а и С. 464 Глава 11. Поддержка объектно-ориентированного программирования В выражениях можно использовать скобки, чтобы установить принудительный порядок вычисления операторов. Первое выражение, приведенное выше, содержит скобки только для иллюстрации, а не для того, чтобы изменить нормальный порядок вычислений, который является следующим: (гога1-3)*с)1тувог Это выражение передает 3 методу — объекта гога1.
Значение переменной с)уттвог затем передается методу * объекта, являющегося результатом первой операции. Выражение йэгвсйггау ас: Зпс)ех — 1 рос: 11 передает 1 методу — объекта Зпг)ех. Результат этой операции вместе с 77 затем передается методу ас: рос: объекта йтгасйггау. Сообщения могут быть организованы в виде каскада — т.е. несколько сообшениЯ можно послать одному и тому же объекту без повторения имени объекта-получателя— путем разлеления ~рули параметров-селекторов или методов с помощью точки с запятой.
Сообщения передаются последовательно, в порядке их появления, слева направо. Например, оцгРеп Поше; ирэ сосо: 5006500; с)онпз 'нове эквивалентно следующим сообщениям: оцгРеп Вове. оигРеп цр. оцгРеп сосо: 500е500. оигРеп гзонп. оцгРеп )зове Эта последовательность сообщений рисует линию на экране дисплея (предполагается, что объект оцгреп является экземпляром класса Реп).