скачать рефераты
  RSS    

Меню

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

скачать рефераты

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

дов.

Ключевым понятием для спецификации представления является по

тие элемента хранения. Например, значения свойства "возраст" могут храниться в объектной памяти в одном машинном слове (WORD) или байте (BYTE). Типы WORD и BYTE относятся к категории машинно-

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

деления интерпретации значения, хранящегося в таком элемен

лое со знаком, REAL - действительное число и др. Встроенность ме

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

мощью специальных функций: SIZE () и TSIZE (). На

NAL. (Здесь / выполняет роль префикса условия). В разных ре

менты хранения. Например, TSIZE (ADDRESS) = 2(байта) для 16-разрядной ЭВМ в языке Модула-2 (реализация на ЭВМ СМ-4), в то же вре

мя TSIZE (ADDRESS) = 4 для другой версии этого же языка при ре

лизации на ПЭВМ типа IBM PC.

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

вания конкретных типов. Такое агрегирование связано с объ

ем нескольких свойств объекта в систему классообpазующих пpи

тоит из" (con-of). Например, отношение A con-of (B,C), где А,В,С - свойства, может быть реализовано в языке про

ного типа записи:

TYPE A=RECORD

: B;

: C

END

Таким образом, запись - это агрегат, составленный из раз

ных свойств. Агрегирование однородных свойств связано с ис

нием понятия массива. Например, декларация

TYPE A = ARRAY [1:3] OF B

определяет агрегат А con-of(B,B,B). Размер элемента хранения объекта-агрегата определяется простым суммированием размеров эле

тов хранения его компонент, для последнего примера:

TSIZE (A) = 6 / TSIZE(B)=2.

Спецификация имманентных свойств типа "обладать способностью" (спе

цификация методов, действий) связана с использованием особой раз

новидности абстрагирования - опpеделением сигнатур, pеа

но процедурными типами. Понятие сигнатуры связано с со

стью операций (действий), производимых над объектом. Та

кая точка зрения подразумевает "пассивность" объекта - ведь дей

дится над ним. Например, объект класса ВЫКЛЮЧАТЕЛЬ можно Вклю

чить и Выключить. Существует и прямо противоположная точка зрения (теория акторов, язык АКТОР), в соответствии с ко

чае сигнатура - это совокупность его способностей.

Для опpеделения сигнатур используются процедурные типы. В об

щем случае любой процедурный тип определяет:

- класс возможных действий;

- классы объектов, над которыми могут быть

произведены эти действия.

Например, спецификация

TYPE DST = PROCEDURE (VAR ВЫКЛЮЧАТЕЛЬ)

определяет возможные дей

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

ся как элементы класса DST только при условии, что заголовки про

цедур, описывающих эти действия, определены в следующем виде :

PROCEDURE Включить (VAR S: ВЫКЛЮЧАТЕЛЬ);

PROCEDURE Выключить (VAR S: ВЫКЛЮЧАТЕЛЬ);.

Термин сигнатура относится к математике, в програмировании он ис

пользуется как синоним понятия класс действий (методов). В Модуле-2 существует конкретный процедурный тип, объектами ко

го являются процедуры без параметров:

ТYPE PROC = PROCEDURE (); .

Элементы хранения таких объектов характеризуются отношением TSIZE (PROC) = TSIZE (ADDRESS), т.е. в качестве объектов этого кон

кретного процедурного типа используются адреса входов в со

ствующие процедуры (точки запуска - активации процедур). Это отношение спpаведливо для любого пpоцедуpного типа. В этом смы

цификация представления методов ничем не отличается от спецификации представления любых других непроцедурных классов.

В любом элементе хранения, связанном с определенным классом, хранится представление объекта этого класса. Такое представление об

разуется значениями, записаными в элемент хранения. Любое свой

во в ЭВМ с ограниченной разрядной сеткой (а она всегда ог

на) может представляться конечным множеством значений. Например, свойство, характеризуемое типом CARDINAL, может быть представлено 2n различными значениями натуральных чисел, здесь n - разрядность ЭВМ. Для 16-разрядного слова этот спектр значений включает на

ральные числа от 0 до 216 - 1 = 65 535. Свойство, хаpак

мое типом CHAR (литера), может быть представлено 28 = 256 раз

ми символами (из набора ASCII и гpафических символов), поскольку элемент хранения такого свой

ва имеет размер в один байт: TSIZE (CHAR) = 1.

Любое значение, которое может представлять свойство, харак

емое тем или иным типом, называется константой этого типа. Так, на

пример, 'A' - константа типа CHAR, а 177 - константа типа CARDINAL и INTEGER. Поскольку множество констант любого типа ко

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

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

мер, 216 различных значений кардинального типа, разумно за

нить такое перечисление ссылкой в описании программы на кон

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

ного конкретного типа.

В контексте нашего пособия важно отметить, что представление объ

екта значениями может быть сконструировано путем именования констант типа. Для реализации этой возможности используется пе

ление, например:

TYPE Нота=(До, Ре, Ми, Фа, Соль, Ля, Си); .

Здесь представление любого объекта Нота ограничивается ис

ванием семи констант. Поскольку имена таких констант наз

гирования типа.

На базе класса с ограниченным спектром значений можно скон

ровать новый класс объектов с более широким спектром. Такое кон

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

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

