- •Определение типа запись. Особенности хранения полей.
- •Определение процедуры. Основные особенности работы.
- •Определение функции. Особенности работы.
- •Параметры-значения
- •Параметры-константы
- •Параметры переменной.
- •Процедурные типы. Определение и область применения.
- •Явные и неявные рекурсии.
- •Множества. Определение и область применения.
- •Модули. Определение интерфейсной части. Особенности текста реализации.
- •Модули. Особенности использования. Видимость содержимого.
- •Определение файла. Общие процедуры и функции для работы с файлами.
- •Текстовые файлы. Процедуры и функции для работы с ними. Особенности.
- •Типизированные файлы. Процедуры и функции для работы с ними. Особенности.
- •Не типизированные файлы. Процедуры и функции для работы с ними. Особенности.
- •Указатели. Общее определение. Значение указателей. Классификация.
- •Типизированный указатель. Процедуры и функции для работы с ними.
- •Не типизированные указатели. Процедуры и функции для работы с ними.
- •Открытые массивы. Особенности работы.
- •Области видимости переменных, типов и констант.
- •Области видимости процедур и функций. Явное и неявное преобразование типов.
- •Алгоритмы поиска. Особенности реализации. Алгоритмы сортировки. Особенности реализации. Причины возникновения ооп. Основные особенности.
- •Наследование объектов.
- •Полиморфизм. Свойства.
- •Инкапсуляция. Свойства.
- •Виды методов. Особенности.
- •Области видимости моделей объектов в паскале.
- •Поведение методов объектов при наследовании.
- •Объекты. Поля и методы.
- •Определение объектов.
Поведение методов объектов при наследовании.
Рассмотрим поведение методов при наследовании, что, без преувеличения, является краеугольным камнем объектно-ориентированного программирования. По тому, какие действия происходят при вызове, методы делятся на три группы: статические (static), виртуальные (virtual) и динамические (dynamic).
Статические методы, а также поля в объектах-потомках ведут себя одинаково: вы можете без ограничений перекрывать старые имена, и при этом изменять тип методов.
Объекты. Поля и методы.
В Турбо Паскале для создания объектов используются три зарезервированных слова: object, constructor, destructor к три стандартные директивы: private, public и virtual.
Зарезервированное слово object используется для описания объекта. Описание объекта должно помещаться в разделе описания типов:
type
MyObject = object
(Поля объекта}
{Методы объекта}
end ;
Если объект порождается от какого-либо родителя, имя родителя указывается в круглых скобках сразу за словом object
Любой объект может иметь сколько угодно потомков, но только одного родителя, что позволяет создавать иерархические деревья наследования объектов.
Директива Private в описании объекта открывает секцию описания скрытых полей и методов. Перечисленные в этой секции элементы объекта «не видны» программисту, если этот объект он получил в рамках библиотечного ТР(/-модуля. Скрываются обычно те поля и методы, к которым программист (в его же интересах!) не должен иметь непосредственного доступа. В нашем примере он не может произвольно менять координаты реперной точки (X.Y), т.к. это не приведет к перемещению объекта. Для изменения полей X и Y предусмотрены входящие в состав объекта методы Init и MoveTo. Скрытые поля и методы доступны в рамках той программной единицы (программы или модуля), где описан соответствующий объект. В дальнейшем предполагается, что программа будет использовать модуль GraphObj с описанием объектов. Скрытые поля будут доступны в модуле GraphObj, но недоступны в использующей его основной программе. Разумеется, в рамках реальной задачи создание скрытых элементов объекта вовсе необязательно.
Директива public отменяет действие директивы private, поэтому все следующие за public элементы объекта доступны в любой программной единице. Директивы private и public могут произвольным образом чередоваться в пределах одного объекта.
Описания полей ничем не отличаются от описания обычных переменных. Полями могут быть любые структуры данных, в том числе и другие объекты.
Для описания методов в ООП используются традиционные для Паскаля процедуры и функции, а также особый вид процедур - конструкторы и деструкторы. Конструкторы предназначены для создания конкретного экземпляра объекта, ведь объект - это тип данных, т.е. «шаблон», по которому можно создать сколько угодно рабочих экземпляров данных объектного типа (типа TGraphOhj, например). Зарезервированное слово constructor, используемое в заголовке конструктора вместо procedure, предписывает компилятору создать особый код пролога, с помощью которого настраивается так называемая таблица виртуальных методов (см. ниже). Если в объекте нет виртуальных методов, в нем может не быть ни одного конструктора, наоборот, если хотя бы один метод описан как виртуальный (с последующим словом Virtual, см. метод Draw), в состав объекта должен входить хотя бы один конструктор и обращение к конструктору должно предшествовать обращению к любому виртуальному методу.
Типичное действие, реализуемое конструктором, состоит в наполнении объектных полей конкретными значениями. Следует заметить, что разные экземпляры одного и того же объекта отличаются друг от друга только содержимым объектных полей, в то время как каждый из них использует одни и те же объектные методы.
В интерфейсной части модуля приводятся лишь объявления объектов, подобно тому как описываются другие типы данных, объявляемые в модуле доступными для внешних программных единиц. Расшифровка объектных методов помещается в исполняемую часть implementation, как если бы это были описания обычных интерфейсных процедур и функций. При описании методов можно опускать повторное описание в заголовке параметров вызова. Если они все же повторяются, они должны в точности соответствовать ранее объявленным параметрам в описании объекта.
