Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ.docx
Скачиваний:
2
Добавлен:
23.04.2019
Размер:
210.36 Кб
Скачать
  1. Классы. Объявление классов. Реализация принципа инкапсуляции в Object Pascal. Поля. Директивы private, protected и public. Инкапсуляция и формы. Свойства.

Класс-это пользовательский тип данных, который может иметь в своём составе поля, методы, св-ва и события. Класс д.б. объявлен до того как будет объявлена хотя бы одна переменная класса, называемая объектом.

При описании классов следует учитывать следующее.

  1. Класс описывается в разделе описания типов, обычно расположенном в разделе модуля interface. Если класс используется только внутри данного модуля, его описание может располагаться в разделе описания типов раздела модуля implementation. Класс не может быть описан внутри процедуры и функции.

  2. Имя класса - это любой доступный идентификатор.

  3. Синтаксис объявления полей класса схож с объявлением переменных или полей в записях.

  4. Синтаксис объявления методов в простейшем случае не отличается от объявления процедур и функций.

  5. Доступ к объявляемым элементам класса определяется тем, в каком разделе они объявлены (public, published, protected, private), что является одним из механизмов реализации принципа инкапсуляции.

  6. Класс наследует поля, методы, свойства и события от своих предков. Имя класса родителя указывается в скобках после ключевого слова class.

Разделы описания класса private, protected и public

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

Object Pascal заимствовал из классического ООП три спецификатора доступа:

  1. private - определяет поля и методы класса, которые недоступны вне модуля, в котором определен класс.

  2. public - определяет поля и методы, к которым может обращаться любая часть программы;

  3. protected - определяет частично доступные поля и методы, доступ к которым может получить данный класс и все его потомки.

Дополнительный спецификатор доступа published определяет такие же права доступа к эл-там класса, как public и предназначен для облегчения интеграции пользовательских программ в среду обработки Delphi.

Свойства

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

Свойство не хранит данных, свойство класса - это специальная конструкция языка Object Pascal, которая определяет, каким образом будет осуществляться доступ к защищенным данным класса. Данные, в конечном счете, всегда хранятся только в полях класса. Свойство класса объявляется оператором вида: property <имя свойства»: <тип>

read <иия поля или метода чтения> write <имя поля или метода записи> <директивы эапоминания>;

Свойство может быть векторным. В этом случае синтаксис его объявления:

property AButtons [Index: Integer]: TButton read GetButton write SetButton;

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

function GetButton (Index: Integer):TButton;

Если у объекта есть векторное свойство с директивой default, то при обращении к его элементам идентификатор свойства можно не упоминать, а ставить индекс в квадратных скобках сразу после имени объекта.

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