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 ) |
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]
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] .
Kort:
klasse HEJ opret lav funktion lav gør udskriv ( "Hello World%N " ) endesluteller 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 " ) slutningenEt 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 grafendehvor 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 endDeklarationen af en variabel ligner deklarationen af variabler på Pascal-lignende sprog:
variabel_id : TYPEFor eksempel:
kompleks_tal : KOMPLEKSInitialisering (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.
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 ... endDenne 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:
!-! @ |> <| -|-> <-|- ==> <== ++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.
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:
Programmeringssprog | |
---|---|
|
Ecma internationale standarder | |
---|---|