prepod

Путь к Файлу: /РОССИЙСКИЙ НОВЫЙ УНИВЕРСИТЕТ / Smalltalk / Основы языка Smalltalk.doc

Ознакомиться или скачать весь учебный материал данного пользователя
Скачиваний:   2
Пользователь:   prepod
Добавлен:   04.05.2015
Размер:   85.0 КБ
СКАЧАТЬ

Глава 3: Основы языка

Синтаксис Смолтока прост, но довольно необычен по сравнению с общепринятыми языками. Темы этой главы включают синтаксис выражений, литералов и переменных, правила анализа, краткое введение в блоки и введение в переменные.

3.1. Синтаксис выражений Смолтока

Ясно, что синтаксис выражений нужен, чтобы объяснить, как объекты взаимодействуют друг с другом. Выражение представляет собой последовательность знаков, описывающих объект и называемых значением выражения.

Допускаются четыре типа выражений:

· Литералы описывают постоянные объекты: числа, знаки, строки, символы и массивы.

· Названия переменных описывают доступные переменные. Значение названия переменной представляет собой текущее значение переменной под этим названием.

· Выражения сообщений описывают сообщения, посылаемые получателям. Значение выражения определяется методом, который им вызван.

· Блоковые выражения описываю отложенные действия. Блоки часто используются в управляющих структурах.

3.2. Литералы

Одно из простейших выражений в Смолтоке – это выражение "в литералах". Далее мы дадим описание синтаксиса этих постоянных объектов.

3.2.1. Числа

Число представляет собой последовательность цифр, с возможным введением знака минус и возможной десятичной точки. Возможный одиночный знак плюс не применяется. Примеры включают:

8       12.7        -0.0007

Числа могут быть представлены в другой системе счисления, посредством предшествующего основания и буквы "r":

8r177       16r5E       2r100011

Числа также могут быть выражены в "научной нотации" с применением в качестве суффикса буквы "е". Например,

2.23       8r177е6       е-2

Числа, наконец, могут быть также представлены как числа"с фиксированной точкой", которая используется для представления, например, текущих значений, с использованием в качестве суффикса буквы "f":

2.23f       177f6       3f-2

3.2.2. Знаки    

Знак – это отдельная буква алфавита или цифра, или просто знак, которым предшествует знак доллара "$".

$D       $+       $$       $9       $х

3.2.3. Строки

Строка представляет собой последовательность знаков, окруженную одинарными кавычками. Например,

'test string'       'string with'       'embedded single quote'

3.2.4. Символы

Символ есть объект, который представляет строку, используемую в Смолтоке в качестве названия. Символ представлен с возможным окружением одинарными кавычками и с использованием перед ним знака "#". Символы всегда едины. Например,

#initialize       #W80       #temp       #'3x'

3.2.5. Массивы литералов

Литералы вставлены в скобки, и им предшествует знак "#". Один массив, "вставленный" в другой может не содержать знака "#". Например,

#(40 41 42)       #((1 '2') ('first' #second))       #(1 'one' ($5 'five'))

3.2.6. Массив байтов

Массив байтов представляет собой последовательность байтов (целые числа от 0 до 255), окруженные квадратными скобками, а им предшествует знак "#". Например,

#[1 2 3 0]       #[16rFF 0 2r111 2e2]

 

3.3. Переменные

Переменные указывают на объект. Название переменной представляет собой выражение, относящееся к объекту. Названия переменных представляют собой идентификаторы (указатели) из букв и цифр, которые начинаются только с буквы:

SomeObject       integer       Smalltalk       temp3

Когда они создаются из более, чем одного слова, то первая буква каждого последующего слова идентификатора заглавная. Мы должны строго выполнять это правило – оно действует в любом образе.

3.4. Псевдопеременные

Это название относится к объектам, которые не могут изменяться; к их числу относятся:

nil      Значение, используемое, когда никакое другое не подходит, например, отсутствие переменных или неинициализированные переменные. nil является единственным экземпляром класса UndefinedObject.

true   Представляет истину, единственный экземпляр класса True.

false  Представляет ложь, единственный экземпляр класса False.

Классы True и False являются подклассами класса Boolean.

3.5. Сообщения

Выражение сообщения состоит из получателя, селектора и, возможно, нескольких аргументов. Основное описание посылки сообщения в Смолтоке имеет вид:

<receiver>       <message>,

где <receiver> есть название некоторого известного объекта, а <message> представляет собой сообщения: унарное, бинарное или ключевое слово, включая аргументы.

