
- •Вопросы к итоговому государственному междисциплинарному экзамену по дисциплине «Объектно-ориентированное программирование»
- •Объектно-ориентированное программирование как методология разработки программ. Структура объектно-ориентированной программы. Привести пример описания объектного типа.
- •Соотношение основных понятий ооп. Привести примеры программного обращения или описания основных понятий ооп.
- •Принципы объектно-ориентированного программирования. Понятие инкапсуляции, наследования и полиморфизма. Привести примеры программного описания.
- •2 Основные характеристические свойства понятий
- •Простое и множественное наследование. Правила наследования. Привести пример простого наследования.
- •Скрытие данных в объектном типе. Назначение директив private и public. Привести пример управления доступом к элементам класса.
- •Понятие виртуального метода. Назначение и отличие виртуальных и динамических методов. Правила вызова виртуальных методов. Привести пример объявления виртуального метода.
- •Выделение памяти под экземпляр объекта. Привести пример объявления и реализации конструктора и деструктора.
- •Исключительные ситуации в терминологии ооп. Глобальная и локальная обработка исключений. Привести пример использования операторов контроля исключительных ситуаций при локальной обработке.
- •Понятие проекта Delphi. Состав проекта Delphi. Основные файлы проекта, их характеристика. Привести примеры программного кода основных файлов проекта.
Выделение памяти под экземпляр объекта. Привести пример объявления и реализации конструктора и деструктора.
Особой разновидностью методов являются конструкторы и деструкторы. Конструкторы создают, а деструкторы разрушают объекты.
Конструктор (constructor) - особый метод класса, обеспечивающий инициализацию объектов этого класса. Обычно имеет имя Create и вызывается следующим образом:
<имя инициализируемого объекта> := <имя класса>.Create(<список параметров>);
Особенность вызова конструктора - он вызывается с помощью ссылки на класс, а не на экземпляр класса (в отличие от других методов, которые вызываются с помощью ссылки на объект). Иначе просто нельзя - ведь экземпляр объекта в момент вызова конструктора еще не создан. Код конструктора класса статичен и находится в памяти. Он относится к классу, а не к его экземпляру.
Конструктор выделяет необходимую память, инициализирует поля, производит первоначальную подготовку объекта к последующему использованию.
Конструктор объявляется с помощью директивы constructor и чаще всего называется Create (создать).
Деструктор освобождает выделенную конструктором память, закрывает используемые файлы, потоки и т. д.
Деструктор объявляется с использованием директивы destructor, чаще всего называется Destroy.
Синтаксис объявления конструктора и деструктора.
Type
<имя класса>=Сlass[(<Имя родительского класса>)]
Constructor <Имя конструктора>[(<параметры>)];
Destructor <Имя деструктора>[(<параметры>)];
End;
Реализация конструктора
Constructor <имя класса>.<имя конструктора> [(<параметры>)];
[<блок объявлений>]
Begin
<Исполняемые операторы>
End;
Реализация наследуемых конструкторов
Constructor <имя класса>.<имя конструктора> [(<параметры>)];
[<блок обьявлений>]
Begin
Inherited <имя конструктора>[(<параметры>)];
<инициализация собственных полей>
End;
Ключевое слово Inherited используется, чтобы назвать родительский конструктор или метод деструктора, как соответствующий для текущего класса.
Реализация деструктора
Destructor <имя класса>.<имя деструктора> [(<параметры>)];
[<блок объявлений>]
Begin
<исполняемые операторы>
End;
Реализация наследуемых деструкторов
Destructor <имя класса>.<имя деструктора> [(<параметры>)];
[<блок объявлений>]
Begin
<уничтожение собственных полей>
Inherited <имя деструктора> [(<параметры>)];
End;
Вызов конструктора
Begin
….
<имя обьекта>:=<имя класса>.<имя конструктора> [(<параметры>)];
….
End;
Вызов деструктора
Begin
….
<имя объекта>.<имя деструктора> [(<параметры>)];
…
End;
Пример.
Создание класса транспортных средств
type TTs = class
fname:string[20];
fmosh_dvig: integer;
constructor Create (name:string; mosh_dvig:integer); //объявление конструктора
destructor Destroy; //объявление деструктора
end;
Реализация конструктора
constructor TTs.Create (name:string; mosh_dvig:integer);
begin
fname:=name;
fmosh_dvig:=mosh_dvig;
end;
Реализация деструктора
destructor TTs.Destroy;
begin
end;
var
Form1: TForm1;
T:TTs;
…
Вызов конструктора
procedure TForm1.Button1Click(Sender: TObject);
Begin
T:=TTs.Create(edit1.Text,StrToInt(edit2.Text));
end
Вызов деструктора
procedure TForm1.Button3Click(Sender: TObject);
Begin
If T<>NIL then
begin
T.Destroy;
T:=nil;
end;
end;