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

UptoLike

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

62
type Matrix = array[1..n,1..n] of PNumber; // элементы матрицы -
// ссылки на записи
function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
implementation
function AddMatrix(m1, m2: Matrix): Matrix;
var i,j: Integer;
begin
for i:=1 to n do for j:=1 to n do
result[i,j]:=m1[i,j].Plus(m1[i,j], m2[i,j]);
{ Вызывается подпрограмма, адресуемая полем Plus записи m1[i,j].
Ей в качестве параметров передаются объекты m1[i,j] и m2[i,j]. }
end;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: PNumber;
begin
for i:=1 to n do for j:=1 to n do begin
result[i,j]:=m1[i,1].Dot(m1[i,1],m2[1,j]);
for k:=2 to n do begin
p:=m1[i,k].Dot(m1[i,k],m2[k,j]);
result[i,j].Add(result[i,j],p);
p.Destroy(p);
end;
end;
end;
end.
Как это ни удивительно, код модуля почти не изменился. Самое
существенное отличие состоит в том , что имя объекта, для которого в ы -
зывается метод , приходится повторять дважды. Первый раз оно испол ь -
зуется для определения адреса конкретной подпрограммы, второй как
параметр этой подпрограммы. Вспомним , что в объектной модели пер-
вый параметр передается методу автоматически под именем self.
4.3. Наследование
В примере 4.1 обращает на себя внимание то, как часто в исход -
ном тексте фигурируют указатели. И элементы матриц, и поля объектов
содержат значения, которые могут быть адресами чего угодно. На самом
type  Matrix = array[1..n,1..n] of PNumber; // элементы матрицы -
                                            // ссылки на записи
function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;

implementation

function AddMatrix(m1, m2: Matrix): Matrix;
var i,j: Integer;
begin
  for i:=1 to n do for j:=1 to n do
    result[i,j]:=m1[i,j].Plus(m1[i,j], m2[i,j]);

{ Вызывается подпрограмма, адресуемая полем Plus записи m1[i,j].
  Ей в качестве параметров передаются объекты m1[i,j] и m2[i,j]. }

end;

function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: PNumber;
begin
  for i:=1 to n do for j:=1 to n do begin
     result[i,j]:=m1[i,1].Dot(m1[i,1],m2[1,j]);
     for k:=2 to n do begin
       p:=m1[i,k].Dot(m1[i,k],m2[k,j]);
       result[i,j].Add(result[i,j],p);
       p.Destroy(p);
     end;
  end;
end;

end.


          Как э то ни уд ив ит ел ь но, код м од ул я почт и не из м енил с я. Сам ое
с ущес т в енное отл ичие с ос т оит в том , чтоим я объект а, д л я которогов ы -
з ы в ает с я м етод , приход ит с я пов торят ь д в ажд ы . Перв ы й раз оноис пол ь -
з ует с я д л я опред ел ения ад рес а конкрет ной под програм м ы , в торой — как
парам ет р э той под програм м ы . Вс пом ним , чтов объект ной м од ел и пер-
в ы й парам ет р перед ает с я м етод у ав том ат ичес ки под им енем self.

                                4.3. Н аследование

        В прим ере 4.1 обращает на с ебя в ним ание то, как час то в ис ход -
ном т екс т е фигурируют указ ат ел и. И эл ем ент ы м ат риц, и пол я объектов
с од ержат з начения, которы е м огут бы т ь ад рес ам и чегоугод но. Н а с ам ом

                                          62