Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 52 стр.

UptoLike

Составители: 

52
Другой подход состоит в применении абстрактных методов, в о-
обще не имеющих реализации. Контроль за переопределением таких
мет одов берет на себя компилятор .
Объявление абстрактного метода, в отличие от просто виртуал ь-
ного, з авершается двумя директивами: virtual и abstract. Какой - либо
реализации данный метод не требует, однако и непосредственный его
вызов во время выпол нения програм мы приведет к исключительной
ситуации. Таким образом , производный класс должен обязательно з а-
местить все реально используемые им абстрактные мет оды.
В то время, как обычные виртуальные методы постепенно уточ -
няют свойства классов в процессе конкретизации, абстрактные члены
позволяют пол ностью отложить реализацию некоторого свойства до то-
го момента, когда эта реализация станет возможной и необходимой . По-
этому класс, содержащий хотя бы один незамещенный абстрактный ме-
тод , естественно также называть абстрактным. Абстрактные классы,
пожалуй, наиболее точно соответствуют понятию абстрактного типа
данных, о котором шла речь в начале второй части.
Итак, определим класс Number следующим образом .
Пример 3.6. Модуль, содержащий определение класса Number.
unit UnitNumber;
interface
type
Number = class // абстрактное число
public
function Plus (n: Number): Number; virtual; abstract; //
function Minus(n: Number): Number; virtual; abstract; //
function Dot (n: Number): Number; virtual; abstract; //
function Slash(n: Number): Number; virtual; abstract; //
procedure Add (n: Number); virtual; abstract; // абстрактные
procedure Subtract (n: Number); virtual; abstract; // методы
procedure MultiplyBy(n: Number); virtual; abstract; //
procedure DivideBy (n: Number); virtual; abstract; //
end;
implementation
end.
Модуль UnitAlgorithms нужно теперь модифицировать совсем не-
значительно, необходимо лишь заменить имя Rational на Number в опре-
делении типа Matrix:
         Другой под ход с ос тоит в прим енении а бстра ктн ых ме тодов, в о-
обще не им еющих реал из ации. Конт рол ь з а переопред ел ением т аких
м етод ов берет на с ебя ком пил ятор.
         Объяв л ение абс т ракт ного м етод а, в отл ичие от прос то в ирт уал ь -
ного, з ав ерш ает с я д в ум я д ирект ив ам и: virtual и abstract. Какой-л ибо
реал из ации д анны й м етод не т ребует, од нако и непос ред с т в енны й его
в ы з ов в о в рем я в ы пол нения програм м ы прив ед ет к ис кл ючит ел ь ной
с ит уации. Т аким образ ом , произ в од ны й кл ас с д ол жен обяз ат ел ь но з а-
м ес т ит ь в с е реал ь ноис пол ь з уем ы е им абс т ракт ны е м етод ы .
         В то в рем я, как обы чны е в ирт уал ь ны е м етод ы пос т епенно уточ-
няют с в ойс т в а кл ас с ов в процес с е конкрет из ации, абс т ракт ны е чл ены
поз в ол яют пол нос т ь ю отл ожит ь реал из ацию некоторогос в ойс т в а д ото-
гом ом ент а, когд а э т а реал из ация с т анет в оз м ожной и необход им ой. По-
э том у кл ас с , с од ержащий хотя бы од ин нез ам ещенны й абс т ракт ны й м е-
тод , ес т ес т в енно т акже наз ы в ат ь а бстра ктн ым. Абс т ракт ны е кл ас с ы ,
пожал уй, наибол ее точно с оот в ет с т в уют понят ию абс т ракт ного т ипа
д анны х, окотором ш л а речь в начал е в торой час т и.
         И т ак, опред ел им кл ас с Number с л ед ующим образ ом .

П р им ер 3.6. М од ул ь , с од ержащий опред ел ение кл ас с а Number.

unit UnitNumber;

interface
type
  Number = class // абстрактное число
  public
    function Plus (n: Number): Number; virtual; abstract;               //
    function Minus(n: Number): Number; virtual; abstract;               //
    function Dot (n: Number): Number; virtual; abstract;                //
    function Slash(n: Number): Number; virtual; abstract;               //
    procedure Add       (n: Number); virtual; abstract; //              абстрактные
    procedure Subtract (n: Number); virtual; abstract; //               методы
    procedure MultiplyBy(n: Number); virtual; abstract; //
    procedure DivideBy (n: Number); virtual; abstract; //
  end;

implementation
end.


        М од ул ь UnitAlgorithms нужно т еперь м од ифициров ат ь с ов с ем не-
з начит ел ь но, необход им ол иш ь з ам енит ь им я Rational на Number в опре-
д ел ении т ипа Matrix:

                                         52