Основы объектно-ориентированного программирования: Методические указания к выполнению лабораторной работы по дисциплине «Информатика», страница 5

propertyимя_свойства: тип_данных read метод_1 write метод_2;

Здесь, «метод_1» – метод, используемый для получения текущего значения переменной, а «метод_2» – метод, необходимый для изменения значения переменной.

Методы и свойства класса могут быть открытыми (public), защищенными (protected) и закрытыми (private). Открытые члены класса составляют так называемый внешний интерфейс и представляют собой функциональность, доступную другим классам. К защищенным членам класса невозможен доступ со стороны. К закрытым же членам класса не могут получить доступ даже подклассы данной иерархии. Закрытыми обычно создаются все свойства класса, а так же вспомогательные методы.

Описание свойств следует размещать после ключевого слова public, а описание полей и методов класса после слова private. Для более наглядного понимания механизма использования свойств, дополним наш класс THameleon свойством Okras, базирующимся на поле Color.

type

THameleon = class

   private

Color: TColor;

//метод установки значения поля Color

procedureReColor;

      //метод получения значения поля Color

function GetColor: TColor;

public

      constructor create;

destructor destroy;

      property Okras: integer read GetColor write ReColor;

end;

Для работы со свойствами созданного объекта используется следующая конструкция:

имя_объекта.имя_свойства := значение;

В данном примере изменить свойство объекта можно следующим образом:

var

myHameleon: THameleon;

begin

myHameleon := Thameleon.create;

myHameleon.Okras := Red;

{действия над объектом}

myHameleon.free;

end;

Роль свойств в Delphi велика, об этом говорит хотя бы тот факт, что у имеющихся в распоряжения программиста стандартных классов, изменение значений полей происходит средствами изменений, базирующимися на них свойствах. Свойства используются для реализации принципа инкапсуляции. К сожалению, подробное описание работы со свойствами выходит за рамки данного методического пособия, но читателю рекомендуется более подробно изучить этот вопрос самостоятельно.

У разработчика может появиться необходимость изменить или дополнить реализацию каких-либо методов классов-предков в классах-потомках. Эту возможность даёт использование полиморфизма. Для того, чтобы появилась возможность дополнить или изменить метод в классе-потомке, необходимо использовать ключевое слово virtual. Если метод предполагает реализацию только в классах-потомках, но никак не реализован в классе-предке, то вместе со словом virtual необходимо использовать слово abstract:

type

THameleon = class

procedure FastRun; virtual;

function GetColor: TColor; virtual; abstract;

end;

В нашем примере метод FastRun реализован в классе-предке и может быть перезагружен в классах потомках, а для метода GetColor реализация в классе отсутствует. Для того чтобы перезагрузить метод в классах-потомках, необходимо использовать ключевое слово override. Чтобы наглядно проиллюстрировать это, вернемся к классу-потомкуTMountineHameleon:

type

TMountineHameleon = class (THameleon)

   …

procedure FastRun ; override;

function GetColor: TColor; override;

 end;

Теперь методы FastRun и GetColor можно дополнять или изменять в рамках класса TMountineHameleon.

3.  Пример разработки приложения

Для иллюстрации и практического использования  теоретических основ кратко рассмотренной выше методологии объектно-ориентированного программирования (ООП) рассмотрим конкретную задачу и реализуем её в интегрированной среде разработки DELPHI.

Попытаемся составить программу, которая позволит определить размеры и вид деформированной металлической заготовки после ударного воздействия механического молота. За основу возьмем три возможных вида заготовок, представленных на рисунке 1. В программе учтем и тот факт, что заготовки могут быть выполнены из различного материала, например, из меди, алюминия, железа и никеля. Ударное воздействие механического молота имеет направление сверху вниз, а реакцией заготовки будет изменение ее геометрических размеров высоты и основания. В связи с этим, помимо получения численного результата расчета изменения геометрических размеров желательно и даже необходимо отобразить вид заготовки до- и после ударного воздействия. Такой прием позволяет улучшить восприятие результатов расчета программы пользователем, что, в конечном итоге, приводит к повышению качества интерфейсной части программы.