Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Работа с внешними процедурами. Модули.



Модуль – это подключаемая к программе библиотека ресурсов. Он может содержать описания типом, констант, переменных и подпрограмм.

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

Если программа разбита на модули, то скорость её компиляции возрастает, так как модули хранятся в готовом, скомпилированном виде и перекомпилируются при изменении в их исходном коде.

Модули бывают стандартные и пользовательские (определяемые пользователем).

Описание модуля:

unit имя;

interface {описание глобальных элементов модуля (видимых)}

implementation {описание локальных (внутр) элементов модуля}

begin

{ может отсутствовать }

end.

Для подключения модуля его нужно указать в uses (после interface или implementation)

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

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

Объектовый тип. Основные понятия.

Объектовый тип в паскале похож на комбинированный тип (класс).

type

point=object

x, y: integer;

visible: Boolean;

...

Объектовый тип может содержать подпрограммы. Подпрограммы, которые описаны в объектовом типе(классе) – это методы этого типа(класса). При описании класса задаётся описание полей, а потом описание методов:

type point=object

x.y: integer;

visible: Boolean;

procedure create(a, b: integer);

procedure switchon;

procedure switchoff;

procedure move(dx, dy: integer);

function getx: integer;

function gety: integer;

end;

 

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

Наследование и переопределение в объектовых типах.

Наследование является вторым основным важным классом, который позволяет при создании нового класса использовать в качестве основы описанный ранее класс.Объектно-ориентированный подход позволяет создать новый класс как потомок ранее описанного класса.

type circle=object=(point);

Класс, созданый на основе предыдущего, называется потомок. Класс, на основе которого создан новый класс, называется предок.

Класс потомок автоматически получает все поля и методы своего предка.

circle=object=(point);

radius: integer;

procedure create(a, b, r: integer);

procedure switchon;

procedure switchoff;

function getr: integer;

end;

Замена одного из метода другим методом называется переопределение метода. Переопределять можно только методы, поля нельзя.

one point: =onecircle;

onecircle: =one point;

Присваивать можно только от предка к потомку

Виртуальные методы в объектах.

Виртуальный метод (виртуальная функция) — в объектно-ориентированном программировании метод (функция) класса, который может быть переопределён в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Таким образом, программисту необязательно знать точный тип объекта для работы с ним через виртуальные методы: достаточно лишь знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.

Виртуальные методы — один из важнейших приёмов реализации полиморфизма. Они позволяют создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. При этом, базовый класс определяет способ работы с объектами и любые его наследники могут предоставлять конкретную реализацию этого способа.Виртуальными должны быть описаны те методы, которые вызываются другими методами.

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

constructor circle.create

Последним методом, который обрабатывается должен быть деструктор.

destructor …

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

Основное отличие виртуальных методов заключается в том, что необходимые связи с ними в программе устанавливаются не на этапе компиляции и компоновки, а на этапе выполнения программы. С этой целью у объекта создаются таблицы виртуальных методов, куда записываются адреса всех используемых в этом объекте виртуальных методов. При выполнении программы в случае необходимости из этой таблицы выбирается адрес соответствующего варианта виртуального метода с целью использования именно этого варианта. Однако для использования такой таблицы предварительно ее следует заполнить этими адресами. Для ной цели применяются специальные методы, которые называются конструкторами (constructor). Такой метод должен быть использован в программе до того, как будет обращение к виртуальному методу. Формальное отличие конструктора от обычного метода заключается в том, что вместо зарезервированного слова procedure используется зарезервированное слово constructor. Основное назначение конструктора - записать адрес виртуального метода в таблицу виртуальных методов, однако он может выполнять и другие действия по инициализации создаваемого объекта: устанавливать необходимые связи, задавать начальные условия и т. д. Так, в рассматриваемом примере конструктор типа tline (строка) формирует начальный элемент создаваемой строки и имеет вид:

constructor tLine.Init;
begin
NewEl(nil, nil)
end;

Последним методом, который обрабатывается должен быть деструктор.

destructor …

Аналогичным образом при удалении из динамической области памяти размещенного там объекта в процедуре Dispose можно использовать подпрограмму, называемую деструктором (destructor), предназначенную для выполнения различных операций, связанных с ликвидацией объекта (исключение его из списка, задание параметров, очистка данных и т. д.). Деструктор, как правило, наследуется потомками и обычно бывает виртуальным.

Скрытые поля и методы.

type

TGraphObj = object

Private {поля объекта будут скрыты от пользователя}

X, Y: Integer;

...

Public

...

end;

Директива Private в описании объекта открывает секцию описания скрытых полей и методов. Перечисленные в этой секции элементы объекта “не видны” программисту, если этот объект он получил в рамках библиотечного TPU-модуля. Скрываются обычно те поля и методы, к которым программист (в его же интересах! ) не должен иметь непосредственного доступа. В данном

примере он не может произвольно менять координаты реперной точки (X, Y), т.к. это не приведёт к перемещению объекта. Для изменения полей X и Y предусмотрены входящие в состав объекта методы Init и MoveTo. Скрытые

поля и методы доступны в рамках той программной единицы (программы или модуля), где описан соответствующий объект. Скрытые поля будут доступны в данном модуле, но недоступны в использующей его основной программе. Директива public отменяет действие директивы private, по этому все следующие за public элементы объекта доступны в любой программной еденице. Директивы private и public могут произвольным образом чередоваться в перделах одного объекта.


Поделиться:



Последнее изменение этой страницы: 2017-03-14; Просмотров: 499; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.016 с.)
Главная | Случайная страница | Обратная связь