30
3.4. Идентичност и съвместимост на типовете
стандарт всяка от тях решаваше сама въпроса към кой вид силна типизация да
принадлежи. В ISO стандарта на Pascal (към който се придържа и UniPascal) типизацията
е нещо средно между двата вида с превес към именната.
3.4.1. Идентичност на типовете
Идентичност на типовете (type identity) се изисква само за съвместимост между
фактическите и формалните параметри-променливи на процедурите и функциите.
Самото название ни подсказва, че ако два типа са идентични, то те са неотличими един
от друг.
Два типа T1 и T2 са идентични, ако е изпълнено едно от следните условия:
*
T1 и T2 са един и същ тип (например типа integer е идентичен със себе си);
*
ако T2 е определен чрез декларацията type T2 = T1; (или обратното, т.е.
T1 е определен така).
Освен тези правила е в сила и:
*
типът T1 е идентичен със себе си;
*
ако T1 е идентичен с T2, то T2 е идентичен с T1;
*
ако T1 е идентичен с T2 и T2 е идентичен с T3, то T1 е идентичен с T3
(транзитивност, T1 = T2 = T3 => T1 = T3).
При именната силна типизация е в сила единствено твърдението, че типът T е
идентичен само със себе си и с никой друг тип. Дори ако типът newT е определен като
newT = T, то тези два типа не са идентични при именната типизация.
Забележка: При предаване на параметри от тип низ (STRING) не е необходимо
формалният и фактическият параметри да имат идентични типове, достатъчно е
фактическият параметър да има не по-малка максимална дължина от формалния.
3.4.2. Съвместимост на типовете
Съвместимост на типовете (type compatibility) е необходима при смесено
използване на променливи от различен тип в изрази (аритметични и сравнения).
Два типа са съвместими, ако е изпълнено поне едно от следните условия:
*
двата типа са идентични;
*
двата типа са целочислени;
*
единият тип е диапазон на другия;
*
двата типа са диапазони на един и същ (изходен) тип и имат общо сечение
на множеството от стойности;
*
двата типа са множества със съвместими базови типове;
*
двата типа са пакетирани масиви от символи (char) с еднакъв брой
компоненти;
*
единият тип е низ, а другият е или низ или стандартен тип char;
*
единият тип е стандартен тип pointer, а другият е какъвто и да е указателен
тип;
*
единият тип е стандартен тип byte (word или longword), а другият тип е
какъвто и да е тип, който се реализира с 1 (2 или 4) байт.
Забележка: под низ се разбира стандартният тип string без ограничение за
количеството елементи, т.е. string[7] и string[77] са съвместими типове, както и string[5]
е съвместим с типа char.
<<  <  GO  >  >>

Вернуться к началу сайта