Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ПА и ПО (с пояснениями).doc
Скачиваний:
10
Добавлен:
23.09.2019
Размер:
851.97 Кб
Скачать

3.2. Способы реализации алгоритмов.

Все виды обработки данных могут быть разделены на следующие классы:

1. Последовательная обработка

2. Обработка с повторениями

3. Произвольная обработка с применением параллельных вычислений

4. Структурное распараллеливание с использованием сопрограмм.

-----------------========== Пиши лекции =================--------

5.2 Реализация наследования в Паскале

Р ассматривается старая объектная модель Pascal с версии 5.5 до Delphi1.

Описание класса – object: -------------------->

Формы совместимости типов объектов:

1) совместимость между экземплярами

2) между указателями экземпляров

3) между фактическими и формальными параметрами процедур

Можно присвоить объект наследник объекту родителю, но не наоборот, т.е.:

var

OA : A; OB : B;

OA := OB; {происходит явное привидение типов}

OB := OA; {нельзя}

Если используются не сами экземпляры, а указатели на экземпляры, то удаётся реализовать полиморфизм. Полиморфический объект – объект тип которого не известен на фазе исполнения.

5.3 Проблема наследования статических методов

Статическийего адрес определяется на этапе компиляции программы.

Пример:

type

TRectangle = object(TFigure)

procedure Init(AX, AY : integer);

procedure Show;

procedure Hide;

procedure Move(NewX, NewY : integer);

end;

type

TFrame = object(TRectangle)

procedure Init(AX, AY : integer);

procedure Show;

procedure Hide;

end;

Попытаемся переместить рамку TFrame с помощью унаследованного метода Move. Все методы по умолчанию являются статическими.

procedure TRectangle.Move(NewX, NewY : integer);

begin

Hide;

X := NewX; Y:=Y; {координаты}

Show;

end;

Решением проблемы является реализация виртуальных методов Show и Hide – позволит на этапе компиляции не определять их адреса.

Рекомендации: Использование виртуальных методов всегда, но это снижает эффективность. Для каждого вызова виртуального метода, вызов происходит через таблицу виртуальных методов VMT.

Динамические методы используют меньше памяти и не дублируются адреса виртуальных методов в классах наследниках.

Д ля динамических методов используется таблица (DMT) динамических методов.

В Паскале использование виртуальных методов требует вызова специального метода конструктора, например:

constructor Init(…);

Конструктор в любой ООС устанавливает связь экземпляра класса с VMT класса.

6.1 Объекты и их жизненный цикл

Основным языком Delphi является язык Object Pascal.

type

TMyClass = class

end;

Все экземпляры класса объектов Delphi являются динамическими.

var

AMyObject : TMyClass;

begin

AMyObject := TMyClass.Create;

TMyClass – метод класса, особый вид метода без экземпляра класса.

Любое объявление класса подразумевается, что происходит от суперкласса TObject.

AMyObject.MyMethod;

AMyObject.Destroy;

Вызов деструктора, рекомендуется применять метод Free. Деструктор всегда виртуальный, деструктор выполняет некоторые скрытые действия применяется для удаления динамически размещённых полиморфных объектов. Деструктор обращается к структуре и определяет размер экземпляра (структура класса RTTI).

Всего TObject содержит 17 методов, которыми можно пользоваться без определения класса.

Если конструктор переопределяется, то рекомендуется вызов конструктора родителя в нём: inherited Create;