Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[1]

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

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

Классы и экземпляры

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

Каждый класс имеет имя, которое описывает тип компонента системы, представляемый его экземплярами. Например, класс, экземпляры которого представляют последовательности символов, называется String (Строка); класс, экземпляры которого представляют положение на плоскости, называется Point (Точка); класс, экземпляры которого представляют прямоугольные области, называется Rectangle ( Прямоугольник); класс, экземпляры которого представляют вычислительные процессы, называется Process (Процесс).

Каждая переменная в принадлежащей объекту памяти ссылается на некоторый объект, называемый значением этой переменной. Большинство таких переменных имеют имена. Объекты, к которым можно получить доступ из конкретного места программы, определяются через доступные имена переменных. Имя переменной -простой идентификатор, то есть последовательность букв и цифр, начинающаяся с буквы. Например,

indexbin14Total

initialIndexHouseholdFinances

textEditorRectangle

bin14IncomeReasons

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

Существуют два вида частных переменных, доступных только одному объекту.

1.Переменные экземпляра - существуют в течение всего времени жизни объекта.

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

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


нения, и уничтожаются, когда метод завершает свою работу возвращением значения.

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

3.Переменные класса - доступны всем экземплярам данного класса.

4.Глобальные переменные - доступны всем экземплярам всех классов (то есть всем объектам системы).

5.Переменные пула - доступны экземплярам некоторого подмножества классов системы.

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

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

Программирование в системе Smalltalk состоит из создания классов, экземпляров классов и последовательности сообщений, которыми обмениваются эти объекты!

Подклассы, суперклассы, иерархия классов

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

Способ обойти вышеуказанное ограничение - разрешить некоторое пересечения между классами. Мы называем такой подход наследованием. В языке Smalltalk наследование допускает такую ситуацию, при которой одному классу разрешается содержать в себе все экземпляры другого класса, которые "наследуют" от первого структуру его экземпляров и их поведение. В такой ситуации мы будем говорить, что один класс является подклассом другого класса, который для первого является суперклассом.

В языке Smalltalk программист всегда создает новый класс как подкласс уже существующего класса. Системный класс Object (Объект) описывает общие свойства всех объектов системы, поэтому любой класс системы является как минимум подклассом класса Object. Описание класса явно указывает его суперкласс, и то,


чем его экземпляры отличаются от экземпляров суперкласса. Подкласс тоже класс, следовательно, он сам может иметь подклассы. Каждый класс имеет один суперкласс, в то время как несколько классов могут быть подклассами одного и того же суперкласса; таким образом, структура классов образует дерево, которое определяет иерархию классов. Класс связан с последовательностью классов, от которых он наследует переменные и методы. Эта цепочка наследования начинается с его непосредственного суперкласса и заканчивается классом Object. Object - единственный корневой класс системы; он один не имеет суперкласса.

Приведем некоторую часть иерархии классов системы Smalltalk-80 (отступ обозначает подкласс).

Object Magnitude Character Date Time Number

Float

Fraction Integer

LargeNegativelnteger LargePositivelnteger SmallInteger LookupKey Association Collection

SequenceableCollection LinkedList

Semaphore ArrayedCollection Array

WordArray DisplayBitmap

RunArray

String Symbol

Text

ByteArray Interval

OrderedCollection SortedCollection Bag

MappedCollection

Set

Dictionary

IdentityDictionary

Point

Rectangle

Stream

PositionabIe5tream ReadStream WriteStream

ReadWriteStream ExternalStream FileStream

Random Boolean

False

True

ProcessorScheduler Delay

SharedQueue Behavior

ClassDescription

Class

MetaClass

BitBlt

CharacterScanner Pen DisplayObject DisplayMedium Form Cursor

DisplayScreen InfiniteForm OpaqueForm

Path Arc

Circle Curve Line

LinearFit Spline

UndefinedObject



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5]