Объектно-ориентированное программирование: Конструкторы и деструкторы

Автор работы: Пользователь скрыл имя, 21 Ноября 2011 в 22:24, доклад

Краткое описание

Особой разновидностью методов являются конструкторы и деструкторы. Напомним, что конструкторы создают, а деструкторы разрушают объекты. Создание объекта включает выделение памяти под экземпляр и инициализацию его полей, а разрушение - очистку полей и освобождение памяти. Действия по инициализации и очистке полей специфичны для каждого конкретного класса объектов.

Содержимое работы - 1 файл

доклад.doc

— 37.00 Кб (Скачать файл)

ТАМБОВСКИЙ  ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ 

ИМЕНИ Г.Р. ДЕРЖАВИНА

Институт  математики, физики и информатики

Кафедра информатики и информационных технологий 
 
 
 

       Доклад  на тему:

       «Объектно-ориентированное  программирование: Конструкторы и деструкторы» 
 
 
 
 
 
 
 
 
 

       Выполнила студентка 47/2 группы

       Моргунова А.Ю.

       Преподаватель:

       Чиркин  Е.С. 
 

       Тамбов, 2011

       Особой  разновидностью методов являются конструкторы и деструкторы. Напомним, что конструкторы создают, а деструкторы разрушают  объекты. Создание объекта включает выделение памяти под экземпляр и инициализацию его полей, а разрушение - очистку полей и освобождение памяти. Действия по инициализации и очистке полей специфичны для каждого конкретного класса объектов. По этой причине язык Delphi позволяет переопределить стандартный конструктор Create и стандартный деструктор Destroy для выполнения любых полезных действий. Можно даже определить несколько конструкторов и деструкторов (имена им назначает сам программист), чтобы обеспечить различные процедуры создания и разрушения объектов.

       Объявление  конструкторов и деструкторов похоже на объявление обычных методов с  той лишь разницей, что вместо зарезервированных  слов function и procedure используются слова constructor и destructor. Для нашего класса TDelimitedReader потребуется конструктор, которому в качестве параметра будет передаваться имя обрабатываемого файла и разделитель элементов:

       type

        TDelimitedReader = class

        ...

        // Конструкторы и деструкторы

         constructor Create(const FileName: string; const ADelimiter: Char = ';');

         destructor Destroy; override;

        ...

        end; 
 
 
 
 
 
 

       Приведем их возможную реализацию:

       constructor TDelimitedReader.Create(const FileName: string;

        const ADelimiter: Char = ';');

       begin

        AssignFile(FileVar, FileName);

        Delimiter := ADelimiter;

       end; 

       destructor TDelimitedReader.Destroy;

       begin

        // Пока ничего не делаем

       end;

       Если  объект содержит встроенные объекты  или другие динамические данные, то конструктор - это как раз то место, где их нужно создавать.  

       Конструктор применяется к  классу или к объекту.

       Если  он применяется к  классу,

       Reader := TDelimitedReader.Create('MyData.del', ';');

       то  выполняется следующая последовательность действий:

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

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

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

       Ссылка на созданный объект возвращается в качестве значения конструктора. Тип возвращаемого значения совпадает с типом класса, использованного при вызове (в нашем примере это тип TDelimitedReader).

       Если  конструктор применяется  к объекту,

       Reader.Create('MyData.del', ';'); 

       То конструктор выполняется как обычный метод. Другими словами, новый объект не создается, а происходит повторная инициализация полей существующего объекта. В этом случае конструктор не возвращает никакого значения. Далеко не все объекты корректно себя ведут при повторной инициализации, поскольку программисты редко закладывают такую возможность в свои классы. Поэтому на практике повторная инициализация применяется крайне редко.  

       Деструктор

       Деструктор  уничтожает объект, к которому применяется:

       Reader.Destroy;

       В результате:

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

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

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

       Список  используемой литературы:

  1. Электронный учебник по программированию на языке Delphi

[Электронный  ресурс]. – Режим доступ: http://www.interface.ru/home.asp?artId=

1481#4

  1. Фаронов, В. Delphi 6: учебный курс/ В. Фаронов – СПт.: Питер, 2002. – 507 с.

Информация о работе Объектно-ориентированное программирование: Конструкторы и деструкторы