El llenguatge de programació Eiffel fou concebut el 1985 pel Dr. Bertrand Meyer, és un llenguatge orientat l'objecte pur, dissenyat per desenvolupar de manera eficient programari reutilitzable, extensible i fiable. Va sorgir del món acadèmic com a llenguatge de programació per a l'ensenyament, això pot justificar que la seva sintaxi estigui inspirada en la de Pascal. Avui dia Eiffel és un llenguatge estandarditzat per ISO, forma part dels llenguatges de programació suportats per Microsoft .NET, i està tenint força aplicació a la indústria.
Com que el creador d'aquest llenguatge, el Dr. Bertrand Meyer, fou un pioner notable de la programació orientada a l'objecte, va concebre el llenguatge des de la seva visió del desenvolupament de programari i potser per això hi ha un reconeixement general que és el llenguatge de programació orientada a l'objecte més ben dissenyat i més complet. Molts dels conceptes introduïts en aquest llenguatge més tard han aparegut en altres llenguatges com Java o C#.
Característiques Les característiques clau del llenguatge Eiffel inclouen:
Una estructura de programa orientat a objectes en els quals una classe serveix com la unitat bàsica de la descomposició. El disseny per contracte estretament integrat amb el llenguatge d'altres construccions. Gestió de memòria automàtica, generalment aplicat per la recollida d'escombraries (garbage collection en anglès). Herència, inclosa l'herència múltiple, el canvi de nom, redefinició, «seleccionar», herència no conforme, i altres mecanismes destinats a fer que l'herència sigui segura. Programació genèrica amb restriccions i sense. Gestionat d'un sistema uniforme on la semàntica del valor i de la referència dels quals en tots els tipus, inclosos els bàsics com INTEGER (el nombre enter), estan basats en classes. Seguretat dels tipus (comprovació estàtica dels tipus). Seguretat de l'absència de tipus (definida amb la paraula clau void), o protecció estàtica contra la crida a referències nul·les, a través del mecanisme tipus annexats (attached-types en anglès). Agents, o objectes que agrupen computacions, estretament relacionats amb les clausures i el càlcul lambda. Rutines d'execució única, o rutines que s'avaluen només una vegada, per a objectes compartits i la inicialització descentralitzada. Sintaxi basada en paraules clau seguint la tradició ALGOL/Pascal, però lliure de separadors, en la mesura que els punts i comes són opcionals, amb la sintaxi disponible per definir operadors en rutines. No és sensible a majúscules i minúscules.
Objectius de disseny Eiffel posa èmfasi a les sentències declaratives per sobre el codi de procediment i intenta eliminar la necessitat de les instruccions de gestió dinàmica de la memòria (bookkeeping en anglès).
Eiffel defuig la codificació trucs o tècniques de codificació destinats a facilitar l'optimització al compilador. L'objectiu no és només per fer més llegible el codi, sinó també per permetre als programadors concentrar-se en els aspectes importants d'un programa sense perdre's en els detalls d'implementació. La simplicitat d'Eiffel està destinada a promoure solucions simples, extensibles i reutilitzables; i fiables als problemes informàtics. Els compiladors per programes d'ordinador escrits en Eiffel proporcionen tècniques extensives d'optimització, com ara la substitució automàtica d'una crida pel codi cridat (automatic in-lining en anglès), que alleugen al programador d'una part de la càrrega, mentre que l'optimització de codi produït és d'una eficiència comparable a la del codi escrit en C++.
Antecedents Eiffel va ser desenvolupat originalment per Eiffel Software, una empresa originalment anomenada Interactive Software Engineering Inc (ISE), fundada per Bertrand Meyer. El llibre Object-Oriented Software Construction (Construcció de programari orientat a l'objecte) conté un tractament detallat dels conceptes i la teoria de la tecnologia d'objectes que han dut a dissenyar Eiffel.Object-Oriented Software Construction, Second Edition, by Bertrand Meyer, Prentice Hall, 1997,
L'objectiu de disseny del llenguatge Eiffel, les biblioteques (libraries en anglès), i els mètodes de programació és permetre als programadors crear mòduls fiables, de programari reutilitzable. Eiffel suporta herència múltiple, genericitat, polimorfisme, encapsulació, les conversions de tipus segur, i covariància dels paràmetres. La contribució més important d'Eiffel a l'enginyeria de programari és el disseny per contracte (DbC, en són sigles en anglès), en què les assercions, precondicions, postcondicions i els invariants de classe es fan servir per ajudar a garantir la correcció del programa sense sacrificar-ne l'eficiència.
El disseny d'Eiffel es basa en la teoria de la programació orientada a l'objecte, amb només una influència menor d'altres paradigmes o qüestions pel suport del codi heretat. Eiffel formalment suporta tipus abstractes de dades. Sota el disseny d'Eiffel, un text de programari ha de ser capaç de reproduir la seva documentació de disseny del text en si, utilitzant una aplicació formal dels "Tipus Abstractes de Dades".
Les implementacions i entorns EiffelStudio és un entorn de desenvolupament integrat (IDE, en són les sigles en anglès) disponible en virtut d'un codi obert o una llicència comercial. Ofereix un entorn orientat a l'objecte per a l'enginyeria del programari. EiffelEnvision és un plug-in per a Microsoft Visual Studio que permet als usuaris editar, compilar i depurar projectes Eiffel des del Microsoft Visual Studio IDE. EiffelStudio i EiffelEnvision són gratuïts per a ús no comercial. Hi ha unes altres quatre implementacions de codi obert: "The Eiffel Compiler" tecomp, Gobo Eiffel, SmartEiffel, -la implementació GNU, basada en una versió anterior de llenguatge- i Visual Eiffel.
Diversos llenguatges de programació incorporen elements aportats per primera vegada a Eiffel. Sather, per exemple, es va basar originalment en Eiffel, però ha variat des de llavors, i ara inclou diverses característiques de programació funcional. El llenguatge interactiu d'ensenyament Blue, precursor de BlueJ, també està basat en Eiffel. L'Apple Media Tool inclou basat en Eiffel un Apple Media Language.
Les especificacions i normes La definició del llenguatge Eiffel és un estàndard internacional de l'ISO. L'estàndard va ser desenvolupat per ECMA International, que per primera vegada aprovada la norma, el 21 de juny de 2005, com a estàndard ECMA 367, Eiffel: Analysis, Design and Implementation Language. El juny de 2006, ECMA i ISO van aprovar la segona versió. El novembre de 2006, l'ISO va publicar per primera vegada aquesta versió. L'estàndard es pot trobar i utilitzar d'una manera gratuïta en el web de ECMAECMA International: Standard ECMA-367 —Eiffel: Analysis, Design and Programming Language 2nd edition (June 2006); disponible a www.ecma-international.org/publications/standards/Ecma-367.htm La versió ISOInternational Organisation for Standardisation: Standard ISO/IEC DIS 25436, disponible a és idèntica en tots els aspectes excepte el format.
Eiffel Software's, "tecomp: The Eiffel Compiler" i Eiffel-library-developer de Gobo s'han compromès a aplicar l'estàndard; Eiffel Software's EiffelStudio 6.1 and "tecomp: The Eiffel Compiler" implementen alguns dels principals nous mecanismes -en particular, els agents en línia, assignador d'ordres, notació parentitzada, herència no conforme, i els tipus annexats (attached-types en anglès). L'equip de SmartEiffel s'ha apartat d'aquest estàndard per crear la seva pròpia versió del llenguatge, que creuen que està més a prop de l'estil original d'Eiffel. Object Tools no ha revelat si en futures versions del seu compilador d'Eiffel complirà amb l'estàndard.
L'estàndard cita els següents predecessors d'especificacions del llenguatge Eiffel: Bertrand Meyer: Eiffel: The Language, Prentice Hall, segona edició, 1992 (Primera edició: 1991) Bertrand Meyer: Standard Eiffel (revisió de l'entrada anterior), en curs, 1997 -present, a Bertrand Meyer's ETL3 page, i Bertrand Meyer: Object-Oriented Software Construction, Prentice Hall: primera edició, 1988, segona edició, 1997.
La versió actual de l'estàndard de juny de 2006 conté algunes inconsistències (per exemple, les redefinicions de la covariància). El comitè de ECMA encara no ha anunciat cap calendari ni en quina direcció es resoldran aquestes inconsistències.
La sintaxi i la semàntica Estructura general Un "sistema" o "programa" Eiffel és una col·lecció de classes. Per sobre del nivell de les classes, Eiffel defineix el grup (cluster en anglès), que és essencialment un grup de classes, i possiblement de subgrups (grups niats). Les agrupacions no són una estructura de control sintàctica, sinó més aviat una convenció de l'organització estàndard. Normalment una aplicació Eiffel s'organitzarà amb cada classe en un arxiu separat, i cada grup en un directori o carpeta que conté els fitxers de les classes. En aquesta organització, els subgrups són subdirectoris. Per exemple, en virtut de les convencions estàndard de l'organització i l'entorn, x.e podria ser el nom d'un fitxer que defineix una classe anomenada X.
Una classe conté característiques, que són similars als "membres", "atributs" o "mètodes" en altres llenguatges de programació orientats a l'objecte. Una classe també defineix els seus invariants, i conté altres propietats, com una secció de "notes" per a documentació i metadades. Els tipus estàndard de dades d'Eiffel, com INTEGER, STRING and ARRAY, són classes.
Cada sistema ha de tenir una classe designada com "arrel" ("root" en anglès), amb un dels seus procediments de creació designat com a "procediment arrel". L'execució d'un sistema consisteix en la creació d'una instància de la classe arrel i en executar el procediment arrel. En general, això crea nous objectes, crida noves característiques, i així successivament.
Eiffel té cinc instruccions bàsiques executables: assignació, creació d'objectes, crida de rutina, condició i iteració. Les estructures Eiffel de control són estrictes en el compliment de la programació estructurada: cada bloc té exactament una entrada i exactament una sortida.
Abast A diferència de molts llenguatges orientats a l'objecte, però com Smalltalk, Eiffel no permet una assignació en els camps dels objectes, excepte dins de les característiques d'un objecte. Eiffel posa l'accent en amagar la informació i l'abstracció de dades, en requerir interfícies formals per a la mutació de dades. Per dir-ho en el llenguatge d'altres llenguatges de programació orientats a l'objecte, tots els camps Eiffel són «privats», i els mètodes "set" ("setters") són necessaris per modificar-ne els valors. Un resultat d'això és que un mètode "set" pot, i normalment ho fa, implementar els invariants per als quals Eiffel proporciona sintaxi.
"Hola, món!" El primer contacte amb un llenguatge de programació es fa sovint amb l'ús d'un programa "Hola, món!". Aquest programa escrit en Eiffel podria ser: class HOLA_MON create fes feature fes do print ("Hola, món!%N") end --fes end --HOLA_MON
Aquest programa conté la classe HOLA_MON. El constructor (rutina creadora) per a la classe, de nom fes, invoca print que és la rutina de la biblioteca del sistema per escriure un missatge "Hola, món!" al dispositiu de sortida.
Disseny per Contracte El concepte de disseny per contracte és fonamental per Eiffel. Els mecanismes estan estretament integrats amb el llenguatge. Els contractes guien la redefinició de les característiques a l'herència.
Precondició de la rutina: l'únic requisit pot ser debilitat per l'herència, qualsevol crida que compleixi amb els requisits de l'avantpassat compleix amb les dels descendents. Postcondició de la rutina: la postcondició només pot ser reforçada per herència; cap resultat garantit per l'ancestre segueix en mans dels descendents. Invariant de classe