3.5.1. Унарные сообщения.

Унарные сообщения представляют собой самый простой тип сообщений в Смолтоке. За объектом следует единственное слово (селектор сообщения) и никаких аргументов. Селектор не должен иметь никаких двоеточий. Например:

З negated       100 factorial       Window new       anArray size

theta sin         4 even     

3.5.2. Бинарные сообщения

Бинарные сообщения более сложны, так как они также имеют один аргумент, связанный с этим сообщением. Селектор представляет собой один или два не принадлежащих к алфавиту знака, второй из которых не должен быть знаком минус. Существующие бинарные сообщения в текущем образе Смолтока включают:

+

-

/

*

=

~=

& (логическое "и")

>=

// (деление нацело)

 

, (конкатенация)

| (логическое или)

 

 

Эти бинарные сообщения в последующих главах будут описаны более подробно.

2 + 3

true & false

3 * 4

100 // 17

index - 1

3.5.3. Сообщения ключевые слова

Сообщения ключевые слова это самый сложный тип сообщений. Структура этого типа сообщений состоит из одного или более ключевых слов, каждое из которых имеет свой собственный аргумент. Например, в сообщении

anArray copyFrom: 1 to: 3

copy From: и  to: являются ключевыми словами, а числа 1 и 3 являются аргументами. Заметим, что каждое ключевое слово должно заканчиваться двоеточием. Сообщение не может иметь более, чем 255 ключевых слов. Аргумент может быть выражением, представляющим объект.

Другие примеры:

Index max: limit

anArray at: first put: 'aardvark'

3.6. Правила анализа

Очередность выполнения выражений Смолтока такова:

1) Унарные сообщения слева направо;

2)  Бинарные сообщения слева направо;

3)  Ключевые слова слева направо.

Эти правила совсем непохожи на правила многих других языков, где очередность зависит от функции. Здесь не существует алгебраической иерархии. Однако, как и во многих других языках программирования, круглые скобки используются для изменения порядка очередности. Стоит рассмотреть несколько примеров:

В примере

1.5 tan rounded

унарное сообщение tan послано 1.5, а унарное сообщение rounded послано объекту-результату.

Таким же образом для бинарных сообщений:

a + b * 2

вернет "удвоенное (a+b)". Чтобы получить "(удвоенное b) + a", выражение должно быть записано так:

a + (b * 2)

Скобки также имеют первоочередность по сравнению с унарными сообщениями.

В примере

(anArray at: 14) even

сообщение even посылается 14-му элементу объекта anArray, тогда как в выражении

 anArray at: 14 even

сообщение even посылается 14 и делается попытка использовать результат (true) как индекс для anArray. Это, вероятно, ошибка.

Когда множественное ключевое слово появляется в выражении, то оно анализируется, как одинарное ключевое слова. Например:

frame scale: factor max: 5

содержит селектор ключевого слова (scale:max:) с двумя аргументами factor и 5. Обратно:

frame scale: (factor max: 5)

посылает ключевое слово max: 5 объекту factor и использует результат в качестве аргумента селектору scale: ключевого слова, который послан объекту frame.

Следовательно, важно получить практический опыт, чтобы иметь дело со случаями, когда ключевые слова размещаются вместе:

2 raisedTo: 3 raisedTo: 7

Так как нет селектора сообщения raisedTo:raisedTo:, приведенное сообщение даст в результате ошибку. Также важно заметить, что:

(2 raisedTo: 3) raisedTo: 7 не равно 2 raisedTo: (raisedTo: 7)

Пренебрежение скобками в подобных случаях – это обычный источник ошибок.

Скобки всегда могут использоваться для уточнения целей выражения. Тем не менее пользуйтесь ими осторожно, иначе станут источниками путаницы.

Упражнение 3.1: Определить результаты каждого из следующих выражений Смолтока.

2+3 negated

2 raisedTo: 3 +7

(2 raisedTo: 3) + 7

2 raisedTo: 3 + 7 negated

(2 raisedTo: 3) +7 negated

(2 raisedTo: 3 + 7) negated

3.7. Назначения

Название переменной может относиться в разное время к разным объектам. Выражение назначения может быть использовано для назначения объекта переменной. Оно выглядит так:

<variable> := <message send>

Примеры:

newIndex := 1

this := that

someString := 'Part Two'

anArray := #(1 2 3 4 5)

Выражение назначения возвращает значения (как и другие выражения), поэтому разные назначения могут вводиться вместе.

this := that := theOther

stop := end := 0

Упражнение 3.2: Каков результат каждой из приведенных операций присвоения?

