Az Ada a programok megbízhatóságának növelése céljából igen erős típusfogalmat használ.
Ez a következőket jelenti:

-Minden objektumnak egyetlen típusa van.
-Minden típus egy értékhalmazt és egy művelethalmazt definiál, amely műveletek ezekre az értékekre alkalmazhatók. Egy típus nem lehet komponense saját magának.
-Az érték és az értéket kapó objektum típusának minden értkadásban meg kell egyezni.
-Ha egy értékre alkalmazunk egy tíusműveletet, annak a típusműveletek halmazában szerepelnie kell.


Az Adában a következő típusosztályok léteznek:

-skalár típusok, ezen belül diszkrét és való típusok
-diszkrét típusok, ezen belül felsorolási és egész típusok
-összetett típusok (tömb és rekord típusok)
-access típus
-private típusok
-task típusok

Minden típus csak önmagával ekvivalens. Különböző definíciók különböző típusokat definiálnak.

A : array (1 .. 10) of BOOLEAN;
B : array (1 .. 10) of BOOLEAN; --A és B típusa különböző
X, Y : array (1 ..10) of BOOLEAN; --X és Y típusa különböző

A DISZKRÉT TÍPUSOK

Felsorolási típusok:

A felsorolási típus definíciójában a típusértékeket azonosítóikkal felsoroljuk,
és az azonosítók sorrendje írja le a nagyságrendi viszonyokat. Ezek az azonosítók
a programban literálként használhatók.

type NAP is (HET,KED,SZE,CSU,PEN,SZO,VAS);
type VEGYES is (a,VAS); --VAS átlapolt konstans
type STATUS is (OFF,ON);
type SWITCH is (OFF,ON);
type HEXA is (A, B, C, D, E, F);

Egy felsorolási típus literáljainak nevei különbözők kell legyenek. Egy azonosítóval
(vagy karakteres literállal) azonban több típusnak egy-egy értékét is jelölhetjük -- ezt a nevek átlapolásának nevezzük.
Ha ekkor a program egy pontján nem egyértelmű, hogy melyik típus értékéről van szó, a
literálra ún. minősített kifejezéssel hivatkozhatunk. Pl.: NAP´(VAS).

A CHARACTER típus egy predefinit felsorolási típus, ami az ASCII karaktereket tartalmazza.
A nem megjeleníthető karakterekre való hivatkozáshoz az Ada bevezet egy predefinit ASCII nevű
package-t, s a nem megjeleníthető karakterekre ASCII.LF, ASCII.CR, ... formában hivatkozhatunk.

A logikai típus is egy predefinit felsorolási típus, amelynek definíciója a következő:

type BOOLEAN is ("FALSE","TRUE");

A logikai értékekre alkalmazhatók az and, or, xor és not műveletek.
Az and then és or else operátorok megfelelnek a logikai "és" és "vagy" műveleteknek, de a második
operandus nem kerül kiértékelésre, ha az eredmény az első operandus alapján is megadható.

Az egész számok típusai

Az Ada az INTEGER, SHORT_INTEGER, SHORT_SHORT_INTEGER, LONG_INTEGER, LONG_LONG_INTEGER predefinit egész típusokat tartalmazza.
Az INTEGER típusból új típust pl. a

type INT is new INTEGER range -1000 .. 1000;
vagy rövidebben
type INT is range -1000 .. 1000;

formában származtathatunk (ez egyszerre származtatás és altípusképzés is). Az INTEGER típusból
származtatott típusoknak abban van a jelentőségük, hogy míg az INTEGER típus implementációja
gépenként változhat, az így származtatott és megszorított típusoké mindenütt egyforma. Ez nagyban
elősegíti a program átvitelét más gépre.

A NATURAL és a POSITIVE az INTEGER típusnak egy predefinit altípusa. A definíciójuk a következő:

subtype NATURAL is INTEGER range 0 .. INTEGER´LAST;
subtype POSITIVE is INTEGER range 1 .. INTEGER´LAST;

Az INTEGER típus értékeit egész számliterálokkal írjuk le, a műveletei a szokásos aritmetikai
műveletek (+,-,*,/,mod, rem,**,abs). Az A rem B kifejezés előjele megegyezik az A előjelével, értéke
pedig abszolút értékben kisebb, mint abs(B). Az A mod B kifejezés előjele megegyezik a B előjelével,
értéke pedig abszolút értékben kisebb, mint abs(B).

A diszkrét típusok típusműveletei

A diszkrét típusú értékekre értelmezve vannak az alábbi relációk:

<, <=, >, >=, in, not in

Az Ada bevezet ún. típuműveleteket, vagy más néven attributumokat.
A diszkrét tipusok attribútumai a következők (T egy diszkrét tipus):

T´FIRST : A tipusértékhalmaz legkisebb eleme
T´LAST : A tipusértékhalmaz legnagyobb eleme
T´RANGE : T'First..T'Last által meghatározott intervallumot adja.
T´IMAGE(t) : A t T tipusu elemet stringé konvertálja
T´VALUE(s) : Az s stringet T tipusúvá konvertálja
T´PRED(t) : t megelőző eleme, ha van. Ha nincs kivételt dob. Pl integerek esetében t-1
T´SUCC(t) : t rákövetkező leme, ha van. Ha nincs kivételt dob. Pl integerek esetében t+1
T´MIN(a,b) : a és b közül a kisebbel tér vissza. a és b-nek T tipusúnak kell lennie
T´MAX(a,b) : a és b közül a nagyobbal tér vissza. a és b-nek T tipusúnak kell lennie
T´BASE : T megszorítás nélküli alaphalmaza
T´WIDTH(t) : A t stringé konvertált hossza karakterekben mérve
 
 
VISSZA