違いは何ですか?
3 に答える
まず、用語:「ADA」ではなく「Ada」です。「AdaLovelace」にちなんで名付けられています。頭字語ではありません。
サブタイプはその基本タイプと互換性があるため、基本タイプのオペランドと基本タイプのオペランドを混在させることができます。例えば:
subtype Week_Days is Integer range 1..7;
これはサブタイプであるため、たとえば、平日に追加1
して次の平日を取得できます。
派生型は、基本型と同じ特性を持つ完全に別の型です。派生型のオペランドと基本型のオペランドを混在させることはできません。たとえば、次を使用した場合:
type Week_Day is new Integer range 1..7;
その場合、別の平日を取得するために平日に整数を追加することはできません。派生型で操作を行うには、通常、それらの操作を自分で定義します(たとえば、パッケージを作成します)。同時に、派生型はその基本型のすべての操作を「継承」するので(意味をなさないものもあります)、それでも加算を取得できます。
ウィキブックスから:
特定のタイプのサブタイプは、相互に互換性があります。
派生型は、既存の型から作成された新しい本格的な型です。他のタイプと同様に、それはその親と互換性がありません。ただし、親タイプに対して定義されたプリミティブ操作を継承します。
基本的な違いは、派生型は異なる型であるということです。一方を他方に代入したり、式で一緒に使用したりすることはできません。一方、サブタイプは元のタイプと代入互換性があります。型変更コードを入力する必要なく、それらを一緒に使用できます。
ただし、サブタイプの範囲はベース タイプよりも狭いため、範囲チェックが行われる可能性があります (そこから Constraint_Error を発生させることができると思います)。ですので、まだまだ注意が必要です。