Eiffel es un lenguaje de programación orientado a objetos que sigue el estándar ISO diseñado por Bertrand Meyer (defensor de los lenguajes orientados a objetos y autor de la construcción de Software Orientado a Objetos) y Software Eiffel. El diseño del lenguaje esta estrechamente relacionado con el método de programación Eiffel. Ambos se basan en una serie de principios incluyendo: el diseño por contrato, la separación de comandos y consultas, el principio de acceso uniforme, el principio de elección única, el principio abierto-cerrado y la separación operación-operando.

Muchos conceptos inicialmente introducidos por Eiffel aparecen más tarde en Java, C# y otros lenguajes. Nuevas ideas de diseño de lenguaje, particularmente a través del proceso de estandarización ECMA/ISO, se continúan incorporando al lenguaje Eiffel.

Características Las características claves del lenguaje Eiffel incluyen: Una estructura de programa orientado a objetos en el que una clase sirve como la unidad básica de la descomposición. Diseño por contrato estrechamente integrado con otras construcciones del lenguaje. Gestión de memoria automática, por lo general implementado por un recolector de basura. Herencia, incluyendo la herencia múltiple, el cambio de nombre, la redefinición, "select", herencia no conforme, y otros mecanismos destinados a hacer que la herencia sea segura. Programación genérica con y sin restricciones. Gestión de un sistema de tipo uniforme donde la semántica del valor y la referencia en el que todos los tipos, incluidos los tipos básicos como entero, son de clase base. Tipado estático Seguridad ausencia de tipos, o protección estática contra las llamadas a referencias a null, a través del mecanismo de tipos de adjuntos. Agentes, o objetos que agrupan a los cálculos, estrechamente relacionados con la clausura y el cálculo lambda Rutinas de ejecución única, o rutinas que se ejecutan solo una vez, para objetos compartidos y la inicialización descentralizada. Sintaxis de palabras clave siguiendo la tradición ALGOL / Pascal pero libre de separadores, en la medida en puntos y comas son opcionales, con la sintaxis disponible para definir operadores para las rutinas. No es sensible a mayúsculas y minúsculas.

Los objetivos de diseño Eiffel destaca enunciados declarativos sobre el código de procedimiento y los intentos de eliminar la necesidad de instrucciones de contabilidad. Eiffel evita trucos o técnicas de codificación destinadas como sugerencias de optimización para el compilador. El objetivo no es sólo para hacer el código más fácil de leer, sino también para permitir a los programadores concentrarse en los aspectos importantes de un programa sin atascarse en los detalles de implementación. La simplicidad de Eiffel está destinada a promover respuestas sencillas, extensibles, reutilizables y fiables a los problemas informáticos. Los compiladores de programas informáticos escritos en Eiffel ofrecen amplias técnicas de optimización, tales como autommatic in-lining, que alivian el programador de parte de la carga, mientras que la optimización de la producción de código cuya eficacia es comparable a la de código escrito en C++ .

Antecedentes Eiffel fue desarrollado originalmente por Eiffel Software, una compañía fundada por Bertrand Meyer. El Software de Construcción Orientado a Objetos contiene un tratamiento detallado de los conceptos y la teoría de la tecnología de objetos que llevaron al diseño de Eiffel.Object-Oriented Software Construction, Second Edition, by Bertrand Meyer, Prentice Hall, 1997, ISBN 0-13-629155-4

El objetivo de diseño detrás del lenguaje Eiffel, las librerías y los métodos de programación es permitir a los programadores crear módulos de software fiables y reutilizables. Eiffel soporta herencia múltiple, generalidad, polimorfismo, encapsulación, conversiones de tipo seguro, y covarianza de los parámetros. La contribución más importante de Eiffel de la ingeniería de software es el diseño por contrato (DBC), en el que se emplean las aserciones, precondiciones, postcondiciones y clases invariantes para ayudar a garantizar la corrección del programa sin sacrificar la eficiencia.

El diseño de Eiffel se basa en la teoría de la programación orientada a objetos, con solo un poco influencia de otros paradigmas o algunos conceptos por el soporte de código heredado. Eiffel soporta formalmente los tipos abstractos de datos. En el diseño de Eiffel, un texto de software debe ser capaz de reproducir su documentación de diseño del texto en si, usando una implementación formalizada del tipo de datos abstracto. El lenguaje interactivo de aprendizaje Blue, precursor de BlueJ, también está basado en Eiffel. El Apple Media Tool incluye un Apple Media Lenguaje basado en Eiffel.

Implementaciones y entornos EiffelStudio es un entorno de desarrollo integrado disponible en virtud de un código abierto o licencia comercial. Ofrece un entorno orientado a objetos para la ingeniería del software. EiffelEnvision es un plugin para Microsoft Visual Studio que permite a los usuarios editar, compilar y depurar proyectos Eiffel desde el Microsoft Visual Studio IDE. EiffelStudio y EiffelEnvision son gratuitos para uso no comercial. Hay otras cuatro implementaciones de código abierto: "The Eiffel Compiler" tecomp, Gobo Eiffel, SmartEiffel - la implementación GNU, basada en una versión anterior del lenguaje-, LibertyEiffel-basado el compilador de SmartEiffel- y VisualEiffel.

Diversos lenguajes de programación incorporan elementos aportados por primera vez en Eiffel. Sather, por ejemplo, se basó originalmente en Eiffel, pero ha variado desde entonces, y ahora incluye características de la programación funcional.

