Из Викиучебники :
Подтипы данного типа будут совместимы друг с другом.
Производный тип - это новый полноценный тип, созданный на основе существующего. Как и любой другой тип, он несовместим со своим родителем; однако он наследует примитивные операции, определенные для родительского типа.
Основное отличие состоит в том, что производный тип отличается типа . Вы не можете просто назначить одно другому или использовать их вместе в выражении. С другой стороны, подтип совместим по присваиванию со своим исходным типом. Вы используете их вместе без необходимости вводить какой-либо код для изменения типов.
У подтипа будет более узкий диапазон, чем у базового типа, поэтому могут быть проверки диапазона (из которых, я считаю, Constraint_Error может быть увеличена). Так что вам все равно нужно быть осторожным.
Прежде всего, терминология: это «Ада», а не «АДА» - он назван в честь «Ады Лавлейс»; это не аббревиатура.
Подтип совместим со своим базовым типом, поэтому вы можете смешивать операнды базового типа с операндами базового типа. Например:
subtype Week_Days is Integer range 1..7;
Поскольку это подтип, вы можете (например) добавить 1
к дню недели, чтобы получить следующий день недели.
Производный тип - это полностью отдельный тип, который имеет те же характеристики, что и его базовый тип. Нельзя смешивать операнды производного типа с операндами базового типа. Если, например, вы использовали:
type Week_Day is new Integer range 1..7;
, то вы не смогли бы добавить целое число к дню недели, чтобы получить другой день недели. Чтобы выполнять манипуляции с производным типом, вы обычно определяете эти манипуляции самостоятельно (например, создаете пакет). В то же время производный тип «наследует» все операции своего базового типа (даже некоторые из них, которые могут не иметь смысла), поэтому вы все равно получаете добавление.