eiffel | |
---|---|
Szemantika | objektum orientált |
Nyelvóra | objektum-orientált , osztály-orientált , általános , párhuzamos |
A végrehajtás típusa | összeállított |
Megjelent | 1986 |
Szerző | Bertrand Meyer |
Fejlesztő | Bertrand Meyer és Eiffel szoftver |
Fájlkiterjesztés _ | .e |
Kiadás | EiffelStudio 22.05 [1] (2022. május 31. ) |
Típusrendszer | szigorú , statikus |
Főbb megvalósítások | EiffelStudio [2] , SmartEiffel [3] , Visual Eiffel [4] , Gobo Eiffel [5] , The Eiffel Compiler tecomp [6] |
Befolyásolva | Ada , Algol-60 , Simula , Z |
befolyásolta | C# , D , Delphi , Java , Lisaac , Ruby , Sather , Ada |
Engedély | dupla: GPL és vállalati |
Weboldal | eiffel.org |
Felület | platformközi |
OS | FreeBSD , Linux , macOS , OpenBSD , Solaris , Windows |
Az Eiffel egy Algol-szerű szintaxisú objektum -orientált programozási nyelv, amelyet Bertrand Meyer fejlesztett ki . A szerződés-programozási módszert először ezen a nyelven valósították meg .
Léteznek Eiffel fordítóprogramok Windows , DOS , OS/2 és UNIX rendszerekhez . A legtöbb Eiffel-megvalósítás C kódot generál , azaz fordítóként valósítják meg . Ezt a kódot ezután a C fordító segítségével fordítja le . Vannak azonban olyan rendszerek, amelyek közvetlenül is generálnak gépi kódot. Például a Visual Eiffel . [négy]
Az "Eiffel" nyelvet Gustave Eiffel mérnökről nevezték el , aki a róla elnevezett híres tornyot építette. Amikor ezt a nevet választották a nyelvnek, alkotói az Eiffel-torony következő jellemzőire összpontosítottak:
Így az alkotók utaltak arra, hogy az Eiffel programozási rendszer lehetővé teszi nagy szoftverrendszerek gyors és költséghatékony építését az Eiffel Software könyvtárakból származó, viszonylag kis számú szoftvermodul felhasználásával, és reményüket fejezték ki, hogy az Eiffel-rendszerrel létrehozott szoftverrendszerek hosszú élet lesz szánva [7] .
Rövid:
osztály HELLO Create make feature make do print ( "Hello World%N" ) end endvagy bővítve, az írásmódot követve:
megjegyzés leírása : "Hello világprogram!" szerző : "Elizabeth W. Brown" osztály HELLO létrehozás make feature make -- Egyszerű üzenet nyomtatása. do print ( "Hello World%N" ) end endPélda az Eiffel osztály deklarációjára:
osztály SQUARE inherit RECTANGLE -- A SQUARE a RECTANGLE alosztálya -- egynél több öröklési blokk is megadható. -- minden szülőosztályhoz megadható az örökölt metódusok listája. -- ez megoldja a többszörös öröklési konfliktusok problémáját. create -- a konstruktornevek listája szolgáltatás -- az itt leírt tulajdonságok minden ügyfél számára láthatók. -- Pontosabban, ez egyenértékű az {ANY} szolgáltatással -- ami azt jelenti, hogy az ebben a szakaszban definiált tulajdonságok -- elérhetőek BÁRMELY osztály és annak összes leszármazottja számára. -- És mivel az ANY osztály minden osztály szülője (az osztálygráf eredete), -- amelyek nem határoznak meg kifejezetten szülőosztályokat, -- ez azt jelenti, hogy bármely { CHILD } osztályjellemző használhatja -- az itt leírt tulajdonságok elérhetők a CHILD osztály és leszármazottai { NONE } szolgáltatás számára -- az itt leírt tulajdonságok rejtettek a kliensek számára. -- Pontosabban, csak a NONE osztályhoz érhető el, amely az osztálygráf végének nyelőjeahol a tulajdonságok az adatmezők és metódusok általános neve. Vagyis attribútumok ( angol attribútumok ) és szubrutinok ( angol rutinok ) az Eiffel terminológiában. Az alosztályok (osztályörökösök) alprogramjai csak akkor helyettesíthetik (újradefiniálhatják) az öröklötteket, ha aláírásuk egyezik (vagyis egyezik).
Egy másik példa:
osztály KOMPLEX létrehozás make feature real_part , immag_part : REAL feature make ( r , i : REAL ) do real_part := r képrész := i end endEgy változó deklarációja hasonlít a Pascal-szerű nyelvek változók deklarációjához:
változó_azonosítója : TÍPUSPéldául:
komplex_szám : KOMPLEXObjektum inicializálása (létrehozása) konstruktorhívással:
komplex_szám létrehozása . gyártmány ( 2.4 , − 3.2 )Korábban egy kissé eltérő szintaxist használtak, amelyben a szolgáltatás szót createkettős felkiáltójel helyettesítette !!:
!! komplex_szám . gyártmány ( 2.4 , − 3.2 )Az Eiffel nyelvnek nincsenek destruktorai, de van benne automatikus szemétgyűjtő. Ha nem marad hivatkozás az objektumra, azt a szemétgyűjtő megsemmisíti.
Az Eiffel nyelv támogatja a többszörös öröklődést (több szakaszt inherit).
Az absztrakt osztályok meghatározása egy fenntartott szó deferred("halasztott") hozzáadásával történik:
halasztott osztály ÁBRA -- osztálytörzs végeA „késleltetett” tulajdonságok leszármazott osztályokban lesznek meghatározva. Ahhoz, hogy létre lehessen hozni egy osztályobjektumot, nem tartalmazhat "halasztott" tulajdonságokat.
Az Eiffel nyelv legjellemzőbb tulajdonsága a beépített állítások , amelyek kényszerű szerződést hoznak létre a hívó utasítás és az alprogramok hívott kódja között (lásd még: Plankalkül ).
Az összes objektumtulajdonság-hozzáférés alapértelmezés szerint dinamikus, bár a fordítók kitalálhatják, hogy a dinamikus összerendelés hol helyettesíthető statikus összerendeléssel, és ezt természetesen meg is teszik. Ez a funkció lehetővé teszi a koncepció virtual(„virtuális”) bevezetését. Ellenkezőleg, frozenbevezetik a („fagyasztott”) fogalmat, vagyis egy „nem újradefiniálható” tulajdonságot.
A nyelv a leírások szintjén kétféle adatot különböztet meg: referencia és expanded("strukturális", "bővített"), ami a változók deklarációira is vonatkozik. Ez lehetővé teszi az objektumhivatkozás és maga az objektum közötti különbség minimalizálását. Ez a különbség az objektumok hozzárendelésénél, másolásánál és létrehozásánál is megmutatkozik.
A műveleti szintaxis elérhető az alprogramokhoz. Vagyis az infix operátor +a metódus álneve plus, de * a productkövetkezőhöz:
osztály INTEGER szolgáltatás … jellemző plusz alias "+" ( egyéb : mint Aktuális ): like Current do … vége termék alias "*" ( egyéb : like Current ): like Current do … end … endEz a szintaxis a Clu műveletek újradefiniálási módjának továbbfejlesztése . A C++- tól és a Clu-tól eltérően az Eiffel olyan szabad műveletek meghatározását is lehetővé teszi, amelyek karakterei a következő készlet egy vagy több karakteréből állhatnak
:\? = ~ / ! # $ % & * + - / < > @ ^ ` |feltéve, hogy a szimbólumot vagy szimbólumkombinációt az Eiffel-szintaxis nem használja más célokra. Íme néhány példa a lehetséges ingyenes műveletekre:
!-! @ |> <| -|-> <-|- ==> <== ++A nyelv szerzőjének Eiffel-fordítói drágák és nem olyan gyakoriak, mint a C / C ++ fordítók, amelyek egy időben korlátozták ennek a nyelvnek a terjesztését, hosszú ideig nem voltak ingyenes / ingyenes alternatívák.
Az Eiffel-nyelvet úgy tervezték, hogy maximális hangsúlyt fektessenek a nyelvi konstrukciók egyszerűségére. Tehát csak egy konstrukciót határoz meg a hurok számára.
inicializálástól a hurok kilépési feltételéig hurok hurok törzs vége _ _ _Az Eiffel programozás során bevált gyakorlatnak tekinthető bizonyos formázási szabályok betartása.
Ennek köszönhetően a forráskódokat úgy olvassuk, mintha dokumentációk lennének. További ösztönző a szabályok betartására, hogy maguk a fordítók szigorúak a tervezéshez. Sokan közülük ( különösen SmartEiffel [3] ) nem engedik meg a forráskódok hibás formázását, sok eltérést találnak a stílustól, figyelmeztetéseket jelenítenek meg, vagy akár meg is tagadják a fordítást.
Íme néhány irányelv a forráskód formázásához:
Programozási nyelvek | |
---|---|
|
Ecma nemzetközi szabványok | |
---|---|