ВУЗ:
Составители:
Рубрика:
53
Matrix = array[1..n,1..n] of Number;
и в объявлении локальной переменной p функции MultiplyMatrix. Чтобы
сделать эти изменения возможными, раздел интерфейса данного модуля
должен подключать UnitNumber вместо UnitRational.
В результате всех исправлений мы получаем , наконец, обобщен-
ные алгоритмы, пригодные для вычислений над любым кольцом : доста-
точно лишь создать подходящего потомка класса Number. При этом раз -
работка новых классов не будет оказывать никакого влияния на модуль
UnitAlgorithms, его не придется даже переком пил ировать.
В заключение посмотрим , как следует изменить классы Rational и
PAryFraction, чтобы они стали производными от Number. Воспользовав-
шись случаем , объявим все методы этих классов виртуальными. Искл ю-
чение стоит сделать лишь для конструкторов , вызываемых обычно пу-
тем явного указания имени типа, и для функции PAryFraction.isPrime,
реализация которой в действительности никак не зависит от содержаще-
го ее класса.
Пример 3.7. Модифицированный раздел интерфейса модуля UnitRational.
unit UnitRational;
interface
uses UnitNumber; // подключаем модуль с определением класса Number
type
Rational = class(Number) // указываем Number в качестве предка
private
num: Integer;
den: Integer;
protected
procedure Normalize; virtual;
procedure Reduce; virtual;
public
constructor Create;
constructor CreateAs(n, m: Integer);
function Plus (n: Number): Number; override; //
function Minus(n: Number): Number; override; //
function Dot (n: Number): Number; override; // замещаем
function Slash(n: Number): Number; override; // абстрактные
procedure Add (n: Number); override; // методы
procedure Subtract (n: Number); override; //
procedure MultiplyBy(n: Number); override; //
procedure DivideBy (n: Number); override; //
Matrix = array[1..n,1..n] of Number;
и в объяв л ении л окал ь ной перем енной p функции MultiplyMatrix. Ч тобы
с д ел ат ь э т и из м енения в оз м ожны м и, раз д ел инт ерфейс а д анногом од ул я
д ол жен под кл ючат ь UnitNumber в м ес тоUnitRational.
В рез ул ь т ат е в с ехис прав л ений м ы пол учаем , наконец, обобщен-
ны е ал горит м ы , пригод ны е д л я в ы чис л ений над л юбы м кол ь цом : д ос т а-
точнол иш ь с оз д ат ь под ход ящегопотом ка кл ас с а Number. При э том раз -
работ ка нов ы хкл ас с ов не буд ет оказ ы в ат ь никакогов л ияния на м од ул ь
UnitAlgorithms, егоне прид ет с я д аже переком пил иров ат ь .
В з акл ючение пос м от рим , как с л ед ует из м енит ь кл ас с ы Rational и
PAryFraction, чтобы они с т ал и произ в од ны м и от Number. Вос пол ь з ов ав -
ш ис ь с л учаем , объяв им в с е м етод ы э т ихкл ас с ов в ирт уал ь ны м и. И с кл ю-
чение с тоит с д ел ат ь л иш ь д л я конс т рукторов , в ы з ы в аем ы хобы чно пу-
т ем яв ного указ ания им ени т ипа, и д л я функции PAryFraction.isPrime ,
реал из ация которой в д ейс т в ит ел ь нос т и никак не з ав ис ит от с од ержаще-
гоее кл ас с а.
П р им ер 3.7. М од ифициров анны й раз д ел интерфейс а м од ул я UnitRational.
unit UnitRational;
interface
uses UnitNumber; // подключаем модуль с определением класса Number
type
Rational = class(Number) // указываем Number в качестве предка
private
num: Integer;
den: Integer;
protected
procedure Normalize; virtual;
procedure Reduce; virtual;
public
constructor Create;
constructor CreateAs(n, m: Integer);
function Plus (n: Number): Number; override; //
function Minus(n: Number): Number; override; //
function Dot (n: Number): Number; override; // замещаем
function Slash(n: Number): Number; override; // абстрактные
procedure Add (n: Number); override; // методы
procedure Subtract (n: Number); override; //
procedure MultiplyBy(n: Number); override; //
procedure DivideBy (n: Number); override; //
53
Страницы
- « первая
- ‹ предыдущая
- …
- 51
- 52
- 53
- 54
- 55
- …
- следующая ›
- последняя »
