Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oop-VisualWorks.pdf
Скачиваний:
28
Добавлен:
13.02.2015
Размер:
1.23 Mб
Скачать

Глава 1

Структура классического Смолтока

Классическим Смолтоком мы называем реализации, ориентированные на разработку приложения одним программистом (например, Small- talk-80, VisualWorks-3.0, Visual Smalltalk, Smalltalk Express, VisualAge for Smalltalk 4.0, . . . ). Данная глава кратко и с небольшими изменениями повторяет материал глав 1, 2 из [15]. Те, кто читал эту или другие книги по смолтоковским системам (например, книги [2], [3], [4], [8]), работал в смолтоковских средах, могут эту главу пропустить, перейти к следующим главам, в которых описываются существенные новшества среды VisualWorks 7.4.11, и использовать первую главу только как справочник по объектно-ориентированной терминологии.

1.1.Основные определения и термины

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

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

1 Всюду далее рассматривается некомерческая версия VisualWorks 7.4.1.

6

Глава 1. Структура классического Смолтока

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

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

В правильно созданном объектно-ориентированном приложении в любой момент можно изменить внутреннюю структуру объекта и реализацию его методов и это не скажется на работе остальных частей приложения. Такое объединение в объекте его структуры и поведения называется инкапсуляцией и позволяет скрыть структуру и данные внутри объекта, делая их невидимыми для всех, за исключением методов самого объекта, тем самым снижая сложность использующей объект программы. Инкапсуляция позволяет рассматривать объекты как изолированные «черные ящики», которые знают определенные действия и умеют их выполнять, функционируя независимо друг от друга и скрывая за интерфейсом детали реализации. Поэтому объекты в объектно-ориентирован- ных системах можно рассматривать как минимальные (в смысле самодостаточности) единицы инкапсуляции, позволяющие навести должный порядок среди данных и обрабатывающего эти данные кода.

К объекту может обращаться и программист, и любой объект системы, посылая нужному объекту сообщение, которое представляет предписание (просьбу, приказ, требование) выполнить некоторые действия. Если предписание может быть выполнено получившим сообщение объектом (его называют объектом-получателем, или просто получателем), то оно выполняется и, как результат, объекту, пославшему сообщение, может возвращаться некоторый объект (возвращаемый объект). Если по какой-либо причине объект, получивший сообщение, не может его выполнить, он в какой-то форме информирует об этом пославший сообщение объект (или систему времени выполнения). В других терминах: объект-получатель — это сервер, предоставляющий обслуживание клиенту — объекту-отправителю.

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

1.1. Основные определения и термины

7

сообщения, в ответ на которые выполняют действия, описанные в методах, соответствующих сообщениям.

В объектно-ориентированном программировании объекты, имеющие общие свойства и поведение, используют общее определение состояния и поведения, которое осуществляется классами. На класс возлагается обязанность по «хранению» поведения и информации о внутренней структуре объектов. Наследование позволяет разделять между несколькими классами поведение, внутреннюю структуру и, возможно, данные. Другими словами, класс — это шаблон, описывающий объекты определенной структуры и поведения и хранящий информацию, общую для всех таких объектов.

Каждый класс имеет уникальное идентифицирующее его имя. Имена классов в Смолтоке всегда начинаются с прописной буквы, поскольку классы являются объектами, доступными для многих других объектов системы. В классическом Смолтоке — для всех объектов системы. Имена всех таких объектов содержатся в системном словаре с именем Smalltalk, и эти объекты могут вызываться по имени в любое время и в любом месте. В системе VisualWorks это не так. Подробно это будет рассматриваться в главе 3.

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

Взаимодействие классов и порядок среди классов достигается с помощью введения механизма наследования. По своей сути механизм наследования прост: один класс, называемый в рамках этих отношений суперклассом, полностью передает другому классу, который называется его подклассом, свою структуру и поведение, то есть все свои переменные и все методы. Что дальше делать с «этим богатством» определяет подкласс: он может добавить в структуру и поведение что-либо свое, что-то не использовать вообще, что-то использовать без изменений, а что-то изменить. Таким образом, класс с помощью подклассов «уточняет» поведение экземпляров, и, как результат, создаваемые объекты становятся более специализированными.

Поскольку поведение объектов определяется методами, в результате переопределений в классах, связанных наследованием, могут возникать (и возникают) методы с одним и тем же именем, но с разными реали-

8

Глава 1. Структура классического Смолтока

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

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

Все классы системы являются подклассами класса Object2, в котором определены структура и поведение, общие для всех объектов системы. Object является базовым классом иерархии и единственным классом, не имеющим суперкласса. Цепочка класс-суперкласс всегда завершается классом Object.

1.2.Метаклассы

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

исами классы являются объектами, создаваемыми в соответствии с шаблоном, заключенном в метаклассе данного класса. При этом класс

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

Иерархия метакласссов повторяет иерархию их классов и ее базовым классом является метакласс класса Object.

Каждый метакласс в системе, являясь ее объектом, является экземпляром класса Metaclass, который, являясь шаблоном для метаклассов, описывает общие свойства тех объектов, которые умеют создавать единственный объект-класс.

Метакласс класса Object в системе Смолток является подклассом класса с именем Class,. Таким образом, все метаклассы являются подклассами класса с именем Class, одновременно являясь экземплярами класса Metaclass.

Реализованная в Смолтоке иерархия классов имеет одно очень важное следствие: цепочки суперклассов для самого класса и для его метакласса разные. Например, класс Integer в VisualWorks имеет цепочку суперклассов

2 Смолтоковский код далее всегда будет печататься рубленым шрифтом.

1.2. Метаклассы

9

 

Integer

Number

Magnitude

Class

Integer class

Number class

Magnitude class

 

Metaclass

 

 

Class class

 

Behavior class

Object class

Metaclass class

Behavior

Object

Рис. 1.1: Двойная иерархия класс/метакласс

Integer, Number, ArithmeticValue, Magnitude, Object.

А его метакласс (класс Integer class) имеет цепочку суперклассов

Integer class, Number class, ArithmeticValue class, Magnitude class, Object class, Class, ClassDescription, Behavior, Object.

Итак, в Смолтоке есть два вида объектов: те, которые могут создавать экземпляры, и те, которые не могут этого делать. Классы Class,

Metaclass, ClassDescription и Behavior описывают структуру и поведение тех объектов, которые могут создавать экземпляры.

Из сказанного выше следует, что класс Metaclass занимает в системе особое место, поскольку порождает как свои экземпляры все метаклассы системы, в том числе и собственный метакласс Metaclass class, и, с другой стороны, сам является экземпляром собственного метакласса Metaclass class. В этом месте в системе специально создана «особенность», позволяющая избежать бесконечной (reductio ad infinitum) последовательности метаклассов, «отождествляющая» классы Metaclass и Metaclass class (см. рисунок 1.1).

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

Как итог, сформулируем те основные правила, которым подчиняется иерархия классов системы Смолток:

1)Каждый класс, кроме самого класса Object, не имеющего суперкласса, имеет один непосредственный суперкласс и, в конечном счете, каждый класс является подклассом класса Object.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]