Eiffel

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 15. marts 2021; checks kræver 13 redigeringer .
eiffel
Semantik objektorienteret
Sprog klasse objektorienteret , klasseorienteret , generisk , samtidig
Udførelsestype kompileret
Dukkede op i 1986
Forfatter Bertrand Meyer
Udvikler Bertrand Meyer & Eiffel Software
Filtypenavn _ .e
Frigøre EiffelStudio 22.05 [1]  (31. maj 2022 ) ( 31-05-2022 )
Type system streng , statisk
Større implementeringer EiffelStudio [2] , SmartEiffel [3] , Visual Eiffel [4] , Gobo Eiffel [5] , The Eiffel Compiler tecomp [6]
Blev påvirket Ada , Algol-60 , Simula , Z
påvirket C# , D , Delphi , Java , Lisaac , Ruby , Sather , Ada
Licens dobbelt: GPL og corporate
Internet side eiffel.org
Platform på tværs af platforme
OS FreeBSD , Linux , macOS , OpenBSD , Solaris , Windows

Eiffel er et objektorienteret programmeringssprog med en Algol-lignende syntaks udviklet af Bertrand Meyer . Kontraktprogrammeringsmetoden blev først implementeret på dette sprog .

Der er Eiffel-kompilere til Windows , DOS , OS/2 og UNIX . De fleste Eiffel-implementeringer genererer C -kode , det vil sige, at de implementeres som en oversætter . Denne kode kompileres derefter ved hjælp af C- kompileren . Der er dog systemer, der også genererer maskinkode direkte. For eksempel Visual Eiffel . [fire]

Navnets oprindelse

Sproget "Eiffel" blev opkaldt efter ingeniøren Gustave Eiffel , som byggede det berømte tårn opkaldt efter ham. Ved at vælge dette navn til sproget fokuserede dets skabere på følgende funktioner i Eiffeltårnet:

Skaberne antydede således, at Eiffel-programmeringssystemet giver dig mulighed for hurtigt og omkostningseffektivt at bygge store softwaresystemer ved hjælp af et relativt lille antal softwaremoduler fra Eiffel-softwarebibliotekerne, og udtrykte også håbet om, at de softwaresystemer, der blev oprettet ved hjælp af Eiffel-systemet langt liv vil være bestemt [7] .

Nøglefunktioner

Hej Verden!

Kort:

klasse HEJ opret lav funktion lav gør udskriv ( "Hello World%N " ) endeslut

eller udvidet efter skrivestilen:

note beskrivelse : "Hej verden program!" forfatter : "Elizabeth W. Brown" klasse HEJ opret make feature make -- Print en simpel besked. udskriv ( " Hej verden%N " ) slutningen

Kodeeksempler og sprogfunktioner

Et eksempel på klasseerklæring på Eiffel:

klasse SQUARE arver RECTANGLE -- SQUARE er en underklasse af RECTANGLE -- mere end én arveblok kan specificeres. -- For hver overordnede klasse kan en liste over nedarvede metoder angives. -- dette løser problemet med flere arvekonflikter. create -- liste over konstruktørnavne funktion -- egenskaberne beskrevet her er synlige for alle klienter. -- Mere præcist svarer dette til feature {ANY} -- hvilket betyder at funktionerne defineret i dette afsnit -- er tilgængelige for ENHVER klasse og alle dens efterkommere. -- Og da ENHVER klasse er overordnet for alle klasser (oprindelsen af ​​klassegrafen), -- som ikke eksplicit specificerer overordnede klasser, -- betyder det, at den kan bruges af enhver klassefunktion { CHILD } -- egenskaberne beskrevet her, er tilgængelige for brug af CHILD-klassen, og dens efterkommere har { NONE } -- egenskaberne beskrevet her er skjult til brug for klienter. -- Mere specifikt kun tilgængelig for klassen NONE, som er bunden af ​​klassens grafende

hvor egenskaber er det generelle navn på datafelter og metoder. Det vil sige attributter ( engelske  attributter ) og subrutiner ( engelske  rutiner ) i Eiffel-terminologi. Underrutiner i underklasser (klassearvinger) kan kun erstatte (omdefinere) nedarvede, hvis deres signaturer stemmer overens (det vil sige matcher).

Et andet eksempel:

klasse KOMPLEKS oprette make feature real_part , imag_part : REAL feature make ( r , i : REAL ) do real_part := r imag_part := i end end

Deklarationen af ​​en variabel ligner deklarationen af ​​variabler på Pascal-lignende sprog:

variabel_id : TYPE

For eksempel:

kompleks_tal : KOMPLEKS

Initialisering (oprettelse) af et objekt med et konstruktørkald:

oprette kompleks_tal . make ( 2.4 , 3.2 )

Tidligere blev der brugt en lidt anden syntaks, hvor serviceordet createblev erstattet af et dobbelt udråbstegn !!:

!! kompleks_antal . make ( 2.4 , 3.2 )

Eiffel-sproget har ikke destruktorer, men det har en automatisk skraldeopsamler. Når der ikke er nogen referencer tilbage til objektet, vil det blive ødelagt af skraldesamleren.

Eiffelsproget understøtter multipel nedarvning (flere sektioner inherit).

Abstrakte klasser defineres ved at tilføje et reserveret ord deferred("udskudt"):

udskudt klasse FIGUR -- ende af klasselegemet

"Forsinkede" egenskaber vil blive defineret i efterkommerklasser. For at kunne oprette et klasseobjekt, må det ikke indeholde nogen "deferred" egenskaber.

