JĘzyki programowania obiektowego wiesław Porębski Ada95 Program Wykładu



Pobieranie 187.36 Kb.
Strona4/8
Data28.04.2016
Rozmiar187.36 Kb.
1   2   3   4   5   6   7   8

2.System typów


Każdy obiekt programu ma swój typ, który charakteryzuje pewien zbiór wartości oraz zbiór operacji dopuszczalnych na tych wartościach. Typy języka Ada95 można podzielić na elementarne (wyliczeniowy, numeryczny, i dostępowy) oraz złożone (tablice, rekordy, typy chronione i zadania). Pewne typy są predefiniowane (np. Boolean, Character i Wide_Character, Integer, Float, Duration, String i Wide_String); użytkownik może definiować własne typy oraz typy od nich pochodne lub typy pochodne od typów predefiniowanych. Typ, łącznie z typami od niego pochodnymi, tworzy tzw. klasę wyprowadzeń. Pokazany niżej rysunek ilustruje hierarchię typów języka Ada95.

Rysunek 2-1. Hierarchia typów języka Ada95

2.1.Typy całkowite


Typy całkowite obejmują zbiór wartości całkowitych ze znakiem (predefiniowany w widzialnej części pakietu Standard podtyp o nazwie Integer), lub typ modularny. Wartości typu Integer mieszczą się w zakresie System.Min_Int .. System.Max_Int. Zmienne i stałe typu Integer powinny zawierać się w zakresie -2**15+1 .. +2**15-1. Jeżeli implementacja zawiera predefiniowany typ Long_Integer, to jego wartości powinny mieścić się w zakresie -2**31+1 .. +2**31-1. Przykłady definicji stałych i zmiennych typu Integer:

My_Constant constant Integer := 1000;

Var1,Var2: Integer;

Var3: Integer range 1900..2002; --Var3 jest typu

--okrojonego z Integer

Typ modularny (resztowy) jest typem całkowitym bez znaku; definicja tego typu określa jego maksymalną wartość, która nie może być większa niż System.Max_Binary_Modulus (co najmniej 2**16) jeżeli modulus jest potęgą 2, lub nie większą niż System.Max_Nonbinary_Modulus w pozostałych przypadkach. Dla wartości tego typu dostępne są wszystkie operacje arytmetyczne, ale są one wykonywane modulo N, gdzie N jest liczbą dodatnią; dzięki temu nie może wystąpić ani niedomiar, ani nadmiar. Np. definicja

type Byte is mod 256;

lub

type Byte is mod 2**8;



oznacza bajt bez znaku, przy czym druga jej postać jest często używana do wyznaczenia masek bitowych. Zauważmy, że jeżeli zdefiniujemy zmienną typu Byte, np.

A_byte: Byte := 255;

i wykonamy instrukcję:

A_byte := A_byte + 1;

to bieżąca wartość zmiennej A_byte będzie wynosić 0.

Pewne własności typów można identyfikować przy pomocy tzw. atrybutów. Np. zmiennej Var1 możemy przypisać atrybut Integer’Size, oznaczający liczbę bajtów w reprezentacji liczb typu Integer:

Var1 := Integer’Size;

innymi użytecznymi atrybutami są First, Last, i Digits; dla typu Integer zakres możliwych wartości jest zawarty pomiędzy Integer'First a Integer'Last.


2.2.Typy rzeczywiste


Dane typów rzeczywistych (stało- i zmiennopozycyjne) są aproksymacjami liczb rzeczywistych. Dla danych typu zmiennopozycyjnego obliczenia można prowadzić z dokładnością do określonych przez implementację lub przez własną definicję liczby cyfr znaczących, zaś dla danych typu stałopozycyjnego z określoną dokładnością bezwzględną (delta). Własności typów rzeczywistych można także identyfikować za pomocą atrybutów Size, First , Last i Digits.

2.2.1.Typy zmiennopozycyjne


Predefiniowany typ zmiennopozycyjny Float jest zadeklarowany w widocznej części pakietu Standard. Własna definicja użytkownika ma następującą postać:

type nazwa_typu is [digits] cyfry

lub

type nazwa_typu is [digits] cyfry [range zakres]



Przykłady:

type FP1 is digits 7;-- dokładność minimum 7 cyfr

type FP2 is digits 10 range -1.0..1.0;

type FP3 is digits 8 range 0.0..1.0E34;


2.2.2.Typy stałopozycyjne


Typ stałopozycyjny jest albo zwykłym, albo decymalnym typem stałopozycyjnym. Dokładność podaje się po słowie kluczowym delta. Implementacje powinny wspierać dokładność co najmniej 24-bitową (włącznie z bitem znaku). Definicja typu stałopozycyjnego ma postać:

type nazwa_typu is delta dokładność range zakres

lub


type nazwa_typu is delta dokładność digits liczba_cyfr [range zakres]

Przykłady:

type Fixed is delta 0.1 range -1.0..1.0;

type Decimal is delta 0.01 digits 10;

Zakres można także zdefiniować dwuetapowo, np.

type FP4 is delta 0.1;

Zmienna: FP4 range -1.0..1.0;

Wartości, podawane po słowach kluczowych delta i digits muszą być dodatnie. Wartość delta musi być potęgą 10. Jeżeli w definicji typu decymalnego podano zakres, musi się on mieścić pomiędzy -(10**digits-1)*delta a +(10**digits-1)*delta.


2.3.Typy wyliczeniowe


Typ wyliczeniowy definiuje uporządkowany zbiór rozróżnialnych literałów wyliczenia, np. zbiór nazw miesięcy, czy też znaki alfabetu. Uporządkowanie oznacza, że kolejne literały mają przypisane numery porządkowe; jeżeli w wyliczeniu występuje N literałów, wtedy pierwszy z nich ma numer 0, a ostatni N-1. Predefiniowanymi typami wyliczeniowymi są Boolean i Character. Literały definiowanego typu wyliczeniowego są umieszczane w nawiasach okrągłych. Literałami mogą być identyfikatory lub literały znakowe (można je mieszać). Przykłady:

type Days is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

type Color is (White, Red, Yellow, Green, Blue, Brown, Black);

type Light is (Red, Amber, Green); -- Red and Green

--are overloaded

type Hexa is ('A', 'B', 'C', 'D', 'E', 'F');

type Mixed is ('A', 'B', '*', B, None, '?', '%');

Uporządkowanie literałów wyliczenia oznacza, że każdy literał ma inny numer pozycyjny: numerem pierwszego literału jest zero, a każdy następny ma numer o 1 większy niż jego poprzednik. Jeżeli ten sam literał występuje w więcej niż jednej definicji typu wyliczeniowego, wtedy mówimy o jego przeciążeniu. Typy wyliczeniowe można również definiować, podając zakres, w jakim zawierają się wartości wyliczenia, np.

type Hours is range 0 .. 23;

type Minutes is range 1 .. 60;


2.3.1.Atrybuty typów wyliczeniowych


Podstawowymi atrybutami typów wyliczeniowych są atrybuty First i Last. Ponadto mamy do dyspozycji atrybuty Succ (następnik), Pred (poprzednik), Val (wartość elementu w wyliczeniu) i Pos (pozycja elementu w wyliczeniu). Np. dla typu Day wyrażenie Day'Succ(Mon) ma wartość Tue, Day'Pred(Tue) ma wartość Mon, Day'Pos(Sat) ma wartość 5, a Day'Val(4) ma wartość Fri.
1   2   3   4   5   6   7   8


©absta.pl 2016
wyślij wiadomość

    Strona główna