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

UptoLike

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

25
Пример 2.4. Интерфейс класса Rational.
Rational = class // рациональное число
private // закрытые члены класса
num: Integer; // числитель
den: Integer; // знаменатель
protected // защищенные члены класса
procedure Normalize; // Нормализовать
procedure Reduce; // Сократить
public // открытые члены класса
function GetNum: Integer; // Вернуть значение поля num
function GetDen: Integer; // Вернуть значение поля den
procedure SetNum(value:Integer); // Установить значение num
procedure SetDen(value:Integer); // Установить значение den
function Plus(r:Rational): Rational; // Плюс
function Minus(r:Rational): Rational; // Минус
function Dot(r:Rational): Rational; // Точка
function Slash(r:Rational): Rational; // Косая черта
procedure Add(r:Rational); // Прибавить
procedure Subtract(r:Rational); // Вычесть
procedure MultiplyBy(r:Rational); // УмножитьНа
procedure DivideBy(r:Rational); // РазделитьНа
end;
Итак, класс Rational фактически объединил в себе все члены м о-
дуля из § 1.1. При этом количество параметров подпрограмм уменьш и-
лось на ед иницу: первый аргумент теперь передается им автоматически.
Полученные в результате объявления бинарных операций выглядят н е -
сколько странно, однако в програм ме их вызов будет иметь более есте-
ственный вид .
В соответствии с общей идеей сокрытия реализации поля класса
объяв лены закрытыми, а операции, которые можно выполнять над его
объектами открытыми. Область видимости процедур Normalize и Redu-
ce несколько ув еличена по сравнению с предыдущей версией. Смысл дан-
ного решения станет понятен только после изучения наследования в § 3.1.
Ограничение дос тупа к полям num и den привело к тому, что
пользователь потерял возможность присваивать объектам класса Ratio-
nal конкретные значения и узнавать результат выполнения операций.
Для компенсации этого эффекта в интерфейс класса добавлены методы
Get¼ и Set¼
Н есмотря на то, что указанные методы предполагается использо-
вать для непосредственного обращения к полям , данный шаг почти не
уменьшает абстрактности типа.
Пример 2.4. И нт ерфейс кл ас с а Rational.

Rational = class // рациональное число
private   // закрытые члены класса
  num: Integer;                                        // числитель
  den: Integer;                                        // знаменатель
protected // защищенные члены класса
  procedure Normalize;                                 // Нормализовать
  procedure Reduce;                                    // Сократить
public    // открытые члены класса
  function GetNum: Integer;                            //   Вернуть значение поля num
  function GetDen: Integer;                            //   Вернуть значение поля den
  procedure SetNum(value:Integer);                     //   Установить значение num
  procedure SetDen(value:Integer);                     //   Установить значение den
  function Plus(r:Rational): Rational;                 //   Плюс
  function Minus(r:Rational): Rational;                //   Минус
  function Dot(r:Rational): Rational;                  //   Точка
  function Slash(r:Rational): Rational;                //   Косая черта
  procedure Add(r:Rational);                           //   Прибавить
  procedure Subtract(r:Rational);                      //   Вычесть
  procedure MultiplyBy(r:Rational);                    //   УмножитьНа
  procedure DivideBy(r:Rational);                      //   РазделитьНа
end;


         И т ак, кл ас с Rational факт ичес ки объед инил в с ебе в с е чл ены м о-
д ул я из § 1.1. При э том кол ичес т в опарам ет ров под програм м ум ень ш и-
л ос ь на ед иницу: перв ы й аргум ент т еперь перед ает с я им ав том ат ичес ки.
Пол ученны е в рез ул ь т ат е объяв л ения бинарны хопераций в ы гл яд ят не-
с кол ь кос т ранно, од нако в програм м е ихв ы з ов буд ет им ет ь бол ее ес т е-
с т в енны й в ид .
         В с оотв ет с т в ии с общей ид еей с окры т ия реал из ации пол я кл ас с а
объяв л ены з акры ты м и, а операции, которы е м ожно в ы пол нять над его
объект ам и — от кры ты м и. Обл ас ть в ид им ос ти процед ур Normalize и Redu-
ce нес кол ь коув ел ичена пос рав нению с пред ы д ущей в ерс ией. См ы с л д ан-
ногореш енияс т анет понятен тол ь копос л е из учения нас л ед ов анияв § 3.1.
         Ограничение д ос т упа к пол ям num и den прив ел о к том у, что
пол ь з ов ат ел ь пот ерял в оз м ожнос т ь прис в аив ат ь объект ам кл ас с а Ratio-
nal конкрет ны е з начения и уз нав ат ь рез ул ьт ат в ы пол нения операций.
Дл я ком пенс ации э тогоэ ффект а в инт ерфейс кл ас с а д обав л ены м етод ы
Get¼ и Set¼
              Н ес м от ря на то, чтоуказ анны е м етод ы пред пол агает с я ис пол ь з о-
   в ат ь д л я непос ред с т в енного обращения к пол ям , д анны й ш аг почт и не
   ум ень ш ает абс т ракт нос т и т ипа.

                                            25