Abstract type: Difference between revisions

Line 2,643:
obj.abstract(); # made concrete in class
obj.concrete(); # 42</lang>
=={{header|Simula}}==
Abtract Datatypes are declared using the VIRTUAL keyword.
For example, we need the following two procedures hash and equalto for a hash map implementation.
<lang simula>
! ABSTRACT HASH KEY TYPE ;
LISTVAL CLASS HASHKEY;
VIRTUAL:
PROCEDURE HASH IS
INTEGER PROCEDURE HASH;;
PROCEDURE EQUALTO IS
BOOLEAN PROCEDURE EQUALTO(K); REF(HASHKEY) K;;
BEGIN
END HASHKEY;
</lang>
A concrete implementation can be derived as follows:
<lang simula>
! COMMON HASH KEY TYPE IS TEXT ;
HASHKEY CLASS TEXTHASHKEY(T); VALUE T; TEXT T;
BEGIN
INTEGER PROCEDURE HASH;
BEGIN
INTEGER I;
T.SETPOS(1);
WHILE T.MORE DO
I := 31*I+RANK(T.GETCHAR);
IF DEBUG THEN BEGIN
OUTIMAGE;
OUTTEXT("HASHMAPS.TEXTHASHKEY.HASH=");
OUTINT(I,0);
OUTIMAGE;
END;
HASH := I;
END HASH;
BOOLEAN PROCEDURE EQUALTO(K); REF(HASHKEY) K;
EQUALTO := T = K QUA TEXTHASHKEY.T;
END TEXTHASHKEY;
</lang>
 
=={{header|Standard ML}}==
Anonymous user