eiffel | |
---|---|
Semantiikka | oliosuuntautunut |
Kieliluokka | olio- , luokka- , yleinen , samanaikainen |
Toteutustyyppi | koottu |
Esiintyi | 1986 |
Tekijä | Bertrand Meyer |
Kehittäjä | Bertrand Meyer & Eiffel-ohjelmisto |
Tiedostotunniste _ | .e |
Vapauta | EiffelStudio 22.05 [1] (31. toukokuuta 2022 ) |
Tyyppijärjestelmä | tiukka , staattinen |
Tärkeimmät toteutukset | EiffelStudio [2] , SmartEffel [3] , Visual Eiffel [4] , Gobo Eiffel [5] , Eiffel Compiler tecomp [6] |
Vaikutettu | Ada , Algol-60 , Simula , Z |
vaikutti | C# , D , Delphi , Java , Lisaac , Ruby , Sather , Ada |
Lisenssi | kaksinkertainen: GPL ja yritys |
Verkkosivusto | eiffel.org |
Alusta | cross-platform |
OS | FreeBSD , Linux , macOS , OpenBSD , Solaris , Windows |
Eiffel on Bertrand Meyerin kehittämä olio-ohjelmointikieli Algol-tyyppisellä syntaksilla . Sopimusohjelmointimenetelmä otettiin ensimmäisen kerran käyttöön tällä kielellä .
Eiffel-kääntäjiä on Windowsille , DOS :lle , OS/2 :lle ja UNIXille . Useimmat Eiffel-toteutukset generoivat C -koodia , eli ne toteutetaan kääntäjänä . Tämä koodi käännetään sitten käyttämällä C - kääntäjää . On kuitenkin olemassa järjestelmiä, jotka myös luovat konekoodia suoraan. Esimerkiksi Visual Eiffel . [neljä]
Kieli "Eiffel" on nimetty insinööri Gustave Eiffelin mukaan, joka rakensi kuuluisan hänen mukaansa nimetyn tornin. Valitessaan tämän nimen kielelle sen luojat keskittyivät seuraaviin Eiffel-tornin ominaisuuksiin:
Siten tekijät vihjasivat, että Eiffel-ohjelmointijärjestelmän avulla voit rakentaa nopeasti ja kustannustehokkaasti suuria ohjelmistojärjestelmiä käyttämällä suhteellisen pientä määrää Eiffel-ohjelmistokirjastojen ohjelmistomoduuleja, ja ilmaisivat myös toiveensa, että ohjelmistojärjestelmät luotiin Eiffel-järjestelmän avulla. pitkä elämä on tarkoitettu [7] .
Lyhyt:
luokka HELLO luo tehdä ominaisuus make do print ( "Hello World%N" ) end endtai laajennettu kirjoitustyyliä noudattaen:
huomautuksen kuvaus : "Hei maailma ohjelma!" kirjoittaja : "Elizabeth W. Brown" luokka HELLO luo merkki ominaisuus merkki -- Tulosta yksinkertainen viesti. tulosta ( "Hello World% N " ) loppuEsimerkki luokkailmoituksesta Eiffelissä:
luokka NELIÖ inherit RECTANGLE -- NELIÖ on RECTANGLE:n alaluokka -- voidaan määrittää useampi kuin yksi periytyslohko. -- Kullekin pääluokalle voidaan määrittää luettelo perityistä menetelmistä. -- Tämä ratkaisee useiden perintöristiriitojen ongelman. luo -- luettelo rakentajien nimistä -- tässä kuvatut ominaisuudet näkyvät kaikille asiakkaille . -- Tarkemmin sanottuna tämä vastaa ominaisuutta {ANY} -- mikä tarkoittaa, että tässä osiossa määritellyt ominaisuudet ovat käytettävissä KAIKKI luokassa ja sen jälkeläisissä. -- Ja koska ANY-luokka on kaikkien luokkien vanhempi (luokkakaavion alkuperä), -- jotka eivät nimenomaisesti määritä yläluokkia, -- tämä tarkoittaa, että sitä voi käyttää mikä tahansa luokkaominaisuus { CHILD } -- tässä kuvatut ominaisuudet ovat CHILD-luokan ja sen jälkeläisten ominaisuuden { NONE } käytettävissä -- tässä kuvatut ominaisuudet ovat piilotettuja asiakkaiden käyttöön. -- Tarkemmin sanottuna käytettävissä vain NONE-luokassa, joka on luokkakaavion lopun nielujossa ominaisuudet on tietokenttien ja menetelmien yleisnimi. Eli attribuutit ( englanninkieliset attribuutit ) ja aliohjelmat ( englanninkieliset rutiinit ) Eiffel-terminologiassa. Alaluokkien (luokkien perilliset) alirutiinit voivat korvata (määrittää uudelleen) perityt vain, jos niiden allekirjoitukset ovat yhdenmukaisia (eli täsmäävät).
Toinen esimerkki:
luokka MOMPLEKSI luo make ominaisuus todellinen_osa , kuvan_osa : OIKEA ominaisuus merkki ( r , i : REAL ) do real_part := r kuvan_osa := i end endMuuttujan ilmoitus näyttää samalta kuin muuttujien ilmoitus Pascalin kaltaisissa kielissä:
muuttujan_tunnus : TYYPPIEsimerkiksi:
kompleksin_määrä : KOMPLEKSIAObjektin alustus (luominen) konstruktorikutsun avulla:
luo kompleksinumero . merkki ( 2.4 , − 3.2 )Aikaisemmin käytettiin hieman erilaista syntaksia, jossa palvelusana createkorvattiin kaksoishuutomerkillä !!:
!! kompleksinumero . merkki ( 2.4 , − 3.2 )Eiffel-kielessä ei ole tuhoajia, mutta siinä on automaattinen roskankerääjä. Kun esineeseen ei ole jäänyt viittauksia, se tuhotaan jätteenkeräajan toimesta.
Eiffel-kieli tukee useampaa periytymistä (useita osioita inherit).
Abstraktit luokat määritellään lisäämällä varattu sana deferred("lykätty"):
viivästetty luokka KUVIO -- luokan rungon pää"Viivetyt" ominaisuudet määritellään jälkeläisluokissa. Jotta luokkaobjekti voidaan luoda, se ei saa sisältää mitään "lykättyjä" ominaisuuksia.
Eiffel-kielen tyypillisin ominaisuus ovat sisäänrakennetut väitteet , jotka luovat pakotetun sopimuksen kutsuvan käskyn ja kutsutun aliohjelmien koodin välille (katso myös: Plankalkül ).
Kaikki objektiominaisuuksien käyttöoikeudet ovat oletusarvoisesti dynaamisia, vaikka kääntäjät voivat selvittää, missä dynaaminen sidonta voidaan korvata staattisella sidoksella, ja luonnollisesti tekevät niin. Tämän ominaisuuden ansiosta konseptia ei esitetä virtual("virtuaali"). Päinvastoin, käyttöön otetaan käsite frozen("jäädytetty"), eli "ei-uudelleenmääritettävä" ominaisuus.
Kieli erottaa kuvaustasolla kaksi datatyyppiä: viite ja expanded("rakenteellinen", "laajennettu"), mikä koskee myös muuttujamäärityksiä. Tämän avulla voit minimoida objektiviittauksen ja itse objektin välisen eron. Tämä ero näkyy kohdentamisessa, kopioinnissa ja objektien luomisessa.
Toiminnan syntaksi on saatavilla aliohjelmille. Toisin sanoen infix-operaattori +on alias menetelmälle , plusmutta * :product
luokka INTEGER ominaisuus … ominaisuus plus alias "+" ( muu : kuten Nykyinen ): kuten Nykyinen do … loppu tuotteen alias "*" ( muu : kuten Current ): kuten Current do … end … endTämä syntaksi on evoluutio Clun tavasta määritellä toiminnot uudelleen . Toisin kuin C++ ja Clu, Eiffel sallii myös ilmaisten operaatioiden määrittelyn, joiden merkit voivat koostua yhdestä tai useammasta merkistä seuraavasta sarjasta
:\? = ~ / ! # $ % & * + - / < > @ ^ ` |edellyttäen, että symbolia tai symbolien yhdistelmää ei käytetä Eiffel-syntaksissa muihin tarkoituksiin. Tässä on esimerkkejä mahdollisista ilmaisista toiminnoista:
!-! @ |> <| -|-> <-|- ==> <== ++Kielen kirjoittajan Eiffel-kääntäjät ovat kalliita eivätkä niin yleisiä kuin C / C ++ -kääntäjät, jotka aikoinaan rajoittivat tämän kielen jakelua, ilmaisia / ilmaisia vaihtoehtoja ei ollut pitkään aikaan.
Eiffel-kieli on suunniteltu painottaen mahdollisimman paljon kielirakenteiden yksinkertaisuutta. Joten se määrittelee silmukalle vain yhden rakenteen.
alustamisesta silmukan poistumisehtoon silmukan rungon loppu _ _ _ _ _ _Eiffel-ohjelmoinnissa pidetään hyvänä käytäntönä noudattaa tiettyjä muotoilusääntöjä.
Tämän ansiosta lähdekoodit luetaan ikään kuin ne olisivat dokumentaatiota. Lisäkannustin sääntöjen noudattamiseen on kääntäjien itsensä tiukka suunnittelu. Monet niistä ( erityisesti SmartEiffel [3] ) eivät salli lähdekoodien väärin muotoilua, löytää monia poikkeamia tyylistä, näyttää varoituksia tai jopa kieltäytyä kääntämästä.
Tässä on joitain ohjeita lähdekoodin muotoiluun:
Ohjelmointikielet | |
---|---|
|
Ecma kansainväliset standardit | |
---|---|