Den mest karakteristiske egenskab ved Eiffel-sproget er indbyggede påstande for at skabe en tvungen kontrakt mellem den kaldende erklæring og den kaldte kode for subrutiner (se også: Plankalkül ).

Alle objektegenskabsadgange er dynamiske som standard, selvom compilere kan finde ud af, hvor dynamisk binding kan erstattes af statisk binding, og naturligvis gør det. Denne funktion gør det muligt ikke at introducere konceptet virtual("virtuel"). Tværtimod introduceres begrebet frozen("frossen"), det vil sige en "ikke-redefinerbar" egenskab.

Sproget skelner mellem to typer data på beskrivelsesniveau: reference og expanded("strukturel", "udvidet"), hvilket også gælder for variable deklarationer. Dette giver dig mulighed for at minimere forskellen mellem en objektreference og selve objektet. Denne forskel vises ved tildeling, kopiering og oprettelse af objekter.

Omdefinering af operationer

Operationssyntaks er tilgængelig for underrutiner. Det vil sige, at infix-operatoren +er et alias for metoden plus, men * for product:

klasse INTEGER feature feature plus alias "+" ( andet : like Current ): like Current do end produkt alias "*" ( andet : like Current ): like Current do ... end ... end

Denne syntaks er en videreudvikling af Clu 's måde at omdefinere operationer på . I modsætning til C++ og Clu tillader Eiffel også definitionen af ​​frie operationer, hvis karakterer kan bestå af et eller flere tegn fra følgende sæt

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

forudsat at symbolet eller kombinationen af ​​symboler ikke bruges i Eiffel-syntaksen til andre formål. Her er eksempler på mulige gratis operationer:

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

Årsager til den svage spredning af sproget

Compilere med Eiffel fra forfatteren af ​​sproget er dyre og ikke så almindelige som C / C ++ compilere, som på et tidspunkt begrænsede distributionen af ​​dette sprog, der var ingen gratis / gratis alternativer i lang tid.

Programdesignstil

Eiffel-sproget er designet med maksimal vægt på enkelheden af ​​sprogkonstruktioner. Så det definerer kun én konstruktion for løkken.

fra initialisering til sløjfeudgangstilstand sløjfelegemets ende _ _ _ _ _ _

Når du programmerer i Eiffel, anses det for at være god praksis at overholde visse formateringsregler.

Takket være dette læses kildekoder, som om de var dokumentation. Et yderligere incitament til at følge reglerne er kompilatorernes strenghed i forhold til designet. Mange af dem ( SmartEiffel [3] især ) tillader ikke, at kildekoder formateres forkert, finde mange afvigelser fra stilen, vise advarsler eller endda nægte at kompilere.

Her er nogle retningslinjer for formatering af kildekode:

  • serviceord er skrevet med fed skrift (relevant for udskrivning og output til moderne skærme)
  • alle identifikatorer er i kursiv
  • i modsætning til C-lignende sprog har Eiffel en negativ holdning til forkortelser. I stedet for drvMngr er det sædvanligt at skrive driver_manager
  • alle klasser skrives med store bogstaver
klasse LISTE
  • variabler skrives med små bogstaver
antal_får : HELTAL
  • konstanter starter altid med en kapital
Tyngdekraft : ÆGTE = 9,81
  • det anbefales at bruge en ikke-monospaced skrifttype
  • i begyndelsen af ​​hver klasse er det ønskeligt at indsætte oplysninger om det: hvem skrev det, hvornår, klassens funktionalitet. Alle disse oplysninger er skrevet i begyndelsen af ​​filen med klassen.
note description : "En beskrivelse af denne klasse." forfatter : "Vasya Pupkin" klasse KLASSE -- klasses kropsslut
  • efter navnet på hver procedure på den næste linje er det ønskeligt at beskrive resultatet af dens handling:
feature IP : INTEGER -- IP-adressen på den lokale maskine. gør -- anmod om slutning af brødteksten
  • et træk ved Eiffel er det valgfrie semikolon ";" i slutningen af ​​syntaktiske konstruktioner.

Noter

  1. EiffelStudio 22.05 er tilgængelig! .
  2. EiffelStudio Et komplet integreret udviklingsmiljø . Hentet 22. november 2010. Arkiveret fra originalen 23. november 2010.
  3. 1 2 SmartEiffel, GNU Eiffel-kompileren, værktøjer og biblioteker . Hentet 22. november 2010. Arkiveret fra originalen 13. april 2011.
  4. 1 2 Visual Eiffel-hjemmeside (downlink) . Hentet 7. maj 2022. Arkiveret fra originalen 15. juni 2021. 
  5. Gobo Eiffel-kompiler . Hentet 8. januar 2009. Arkiveret fra originalen 16. januar 2009.
  6. tecomp: Eiffel-kompileren . Hentet 8. januar 2009. Arkiveret fra originalen 17. januar 2010.
  7. Hvor kommer navnet fra? . https://www.eiffel.com . Hentet 17. juli 2019. Arkiveret fra originalen 7. juni 2019.

Litteratur

  • Bertrand Meyer. Objektorienteret softwarekonstruktion. 2. udgave, Prentice Hall, 1997.
  • Bertrand Meyer. Eiffel: Sproget
  • Invitation til Eiffel. Fra ISE.
  • Richard Paige. En oversigt over Eiffel
  • Jean-Marc Jezequel. Objektorienteret softwareudvikling med Eiffel

Links