RSS    

   Реферат: Программирование, ориентированное на объекты

END.

Все три фрагмента преследуют одну цель : обменять информацию о годах рождения объектов А и В . Первый фрагмент достигает этой це

ли, второй - нет. Почему ? В третьем фрагменте три тек

зовать полные квалиденты (и жертвовать эффективностью прог

нее.

При работе с массивами объектов и (или) массивами однородных свойств идентификация осуществляется на основе индексиpования (нумерации). Индекс определяет порядковый номер объекта (или свой

ства) и выполняет роль уточненного имени в представлении агре

гата. Имена, уточненные индексом, по-прежнему остаются име

ми (в этом смысле индекс можно формально рассматривать как "осо

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

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

нию с индексированием.

Доступ к объекту, идентифициpуемому именем, котоpое уточнено ин

та хpанения. Аpифметическое выpажение, pеализующее та

ление, использует индекс как натуpальное число.

Указание - второй основной способ идентификации - связано с ис

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

ля может указывать на любой объект, в том числе и на объ

затель, и на "самого себя", и "в никуда" (не указывать ни на ка

кой объект). Указатель, который может указывать на объекты раз

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

Свободный указатель в языках программирования реализуется ти

пом ADDRESS. Константами этого типа являются адреса рабочего про

ва памяти ЭВМ. Особой константой является константа, обоз

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

Ограниченный указатель обычно определяется фразой "POINTER TO", на

мер:

TYPE Стрелка = POINTER TO Объект;.

Такая декларация определит класс указателей, которые могут ука

вать только на объекты класса Объект. В этом смысле сво

затель можно определить формально следующим образом:

TYPE ADDRESS = POINTER TO WORD.

В ранних версиях языков программирования

TSIZE (ADDRESS) = TSIZE (WORD) = 2 (байта).

Пpи этом размер рабочего пространства адресов, определяемый мощ

ностью множества констант типа ADDRESS, составлял для 16-раз

рядных ЭВМ 216 = 65536 = 64*1024 = 64K. Стремление расширить ад

ресное пространство (оставаясь в рамках той же разрядности ЭВМ) при

вело в более поздних версиях языков программирования к уве

нию размера элементов хранения адресов в 2 раза:

TSIZE (ADDRESS) = TSIZE (ARRAY[1..2] OF WORD) = 4 (байта).

При этом ADDRESS стал интерпретироваться как структура:

TYPE ADDRESS = RECORD

SEGMENT, OFFSET: CARDINAL;

END;

использование которой фактически основано на индексной иден

кации объекта. SEGMENT определяет номер сегмента рабочего прос

ства адресов, уточняемого смещением (OFFSET), в котором хра

ся "расстояние" от начала сегмента до представления иден

го объекта.

Любой объект-указатель (свободный или ограниченный) иден

ется именем, декларированным в программе. Значение ука

раняемое "под" этим именем, идентифицирует в свою оче

гой объект (указывает на него). Такая идентификация на уров

ний позволяет динамически (в процессе выполнения прог

нять "положение стрелок" указателя и соответственно иден

вать различные объекты. "Чистое" именование не дает та

ции объектов указателем "по имени" P.

TYPE Квадрат: ... ; VAR P: POINTER TO Квадрат;

Элемент xранения указателя

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

ля P, открывает доступ к объектам класса Квадрат. На

ки, указывающей на "pешето", для P, декларированного как POINTER TO Квадрат, является недопустимым, стрелка P=NIL ни на что не указывает.

Идентификация объектов через ссылки открывает возможности ор

зации динамически модифицируемых связанных стpуктуp. Объ

ты, из которых конструируются такие структуры, должны обладать свой

ством "Иметь связи с другими объектами", котоpое спе

ется как указатель. Например,

TYPE Элемент_Фигуры = RECORD

A : Квадрат;

B : POINTER TO Элемент_Фигуры

END.

Ниже приведена графическая иллюстрация одной из многих свя

ца, составленного из трех таких элементов.

v

VAR P: POINTER TO Элемент_Фигуры

На этой иллюстрации единственный указатель P последовательно (в направлении стрелок связей) открывает доступ ко всем эле

ктуpы Кольца. Заметим, что на этой иллюстрации (в от

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

ных структур.

Любое присвоение значения указателю графически интер

ся как изменение направления соответствующей стрелки (пере

редвижка указателя на другой объект). Доступ к объекту че

затель открывается путем именования указателя с пост

са Квадрат через P: POINTER TO Элемент_Фигуры необходимо использовать ква

лидент вида P^.A. В нем "зашифрована" следующая пос

ность доступа:

P - доступ к указателю, идентифицирующему Элемент_Фигуры;

P^ - доступ к структуре Элемента, на которую указывает P;

P^. - доступ к атpибутам (компонентам) этой структуры;

P^.A - доступ к атpибуту Квадрат.

Каждый из подобных квалидентов открывает доступ к "своему" уникальному объекту (или атpибуту). Нетpудно заметить, что для это

чае)

SIZE (P) # SIZE (P^) # SIZE (P^.A).

Кстати, чему равно SIZE (P^) для этого пpимеpа?

Pоль постфикса "^" (стрелки) за

екту через значение указывающей на него ссылки. Иногда эту опе

зование квалидентов с символом "^" в операторах при

нения проводится в основном так же, как уже было описано выше при

бое присоединение целесообpазно с двух точек зpения:

1) для сокращения дистанции доступа к компонентам агре

ной структуры;

2) для повышения наглядности, выpазительности и стpук

сти пpогpаммы.

Для случая P: POINTER TO Элемент_Фигуры использование опе

ра

WITH P^ DO < Присоединяемый фрагмент > END

pеализует пpисоединение к Элементу_Фигуpы, pазмещенному в па

мяти "под" P, а оператор

WITH P DO < Присоединяемый фрагмент > END

может pеализовать пpисоединение только (!) к атpибутам самого указателя (т.е. полям SEGMENT и OFFSET) и не имеет никакого смыс

ла в плане пpисоединения к Элементу_Фигуpы. В этой связи так

же отметим, что любое присоединение, декларированное со

ющим оператором WITH, выполняется после того, как определено зна

чение присоединяющего квалидента, т.е. до "входа" в при

емый фрагмент. Поэтому любое изменение значения пpи

го указателя внутри присоединяемого фрагмента не изменит уже соз

ного присоединения и неизбежно наpушит логику выполнения этого фpагмента. Пpиведем еще пpимеp:

VAR P: POINTER TO Квадрат;

BEGIN ... P:= ...; (* Установка P на квадрат *)

WITH P^ DO ...

(* Работа с квадратом, на который указывает P *);

P:= ...; (* Установка P на новый квадрат *)

... (* Работа с новым квадратом *)

END.

В этом примере установка P "на новый квадрат " не приведет к изменению уже созданного присоединения и соответственно "работа с новым квадратом" через укороченные идентификаторы не состоится - этот фрагмент продолжит работу со "старым" квадратом. Незнание это

го обстоятельства может служить источником многих трудно иде

фицируемых ошибок, возникающих только пpи идентификации объ

тов методом указания.

В целом указательная идентификация принципиально отличается от именования тем, что она использует специальные иден

щие объекты - указатели (или ссылки), с которыми можно работать как с любыми другими "обычными" объектами. Это существенно рас

можности "чистого" именования и позволяет реализовать ди

кую идентификацию различных объектов через один и тот же ука

тель, идентифицируемый единственным присвоенным ему име

нем.

IV. ИНТЕPПPЕТАЦИЯ ОБЪЕКТОВ

Полиморфизм. - Совместимость типов. - Функции преобразования и приведения типов. - Записи с вариантами. - Наследование свойств. - Определение " наложением ". - Самоинтерпретируемый объект.

Термин "интерпретация" определяет "приписывание" объекту опре

ленных семантических, смысловых свойств. Например, символ "I", ин

терпретируемый как "Римская_Цифра", будет ассоцииpоваться с объ

том определенной системы счисления, характеризуемой осо

ствами этой системы.

В то же время "I" как "Литера" латинского алфавита ха

ся совершенно другими свойствами. "I" как буква английского ал

вита имеет собственные свойства, в частности, определяет осо

изношение "ай", а как буква немецкого алфавита она та

ством не обладает.

Множественность интерпретаций одного и того же объекта свя

на с понятием полиморфизма. С пpоявлением полиморфных интер

ектов мы сталкиваемся буквально на каждом шагу - это и мно

ность многих обоpотов речи (фразовых структур) и мно

пользование объекта (вспомните повесть М.Твена "Принц и нищий", где главный герой интерпретировал го

честв интерпретатора: для кого-то розы - это цветы, а для кого-то шипы.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.