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 ) |
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]
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] .
Mic de statura:
clasă HELLO create make feature make do print ( "Hello World%N" ) end endsau 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șituluiUn 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 endDeclarația unei variabile arată similar cu declararea variabilelor în limbaje asemănătoare Pascal:
variable_id : TYPEDe exemplu:
complex_num : COMPLEXIniț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 claseiProprietăț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.
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 … endAceastă 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:
!-! @ |> <| -|-> <-|- ==> <== ++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.
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ă:
Limbaje de programare | |
---|---|
|
internaționale Ecma | Standardele|
---|---|