- •Основные механизмы и положения объектно-ориентированного программирования
- •5.1. Инкапсуляция
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •5.2. Наследование
- •Interface
- •Implementation
- •Interface
- •Implementation
- •5.3. Жизненный цикл экземпляра класса
- •Interface
- •Implementation
- •Inherited;
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •5.4. Полиморфизм
- •5.4.1. Совместимость объектов
- •Класс в Экземпляр
- •Interface Type
- •Implementation
- •Interface
- •Implementation
- •If Figure is tLine
- •Interface
- •Implementation
- •Interface
- •Implementation
- •IColor: Integer;
Interface
Type
Tсar = class {Заголовок класса содержит его название Tсar}
Mark: AnsiString;
{Описание текстового свойства Mark для хранения марки автомобиля }
EngineVolume: Double; {Описание вещественного свойства
для хранения объема двигателя}
Fuel: Double; {Описание вещественного свойства
для хранения объема топлива}
Function StartEngine: Boolean; {Заголовок функции-метода
"Запустить двигатель"}
Procedure StopEngine; {Заголовок процедуры-метода
"Остановить двигатель"}
Procedure AddFuel(NewFuel: Double);
{Заголовок процедуры-метода
"Заправить топливом"}
Implementation
Function TCar.StartEngine: Boolean;
begin
Result := (Fuel>0);
end; {Описание метода StartEngine.
В качестве результата возвращается
значение логического выражения (Fuel>0)}
Function TCar.StopEngine:
begin
end; {Описание метода StopEngine,
не выполняющего никаких действий}
Procedure AddFuel(NewFuel: Double); {Описание метода AddFuel}
Begin
Fuel := Fuel + NewFuel; {Увеличение значения свойства
Fuel на величину, переданную
в качестве параметра NewFuel
при вызове метода}
end;
End. {Окончание модуля}
Обратим внимание на использование свойства Fuel в методе AddFuel. Метод AddFuel, который является частью описания класса TCar, обращается к данному свойству по имени, хотя на этапе создания класса и неизвестно, какому именно экземпляру будет принадлежать изменяемое свойство. Однако точно известно, что каждый экземпляр обладает свойством Fuel, причем объект, из которого вызван метод AddFuel, также может быть определен системой. При вызове метода AddFuelH3 какого-либо экземпляра класса тсаг в качестве изменяемого свойства Fuel автоматически будет выбрано то, которое принадлежит этому же экземпляру.
Возможность такого абстрактного подхода к описанию классов без указания их конкретных экземпляров и отличает объектно-ориентированный подход к созданию программы от модульного, несмотря на их некоторое сходство.
Методы класса
Интересным нововведением в Delphi являются так называемые методы класса, особенность которых состоит в том, что для их вызова нет необходимости создавать объект (экземпляр класса), а можно использовать их как обычные подпрограммы. Для описания таких методов используется ключевое слово class перед заголовком метода:
Туре
………….
<Имя класса> = class
………
class <Заголовок метода>; {Описание метода класса}
End;
При реализации методов класса в описательной части класса ключевое слово class также указывается:
class <Имя класса>.<Заголовок метода>;
Методы класса применяются для создания библиотек специализированных методов, не требующих доступа к каким-либо данным, которые могут храниться в пределах объекта. В качестве примера приведем описание класса MthdClass, метод Get5 которого является методом класса (листинг 5.2).
Листинг 5.2. Пример описания методов класса
unit DeclaringClassMethods;