a := 5 – 4.

a := 5 raisedTo: 3.

a := (b := 5) * 66.

a := 3 * (2 raisedTo: (b := 36 // 42)).

3.8. Возврат

После окончания выполнения каждый метод Смолтока возвращает объект отправителю сообщения. Если не определено никакого объекта, то возвращается сам получатель.

Если должны быть возвращены другие объекты, то для возврата объекта и окончания выполнения (хотя он не обязательно должен быть в конце последовательности, являющейся сообщением) используется символ "^". Любой объект может быть возвращен таким образом.

3.9. Блоки

Блок является отложенной последовательностью сообщений. Блок представлен последовательностью выражений (разделенных точками), заключенными в квадратные скобки. Например,

aBlock := [index + 2]

aBlock := [anArray at: newIndex put: 42]

Выражения в блоке выполняются, когда блок получает сообщение value. Например,

aBlock := [a:= 0]. 

aBlock value

Когда aBlock получает сообщение value, то выполняются его выражения в сообщении, в нашем случае вызывая переменную a сослаться на целое число 0.   

Блоки применяются, чтобы ввести управляющие структуры (см. главу 10). Примеры включают:

aNumber even

ifTrue: [aString := 'even']

ifFalse: [aString := 'odd']

 

 

[index > 0]

whileTrue: [index := index 1]

3.10. Снова переменные

Постоянная "частная" память объекта уже введена. Термин переменные экземпляра используется для описания переменных, представляющих частную память объекта, так как они используются для представления частной памяти экземпляра класса. 

Переменные экземпляра применяются только к определенному объекту, в котором они содержатся. Это просто названия указателей на другие объекты и всегда начинают свое существование как nil. Каждый экземпляр класса имеет свою внутреннюю копию переменной экземпляра.

Также предусмотрены и другие типы переменных; кратко их опишем:

Временные

переменные

Существуют только в течение продолжительности определенной деятельности (то есть выполнения метода).

Переменные класса

Совместно используются всеми экземплярами данного класса

Глобальные

переменные

Совместно используются всеми экземплярами всех классов (то есть всех объектов). Не следует использовать глобальные переменные иначе, чем при экспериментах.

Переменные

пула

Используются всеми экземплярами некоторых классов, и потому представляют собой способ создания общего хранилища объектных классов. Переменные пула применяются очень редко. 

 По правилам частные переменные (переменные экземпляра, временные переменные) начинаются с маленькой буквы, тогда как переменные совместного использования (переменные класса, глобальные переменные, переменные пула) начинаются с заглавной буквы.

3.11. Комментарии

Текст, который предназначен только для документации, заключается в двойные кавычки (").

3.12. Резюме

Данная глава содержит введение в синтаксис языка Смолток, охватывая большинство важных свойств. Однако, в дальнейших главах рассматривается более широкое использование синтаксиса. В частности, позднее мы вернемся к разным видам переменных: глава7 дает примеры глобальных переменных, а глава 12 дает примеры дет примеры переменных класса и пула.

Кроме того, мы более детально рассмотрим блоки в главах 10 и 17. Между тем, в следующих нескольких главах мы введем разработанный в VisualaWorks интерфейс пользователя, так что попутно вы продолжаете знакомство с использованием синтаксиса.

 

Наверх страницы

Внимание! Не забудьте ознакомиться с остальными документами данного пользователя!

Соседние файлы в текущем каталоге:

На сайте уже 21970 файлов общим размером 9.9 ГБ.

Наш сайт представляет собой Сервис, где студенты самых различных специальностей могут делиться своей учебой. Для удобства организован онлайн просмотр содержимого самых разных форматов файлов с возможностью их скачивания. У нас можно найти курсовые и лабораторные работы, дипломные работы и диссертации, лекции и шпаргалки, учебники, чертежи, инструкции, пособия и методички - можно найти любые учебные материалы. Наш полезный сервис предназначен прежде всего для помощи студентам в учёбе, ведь разобраться с любым предметом всегда быстрее когда можно посмотреть примеры, ознакомится более углубленно по той или иной теме. Все материалы на сайте представлены для ознакомления и загружены самими пользователями. Учитесь с нами, учитесь на пятерки и становитесь самыми грамотными специалистами своей профессии.

Не нашли нужный документ? Воспользуйтесь поиском по содержимому всех файлов сайта:



Каждый день, проснувшись по утру, заходи на obmendoc.ru

Товарищ, не ленись - делись файлами и новому учись!

Яндекс.Метрика