Название: Динамические объекты
Вид работы: доклад
Рубрика: Математика
Размер файла: 14.2 Kb
Скачать файл: referat.me-216727.docx
Краткое описание работы: Объектные переменные вo многом подобны обычным переменным турбо паскаля, в частности, их можно размещать в динамической памяти. Турбо паскаль содержит средства, облегчающие размещение объектных переменных в куче и их удаление из нее.
Динамические объекты
ДИНАМИЧЕСКИЕ ОБЪЕКТЫ
Объектные переменные вo многом подобны обычным переменным Турбо Паскаля, в частности, их можно размещать в динамической памяти. Турбо Паскаль содержит средства, облегчающие размещение объектных переменных в куче и их удаление из нее, например:
var
Pline: ^Tline;
.......
New(Pline, Init):
.......
В этом примере размещение объектной переменной (на нее указывает PLINE) в куче сопровождается одновременным обращением к конструктору TLINE.INIT для инициализации объекта и связывания виртуальных методов с вновь созданной переменной: в процедуре NEW допускается в качестве второго параметра указывать обращение к конструктору.
Более того, процедуру NEW можно вызывать и как функцию - в этом случае она возвращает значение типа POINTER, указывающее на динамически распределенный объект:
PLine := New(TLine);
или
PLine := New(TLine, Init):
Обратите внимание: первым параметром процедуре New передается указатель на динамически распределяемый объект, в то время как первым параметром функции NEW - тип распределяемого объекта. И в том, и в другом случае в качестве втором параметра обращения допускается использовать вызов конструктора, однако имя конструктора не может быть составным -ведь в момент обращения динамический объект еще не создан. Например, оператор
New(Pline, PLine^.Init);
вызовет сообщение об ошибке.
При обращении к NEW с одновременным вызовом конструктора динамическая память резервируемая с помощью специального программного кода, входящего в любой конструктор и вызываемого до начала работы исполняемой части конструктора (до begin). При этом динамическая память может оказаться исчерпанной. В этом случае стандартная функция обработки ошибок администратора кучи выдает значение 0, что вызывает аварийное завершение программы с кодом ошибки 203. Если используется нестандартная функция обработки ошибок и эта функция возвращает 1, конструктор пропускает операторы после begin и возвращает NIL. Таким образом гарантируется, что исполняемые операторы конструктора будут работать только при условии нормального распределения динамической памяти. Однако в теле конструктора может быть создан новый динамический объект, в нем - свой и т.д. Турбо Паскаль
допускает произвольную глубину вложенности конструкторов. Если на каком-то уровне обнаружится нехватка динамической памяти, необходимо ликвидировать всю цепочку успешно распределенных объектов. Чтобы эта операция стала возможной, в Турбо Паскаль введена стандартная процедура без параметров FAIL, которая может вызываться только из конструктора и которая освобождает уже выделенную конструктором память, завершает его работу и возвращает NIL.
Для удаления динамического объекта из кучи используется особый метод - деструктор, описываемый с помощью зарезервированного слова DESTRUCTOR. В этом методе можно предусмотреть все действия, связанные с ликвидацией динамического объекта (т.е. переменной объектного типа, размещенной в динамической памяти), например, осуществить нужную коррекцию списка динамических объектов. Обращение к деструктору указывается вторым параметром при вызове процедуры DISPOSE, например:
..........
type
TLine = object(Point)
......
Constructor Init;
Destructor Done;
end;
.......
New(PLine, Init); {Размещение динамического объекта}
.......
Dispose(PLine, Done); {Удаление динамического объекта}
.......
При необходимости деструктор, как и любой другой метод объекта
(кроме конструктора!), можно объявить виртуальным.
Похожие работы
-
Имитационная модель системы автоматизированного проектирования абстрактного этапа реализации устройств управления
Для дискретных систем управления интерпретируемых конечными автоматами предложена система их проектирования в виде параллельно функционирующих стандартных компонентных автоматов.
-
Развитие графоаналитического подхода «узел-функция-объект» как способа представления знаний
В последнее время наиболее развитыми странами считаются те страны, в которых наиболее развиты экономические отношения, как внутренние, так и внешние. Давно понятно, что успешное развитие государства невозможно без непрерывного развития экономического сектора, который в свою очередь состоит из хозяйствующих субъектов и отношений между ними.
-
Приближенное вычисление интеграла
Содержание Введение 2 1. Различные методы вычисления определенных интегралов 3 1.1. Метод Симпсона для интегрирования функций заданному промежутку и его реализация на языке Pascal 4
-
Вычисление интеграла фукции f (x) (методом Симпсона WinWord)
С О Д Е Р Ж А Н И Е Введение 2 Глава 2. Постановка задачи 3 Глава 3. Математическая часть 4 Глава 4. Описание метода решения задачи 9 Глава 5. Описание алгоритма решения задачи 10
-
Разработка программного обеспечения
В работе рассматривается решения нелинейных уравнений методом итераций.
-
Динамические структуры данных. Решение задач. Стек. Очередь. Дек
Стек: основные понятия и закономерности, описание переменных, процесс инициализации, проверка на чистоту и вершина. Механизм считывания элемента с последующим удалением. Понятие и характеристики очереди. Дек: порядок добавления и удаления элементов.
-
Моделирование систем
Составление таблицы значений функции алгебры логики и нахождение всех существенных переменных. Связный ориентированный и взвешенный граф. Построение функции полиномом Жегалкина. Текст программы для алгоритма Дейкстры. Определение единиц и нулей функции.
-
Метод касательных решения нелинейных уравнений
Определение корней нелинейного уравнения методом касательных аналитически и численным методом.
-
Вязкость газов в вакуумной технике
При перемещение твердого тела со скоростью за счет передачи количества движения молекулам газа возникает сила внутреннего трения.
-
Ссылочный тип данных. Динамические объекты.
Природа динамических объектов и способы их реализации. Описание ссылочных переменных и их семантика. Действия над ссылками.