При описании класса важно соблюсти разумный компромисс. С одной стороны, требуется скрыть ряд внутренних методов и полей, одни из которых бесполезны пользователю класса и только усложняют его интерфейс, а доступ к другим полям нужно организовать через систему проверок или свойств (инкапсуляция).
С другой стороны, если слишком ограничивать возможного пользователя класса, то данный класс может стать ему неинтересен.
В языке Object Pascal применяют следующие виды доступа к полям, методам и свойствам:
· Public(общие). Поля, методы и свойства из этой секции не имеют ограничений на видимость. Они доступны из других функций и методов объектов как в данном модуле, так и в других модулях, ссылающихся на него.
· Protected(защищенные). Поля, методы и свойства этой секции доступны всем функциям и методом данного модуля. В других модулях доступны только в классах, порожденных от данного класса.
· Private(личные). Наибольшее ограничение доступности. Поля, методы и свойства из этой секции доступны только в данном модуле и недоступны из других модулей.
Кроме основных трех областей видимости существуют еще две:
· Published(опубликованные). Аналогично public, только свойства из данной секции доступны еще и из среды визуального программирования (Object Inspector).
· Automated. Появилась в последних версиях Delphi. Используется для создания объектов Автоматизации (COM-технологии).
В классе-потомке можно переопределить область видимость метода, не понижая ее.
type
T1 = class
private
fNumber : integer;
protected
property Number:integer read fNumber;
end;
T2 = class (T1)
published
property Number;
end;
Здесь переводом свойства Number в группу опубликованных свойств, была повышена его видимость. Повысить видимость элементов секции private нельзя.
Полиморфизм. Статические, виртуальные и динамические методы. Абстрактные классы. Показать реализацию принципа на предложенном примере.