Eiffel

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 15 martie 2021; verificările necesită 13 modificări .
eiffel
Semantică orientat pe obiecte
Clasa de limba orientat pe obiecte , orientat pe clasă , generic , concurent
Tipul de execuție compilate
Aparut in 1986
Autor Bertrand Meyer
Dezvoltator Bertrand Meyer & Eiffel Software
Extensie de fișier .e
Eliberare EiffelStudio 22.05 [1]  (31 mai 2022 ) ( 31.05.2022 )
Tip sistem strict , static
Implementări majore EiffelStudio [2] , SmartEiffel [3] , Visual Eiffel [4] , Gobo Eiffel [5] , The Eiffel Compiler tecomp [6]
A fost influențat Ada , Algol-60 , Simula , Z
influențat C# , D , Delphi , Java , Lisaac , Ruby , Sather , Ada
Licență dublu: GPL și corporative
Site-ul web eiffel.org
Platformă multiplatformă
OS FreeBSD , Linux , macOS , OpenBSD , Solaris , Windows

Eiffel este un limbaj de programare orientat pe obiecte cu o sintaxă asemănătoare Algol dezvoltată de Bertrand Meyer . Metoda de programare a contractului a fost implementată pentru prima dată în acest limbaj .

Există compilatoare Eiffel pentru Windows , DOS , OS/2 și UNIX . Majoritatea implementărilor Eiffel generează cod C , adică sunt implementate ca traducător . Acest cod este apoi compilat folosind compilatorul C. Cu toate acestea, există sisteme care generează și codul mașinii direct. De exemplu, Visual Eiffel . [patru]

Originea numelui

Limba „Eiffel” a fost numită după inginerul Gustave Eiffel , care a construit faimosul turn care poartă numele lui. Alegând acest nume pentru limbă, creatorii săi s-au concentrat pe următoarele caracteristici ale Turnului Eiffel:

Astfel, creatorii au sugerat că sistemul de programare Eiffel vă permite să construiți rapid și rentabil sisteme software mari folosind un număr relativ mic de module software din bibliotecile Eiffel Software și și-au exprimat, de asemenea, speranța că sistemele software create folosind sistemul Eiffel va fi destinată viață lungă [7] .

Caracteristici cheie

Salut Lume!

Mic de statura:

clasă HELLO create make feature make do print ( "Hello World%N" ) end end

sau extins, urmând stilul de scriere:

descrierea notei : „Programul Bună ziua!” autor : „Elizabeth W. Brown” clasă HELLO create make feature make -- Imprimați un mesaj simplu. tipăriți ( „Bună ziua , lume%N” ) sfârșitul sfârșitului

Exemple de cod și caracteristici de limbă

Un exemplu de declarație de clasă pe Eiffel:

clasa SQUARE moștenire RECTANGLE -- SQUARE este o subclasă a RECTANGLE -- pot fi specificate mai multe blocuri de moștenire. -- pentru fiecare clasă părinte, poate fi specificată o listă de metode moștenite. -- aceasta rezolvă problema conflictelor de moștenire multiple. create -- lista de nume de constructoare caracteristică -- proprietățile descrise aici sunt vizibile pentru toți clienții. -- Mai precis, aceasta este echivalentă cu caracteristica {ORICE} -- ceea ce înseamnă că caracteristicile definite în această secțiune -- sunt disponibile pentru ORICE clasă și pentru toți descendenții acesteia. -- Și deoarece ORICE clasa este părintele tuturor claselor (originea graficului clasei), -- care nu specifică în mod explicit clasele părinte, -- aceasta înseamnă că poate fi folosită de orice caracteristică a clasei { CHILD } -- proprietățile descrise aici sunt disponibile pentru utilizare de către clasa CHILD și caracteristica descendenților acesteia { NONE } -- proprietățile descrise aici sunt ascunse pentru utilizare de către clienți. -- Mai precis, disponibil numai pentru clasa NONE, care este chiuveta de la capătul graficului de clasă

unde proprietăți este denumirea generală a câmpurilor și metodelor de date. Adică, atribute ( atribute engleze )  și subrutine ( rutine englezești ) în terminologia Eiffel. Subrutinele din subclase (moștenitori de clase) le pot înlocui (redefini) pe cele moștenite numai dacă semnăturile lor sunt conforme (adică se potrivesc).  

Alt exemplu:

clasa COMPLEX create make feature real_part , imag_part : REAL caracteristică make ( r , i : REAL ) do real_part := r imag_part := i end end

Declarația unei variabile arată similar cu declararea variabilelor în limbaje asemănătoare Pascal:

variable_id : TYPE

De exemplu:

complex_num : COMPLEX

Inițializarea (crearea) unui obiect cu un apel de constructor:

creați complex_num . face ( 2,4 , 3,2 )

Anterior, a fost folosită o sintaxă ușor diferită, în care cuvântul de serviciu createa fost înlocuit cu un semn dublu de exclamare !!:

!! complex_num . face ( 2,4 , 3,2 )

Limba Eiffel nu are destructori, dar are un colector automat de gunoi. Când nu mai sunt referințe la obiect, acesta va fi distrus de gunoiul.

Limba Eiffel acceptă moștenirea multiplă (secțiuni multiple inherit).

Clasele abstracte sunt definite prin adăugarea unui cuvânt rezervat deferred("amânat"):

clasa amânată FIGURE -- sfârșitul corpului clasei

Proprietățile „întârziate” vor fi definite în clasele descendente. Pentru a putea crea un obiect de clasă, acesta nu trebuie să conțină proprietăți „amânate”.

