- •Объектно-ориентированный анализ
- •Объектно-ориентированное программирование.
- •Объектно-ориентированное проектирование.
- •Основные понятия объектно-ориентированного проектирования.
- •Классы и объекты в Object Pascal.
- •Важнейшие принципы объектно-ориентированного программирования.
- •Составляющие класса.
- •Объекты
- •Создание и уничтожение объектов.
- •Наследование конструкторов и деструкторов.
- •Свойства и инкапсуляция.
- •Статические методы.
- •Полиморфизм. Виртуальные и динамические методы.
- •Абстрактные методы.
- •Перекрытие виртуальных и динамических методов.
- •Как устроен объект изнутри
- •Перезагрузка методов.
- •Задача с использованием полиморфизма
- •Области видимости.
- •Создание класса комплексных чисел.
- •Создание класса векторов
- •Объект-список
- •Модуль по работе со списками
- •Основная программа по работе с объектами-списками
- •Система программирования Delphi
- •Терминология Delphi.
- •Первые шаги визуального программирования в среде Delphi.
- •Иерархия компонентов.
- •Собственники компонентов
- •Элементы управления.
- •Компоненты (tComponent)
- •Оконные не оконные
- •Родительские и дочерние компоненты.
- •Объектно-событийное программирование. События
- •Реакции на события
- •Программирование реакции на событие
- •Особенности реализации событий
- •Делегирование событий
- •Виды событий
- •Диалоги. Работа с файлами. Открытие и закрытие файлов с использованием стандартных диалоговых окон.
- •TOpenDialog и tSaveDialog – диалоги открытия и сохранения файлов (страница dialogs )
- •Компонент класса tform
- •Создание и использование форм
- •Шаблоны форм
- •Программы со многими формами
- •Модульный принцип построения программ.
- •Программные файлы. Основные типы файлов проекта. Простейшее приложение.
- •Структура головного файла проекта.
Области видимости.
При описании нового класса пользователь стоит перед компромиссом. С одной стороны необходимо скрыть методы и поля, представляющие собой внутреннеe устройства класса, поскольку маловажные детали будут бесполезны и только помешают целостности восприятия пользователем, использующем данный класс. С другой стороны, если слишком ограничить того, кто будет порождать классы-потомки и не обеспечить ему достаточный набор инструментальных средств, то он не сможет использовать ваш класс.
Существует механизм доступа к составным частям объекта, определяющий области, где ими можно пользоваться – области видимости. Поля, методы и свойства могут относиться к четырем группам и в описании класса могут быть размещены в одной из секций.
Пример:
Type <имя класса>=class
private . . .
protected . . .
public . . .
published . . .
end;
Т.о. поля, методы и свойства могут быть:
private – личные
protected – защищенные
public – общие
published – опубликованные
1) Все, что объявлено в секции private доступно только в том модуле, где дано описание класса, т.е. поля, методы и свойства находящиеся в секции private доступны только в методах класса и в функциях, которые содержатся в модуле описанного класса. Это позволяет полностью скрыть детали внутренней реализации класса. Свойства и методы этой секции можно изменить, но это не сказывается на программах работающих с объектами данного класса.
2) Поля, методы и свойства секции protected также доступны внутри модуля с описанным классом, но кроме этого (и это главное) они доступны в классах – потомках данного класса, в том числе и в других модулях. Это особенно необходимо для разработчиков классов – потомков.
3) Поля, методы и свойства секции public доступны любому модулю, они доступны из других функций, методов объектов, как в данном модуле, так и в других модулях, ссылающихся на него.
4) Секция published имеет особое значение для интерфейса визуального программирования в Delphi. Все, что помещено в секцию published, доступно инспектору объекта во время разработки проекта, т.е. здесь собраны те свойства объекта, которые будут видны не только во время исполнения приложения , но и из среды разработки.
Рассмотрим пример, который иллюстрирует три области видимости:
Пример. Рассмотрим два модуля (Unit First и Unit Second)
Unit First;
interface
type TFirstObj=class
private // личные
procedure metod1;
protected // защищенные
procedure metod2;
public // общие
procedure metod3;
// методы 1,2,3 – методы класса
end;
procedure TestProc1;
implementation
Uses Dialogs;
var AFirstObj:TFirstObj; //описанный объект AFirstObj класса
// TFirstObj
procedure TestProc1;
begin AFirstObj:=TFirstObj.Create;
AFirstObj.Metod1;
AFirstObj.Metod2;
AFirstObj.Metod3; //внутри модуля класса допустимы все
// три обращения
AFirstObj.Free;
end;
procedure TFirstObj.Metod1;
begin show Message (‘1’); //вывод информации в окно сообщения
end;
procedure TFirstObj.Metod2;
begin show Message (‘2’);
Metod1;
end;
procedure TFirstObj.Metod3;
begin show Message (‘3’);
end;
End. // конец модуля First
-----------------------------------------------------------------
Unit Second; // начало модуля Second
interface
Uses First; // использует модуль First
type TSecondObj=class(TFirstObj)
procedure Metod4;
end;
procedure TestProc2; // процедура модуля Second
implementation
var AFirstObj:TFirstObj; // объект класса TFirstObj
ASecondObj:TSecondObj; // объект класса TSecondObj
procedure TSecondObj.Metod4;
begin Metod1; // не допустимо, т.к. Metod1 не доступен
// в другом модуле
Metod2; // допустимо, т.к. класс TSecondObj является
// потомком класса TFirstObj
Metod3; // допустимо, т.к. Metod3 описывается в секции
//public
end;
procedure TestProc2;
begin AFirstObj:=TFirstObj.Create;
AFirstObj.Metod1; // не допустимо т.к. Metod1
//не доступен в другом модуле
AFirstObj.Metod2; // не допустимо т.к. в описании
// Metod2 есть обращение к Metod1
AFirstObj.Metod3; // допустимо
AFirstObj.Free;
end;
. . . . . . . . . . . . . . . . . . . . .
End. // конец модуля Second
Три области видимости private, protected, public упорядочены по возрастанию видимости методов. В классах–потомках можно повысить видимость методов и свойств, но не понизить её.