![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Создание объектов и их наименование
Опоздание конкретного объекта, принадлежащего к определенной декларации класса и имеющего определенные значения атрибутов, выполняется с помощью генератора объектов имеющего вид: new < имя класса> (< совокупность фактических параметров>) или new < имя класса>, для декларации класса без формальных параметров. Результатом вычисления генератора объектов является ссылка на новый объект, указанного в нем класса с конкретными значениями атрибутов. Эта ссылка может быть присвоена переменной типа геal - " ссылка на объект ", которая в дальнейшем служит для обращения к сгенрированному объекту и его атрибутам. Описания переменных, массивов, процедур - функций, а так же спецификации параметров, значениями которых могут быть ссылки на объекты, начинается с указателя типа, который имеет вид: ref (< имя класса >) Конструкция (< имя класса >) называется квалификацией определяемых переменных. Роль квалификации состоит в ограничении области возможных значений ссылочных переменных. Переменная может ссылаться только на область классов, указанных в ее квалификации. Присваивание ссылочной переменной ссылки на конкретный объект производится с помощью оператора присваивания ссылок, в левой части которого пишется переменная, а в правой - генератор объекта. Части разделяются между собой знаком ": - " Пример: ABT1: -new АВТОБУС(8, 10, 3, 3, 120, 5, 45); ИКАРУС: - ABT1; В Симула - 67 объекту можно дать несколько имен, присвоив ссылку на этот объект нескольким переменным. Созданный объект существует в программе до тех пор пока на него имеется хотя бы одна ссылка. Уничтожить ее можно путем присваивания ссылочной переменной значения " none". Кроме того, хранящаяся в ссылочной переменной, ссылка на объект уничтожается при выходе из блока, в котором описана эта переменная и при присваивании ей нового значения. Между ссылками объекта определены два отношения: идентичность == и неидентичность =/=. Отношение х == у истинно в том случае, когда ссылочные переменные х, у указывают на один и тот же объект или одновременно равны none. Отношение х =/= у является отрицанием предыдущего отношения. Иногда, при описании правил действий объекта, возникает необходимость сослаться на токующий объект, т.е. на себя самого. Это можно сделать с помощью конструкции локального объекта. Она имеет вид: this А. где А - имя класса. Значением этой конструкции, которая может употребляться только в теле декларации класса А и декларациях его подклассов, является ссылка на объект А, исполняющий в данный момент свои правила действии. Приведем ряд примеров иллюстрирующих введенные языковые конструкции: 1. Пример декларации класса. class ПЕШКА (НB, НГ, БЕЛАЯ); integer НВ, НГ; boolean БЕЛАЯ; begin integer ТВ, ТГ; ТВ: =НВ; ТГ: =НГ; if СВОБОДНА (ТВ, ТГ) then goto ОСТАНОВКА;
| ТГ: =ТГ + (if БЕЛАЯ then 1 else -1); (*) | if (ТГ> 8 or ТГ< 1) or not СВОБОДНА(ТВ, ТГ) then | go to ВСТАТЬ НЕКУДА;
ОСТАНОВКА: ЗАНЯТЬ (ТВ, ТГ); goto КОНЕЦ; ВСТАТЬ НЕКУДА: ТВ: =ТГ: =0; КОНЕЦ; end ПЕШКА; Здесь описано поведение пешки, которая пытается встать на произвольную клетку шахматной доски: если клетка занята, то пешка пытается встать на клетку доступную из начальной за один ход; если же и она оказывается занятой, то пешка на доску не встает. Клетка задается парой чисел - номерами вертикали и горизонтали шахматной доски. Атрибутами объекта класса ПЕШКА являются: НВ, ТВ - начальная и текущая вертикали. НГ, ТГ - начальная и текущая горизонтали. БЕЛАЯ - булевский атрибут задающий цвет пешки. В данной декларации класса использованы операторы процедуры функции СВОБОДНА и процедуры ЗАНЯТЬ, описания которых не приводим. 2. Генератор объектов new ПЕШКА(3, 2, true); отображает постановку белой пешки на клетку (3, 2). 3. Обозначить через П1 крайнюю левую белую пешку можно задав описание ref(ПЕШКА) П1; и выполнив оператор присваивания ссылок: П1: - new ПЕШКА (l, 2, true);. 4. Начальная расстановка всех черных пешек может быть выполнена с помощью фрагмента программы: ref (ПЕШКА) array ЧЕРНЫЕ ПЕШКИ; integer i; for i: - 1 step 1 until 8 do ЧЕРНОЫЕ ПЕШКИ[i]: - new ПЕШКА (i, 7, false);
|