Eiffel

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 15-én felülvizsgált verziótól ; az ellenőrzések 13 szerkesztést igényelnek .
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. ) ( 2022-05-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]

A név eredete

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] .

Főbb jellemzők

Helló Világ!

Rövid:

osztály HELLO Create make feature make do print ( "Hello World%N" ) end end

vagy 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 end

Kódpéldák és nyelvi jellemzők

Pé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ője

ahol 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 end

Egy változó deklarációja hasonlít a Pascal-szerű nyelvek változók deklarációjához:

változó_azonosítója : TÍPUS

Például:

komplex_szám : KOMPLEX

Objektum 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ége

A „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.

Műveletek újradefiniálása

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 end

Ez 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 gyenge terjedésének okai

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.

Programtervezési stílus

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:

  • a szolgáltatási szavak félkövérrel vannak szedve (a nyomtatáshoz és a modern monitorokhoz való kimenethez releváns)
  • minden azonosító dőlt betűvel van szedve
  • A C-szerű nyelvekkel ellentétben az Eiffel negatívan viszonyul a rövidítésekhez. A drvMngr helyett a driver_manager-t szokás írni
  • minden osztályt nagybetűvel írunk
osztály LISTÁJA
  • a változókat kisbetűkkel írjuk
birkák_száma : INTEGER
  • a konstansok mindig nagybetűvel kezdődnek
Gravitáció : REAL = 9,81
  • nem egyszóközű betűtípus használata javasolt
  • minden osztály elejére célszerű beszúrni az ezzel kapcsolatos információkat: ki írta, mikor, az osztály funkcionalitása. Mindezek az információk a fájl legelejére vannak írva az osztállyal.
note description : "Az osztály leírása." szerző : "Vasya Pupkin" osztály OSZTÁLY -- osztálytest vége
  • az egyes eljárások neve után a következő sorban kívánatos leírni a művelet eredményét:
jellemző IP : INTEGER -- A helyi gép IP-címe. do -- kérés törzs vége
  • Az Eiffel egyik jellemzője a nem kötelező pontosvessző ";" szintaktikai konstrukciók végén.

Jegyzetek

  1. Elérhető az EiffelStudio 22.05! .
  2. EiffelStudio Teljes integrált fejlesztői környezet . Letöltve: 2010. november 22. Az eredetiből archiválva : 2010. november 23..
  3. 1 2 SmartEiffel, a GNU Eiffel fordító, Eszközök és könyvtárak . Letöltve: 2010. november 22. Az eredetiből archiválva : 2011. április 13..
  4. 1 2 Vizuális Eiffel kezdőlap (lefelé hivatkozás) . Letöltve: 2022. május 7. Az eredetiből archiválva : 2021. június 15. 
  5. Gobo Eiffel fordító . Letöltve: 2009. január 8. Az eredetiből archiválva : 2009. január 16..
  6. tecomp: Az Eiffel fordító . Letöltve: 2009. január 8. Az eredetiből archiválva : 2010. január 17..
  7. Honnan származik a név? . https://www.eiffel.com . Letöltve: 2019. július 17. Az eredetiből archiválva : 2019. június 7.

Irodalom

  • Bertrand Meyer. Objektumorientált szoftverkonstrukció. 2. kiadás, Prentice Hall, 1997.
  • Bertrand Meyer. Eiffel: A nyelv
  • Meghívó Eiffelbe. Az ISE-től.
  • Richard Paige. Eiffel áttekintése
  • Jean-Marc Jezequel. Objektum-orientált szoftverfejlesztés az Eiffellel

Linkek