- •Лабораторная работа № 1
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 2
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 3
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 4 понятие класса
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 5 статические методы класса
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 6 механизм наследования
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 7 виртуальные методы класса
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 8
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Библиографический список
- •Содержание
Лабораторная работа № 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.