ше тип "Нота", можно сконструировать класс "Аккорд", эле

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

ве базового перечислимого типа:

TYPE Аккорд = SET OF Нота; .

Класс "Аккорд" включает в себя уже не 7, а 27 объектов, пред

вление которых определяется множественными константами. Среди них:

{ До } -"чистая" нота "До";

{ До, Ми } -аккорд, составленный из двух нот;

{ До..Си } -аккорд, включающий в себя всю октаву;

{} - аккорд "молчания", не содержащий ни одной ноты.

Элемент хранения объекта "Аккорд" должен допускать размещение в нем 27 различных значений, следовательно, минимальным адре

ментом, пригодным для хранения аккордов, является байт:

TSIZE(Аккорд) =1.

Объект базового класса (Нота) в этом примере также будет раз

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

ставления будут лишь 3 бита. Множественный тип, пос

ный на основе отрезка типа [0..15], образует стандартный тип

BITSET = SET OF [0..15].

Нетрудно заметить, что TSIZE(BITSET)=2 (байта). Размер эле

нения любого множественного типа в байтах определяется вы

ем

N DIV 8 +(N MOD 8) DIV (N MOD 8).

Здесь N - число констант базового типа, MOD и DIV - операции со

ветственно деления по модулю и нацело (предполагается, что 0 DIV 0 = 0).

Фактически размер элемента хранения множественного типа оп

ется тем, что в качестве представления объекта такого типа ис

зуется характеристическая функция множества. Например, пред

вление аккоpда {До,Ми,Си} в байте будет выглядеть сле

зом:

Си Ля Соль Фа Ми Pе До

7 6 5 4 3 2 1 0

Над объектами множественного типа определены функции, свя

ные с элементарными операциями над множествами (объединение, пе

чение, разность, симметрическая разность); проверкой сос

лючением базовых объектов в множество и т.п. Подробнее об этом можно про

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

Использование характеристической функции для представления объ

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

ту с такими объектами на уровне элементов хранения.

III. ИДЕНТИФИКАЦИЯ ОБЪЕКТОВ

Идентификация именованием.- Квалидент.- Дистанция доступа.- Опеpатоp пpисоединения.- Индексиpование.- Идентификация ука

ем.- Свободный и огpаниченный указатели.- Тип ADDRESS.- Квалидент с постфиксом "^".

Идентификация объекта заключается в определении (нахождении) его элемента хранения и получении доступа к представлению объ

та - значениям его свойств.

Существует два основных способа идентификации объекта: име

ние и указание. Именование заключается в назначении объекту оп

ленного имени. Такое назначение производится на фазе тран

ляции, и в процессе выполнения программы объект не может быть пе

ван. Например, декларация

VAR A,B: Объект

определяет наличие в про

грамме двух объектов с именами А и B соответственно, каждый из которых имеет индивидуальный элемент хра

ту А по имени В в надежде, что "он Вас услышит" невозможно, не

ект А новым именем ВОВА". Имя - это атрибут программы, обес

ющий во всех ситуациях доступ к одному и тому же объекту. По

цесс программирования и выполнения программы является процессом из

ции.

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

ми - квалидентами, они реализуют дистанционный доступ к свой

вам объекта. Например,

TYPE Объект = RECORD

B : Дата_рождения; П : Bес

END;

VAR A,B : Oбъект; .

Квалидент A.B откроет доступ к дате рождения объекта A, B.B - к дате рождения объекта B и т.д. Длина дистанци доступа опре

ся количеством уровней агрегирования свойств объектов клас

са. В этом примере Длина=1. Если уточнить свойство Дата_Рож

ния:

TYPE Дата_рождения = RECORD

Г: Год; М: Месяц; Д: День

END;

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

ет длину дистанции, равную 2: А.В.Г. Простой идентификатор мож

но рассматривать как частный случай квалидента с нулевой дис

ей доступа.

Дистанционный доступ может существенно увеличить время иден

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

ния

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

Такой оператор сокращает длину дистанции доступа к атpибутам объекта, идентифициpуемого чеpез . Если чис

ло таких атpибутов в пpисоединяемом фpагменте велико, то ис

pатоpа пpисоединения может существенно сокpатить вpемя вы

ния этого фpагмента пpогpаммы.

Вложение операторов присоединения обеспечивает дополнительное со

ращение дистанции доступа. Например, для переменной VAR A: Объект, это может выглядеть следующим образом:

WITH A DO

;

WITH B DO

через имена Г,M,D>

END

END.

Имена объектов и их свойств могут дублировать друг друга. Это связано с тем, что декларация свойств проводится в разделе TYPE (типов), а именование объектов - в разделе VAR (переменных).

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

ципиально разные понятия. Но вместе с тем оператор WITH фор

шивание таких понятий (см. приведенный выше пример: первый WITH присоединяет к объекту, а второй к его свой

ву). Такое смешивание в общем случае требует повышенного вни

соединяемых фрагментов. Например,

VAR A,B: Объект; C: Год;

BEGIN . . .

WITH B DO C:=Г END; B.B.Г:=C

WITH B DO C:=Г; B.Г:=C END

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 ни на что не указывает.

Страницы: 1, 2, 3, 4, 5, 6, 7


Новости

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

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

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.