Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 1.doc
Скачиваний:
33
Добавлен:
13.02.2015
Размер:
689.66 Кб
Скачать

Лабораторная работа № 5 статические методы класса

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

Теоретические сведения

Инкапсуляция (Incapsulation) – это механизм, который объединяет данные и действия над ними, а также защищает и то и другое от неправильного использования или непредвиденного воздействия из вне.

В соответствии с этим определением защита данных является основой любого объектно-ориентированного языка программирования. С этой целью при объявлении класса используют различные разделы доступа. Однако и их недостаточно для полной реализации этой концепции.

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

property<Имя свойства>: <Тип свойства>read

<Имя метода чтения> write<Имя метода записи>;

<Имя свойства> – любой возможный идентификатор языка ObjectPascal;

<Тип свойства> – любой предопределенный или пользовательский тип данных.

FField– имя поляField– имя свойства

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

function<Имя метода чтения>: <Тип свойства>;

procedure<Имя метода записи>(<Имя параметра>: <Тип свойства>);

Общепринято, имена этих методов задавать по имени свойства с добавлением приставок Get к методу чтения и Set – к методу записи.

Field– <Имя свойства>;GetField– <Имя метода чтения>

SetField– <Имя метода записи>

Свойства позволяют выбрать режим доступа только для чтения или только для записи. В этом случае соответствующие директивы writeиreadв объявлении не указываются.

property<Имя свойства>: <Тип свойства>read

<Имя метода чтения>; // свойство только для чтения

property<Имя свойства>: <Тип свойства>write

<Имя метода записи>; // свойство только для записи

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

property<Имя свойства>: <Тип свойства>read<Имя поля>write<Имя поля>;

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

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

property<Имя свойства>[<Имя индекса>: <Тип индекса>]: <Тип свойства>read<Имя метода чтения>write<Имя метода записи>;default;

<Имя индекса> – любой возможный идентификатор языка ObjectPascal;

<Тип индекса> – любой целый тип (byte,word,Integerи т.д.);

тип свойства

Методы чтения и записи в этом случае, предназначены для возвращания или изменения значения элемента массива с индексом, указанным в списке параметров.

function<Имя метода чтения>(<Имя индекса>: <Тип индекса>): <Тип свойства>;

procedure<Имя метода записи>(<Имя индекса>: <Тип индекса>; <Имя параметра>: <Тип свойства>);

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

<Имя объекта>.<Имя векторного свойства>[<Индекс>];

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

<Имя объекта>[<Индекс>];

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