Eiffel

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 15. března 2021; kontroly vyžadují 13 úprav .
eiffel
Sémantika objektově orientovaný
Jazyková třída objektově orientovaný , třídně orientovaný , generický , souběžný
Typ provedení sestaven
Objevil se v 1986
Autor Bertrand Meyer
Vývojář Bertrand Meyer & Eiffel Software
Přípona souboru .e
Uvolnění EiffelStudio 22.05 [1]  (31. května 2022 ) ( 2022-05-31 )
Typový systém přísný , statický
Hlavní implementace EiffelStudio [2] , SmartEiffel [3] , Visual Eiffel [4] , Gobo Eiffel [5] , The Eiffel Compiler tecomp [6]
Byl ovlivněn Ada , Algol-60 , Simula , Z
ovlivnil C# , D , Delphi , Java , Lisaac , Ruby , Sather , Ada
Licence double: GPL a corporate
webová stránka eiffel.org
Plošina multiplatformní
OS FreeBSD , Linux , macOS , OpenBSD , Solaris , Windows

Eiffel je objektově orientovaný programovací jazyk se syntaxí podobnou Algolu, kterou vyvinul Bertrand Meyer . V tomto jazyce byla poprvé implementována metoda smluvního programování .

Existují Eiffelovy kompilátory pro Windows , DOS , OS/2 a UNIX . Většina Eiffelových implementací generuje C kód , to znamená, že jsou implementovány jako překladač . Tento kód je poté zkompilován pomocí kompilátoru C. Existují však systémy, které strojový kód také generují přímo. Například Visual Eiffel . [čtyři]

Původ jména

Jazyk „Eiffel“ byl pojmenován po inženýrovi Gustavu Eiffelovi , který postavil slavnou věž pojmenovanou po něm. Při výběru tohoto názvu pro jazyk se jeho tvůrci zaměřili na následující rysy Eiffelovy věže:

Tvůrci tedy naznačili, že programovací systém Eiffel umožňuje rychle a levně budovat velké softwarové systémy s použitím relativně malého počtu softwarových modulů z knihoven Eiffel Software, a také vyjádřili naději, že softwarové systémy vytvořené pomocí systému Eiffel dlouhý život bude předurčen [7] .

Klíčové vlastnosti

Ahoj světe!

Krátký:

třída HELLO vytvořit vytvořit funkci make do print ( "Ahoj svět%N" ) end end

nebo rozšířené podle stylu psaní:

popis poznámky : "Ahoj světe program!" autor : třída "Elizabeth W. Brown" HELLO vytvořit make feature make -- Vytiskněte jednoduchou zprávu. vytisknout ( " Ahoj svět%N" ) konec konec

Příklady kódu a jazykové vlastnosti

Příklad deklarace třídy na Eiffelovi:

class SQUARE inherit RECTANGLE -- SQUARE je podtřídou RECTANGLE -- lze zadat více než jeden zděděný blok. -- pro každou nadřazenou třídu lze zadat seznam zděděných metod. -- to řeší problém vícenásobných konfliktů dědictví. create -- funkce seznam jmen konstruktorů -- vlastnosti zde popsané jsou viditelné pro všechny klienty. -- Přesněji řečeno, toto je ekvivalent funkce {ANY} -- což znamená, že funkce definované v této sekci -- jsou dostupné pro třídu ANY a všechny její potomky. -- A protože třída ANY je rodičem všech tříd (původem grafu třídy), -- které explicitně neurčují nadřazené třídy, -- to znamená, že ji může použít jakákoli funkce třídy { CHILD } -- vlastnosti zde popsané jsou dostupné pro použití třídou CHILD a funkcí jejích potomků { NONE } -- vlastnosti zde popsané jsou pro použití klienty skryté. -- Přesněji řečeno, k dispozici pouze pro třídu NONE, která je propadem konce grafu třídy

kde vlastnosti je obecný název datových polí a metod. Tedy atributy ( anglické  atributy ) a podprogramy ( anglické  rutiny ) v Eiffelově terminologii. Podprogramy v podtřídách (dědici tříd) mohou nahradit (předefinovat) zděděné pouze tehdy, pokud se jejich podpisy shodují (tj. shodují).

Další příklad:

class COMPLEX create make feature real_part , imag_part : REAL feature make ( r , i : REAL ) do real_part := r imag_part := i end end

Deklarace proměnné vypadá podobně jako deklarace proměnných v jazycích podobných Pascalu:

proměnné_id : TYPE

Například:

complex_num : COMPLEX

Inicializace (vytvoření) objektu voláním konstruktoru:

vytvořit complex_num . udělat ( 2.4 , 3.2 )

Dříve se používala mírně odlišná syntaxe, ve které bylo servisní slovo createnahrazeno dvojitým vykřičníkem !!:

!! komplexní_číslo . udělat ( 2.4 , 3.2 )

Eiffelův jazyk nemá destruktory, ale má automatický garbage collector. Když na objekt nezůstanou žádné odkazy, bude zničen sběračem odpadu.

Eiffelův jazyk podporuje vícenásobnou dědičnost (více sekcí inherit).

Abstraktní třídy jsou definovány přidáním vyhrazeného slova deferred("odložené"):

odložená třída OBRÁZEK ​​-- konec těla třídy

"Zpožděné" vlastnosti budou definovány v podřízených třídách. Aby bylo možné vytvořit objekt třídy, nesmí obsahovat žádné "odložené" vlastnosti.

