Производные типы и подтипы в Ada - PullRequest
5 голосов
/ 20 апреля 2010

В чем различия?

Ответы [ 3 ]

8 голосов
/ 20 апреля 2010

Прежде всего, терминология: это «Ада», а не «АДА» - она ​​названа в честь «Ада Лавлейс»; это не аббревиатура.

Подтип совместим с его базовым типом, поэтому вы можете смешивать операнды базового типа с операндами базового типа. Например:

subtype Week_Days is Integer range 1..7;

Поскольку это подтип, вы можете (например) добавить 1 к рабочему дню, чтобы получить следующий рабочий день.

Производный тип - это совершенно отдельный тип, имеющий те же характеристики, что и его базовый тип. Вы не можете смешивать операнды производного типа с операндами базового типа. Если, например, вы использовали:

type Week_Day is new Integer range 1..7;

Тогда вы бы не смогли бы добавить целое число в день недели, чтобы получить другой день недели. Чтобы делать манипуляции с производным типом, вы обычно определяете эти манипуляции самостоятельно (например, создаете пакет). В то же время, производный тип «наследует» все операции своего базового типа (даже те, которые могут не иметь смысла), поэтому вы все равно получаете дополнение.

2 голосов
/ 20 апреля 2010

От Wikibooks :

Подтипы данного типа будут совместимы друг с другом.

Производный тип - это новый, полноценный тип, созданный из существующего. Как и любой другой тип, он несовместим со своим родителем; однако он наследует примитивные операции, определенные для родительского типа.

1 голос
/ 20 апреля 2010

Основное отличие состоит в том, что производный тип представляет собой другой тип . Вы не можете просто назначить одно другому или использовать их вместе в выражении. С другой стороны, подтип совместим по присваиванию с его исходным типом. Вы используете их вместе, без необходимости ввода какого-либо кода.

Подтип будет иметь более узкий диапазон, чем базовый тип, поэтому могут быть проверки диапазона (из которых, я полагаю, Constraint_Error может быть обработан). Так что вам все равно нужно быть осторожным.

...