|
|
|
This is the third of the five exercises (If you are interested, I would be glad to send you the
complete project report: mike@vorburger.ch Matrices.ADS---------------------------------------------------------------
-- Sample for an object-oriented implementation of Matrices;
-- could easily be extended to full functionality.
---------------------------------------------------------------
--
-- FILE: Matrices.ADS
-- This package defines an abstract Matrix and operations
-- common to all matrices; defined either as abstract primitive
-- operations or as class-wide subprograms.
--
-- AUTHOR: Michael Vorburger
-- DATE OC: 11/4/96 15:00
-- LAST MOD:
---------------------------------------------------------------
generic
DIMENSION: POSITIVE;
package MATRICES is
subtype INDEX is INTEGER range 1..DIMENSION;
type ABSTRACT_MATRIX is abstract tagged private;
-- Abstract primitive operations:
function Component (M: in ABSTRACT_MATRIX;
Rowa: in index;
Column: in index)
return FLOAT is abstract;
-- Class-wide subprograms:
procedure Write (M: in ABSTRACT_MATRIX'Class);
private
type ABSTRACT_MATRIX is abstract tagged null record;
end matrices;
Matrices.ADB---------------------------------------------------------------
-- Sample for an object-oriented implementation of Matrices;
-- could easily be extended to full functionality.
---------------------------------------------------------------
--
-- FILE: Matrices.ADB
-- This package contains the abstract Matrix and operations
-- common to all matrices; defined either as abstract primitive
-- operations or as class-wide subprograms.
--
-- AUTHOR: Michael Vorburger
-- DATE OC: 11/4/96 15:00
-- LAST MOD:
---------------------------------------------------------------
with TEXT_IO;
package body MATRICES is
package FIO is new TEXT_IO.FLOAT_IO(FLOAT);
procedure WRITE(M: in ABSTRACT_MATRIX'CLASS) is
begin
for I in INDEX loop
for J in INDEX loop
FIO.PUT(COMPONENT(M,I,J));
end loop;
TEXT_IO.NEW_LINE;
end loop;
end WRITE;
end MATRICES;
Matrices-AsArray.ADS---------------------------------------------------------------
-- Sample for an object-oriented implementation of Matrices;
-- could easily be extended to full functionality.
---------------------------------------------------------------
--
-- FILE: Matrices-AsArray.ADS
-- This package contains a matrix based implementation. Some
-- abstract primitive operations are overriden and new
-- non-abstract one are added.
--
--
-- AUTHOR: Michael Vorburger
-- DATE OC: 11/4/96 15:00
-- LAST MOD:
---------------------------------------------------------------
generic
package MATRICES.ASARRAY is
type MATRIX_ASARRAY is new ABSTRACT_MATRIX with private;
-- Overriding of inherited primitive operations:
function Component (M: in MATRIX_ASARRAY;
Rowa: in index;
Column: in index) return FLOAT;
-- Introduction of new primitive operations:
function I return MATRIX_ASARRAY;
private
type VECTOR is array(INDEX'RANGE,INDEX'range) of float;
type MATRIX_ASARRAY is new ABSTRACT_MATRIX with
record
A : VECTOR;
end record;
end MATRICES.ASARRAY;
Matrices-AsArray.ADB---------------------------------------------------------------
-- Sample for an object-oriented implementation of Matrices;
-- could easily be extended to full functionality.
---------------------------------------------------------------
--
-- FILE: Matrices-AsArray.ADB
-- This package contains a matrix based implementation. Some
-- abstract primitive operations are overriden and new
-- non-abstract one are added.
--
-- AUTHOR: Michael Vorburger
-- DATE OC: 11/4/96 15:00
-- LAST MOD:
---------------------------------------------------------------
package body MATRICES.ASARRAY is
function Component (M: in MATRIX_ASARRAY;
Rowa: in index;
Column: in index) return FLOAT is
begin
return M.A(ROWA,COLUMN);
end COMPONENT;
-- That's just demo; doesn't consider "index" ...
function I return MATRIX_ASARRAY is
T: MATRIX_ASARRAY;
begin
T.A(1,1):=1.0; T.A(1,2):=0.0; T.A(1,3):=0.0; T.A(2,1):=0.0;
T.A(2,2):=1.0; T.A(2,3):=0.0; T.A(3,1):=0.0; T.A(3,2):=0.0;
T.A(3,3):=1.0;
return T;
end I;
end MATRICES.ASARRAY;
TEST1.ADB--------------------------------------------------------------- -- Sample for an object-oriented implementation of Matrices; -- could easily be extended to full functionality. --------------------------------------------------------------- -- -- FILE: Test1.adb -- This module shows the usage the packages for abstract -- matrices and their As-Array implementation. -- -- AUTHOR: Michael Vorburger -- DATE OC: 11/4/96 15:00 -- LAST MOD: --------------------------------------------------------------- with MATRICES.ASARRAY; procedure TEST1 is package A_MAT_D3 is new MATRICES(4); -- "signature" package MAT is new A_MAT_D3.ASARRAY; -- defintion of instantiated child M1: MAT.MATRIX_ASARRAY; begin M1:=MAT.I; A_MAT_D3.WRITE(M1); end;
more ADA: |
| ||||||||||||