Nejcharakterističtější vlastností Eiffelova jazyka jsou vestavěná tvrzení k vytvoření vynucené smlouvy mezi volajícím příkazem a volaným kódem podprogramů (viz také: Plankalkül ).

Všechny přístupy k vlastnostem objektu jsou ve výchozím nastavení dynamické, i když kompilátory mohou zjistit, kde lze dynamickou vazbu nahradit statickou, a přirozeně tak učiní. Tato funkce umožňuje nezavádět koncept virtual(„virtuální“). Naopak se zavádí pojem frozen(„zmrazený“), tedy „nepředefinovatelná“ vlastnost.

Jazyk rozlišuje dva typy dat na úrovni popisů: referenční a expanded("strukturální", "rozšířená"), což platí i pro deklarace proměnných. To vám umožní minimalizovat rozdíl mezi odkazem na objekt a objektem samotným. Tento rozdíl se projevuje při přiřazování, kopírování a vytváření objektů.

Předefinování operací

Syntaxe operace je k dispozici pro podprogramy. To znamená, že operátor infix +je alias pro metodu plus, ale * pro product:

class INTEGER vlastnost vlastnost plus alias „+“ ( other : like Current ): like Current do end alias produktu "*" ( other : like Current ): like Current do end end

Tato syntaxe je evolucí Cluova způsobu předefinování operací . Na rozdíl od C++ a Clu umožňuje Eiffel také definici volných operací, jejichž znaky se mohou skládat z jednoho nebo více znaků z následující množiny

:\? = ~ / ! # $ % & * + - / < > @ ^ ` |

za předpokladu, že symbol nebo kombinace symbolů není použita v Eiffelově syntaxi pro jiné účely. Zde jsou příklady možných bezplatných operací:

!-! @ |> <| -|-> <-|- ==> <== ++

Důvody slabého rozšíření jazyka

Kompilátory s Eiffelem od autora jazyka jsou drahé a nejsou tak běžné jako kompilátory C / C++, které svého času omezovaly distribuci tohoto jazyka, dlouho neexistovaly žádné bezplatné / bezplatné alternativy.

Styl designu programu

Eiffelův jazyk je navržen s maximálním důrazem na jednoduchost jazykových konstrukcí. Definuje tedy pouze jednu konstrukci pro smyčku.

od inicializace do podmínky ukončení smyčky konec smyčky konec smyčky _ _

Při programování v Eiffelovi se považuje za dobrou praxi dodržovat určitá pravidla formátování.

Díky tomu se zdrojové kódy čtou, jako by šlo o dokumentaci. Další pobídkou k dodržování pravidel je přísnost samotných kompilátorů k designu. Mnohé z nich ( zejména SmartEiffel [3] ) neumožňují nesprávné formátování zdrojových kódů, nacházejí mnoho odchylek od stylu, zobrazují varování nebo dokonce odmítají kompilaci.

Zde je několik pokynů pro formátování zdrojového kódu:

  • servisní slova jsou psána tučně (relevantní pro tisk a výstup na moderní monitory)
  • všechny identifikátory jsou uvedeny kurzívou
  • na rozdíl od C-like jazyků, Eiffel má negativní vztah ke zkratkám. Místo drvMngr je zvykem psát driver_manager
  • všechny třídy jsou psány velkými písmeny
třída SEZNAM
  • proměnné se píší malými písmeny
počet_ovcí : INTEGER
  • konstanty vždy začínají velkým
Gravitace : SKUTEČNÁ = 9,81
  • doporučuje se používat písmo bez jednořádkových mezer
  • na začátek každé hodiny je žádoucí vložit informace o ní: kdo ji napsal, kdy, funkčnost třídy. Všechny tyto informace jsou zapsány na samém začátku souboru s třídou.
popis poznámky : "Popis této třídy." autor : Třída "Vasya Pupkin" CLASS -- konec těla třídy
  • za názvem každého postupu na dalším řádku je žádoucí popsat výsledek jeho akce:
feature IP : INTEGER -- IP adresa místního počítače. do -- request body end
  • rysem Eiffela je volitelný středník ";" na konci syntaktických konstrukcí.

Poznámky

  1. EiffelStudio 22.05 je k dispozici! .
  2. EiffelStudio Kompletní integrované vývojové prostředí . Získáno 22. listopadu 2010. Archivováno z originálu 23. listopadu 2010.
  3. 1 2 SmartEiffel, překladač GNU Eiffel, nástroje a knihovny . Získáno 22. listopadu 2010. Archivováno z originálu 13. dubna 2011.
  4. 1 2 Domovská stránka Visual Eiffel (downlink) . Získáno 7. května 2022. Archivováno z originálu dne 15. června 2021. 
  5. Gobo Eiffel Compiler . Získáno 8. ledna 2009. Archivováno z originálu 16. ledna 2009.
  6. tecomp: Eiffelův kompilátor . Získáno 8. ledna 2009. Archivováno z originálu 17. ledna 2010.
  7. Odkud název pochází? . https://www.eiffel.com . Získáno 17. července 2019. Archivováno z originálu dne 7. června 2019.

Literatura

  • Bertrand Meyer. Objektově orientovaná softwarová konstrukce. 2. vydání, Prentice Hall, 1997.
  • Bertrand Meyer. Eiffel: Jazyk
  • Pozvánka na Eiffel. Od ISE.
  • Richard Paige. Přehled Eiffela
  • Jean-Marc Jezequel. Objektově orientované softwarové inženýrství s Eiffelem

Odkazy