Especificaciones y normas La definición del lenguaje Eiffel es un estándar internacional de la ISO. El estándar fue desarrollado por Ecma International, que por primera vez aprobada la norma, el 21 de junio de 2005, como estándar ECMA 367, Eiffel: Analysis, Design and Implementation Language. En junio de 2006, ECMA e ISO aprobaron la segunda versión. En noviembre de 2006, la ISO publicó por primera vez. El estándar se puede encontrar y utilizar de una manera gratuita en la web de ECMA.ECMA 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ón de ISOInternational Organisation for Standardisation: Standard ISO/IEC DIS 25436, disponible a es idéntica en todos los aspectos salvo en el formato.

Eiffel Software's, "tecomp: The Eiffel Compiler" i Eiffel-library-developer de Gobo se han comprometido a aplicar el estándar; Eiffel Software's EiffelStudio 6.1 and "tecomp: The Eiffel Compiler" implementan algunos de los principales nuevos mecanismos- en particular, los agentes en línea, asignadores de órdenes, notación parenterizada, herencia no conforme, y los tipos anexos. El equipo de SmartEiffel se ha apartado de este estándar para crear su propia versión del lenguaje, que creen que está más cerca del estilo original de Eiffel. Object Tools no ha revelado si en futuras versiones de su compilador de Eiffel cumplirá con el estándar.

El estándar cita los siguientes predecesores de especificaciones del lenguaje Eiffel: Bertrand Meyer: Eiffel: The Language, Prentice Hall, segunda edición, 1992 (Primera edición: 1991) Bertrand Meyer: Standard Eiffel (revisió de l'entrada anterior), en curso, 1997 -presente, a Bertrand Meyer's ETL3 page, i Bertrand Meyer: Object-Oriented Software Construction, Prentice Hall: primera edición, 1988, segunda edición, 1997.

La versión actual del estándar de junio de 2006 contiene algunas inconsistencias (por ejemplo, las redefiniciones de la covarianza). El comité ECMA no ha anunciado ningún calendario ni en que dirección se resolverán estas inconsistencias.

Sintaxis y la semántica

Estructura general Un "sistema" o "programa" Eiffel es una colección de clases. Por encima del nivel de clases, Eiffel define el cluster, que es esencialmente un grupo de clases, y posiblemente de subclubsters. Las agrupaciones no son una estructura de control sintáctica, sino más bien una convención de la organización estándar. Normalmente una aplicación Eiffel se organizara con cada clase en un archivo separado, y cada clúster en un directorio o carpeta que contiene los ficheros de las clases. En esta organización, los subclústers son subdirectorios. Por ejemplo, en virtud de las convenciones estándar de la organización y el entorno, x.e podría ser el nombre de un fichero que define una clase llamada X.

Una clase contiene características, que son similares a los "miembros, "atributos" o "métodos" en otros lenguajes de programación orientados a objetos. Una clase también define a sus invarianzas,y contiene otras propiedades, como una sección de "notas" para documentación y metadatos. Los tipos estándar de datos como entero, string o array, son todos ellos clases.

Cada sistema tiene que tener una clase designada como raíz, y uno de sus procedimientos de creación designado como "procedimiento raíz". La ejecución de un sistema consiste en la creación de una instancia de la clase raíz y en ejecutar el procedimiento raíz. En general, eso crea nuevos objetos, llama a nuevas características, y así sucesivamente.

Eiffel tiene cinco instrucciones básicas ejecutables: asignación, creación de objetos, llamada de rutina, condición, e iteración. Las estructuras de Eiffel de control son estrictas en el cumplimiento de la programación estructurada: cada bloque tiene exactamente una entrada y una salida.

Alcance A diferencia de muchos lenguajes orientados a objetos, pero como Smalltalk, Eiffel no permite una asignación en los campos de los objetos, excepto dentro de las características de un objeto. Eiffel hace hincapié en ocultar la información, y la abstracción de datos, en requerir interfaces formales para la mutación de datos. Para expresarlo en el formato de otros lenguajes orientado a objetos, todos los campos Eiffel son privados, y los métodos "set" son necesarios para modificar los valores. Una consecuencia de esto es que el método "set" puede, y normalmente lo hace, implementa las invariancias por los cuales Eiffel proporciona sintaxis.

"Hola Mundo" El primer contacto con un lenguaje de programación se hace a menudo con el uso de un programa "Hola, mundo!". Este programa escrito en Eiffel podría ser:

class HOLA_MUNDO create hacer feature hacer do print ("Hola, mundo!%N") end --hacer end --HOLA_MUNDO

Este programa contiene la clase HOLA_MUNDO. El constructor (rutina creadora) para la clase, de nombre hacer, invoca print que es la rutina de la biblioteca del sistema para escribir un mensaje "Hola, mundo!" al dispositivo de salida.

Diseño por contrato

El concepto de diseño por contrato es fundamental para Eiffel. Los mecanismos están estrechamente integrados con el lenguaje. Los contratos guían la redefinición de las características en la herencia. Precondición de la rutina: el único requisito puede ser debilitado por la herencia, cualquier llamada que cumpla con los requisitos del antepasado cumplen con los de los descendientes. Postcondición de la rutina: la postcondición solo puede ser forzada por herencia; ningún resultado garantiza para el antepasado siga en manos de los descendientes. Invariante a clase

Además, el lenguaje soporta una "instrucción de verificación" (una especie de "asserción") y los invariantes de bucle.

Características, órdenes y consultas La propiedad principal de una clase es que contiene un conjunto de características. Como una clase presenta un conjunto de objetos en tiempo de ejecución, o "casos", una característica es un atributo o una operación en estos objetos. Hay dos tipos de funciones: consultas y órdenes. Una consulta proporciona información sobre una instancia. Una orden modifica una instancia.