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

UptoLike

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

50
ного метода требует по крайней мере одного дополнительного обраще-
ния к памяти (чаще двух). Тем не менее, добавляемые к классу новые ме-
тоды рекомендуется объявлять виртуальными, если есть хоть небольшая
вероятность их переопределения в клас сах-наслед никах.
В заключение приведем еще один, чуть менее тривиальный, при-
мер функции для умножения двух матриц, объединив ее вместе с опре-
делениями константы n, типа Matrix и функции AddMatrix в отдельном
модуле UnitAlgorithms.
Пример 3.5. Модуль, содержащий обобщенные алгоритмы для работы с
матрицами.
unit UnitAlgorithms;
interface
uses UnitRational; // необходим здесь для определения типа Matrix
const n = 3;
type Matrix = array[1..n,1..n] of Rational;
function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
implementation
function AddMatrix(m1, m2: Matrix): Matrix;
... // здесь находится тело функции, приведенное в начале параграфа
function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: Rational;
begin
for i:=1 to n do for j:=1 to n do begin
result[i,j]:=m1[i,1].Dot(m2[1,j]);
for k:=2 to n do begin
p:=m1[i,k].Dot(m2[k,j]); // функция Dot возвращает новый объект,
result[i,j].Add(p); // после добавления к элементу
p.Destroy; // матрицы result он больше не нужен
end;
end;
end;
end.
Функция MultiplyMatrix перемножает матрицы m1 и m2, последова-
тельно складывая произведения их элементов посредством мет ода Add.
   ного м етод а т ребует по крайней м ере од ного д опол нит ел ь ного обраще-
   ния к пам ят и (чаще д в ух). Т ем не м енее, д обав л яем ы е к кл ас с у нов ы е м е-
   тод ы реком енд ует с я объяв л ят ь в иртуал ь ны м и, ес л и ес т ь хот ь небол ь ш ая
   в ероят нос т ь ихпереопред ел ения в кл ас с ах-нас л ед никах.
         В з акл ючение прив ед ем еще од ин, чут ь м енее т рив иал ь ны й, при-
м ер функции д л я ум ножения д в ухм ат риц, объед инив ее в м ес т е с опре-
д ел ениям и конс т ант ы n, т ипа Matrix и функции AddMatrix в отд ел ь ном
м од ул е UnitAlgorithms.

П р им ер 3.5. М од ул ь , с од ержащий обобщенны е ал горит м ы д л я работ ы с
м ат рицам и.

unit UnitAlgorithms;

interface
uses UnitRational; // необходим здесь для определения типа Matrix

const n = 3;
type Matrix = array[1..n,1..n] of Rational;

function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;

implementation

function AddMatrix(m1, m2: Matrix): Matrix;
... // здесь находится тело функции, приведенное в начале параграфа

function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: Rational;
begin
  for i:=1 to n do for j:=1 to n do begin
     result[i,j]:=m1[i,1].Dot(m2[1,j]);
     for k:=2 to n do begin
       p:=m1[i,k].Dot(m2[k,j]); // функция Dot возвращает новый объект,
       result[i,j].Add(p);      // после добавления к элементу
       p.Destroy;               // матрицы result он больше не нужен
     end;
  end;
end;

end.


         Ф ункция MultiplyMatrix перем ножает м ат рицы m1 и m2, пос л ед ов а-
т ел ь но с кл ад ы в ая произ в ед ения ихэл ем ентов пос ред с тв ом м етод а Add.

                                             50