Az Eiffel egy osztály-orientált programozási nyelv, így az egyetlen beépített típuskonstrukciós eszköz az osztály. Emellett az Eiffel szigorúan típusos nyelv is, rendelkezik típusellenõrzéssel, viszont a típuskényszerítés lehetõségét kihagyták belõle a fejlesztõk.
(Ld. még OOP.)
Eiffel-ben statikus típusosság van: minden objektum pontosan egy típus direkt példánya. Ennek elõnye, hogy már fordítási idõben elvégezhetõ az ellenõrzések jelentõs része. Az
öröklõdés és a többalakúság következtében természetesen az is teljesül, hogy minden objektum több más típus implicit példánya is egyszerre.
Tárolás szempontjából kétféle típust különböztetünk meg: az egyik a leggyakrabban használt referencia típus, ami csupán egy referenciát tartalmaz a valahol máshol tárolt objektumra, a másik a ritkább, de idõnként hasznos kiterjesztett (
expanded
) típus, ami a referenciával ellentétben magát az objektumot tárolja. Erre akkor van szükség, ha hatékonyabbá akarjuk tenni kisebb méretû objektumok elérését (pl. elemi adattípusok), illetve amikor egy osztályon belül más objektumokkal meg nem osztható feature-öket akarunk bevezetni.
Az Eiffel nyelv öt beépített elemi adattípussal rendelkezik:
INTEGER, REAL, DOUBLE, CHARACTER, BOOLEAN
. Ezek mindegyike expanded típus.Nevük lefoglalt kulcsszó, így a fordító is ismeri õket. Alapvetõen ezekbõl a típusokból képezhetõ konstans objektum a nyelven belül. Mindegyikükhöz tartozik egy osztály a
Kernel Library-ben, ahol a mûveleteik és szemantikai tulajdonságaik vannak leírva.
(Ld. még szabványos könyvtárak.)
A típusmegfeleltetés szabályai ezekre az osztályokra kevésbé szigorúak, mint a többi típusra. A könnyítéseket annak érdekében tették a fejlesztõk, hogy egymástól különbözõ típusúként deklarált számokkal is lehessen aritmetikai és egyéb mûveleteket végezni. Például egy valós számnak értékül lehessen adni egy egész számot. Ez a könnyítések nélkül nem lenne megvalósítható, mivel a két osztály között nincs leszármazási kapcsolat.
Ezeken kívül még három speciálisan kezelt osztály van Eiffel-ben: a
STRING
, az
ARRAY
és a
BIT_N
(bitsorozat típus). Specialitásuk abban rejlik, hogy a fordító felismeri a belõlük képzett konstansokat, bár mindegyikük a Kernel Library egy-egy osztálya.
A bitsorozat típus az alacsonyszintû alkalmazások fejlesztésénél nyújthat nagy segítséget, ahol a szükséges adatok tárolására egy byte-nál kevesebb bit is elegendõ. Például a
BOOLEAN
típus reprezentációja egy darab bit az osztály definiciója szerint.
Érdekességek
Különleges sajátossága az Eiffel-nek a horgonyzott típus, amivel egy objektum típusát egy másik, korábban már definiált jellemzõhöz ,,köthetjük''. Például az egyenlõségvizsgálat definíciója: equal(some:ANY;other:like some):BOOLEAN
Itt az elsõ (some
) és a második (other
) paraméter típusa között megfelelési kapcsolatnak kell fennállnia.
Speciális eleme még az Eiffel-nek a unique
kulcsszó adta lehetõség, ami némileg a felsorolási típus hiányát hivatott pótolni. Ha egy osztály definíciójában több egész típusú feature-t unique
-ként definiálunk, akkor a fordító garantálja, hogy ezek egymás után következõ, egymástól különbözõ pozitív értékeket fognak felvenni. Ezzel elkerülhetjük a beszúrásokból következõ esetleges értékazonosságokat.