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 ) |
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]
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] .
Krátký:
třída HELLO vytvořit vytvořit funkci make do print ( "Ahoj svět%N" ) end endnebo 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 konecPří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řídykde 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 endDeklarace proměnné vypadá podobně jako deklarace proměnných v jazycích podobných Pascalu:
proměnné_id : TYPENapříklad:
complex_num : COMPLEXInicializace (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ů.
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 … endTato 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í:
!-! @ |> <| -|-> <-|- ==> <== ++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.
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:
Programovací jazyky | |
---|---|
|
Ecma | Mezinárodní standardy|
---|---|