Proprietatea cea mai caracteristică a limbajului Eiffel sunt aserțiunile încorporate pentru a crea un contract forțat între instrucțiunea de apelare și codul de subrutine apelat (vezi și: Plankalkül ).

Toate accesele la proprietățile obiectelor sunt dinamice în mod implicit, deși compilatorii își pot da seama unde poate fi înlocuită legarea dinamică cu legarea statică și, în mod natural, o fac. Această caracteristică permite să nu se introducă conceptul virtual("virtual"). Dimpotrivă, se introduce conceptul frozen(„înghețat”), adică o proprietate „neredefinibilă”.

Limbajul distinge două tipuri de date la nivelul descrierilor: referință și expanded(„structurale”, „extinse”), care se aplică și declarațiilor de variabile. Acest lucru vă permite să minimizați diferența dintre o referință la obiect și obiectul în sine. Această diferență este afișată la atribuirea, copierea și crearea obiectelor.

Redefinirea operațiunilor

Sintaxa operației este disponibilă pentru subrutine. Adică, operatorul infix +este un alias pentru metoda plus, dar * pentru product:

clasă INTEGER caracteristică caracteristică plus alias „+” ( altul : ca Current ): ca Current do sfârșit alias de produs „*” ( altul : like Current ): like Current do end end

Această sintaxă este o evoluție a modului lui Clu de a redefini operațiile . Spre deosebire de C++ și Clu, Eiffel permite și definirea operațiilor libere ale căror caractere pot consta din unul sau mai multe caractere din următorul set

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

cu condiția ca simbolul sau combinația de simboluri să nu fie folosită în sintaxa Eiffel în alte scopuri. Iată exemple de posibile operații gratuite:

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

Motive pentru răspândirea slabă a limbii

Compilatoarele cu Eiffel de la autorul limbajului sunt scumpe și nu sunt la fel de obișnuite ca compilatoarele C/C++, care, la un moment dat, limitau distribuția acestui limbaj, nu existau alternative gratuite/gratuite de mult timp.

Stilul design al programului

Limbajul Eiffel este conceput cu accent maxim pe simplitatea constructelor limbajului. Deci, definește o singură construcție pentru buclă.

de la inițializare până la condiția de ieșire a buclei capătul corpului buclei _ _

Când programați în Eiffel, este considerată o bună practică să respectați anumite reguli de formatare.

Datorită acestui fapt, codurile sursă sunt citite ca și cum ar fi o documentație. Un stimulent suplimentar pentru a respecta regulile este strictețea compilatorilor înșiși la design. Multe dintre ele ( SmartEiffel [3] în special ) nu permit formatarea incorect a codurilor sursă, găsind multe abateri de la stil, afișând avertismente sau chiar refuzând compilarea.

Iată câteva recomandări pentru formatarea codului sursă:

  • Cuvintele de serviciu sunt introduse cu caractere aldine (relevante pentru imprimare și ieșire pe monitoare moderne)
  • toți identificatorii sunt cu caractere cursive
  • spre deosebire de limbajele asemănătoare C, Eiffel are o atitudine negativă față de abrevieri. În loc de drvMngr, este obișnuit să scrieți driver_manager
  • toate clasele sunt scrise cu majuscule
clasa LIST
  • variabilele sunt scrise cu litere mici
count_of_sheeps : INTEGER
  • constantele încep întotdeauna cu un capital
Gravitate : REAL = 9,81
  • se recomandă folosirea unui font nespațiat
  • la începutul fiecărei clase, este de dorit să se introducă informații despre aceasta: cine a scris-o, când, funcționalitatea clasei. Toate aceste informații sunt scrise chiar la începutul fișierului cu clasa.
note description : "O descriere a acestei clase." autor : „Vasya Pupkin” clasa CLASS -- sfârșitul corpului clasei
  • după numele fiecărei proceduri pe linia următoare, este de dorit să descriem rezultatul acțiunii sale:
caracteristică IP : INTEGER -- Adresa IP a mașinii locale. do -- solicită sfârșitul corpului
  • o caracteristică a lui Eiffel este punctul și virgulă opțional „;” la sfârşitul construcţiilor sintactice.

Note

  1. EiffelStudio 22.05 este disponibil! .
  2. EiffelStudio Un mediu complet integrat de dezvoltare . Consultat la 22 noiembrie 2010. Arhivat din original pe 23 noiembrie 2010.
  3. 1 2 SmartEiffel, compilatorul GNU Eiffel, instrumente și biblioteci . Consultat la 22 noiembrie 2010. Arhivat din original la 13 aprilie 2011.
  4. 1 2 Site-ul de pornire al Visual Eiffel (link în jos) . Preluat la 7 mai 2022. Arhivat din original la 15 iunie 2021. 
  5. Compilatorul Gobo Eiffel . Consultat la 8 ianuarie 2009. Arhivat din original pe 16 ianuarie 2009.
  6. tecomp: Compilatorul Eiffel . Consultat la 8 ianuarie 2009. Arhivat din original pe 17 ianuarie 2010.
  7. De unde vine numele? . https://www.eiffel.com . Consultat la 17 iulie 2019. Arhivat din original la 7 iunie 2019.

Literatură

  • Bertrand Meyer. Constructii software orientate pe obiecte. Ediția a II-a, Prentice Hall, 1997.
  • Bertrand Meyer. Eiffel: Limba
  • Invitație la Eiffel. De la ISE.
  • Richard Paige. O privire de ansamblu asupra orașului Eiffel
  • Jean-Marc Jezequel. Inginerie software orientată pe obiecte cu Eiffel

Link -uri