реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi
Скачать 1.3 Mb.
|
Ограничение видимости членов классаПри описании класса программист имеет право определять степень доступности (видимости) его полей, свойств и методов. Это один из способов защиты наиболее критичных элементов класса от несанкционированного вмешательства сторонних разработчиков. Область видимости поля (метода) класса зависит от того, в какой из четырех возможных секций оно объявлено: private, protected, public и published (листинг 3.11). Листинг 3.11. Секции видимости членов класса type TAutomobile = class private ... { секция частных объявлений } protected ... { секция защищенных объявлений } public ... { секция общих объявлений } published ... { секция опубликованных объявлений } end; Поля и методы, доступ к которым нежелателен, обычно размещаются в секциях private и protected. Наиболее защищена секция private. К размещенным в ней полям и методам возможно обращение только из того же программного модуля, в котором описан этот класс. Секция protected несколько приоткрывает завесу секретности — находящаяся в ней информация без каких-либо ограничений доступна для классов-потомков. Секция public предоставляет объявленные в ней поля и методы для общего пользования всем желающим. Секция published самая доброжелательная. Например, объявленными в ней данными умеет пользоваться Инспектор объектов. Это возможно благодаря тому, что для этой секции класса генерируется информация о времени выполнения (Run Time Type Information, RTTI). Поэтому в секции published обычно объявляют все свойства и обработчики событий объекта. Свойства объектаКак правило, объект не должен предоставлять прямой доступ к своим полям. Это требование инкапсуляции, благодаря которому поддерживается целостность объекта. Поэтому при проектировании класса одновременно с полями объявляют особых посредников, называемых свойствами (properties). В первую очередь в обязанность свойств входит проверка корректности передаваемых в поля данных, для этого они могут задействовать все мощь языка Delphi. В самом простейшем случае синтаксическая конструкция объявления свойства выглядит следующим образом: property Имя_свойства: Тип_свойстваRead (способчтения) Write (способзаписи); За инструкциями Read и Write могут следовать названия процедур, соответственно отвечающих за чтение данных из поля и запись данных в поле. Возьмем в качестве примера класс двигателя TEngine, он обладает парой полей fEnabled и fAutomobile, которые следует обязательно защитить. Листинг 3.12 демонстрирует один из возможных сценариев усовершенствования класса. Листинг 3.12. Объявление свойств type TEngine=class private fEnabled :boolean; //двигатель включен - true, выключен - false fAutomobile:TAutomobile; //ссылка на автомобиль public procedure SetEnabled(Value:Boolean); //запуск или останов двигателя function GetEngineState:boolean; //состояние двигателя published property Enabled:boolean Read fEnabled Write SetEnabled; property Automobile:TAutomobile Read fAutomobile; end; Все поля класса "спрятаны" в секцию private, что существенно усложнит обращение к полям извне. Наоборот, методы и свойства, к которым мы намерены разрешить полный доступ, размещены в секции публичных объявлений. Теперь для включения/отключения двигателя надо воспользоваться свойством Enabled. Еще большую степень защиты мы обеспечили полю fAutomobile, хранящему ссылку на автомобиль, в который установлен двигатель — свойство допускает только чтение информации из поля. |