„Eiffel (programozási nyelv)” változatai közötti eltérés

[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
→‎Kivételkezelés: vázlat a rescue mondattal
99. sor:
 
ahol is az <code>invariant</code> és a <code>variant</code> nem kötelező.
===Rutinok===
 
A rutinok a <code>Result</code> változóban levő értékkel térnek vissza.
 
A paraméter nélküli rutinok zárójel nélkül hívhatók. Ez lehetővé teszi, hogy egy absztrakt osztály egyik konkrét utóda kiszámítsa azt, ami egy másik leszármazottban attributum.
 
A <code>once</code> rutinok csak első meghívódásukkor futnak le, a későbbiekben ennek a futási eredménye érhető el ugyanazzal a névvel. Általában paraméter nélküli, de lehetnek paraméterei is. Ezekben a rutinokban a <code>do</code> helyett <code>once</code> szerepel.
 
Az elavult rutinok a <code>obsolete</code> utasítással jelölhetők meg. Ennek egy string a paramétere, amiben leírhsató, hogy mit használjunk helyette.
===Osztályok===
Osztályok a <code>class</code> kulcsszóval deklarálhatók. Az Eiffel programok osztályokból állnak. A beépített típusok és a programkönyvtárak is osztályok. A többszörös öröklődés és az ismételt öröklődés megengedett. A metódusokat és az osztály- és példányváltozókat, konstans tagokat a nyelv közös néven <code>feature</code>-nek nevezi. Alapelveiben szerepel az egységes kinézet elve, ami szerint a paraméter nélküli tagfüggvények zárójel nélkül hívhatók. Ez lehetőséget biztosít arra, hogy egy absztrakt osztály két leszármazottja közül az egyikben kiszámoljuk azt, amit a másikban megadunk.
153 ⟶ 154 sor:
</span>
</code>
 
Az üres referencia a Void, ami a NONE fiktív osztály egyetlen példánya.
 
Az alacsony szintű pointereket a POINTER osztály példányai pótolják.
 
Az osztályokban <code>Current</code> jelöli az adott példányt. Az adott példány dinamikus típusára a <code>like Current</code> utal. Ez lehetővé teszi, hogy a rutinok értelmezési tartománya szűküljön az öröklődés folyamán, ami veszélybe sodorja a típusbiztonságot, hiszen az értelmezési tartomány nem szűkíthető típusbiztonságos módon. Ezen a catcall segíthet.
198 ⟶ 203 sor:
 
===Szerződések===
Az Eiffel nyelv alapelve a szerződés alapú programozás. Ez azt jelenti, hogy akár minden utasításnak lehet elő-, utófeltétele, vagy invariánsa. Ezek felfoghatók szerződésként a hívó és a hívott között. A hívó biztosítja az előfeltételt és az invariánst, és a hívott vállalja, hogy normális lefutás esetén biztosítja az utófeltételt és az invariánst, kivétel esetén pedig legalább az invariánst. A konstruktoroknak nincs külön előfeltételük, és az invariánst sem kell a hívónak biztosítania, hiszen éppen a konstruktor állítja be az invariánst. Az előfeltételeket a hívó ellenőrzi, ezért nem hívhatók benne olyan rutinok, amiket a hívó nem tud hívni. Az utófeltételben <code>old</code>-dal hivatkozhatók a rutin futzása előtti értékek.
 
A szerződések alakja abban az osztályban, ahol az öröklésben először definiálják az illető feature-t: