BASIC、Quick Basicで、開発をしていたときは、オブジェクト指向とか、そういうものでなくても、これぐらいのカプセル化ができればと思っていました。データ構造を系統的に考えることに、こだわりもあった。
VisualBasicの最初のころは、イベントドリブンの動きばかり捉われて自分が一番気になるデータ構造の考えは何だかおざなりになったなと実感しました。
当時の感覚にいちばん近かったのは、Modula-2のデータ構造でした。
アジソンウェスレイ・トッパン
情報科学シリーズ-5
C++:オブジェクト指向プログラミング
第4章 クラスを用いてのデータカプセル化と情報隠蔽
(P79) 4.4.2 Modua-2で実現された stack抽象型
リスト 4.9
Modula-2におけるstackADTのDEFINITION MODULE
DEFINITION MODULE stack;
EXPORT QUALIFIED
(* type *) stack,
(* proc *) push, pop, define;
TYPE stack;
PROCEDURE define
( VAR s : stack );
PROCEDURE push;
( s : stack;
c : CHAR );
PROCEDURE pop
( s : stack ) : CHAR;
END stack.
リスト4.10
Modula-2におけるstackADTのIMPLEMENTATION MODULE
IMPLEMENTATION MODULE stack;
FROM Storage IMPORT ALLOCATE;
VAR
top : INTEGR;
TYPE stack = POINTER TO ARRAY[0..99] OF CHAR;
PROCEDURE define
( VAR s : stack );
BEGIN
NEW( s );
top := 0;
END define;
PROCEDURE push
( s : stack;
c : CHAR );
BEGIN
IF top <= 100
THEN
s^[top]:= c;
INC( top );
END;
END push;
PROCEDURE pop
( s : stack ) : CHAR;
BEGIN
IF top > 0
THEN
DEC( top );
RETURN s^[ top ];
END;
END pop;
END stack.
リスト4.11
stackADTを用いるModula-2テストプログラム
MODULE stacktst;
FROM stack IMPORT
(* type *) stack,
(* proc *) push, pop, define;
FROM Strings IMPORT
(* proc *) Length;
FROM termio IMPORT
(* proc *) writestring, readstring, writeln;
TYPE nametype = ARRAY[0..19] OF CHAR;
PROCEDURE reversename
( name : nametype;
VAR backwards : nametype );
VAR
s : stack;
i : INTEGER;
BEGIN
define( s );
FOR i := 0 TO Length( name) - 1 DO
push( s, name[ i ]) ;
END;
FOR i := 0 TO Length( name ) - 1 DO
backwards[ i ] := pop( s );
END;
backwards[ Length( name ) ] := 0C;
END reversename;
VAR
yourname, namebackwards : nametype;
BEGIN (* Main program *)
writestring( ''Enter your name: '');
readstring( yorname );
reversename( yourname, namebackwards );
writeln;
writeln;
writesting( '' Yuor name backwards is '');
writestring( namebackwards );
END stacktst.
(P80)
Modula-2のstackは、100個の文字列からなる配列のポインタとして実現される。プロシージャdefineで、100個の文字にメモリ領域を割り当て、整数インデックスtopの初期値を 0 にする。
このプログラムは、C++で実装したstack抽象型のpop、pushを
Modula-2でコーディングしたもので、原著にはその比較が記述されています。Modula-2のカプセル化の例として提示しました。
憶い出した。Modula-2でSimula67もどきのコーディングをすることを考えていた。現在では、gnu cim があるけど、気持ちが乗らない。intel CPUに実装されているgnu cimを実行しても別の言語だと感じる。
当時のUNIVAC、IBMなどの大型コンピュータで動作することを確認する。このことに意味があると思う。
でも、同じく昔からあるFORTRAN、COBOLは、当時のコンピュータで実行したいと思わない。それに、Simula言語をコンピュータにどのようにビルトインしたのかについても興味が尽きない。動作が不安定でもあったようだ。過去の大型コンピューターは、身近な存在でないためPCで実行するModula-2を考えた。(Modula-2も身近ではなかったけど。)