Eiffel

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 15. maaliskuuta 2021 tarkistetusta versiosta . tarkastukset vaativat 13 muokkausta .
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 ) ( 31.5.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ä]

Nimen alkuperä

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

Tärkeimmät ominaisuudet

Hei maailma!

Lyhyt:

luokka HELLO luo tehdä ominaisuus make do print ( "Hello World%N" ) end end

tai 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 " ) loppu

Koodiesimerkkejä ja kieliominaisuuksia

Esimerkki 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 nielu

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

Muuttujan ilmoitus näyttää samalta kuin muuttujien ilmoitus Pascalin kaltaisissa kielissä:

muuttujan_tunnus : TYYPPI

Esimerkiksi:

kompleksin_määrä : KOMPLEKSIA

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

Toimintojen uudelleenmäärittely

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 end

Tä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:

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

Syitä kielen heikolle leviämiselle

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.

Ohjelman suunnittelutyyli

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:

  • palvelusanat on kirjoitettu lihavoituna (koskee tulostamista ja tulostamista nykyaikaisille näytöille)
  • kaikki tunnisteet ovat kursiivilla
  • Toisin kuin C-kaltaiset kielet, Eiffel suhtautuu kielteisesti lyhenteisiin. DrvMngr:n sijaan on tapana kirjoittaa driver_manager
  • kaikki luokat kirjoitetaan isoilla kirjaimilla
luokkaluettelo _
  • muuttujat kirjoitetaan pienillä kirjaimilla
lampaiden_määrä : INTEGER
  • vakiot alkavat aina isolla kirjaimella
Painovoima : REAL = 9,81
  • on suositeltavaa käyttää ei-monospace-fonttia
  • Jokaisen luokan alkuun on toivottavaa lisätä tietoa siitä: kuka sen on kirjoittanut, milloin, luokan toimivuus. Kaikki nämä tiedot kirjoitetaan luokan kanssa tiedoston alkuun.
note description : "Tämän luokan kuvaus." kirjoittaja : "Vasya Pupkin" luokka LUOKKA -- luokan body end
  • kunkin toimenpiteen nimen jälkeen seuraavalla rivillä on toivottavaa kuvata sen toiminnan tulos:
ominaisuus IP : INTEGER -- Paikallisen koneen IP-osoite. do -- pyydä rungon loppua
  • Eiffelin ominaisuus on valinnainen puolipiste ";" syntaktisten rakenteiden lopussa.

Muistiinpanot

  1. EiffelStudio 22.05 on saatavilla! .
  2. EiffelStudio Täydellinen integroitu kehitysympäristö . Haettu 22. marraskuuta 2010. Arkistoitu alkuperäisestä 23. marraskuuta 2010.
  3. 1 2 SmartEiffel, GNU Eiffel -kääntäjä, Työkalut ja kirjastot . Haettu 22. marraskuuta 2010. Arkistoitu alkuperäisestä 13. huhtikuuta 2011.
  4. 1 2 Visual Eiffelin kotisivu (downlink) . Haettu 7. toukokuuta 2022. Arkistoitu alkuperäisestä 15. kesäkuuta 2021. 
  5. Gobo Eiffel -kääntäjä . Haettu 8. tammikuuta 2009. Arkistoitu alkuperäisestä 16. tammikuuta 2009.
  6. tecomp: Eiffel-kääntäjä . Haettu 8. tammikuuta 2009. Arkistoitu alkuperäisestä 17. tammikuuta 2010.
  7. Mistä nimi tulee? . https://www.eiffel.com . Haettu 17. heinäkuuta 2019. Arkistoitu alkuperäisestä 7. kesäkuuta 2019.

Kirjallisuus

  • Bertrand Meyer. Olio-ohjelmiston rakentaminen. 2. painos, Prentice Hall, 1997.
  • Bertrand Meyer. Eiffel: Kieli
  • Kutsu Eiffeliin. ISE:ltä.
  • Richard Paige. Yleiskatsaus Eiffelistä
  • Jean-Marc Jezequel. Olio-ohjelmistosuunnittelu Eiffelin kanssa

Linkit