
- •Основные механизмы и положения объектно-ориентированного программирования
- •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;
Implementation
Procedure ABC4.SetA(NewA: Double); {Описание метода SetA}
Begin
fa := NewA; {Занесение нового значения в private-свойство fa}
fc := fa * fb; {Пересчет произведения и занесение результата в свойство fc} .
end;
Procedure ABC4.SetB(NewB: Double); {Описание метода SetB}
Begin
fb := NewB; {Занесение нового значения в private-свойство fb}
fc := fa * fb; {Пересчет произведения и занесение результата в свойство fc}
end;
Function ABC4.GetA: Double; {Описание метода GetA}
Begin
Result := fa; {Результат функции — значение private-свойства fa}
end ;
Function ABC4.GetB: Double; {Описание метода GetB}
Begin
Result := fb; {Результат функции — значение private-свойства fb}
end;
Function ABC4.GetC: Double; {Описание метода GetC}
Begin
Result := fc; {Результат функции — значение private-свойства fc}
end;
end. {Окончание модуля}
Таким образом, property-свойства предоставляют возможность переноса информационных свойств в области класса с узкой видимостью, и обеспечивают доступ к их значениям через специальные методы, но в значительно более удобной форме. Для вызывающего фрагмента программ не имеет значения, к обычному свойству он обращается, или к property-свойству, тогда как класс имеет возможность подержания внутренней целостности.
Заметим, что вместо функции чтения и процедуры установки может, быть указано одно из обычных свойств, вне зависимости от его области видимости. В рассмотренном примере такую возможность следует применить при описании property-свойств а, b и с, указав вместо функций чтения свойства fa, fb и fc, соответственно. Модифицированный текст модуля приведен в листинге 5.9.
Листинг 5.9. Пример описания и использования property-свойства (модифицированный)
Unit Properties; {Заголовок модуля}
Interface
Type
ABC4 = class
Private
fa, fb, fc: Double; {Все свойства имеют узкую область видимости}
protected {Все методы имеют область видимости protected}
Procedure SetA(NewA: Double); {Процедура установки значения свойства fa}
Procedure SetB(NewB: Double); {Процедура установки значения свойства fb}
Published {Раздел описания property-свойств, доступных вызывающему фрагменту программы}
property A:Double read fa write SetA; {Для установки значения property-свойства используется метод SetA, а для чтения private-свойство fa}
property B:Double read fb write SetB;
{Для установки значения property-свойства используется метод SetB, а для чтения private-свойство fb}
property С:Double read fc;
{Для чтения property-свойства используется значение private-свойства fc}
end;
Implementation
Procedure ABC4.SetA(NewA: Double); {Описание метода SetA}
Begin
fa := NewA;
fc := fa * fb;
end;
Procedure ABC4.SetB(NewB: Double); {Описание метода SetB}
Begin
fb:= NewB;
fc:= fa * fb;
end;
end. {Окончание модуля}
Такой подход также не дает возможности нарушить целостность данных вызывающим фрагментом, так как не обеспечивается прямой доступ к установке значений свойств fa, fb и fc.