An abstract type can be introduced either by a <#3502#>synonym-declaration<#3502#>, in which case the <#3503#>type-name<#3503#> merely stands for the <#3504#>type-declarer<#3504#> in its definition, or by a <#3505#>type-declaration<#3505#> (see following section), in which case it is to be distinguished from the <#3506#>type-declarer<#3506#> in its definition. In both cases it is represented by a (bold) <#3507#>type-name<#3507#>.
A <#3508#>type-declaration<#3508#> gives a <#3509#>type-name<#3509#> to a <#3510#>type-declarer<#3510#>, its <#3511#>realization<#3511#>. In the packet in which the abstract type is defined, the <#3512#>concretizer<#3512#> <#3513#>CONCR<#3513#> may be used to convert an object of that type to the type of the realization. In that packet, <#3514#>selection<#3514#> and <#3515#>subscription<#3515#> also have access to the realization of a type. Outside its defining packet, an abstract type is elementary and there is no direct way to access its realization (but this may be achieved indirectly, by the use of algorithms defined in the same packet as the type). Because of these stringent restrictions on the visibility of the realization, <#3516#>type-declarations<#3516#> are much more suitable for Bottom-Up and modular programming than the <#3517#>synonym-declarations<#3517#>, which are intended for Top-Down programming.
(315,060)<#4628#>
(000,050)<#4445#>type-declaration<#4445#>