Смекни!
smekni.com

Распределение памяти (стр. 5 из 5)

памяти; большие блоки внутренней памяти резервируются и

освобождаются согласно одному методу, в то время как

каждый большой блок может быть подразделен с помощью

другого метода.

8. Объектно-ориентированные языки. Новые информационные

структуры и память для них

Одной из существенных причин, приводящих к появлению

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

предопределенных типов данных. Их ограниченность в сложности

адаптации под конкретную задачу.

Для формализации некоторой концепции, или, другими словами,

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

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

объектом.

Удобным аппаратом для описания объектов нового типа обладают

объектно-ориентированные языки. Базовым понятием объектно -

ориентированного языка является класс.

Класс является типом, созданным программистом. Внешне

описание простейшего класса схоже со структурой данных. В отличие

от структур рассматриваемых ранее, в объектно-ориентированном

языке класс может включать в себя не только переменные,

определяющие новый тип данных, но и функции, реализующие операции

над этим типом данных. И данные, и функции, составляющие

класс, называются членами класса. Среди функций-членов класса

могут присутсвовать специальные функции, управляющие

инициализацией объектов такого типа - конструкторы и функции,

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

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

может быть выполнена инициализация этой памяти заданными

значениями.

Мы будем рассматривать новые объекты в аспекте распределения

памяти под них. Идеология и механизмы использования классов

исчерпывающе описаны, например, в литературе [3], [4], [5].

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

класса, или инициализируется указатель на объект этого типа,

вызывается конструктор класса. Его задачей является

распределить необходимую память. Память выделяется под

данные-члены класса. Коды функций-членов хранятся отдельно от

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

не присутствуют в реальном объекте; при этом хранится только

одна копия каждой функции, хотя объектов в программе может быть

несколько. Но, с другой стороны, поскольку эти функции

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

того, как в программе созданы объекты абстрактного типа; более

того, они вызываются только для данного конкретного объекта, и

выполняемые ими действия никак не могут влиять на состояние

других объектов этого типа.

Память для данных-членов распределяется аналогично

методам, котрые описаны выше для структур ( см. Структуры PL/1

и Структуры данных по Стендишу ).

После того, как объект выполнил свою миссию в программе

он уничтожается деструктором класса: память занимаемая

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

важно заметить, что если объект содержал какие-либо указатели на

занятую память - эта память не освобождается. Поэтому

ответственность за возможное таким образом возникновение

потерянной для системы памяти несет программист, а не компилятор.

СПИСОК ЛИТЕРАТУРЫ

1. ГРИС Д. Конструирование компиляторов для цифровых

вычислительных машин. -М.: МИР, 1975.

2. КАСЬЯНОВ В.Н., ПОТТОСИН И.В. Методы построения

трансляторов. -Н.: НАУКА, 1986.

3. РОМАНОВ В.Ю. Программирование на языке С++. -М.:

КОМПЬЮТЕР, 1993.

4. ЦИМБАЛ А.А., МАЙОРОВ А.Г., КОЗОДАЕВ М.А. Turbo C++: язык

и его применение. -М.: Джен Ай Лтд., 1993.

5. ЭЛЛИС М., СТРОУСТРУП Б. Справочное руководство по языку

программирования С++ с комментариями. -М.: МИР, 1992.