- •С примерами на Object pascal (72 часа)
- •Введение
- •1.1. Основной принцип структурного программирования
- •1.2. Основные задачи структурного программирования
- •1.3. Основные принципы объектно-ориентированного программирования (ооп)
- •2.1. Алфавит языка pascal. Идентификаторы.
- •2.2. Простые и составные специальные символы, используемые на пк.
- •2.3. Стандартные типы данных. Двоичное представление чисел и дополнительный код.
- •2.4. Особенности работы с некоторыми типами данных
- •2.5. Арифметические операторы.
- •2.6. Логические операторы и операции отношения.
- •2.7. Потеря точности, потеря порядка и переполнение при арифметических операциях.
- •2.8. Структура простейшей программы.
- •2.9. Простейшие операторы языка Object pascal
- •1) Цикл от меньшего к большему значению:
- •2) Цикл от большего к меньшему значению:
- •2.10. Структурные типы данных
- •2.11. Указатели. Динамические переменные. Динамическое выделение и высвобождение памяти
- •2.12. Процедуры и функции. Формальные и фактические параметры. Передача параметров по ссылке, по значению и через указатель.
- •2.13. Локальные и глобальные переменные. Побочный эффект функции. Вложенность процедур и функций. Правила видимости.
- •2.14. Пример на правила видимости и передачи параметров
- •2.15. Рекурсия
- •2.1. Инкапсуляция. Объект. Поля данных и методы объекта
- •3.2 Задание модуль класса (статическая объектная модель)
- •4.10. Создание и уничтожение объектов. Конструкторы и деструкторы.
- •4.11. Наследование. Статические, виртуальные, динамические и абстрактные методы.
- •4.12. Области видимости объектов.
- •4.13. Обработка исключительных ситуаций.
- •4.14. Специальные средства для работы с ms Windows: сообщения.
- •4.15. События и их делегирование. Обработка событий.
- •4.16. Методы класса и указатели на класс.
- •4.17. Дополнительные возможности Object Pascal.
- •5. Визуальное проектирование в среде Delphi.
- •5.8. Создание экранных форм. Инспектор объектов.
- •5.9. Палитра компонентов.
- •6. Интерфейсы и множественное наследование
- •6.1. Общие представления об интерфейсах в Object pascal
- •6.2. Реализация интерфейсов свойством
- •6.3. Различение имен при реализации нескольких интерфейсов
- •5.11. Спецификаторы вызовов процедур и функций
- •5.12. Динамические массивы
- •5.13. Перезагрузка (overloading) методов, процедур и функций
- •5.14. Параметры по умолчанию
- •5.17. Технологии dde и ole
- •5.18. Технология ActiveX
- •5.20. Использование библиотек OpenGl и glu
- •5.21. Создание программистом собственного компонента Литература
4.12. Области видимости объектов.
В Delphi существуют зарезервированные слова public ("общие"), protected ("защищенные") и private ("личные") для определения специальных правил видимости областей кода в объектах. Кроме того, для работы в среде Delphi используется еще зарезервированное слово published ("опубликованные"), являющееся вариантом public. Начиная с Delphi 3.0 при описании класса поля, свойства и методы должны располагаться в области, помеченной как published, public, protected и private.
Поля, свойства и методы доступны:
public, published — всем и везде, в том числе в других модулях;
protected — только в описании методов в классах потомков (в том числе в других модулях);
private — только в процедурах и функциях модуля, где описывается данный класс, а также в методах классов потомков, определенных внутри этого модуля.
Разновидностью public является published. "Опубликованные" поля, методы и свойства доступны в интерфейсе визуального проектирования Delphi (в инспекторе объектов) на стадии разработки. В первых версиях Delphi действовало правило, что если в описании класса были опущены ключевые слова для определения правил видимости, считалось, что соответствующие методы, поля и свойства published. Начиная с Delphi 3.0 область видимости объекта "published" также должна быть явно описана. Т.е. во всех примерах, где мы работали с классами, надо поставить директиву public или published перед описанием полей и методов объекта. Например:
tMyObj1=class(tObj1)
...
end;
заменить на
tMyObj1=class(tObj1)
public
...
end;
Пример правил видимости внутри модуля:
unit vis1;
interface
type
tObj1=
class
public
procedure MyPublicMethod;
...
protected
procedure MyProtectedMethod;
...
private
procedure MyPrivateMethod;
...
end;
procedure MyProc1; {процедура, видимая в других модулях}
...
{-секция реализации-}
implementation
... {реализация tObj1.MyPublicMethod, tObj1.MyProtectedMethod,
tObj1.MyPrivateMethod}
...
...
var aObj1:tObj1;
procedure MyProc1;
begin
aObj1:=tObj1.Create;
aObj1.MyPublicMethod; {можно}
{aObj1.MyProtectedMethod; -нельзя, т.к. не описание метода в
классе–наследнике}
aObj1.MyPrivateMethod; {можно, т.к. тот же модуль}
aObj1.Free; {то же, что Destroy, но с проверкой на nil}
end; {/MyProc1}
end. {/implementation}
Правила видимости в другом модуле:
unit vis2;
interface
uses vis1;
type
tObj2=
class(tObj1)
procedure MethodOfNewClass; {определение метода в потомке}
end;
procedure MyProc2; {процедура, видимая в других модулях}
{-секция реализации-}
implementation
procedure tObj2.MethodOfNewClass;
begin
MyPublicMethod; {можно, т.к. Public метод}
MyProtectedMethod; {можно, т.к. описание метода в
классе - наследнике}
{MyPrivateMethod; -нельзя, т.к. другой модуль}
end;
var aObj2:tObj2; {реализация}
procedure MyProc2;
begin
aObj2:=tObj2.Create;
aObj2.MyPublicMethod; {можно, т.к. public}
{aObj2.MyProtectedMethod; -нельзя, т.к. не описание метода
в классе - наследнике}
{aObj2.MyPrivateMethod; -нельзя, т.к. другой модуль}
aObj2.Free;
end;
end.
При описании класса-наследника можно переносить методы и свойства из одной области видимости в другую путем их простого упоминания, без переписывания реализации и сигнатуры:
type
tObj1=
class
private
fMyData:Real;
protected
function GetMyData:Real;
property MyData:Real
read GetMyData;
...
end{/class};
tObj2=
class(tObj1)
public
property MyData;
...
end{/class};
Замечание:
1) Из областей private в потомках в других модулях ничего достать, естественно, нельзя, хотя соответствующие поля и методы наследуются.
2) Иногда удобно перемещать поля или методы потомков из видимых областей в protected или private, иногда — наоборот (если это допустимо правилами прозрачности).