Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ООАП.doc
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
1.01 Mб
Скачать

Экзаменационный вопрос № 23. Основные понятия языка ооп Smalltalk

История. Разработчик Smalltalk Алан Кей — американский учёный в области теории вычислительных систем.

Smalltalk был создан группой исследователей возглавляемой Аланом Кэйем в исследовательском центре Xerox PARC. Первая реализация, известная как Smalltalk-71, была создана за несколько месяцев как результат спора о том что язык программирования, основанный на идее посылки сообщений, подсказанной Симулой, должен реализовываться на «странице кода». Более поздняя версия, действительно использованная для исследовательской работы, известна сейчас как Smalltalk-72. Его синтаксис и модель исполнения сильно отличались от современного Smalltalk, настолько, что его надо рассматривать как другой язык.

После существенных переработок, которые зафиксировали несколько сторон семантики выполнения для увеличения эффективности, была создана версия известная как Smalltalk-76. В этой версии добавились наследование, синтаксис более близкий к Smalltalk-80, и среда разработки включающую большинство инструментов знакомых сейчас Smalltalk-ерам.

В Smalltalk-80 были добавлены метаклассы, что делало фразу «всё — объекты» истинной путём связывания с индивидуальными классами свойств и поведения (например, поддержки различных способов создания экземпляров). Smalltalk-80 был первой версией, доступной за пределами PARC — сначала как Smalltalk-80 Version 1, розданный небольшому количеству компаний и университетов для «экспертной оценки». Позже, в 1983 году, были выпущены общедоступная реализация, известная как Smalltalk-80 Version 2 — в виде образа (независимый от платформы файл, содержащий объекты) и спецификации виртуальной машины.

Сейчас существует две реализации Smalltalk, являющиеся прямыми потомками Smalltalk-80 — Squeak и VisualWorks. Образ Smalltalk-80 version 2 запущен на Hobbes, виртуальной машине ST-80, реализованной на VisualWorks.

В Smalltalk, переменная - это именованный слот или место, в которое может быть помещен любой объект. Имя переменной должно начинаться с буквы, но в последствии, может содержать любые буквы, числа или символы подчеркивания.

Для структурного программирования достаточно использования следующих основных элементов и операторов:

Математические выражения включают операции

присваивания :=, сложения +, вычитания -, умножения *, деления /,

** возведение в степень,целочисленного деления //, \\ деление по модулю, возвращает остаток от деления. У операций умножения и деления более высокий приоритет, чем у операций сложения и вычитания.

Примеры:

300 + 400 "Сложение"

3.141926 - 3 "Вычитание"

365.25 * 24 "Умножение"

8766 // 24 "Деление целых чисел с отбрасыванием дробной части"

8766/24"Стандартное деление"

Язык Smalltalk использует точку (.), чтобы разделить отдельные выражения. Логические выражения

== — сравнение

~= — «НЕ», отрицание логического выражения (~=<логическое_выражение>)

& — «И», умножение (пересечение) логических выражений (<логическое_выражение1> &<логическое_выражение2>)

| — «|», объединение логических выражений (<логическое_выражение1> |<логическое_выражение2>) Комментарий - это просто текст, заключенный в двойные кавычки. "Пример комментапия"

Объектно-ориентированное программирование в Smalltalk используют

зарезервированные слова:

resWord

self

super

Все среды разработки Smalltalk имеют следующие утилиты/возможности:

Workspace — окно, в котором можно ввести любой код и выполнить одно из следующий действий: Evaluate it — выполнить блок кода, Display it — выполнить и вывести результат, Inspect it — выполнить и просмотреть результат в отдельном окне Object Inspector.

Inspector — позволяет просматривать внутреннее строение объекта: его значение, внутренние поля, индексированные поля для объектов с переменной длиной. Значения полей выводятся в окошке, аналогичном Workspace, в котором можно ввести любое выражение, нажать Accept, и полученное значение будет занесено в поле. Также для любого из полей можно вызвать отдельное окно Inspector.

Class Browser — утилита, в которой, собственно, и происходит разработка приложений. Class Browser включает в себя три обязательных элемента (панели): иерархия всех классов в системе, список полей/методов выбранного класса, исходный текст выбранного метода. Еще методы могут быть разбиты на категории, что облегчает навигацию, но никак не влияет на их выполнение. Одновременно может быть открыто несколько окон Class Browser. Создавать приложения в нем значительно удобнее, чем при файловом представлении исходного кода, хотя поначалу это непривычно.

Этому также способствуют всевозможные функции поиска:

— найти класс по имени/шаблону;

— найти методы по имени/шаблону;

— найти методы, которые вызывают метод с заданным именем/шаблоном;

— найти методы, содержащие заданный текст, и т.д.

Существует также инструмент Method Finder, в котором через точку вводятся получатель, параметры, результат и выдается список методов, которые удовлетворяют заданному критерию. Например, зададим следующий критерий: "3 . 4 . 7". Тогда результатом по-иска будет список следующих методов класса SmallInteger: +, bitOr:, bitXor:.

Debugger — также является основным инструментом разработки. Так как Smalltalk является динамическим языком, то в нем можно ввести синтаксически корректную конструкцию, которая вызовет ошибку во время выполнения из-за того, что в объекте-получателе не найден нужный метод.

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

Дело в том, что подход к написанию программ в Smalltalk существенно отличается от традиционного.

Структура программы на Smalltalk имеет следующий вид:

|z x y a b c d| “объявляем переменные”

(Prompter prompt: ’Введите a’) asNumber].

a:= a asInteger.”Вводим a”

(Prompter prompt: ’Введите b’) asNumber].

b:= b asInteger.

x:=a+b.

(Prompter prompt: ’Введите c’) asNumber].

c:= c asInteger.

(Prompter prompt: ’Введите d’) asNumber].

d:= d asInteger.

x:=a+b.

y=c+d.

z:=x+y.

printInteger z. “вывод на экран значения z

]