Помогите пожалуйста с описанием кода программы, что именно происходит с методами и переменными

unit Matrisa;
interface
type Real=Single;
RealP=^Real;
type TMatr=class
protected
Orig: Pointer;
kMin, kMax, jMin, jMax:Integer;
function ElemPP(k,j:Integer):RealP;
public
function OutElemm(k,j:integer):Real;
procedure InpElemm(k,j:integer;r:Real);
constructor Create(kMin_, kMax_, jMin_,jMax_:Integer);
destructor destroy; override;
property Elemm[k,j:integer]:Real read OutElemm write InpElemm;
default;
procedure Clearance;
procedure Add(x:TMatr);
procedure Mul(x:TMatr);
function Det2():Real;
end;

implementation
uses Uses_Massiv;
function TMatr.ElemPP;
begin
ElemPP:= Ptr(LongInt(Orig)+((k-kMin)*(jMax-jMin+1)+j-jMin)*Sizeof(Real));
end;
function TMatr.OutElemm(k,j:integer):Real;
begin
Result:=ElemPP(k,j)^;
end;
procedure TMatr.InPElemm(k,j:integer;r:Real);
begin
ElemPP(k,j)^:=r;
end;
constructor TMatr.Create(kMin_,kMax_,jMin_,jMax_:integer);
begin
inherited Create;
kMin:=kMin_;kMax:=kMax_;
jmin:=jMin_;jMax:=jMax_;
GetMem(Orig,((kMax-kMin+1)*(jMax-jMin+1)*Sizeof(Real)));
Clearance;
end;
destructor TMatr.destroy;
begin
FreeMem(Orig,((kMax-kMin+1)*(jMax-jMin+1)*Sizeof(Real)));
inherited Destroy;
end;
procedure TMatr.Clearance;
var k,j:Integer;
begin
for k:=kMin to kMax do
for j:=jMin to jMax do
Elemm[k,j]:=0.0;
end;
procedure TMatr.Add(x:TMatr);
var k,j:integer;
begin
for k:=kMin to kMax do
Elemm[k,j]:= Elemm[k,j]+x.Elemm[k,j];
end;
procedure TMatr.Mul(x:TMatr);
var k,j:Integer;
begin
for k:=kMin to kMax do
for j:=jMin to jMax do
Elemm[k,j]:=Elemm[k,j]*x.Elemm[k,j];
end;
function TMatr.Det2;
var S:Real;
begin
S:=0;
{for k:=kMin to kMax do
for j:=jMin to jMax do}
S:=Elemm[1,1]*Elemm[2,2]-Elemm[1,2]*Elemm[2,1];
Det2:=S;
end;
end.